{"openapi":"3.0.3","info":{"title":"Kelvin API","version":"4.0.0","termsOfService":"https://kelvininc.com","contact":{"name":"Kelvin Support","url":"https://kelvininc.com","email":"support@kelvininc.com"},"license":{"name":"Kelvin License","url":"https://kelvininc.com"}},"servers":[{"url":"/api/v4","description":"Kelvin API v4"}],"paths":{"/apps/create":{"post":{"tags":["Apps"],"summary":"Create App Version","description":"Create App Version\n\n**Permission Required:** `kelvin.permission.app.create`\n","operationId":"createAppVersion","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppVersionCreate"},"examples":{"ac":{"$ref":"#/components/examples/AC"},"sigcon":{"$ref":"#/components/examples/Sigcon"},"opcua":{"$ref":"#/components/examples/OPCUA"},"influxdb":{"$ref":"#/components/examples/InfluxDB"},"s3":{"$ref":"#/components/examples/S3"},"cc-task":{"$ref":"#/components/examples/CCTask"}}}},"required":true},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AppVersionCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/v/{app_version}/get":{"get":{"tags":["Apps"],"summary":"Get App Version","description":"Returns details for the specified App version.\n\n**Permission Required:** `kelvin.permission.app.read`\n","operationId":"getAppVersion","parameters":[{"name":"app_name","in":"path","required":true,"description":"Unique App name.","schema":{"type":"string"}},{"name":"app_version","in":"path","required":true,"description":"Version identifier of the App.","schema":{"type":"string"}}],"responses":{"200":{"description":"App version retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AppVersionGet"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.AppVersionGet.SmartApp"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/v/{app_version}/patch":{"post":{"tags":["Apps"],"summary":"Update App Version","description":"Update App Version\n\nPartially update the default settings and schemas for an App Version. The\nfollowing keys can be updated individually. If a key is not specified, its\nexisting value will remain unchanged. If a key is specified, it will\ncompletely overwrite the current value for that key and its nested fields.\n\n- `image`\n- `defaults.deployment.max_resources`\n- `defaults.deployment.deployment_type`\n- `defaults.deployment.target`\n- `defaults.app.configuration`\n- `defaults.app.io_datastream_mapping`\n- `defaults.api_permissions`\n- `defaults.system`\n- `schemas.parameters`\n- `schemas.configuration`\n- `schemas.io_configuration`\n\n**Permission Required:** `kelvin.permission.app.update`\n","operationId":"patchAppVersion","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"app_version","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppVersionPatch"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.AppVersionPatch.AllFields"},"image":{"$ref":"#/components/examples/requests.AppVersionPatch.Image"},"system":{"$ref":"#/components/examples/requests.AppVersionPatch.System"},"clear-configuration-empty":{"$ref":"#/components/examples/requests.AppVersionPatch.ClearConfigurationEmpty"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AppVersionPatch"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/v/{app_version}/update":{"post":{"tags":["Apps"],"summary":"Update App Version","description":"Update App Version\n\nUpdate the default settings and schemas for an App Version.\n\n**Permission Required:** `kelvin.permission.app.update`\n","operationId":"updateAppVersion","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"app_version","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppVersionUpdate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.AppVersionPatch.AllFields"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AppVersionUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/v/{app_version}/delete":{"post":{"tags":["Apps"],"summary":"Delete App Version","description":"Delete App Version\n\n**Permission Required:** `kelvin.permission.app.delete`\n","operationId":"deleteAppVersion","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"app_version","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/v/{app_version}/deploy":{"post":{"tags":["Apps"],"summary":"Deploy App Version","description":"Deploy App Version\n\nIssues the deployment of workloads based on the specified instructions.\n\nThe `deployment` section defines the strategy to deploy the application to\nresources (i.e. assets) by creating the necessary workloads based on the\nmaximum number of resources each instance can handle, as well as the target\ncluster where the workloads will be deployed.\n\nEach resource (i.e. asset) is defined in the `runtime` section, which\nincludes defining its parameters and data stream mappings.\n\nThe `parameters` section is optional. If provided, it will update all\nparameters for that resource with the provided values, otherwise, the\ncurrent ones will be injected into the new workloads. If `parameters` is\nset and a parameter is not defined, the current value will be deleted,\neffectively setting it to the default value. This behaviour means that\nsetting `parameters` to an empty object (`{}`) will reset all parameters of\nthat resource to their default values.\n\n**Permission Required:** `kelvin.permission.app.deploy`\n","operationId":"deployAppVersion","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"app_version","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppVersionDeploy"},"examples":{"smart-app":{"$ref":"#/components/examples/requests.AppVersionDeploy.SmartApp"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AppVersionDeploy"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.AppVersionDeploy.AllFields"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/resources/enable":{"post":{"tags":["Apps"],"summary":"Enable App Resources","description":"Enable App Resources\n\n**Permission Required:** `kelvin.permission.app.update`\n","operationId":"enableAppResources","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppResourcesEnable"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.AppResourcesEnable.AllFields"}}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/resources/disable":{"post":{"tags":["Apps"],"summary":"Disable App Resources","description":"Disable App Resources\n\n**Permission Required:** `kelvin.permission.app.update`\n","operationId":"disableAppResources","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppResourcesDisable"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.AppResourcesDisable.AllFields"}}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/resources/delete":{"post":{"tags":["Apps"],"summary":"Delete App Resources","description":"Delete App Resources\n\n**Permission Required:** `kelvin.permission.app.update`\n","operationId":"deleteAppResources","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppResourcesDelete"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/resources/list":{"get":{"tags":["Apps"],"summary":"List App Resources","description":"List App Resources\n\n**Permission Required:** `kelvin.permission.app.read`\n","operationId":"listAppResources","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"search","in":"query","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"resources","in":"query","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"app_versions","in":"query","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"workload_names","in":"query","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"enabled","in":"query","style":"form","schema":{"type":"boolean"}},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["resource"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["resource","app_name","enabled","created_at","created_by","updated_at","updated_by"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AppResourcesListPaginatedResponseCursor"},"examples":{"running":{"$ref":"#/components/examples/responses.AppResourcesList.Running"},"requires-attention":{"$ref":"#/components/examples/responses.AppResourcesList.RequiresAttention"}}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AppResourcesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AppResourcesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/get":{"get":{"tags":["Apps"],"summary":"Get App","description":"Returns App details for the provided `app_name`.\n\n**Permission Required:** `kelvin.permission.app.read`\n","operationId":"getApp","parameters":[{"name":"app_name","in":"path","required":true,"description":"Unique App name.","schema":{"type":"string"}}],"responses":{"200":{"description":"App retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AppGet"},"examples":{"smart-app":{"$ref":"#/components/examples/responses.AppGet.SmartApp"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/list":{"get":{"tags":["Apps"],"summary":"List Apps","description":"Returns Apps that match the provided filters.\n\n**Permission Required:** `kelvin.permission.app.read`\n","operationId":"listApps","parameters":[{"name":"app_names","in":"query","style":"form","description":"Return only Apps whose `name` matches one or more values.","schema":{"type":"array","items":{"type":"string"}}},{"name":"app_types","description":"Return only Apps whose `type` matches one or more values.","in":"query","style":"form","schema":{"type":"array","items":{"$ref":"#/components/schemas/enum.AppType"}}},{"name":"resources","in":"query","description":"Return only Apps associated with the provided resource KRNs. Allowed namespace is `asset`.","schema":{"type":"array","items":{"type":"string","format":"krn","x-allowed-krn":["asset"]}}},{"name":"search","description":"Case-insensitive partial match against App `name` and `title`.","in":"query","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort results by one or more fields.","items":{"type":"string","enum":["name","title","type","latest_version","created_at","created_by","updated_at","updated_by"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"responses":{"200":{"description":"Apps retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AppsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AppsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AppsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/patch":{"post":{"tags":["Apps"],"summary":"Update App","description":"Update details of an Application. Any parameters that are not provided will\nremain unchanged.\n\n**Permission Required:** `kelvin.permission.app.update`\n","operationId":"patchApp","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppPatch"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.AppPatch.AllFields"},"title":{"$ref":"#/components/examples/requests.AppPatch.Title"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AppPatch"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/delete":{"post":{"tags":["Apps"],"summary":"Delete App","description":"Delete App\n\n**Permission Required:** `kelvin.permission.app.delete`\n","operationId":"deleteApp","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/context/list":{"post":{"tags":["Apps"],"summary":"List App Contexts","description":"Returns App resource contexts that match the request filters.\n\n**Permission Required:** `kelvin.permission.app.read`\n","operationId":"listAppsContext","parameters":[{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["resource"],"description":"Sort results by one or more fields.","items":{"type":"string","enum":["resource","source"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"requestBody":{"description":"Optional resource and source filters for App contexts.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppsContextList"},"examples":{"basic":{"$ref":"#/components/examples/requests.AppsContextList.Basic"}}}},"required":true},"responses":{"200":{"description":"App contexts retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AppsContextListPaginatedResponseCursor"},"examples":{"basic":{"$ref":"#/components/examples/responses.AppsContextList.Basic"}}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AppsContextListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AppsContextListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/apps/parameters/values/list":{"post":{"tags":["App Parameters"],"summary":"List App Version Parameter Values","description":"List App Version Parameter Values\n\n**Permission Required:** `kelvin.permission.parameter.read`\n","operationId":"listAppVersionParameterValues","parameters":[{"name":"sort_by","in":"query","description":"Sort the results by one or more enumerators.","style":"form","schema":{"type":"array","default":["name"],"items":{"type":"string","enum":["name","app_name","app_version","resource","comment","created_at","created_by","updated_at","updated_by"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppVersionParameterValuesList"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AppVersionParameterValuesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AppVersionParameterValuesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AppVersionParameterValuesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/parameters/history/list":{"post":{"tags":["App Parameters"],"summary":"List App Version Parameters History","description":"List App Version Parameters History\n\n**Permission Required:** `kelvin.permission.parameter.read`\n","operationId":"listAppVersionParametersHistory","parameters":[{"name":"sort_by","in":"query","description":"Sort the results by one or more enumerators.","style":"form","schema":{"type":"array","default":["name"],"items":{"type":"string","enum":["name","app_name","app_version","resource","comment","created_at","created_by","invalidated_at","invalidated_by"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppVersionParametersHistoryList"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AppVersionParametersHistoryListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AppVersionParametersHistoryListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AppVersionParametersHistoryListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/parameters/list":{"post":{"tags":["App Parameters"],"summary":"List App Parameters","description":"Returns App parameter definitions that match the request filters.\n\n**Permission Required:** `kelvin.permission.parameter.read`\n","operationId":"listAppParameters","parameters":[{"name":"sort_by","in":"query","description":"Sort results by one or more fields.","style":"form","schema":{"type":"array","default":["name"],"items":{"type":"string","enum":["name","title","app_name","data_type","created_at","created_by","updated_at","updated_by"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"requestBody":{"description":"Optional filters to list App parameters.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppParametersList"},"examples":{"basic":{"$ref":"#/components/examples/requests.AppParametersList.Basic"}}}},"required":true},"responses":{"200":{"description":"App parameters retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AppParametersListPaginatedResponseCursor"},"examples":{"basic":{"$ref":"#/components/examples/responses.AppParametersList.Basic"}}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AppParametersListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AppParametersListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/v/{app_version}/parameters/values/update":{"post":{"tags":["App Parameters"],"summary":"Update App Version Parameters","description":"Update App Version Parameters\n\n**Permission Required:** `kelvin.permission.parameter.update`\n","operationId":"updateAppVersionParameters","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"app_version","in":"path","required":true,"schema":{"type":"string"}},{"name":"patch","in":"query","description":"If set to `true`, it only updates the parameters that are explicitly defined in the request.","schema":{"type":"boolean","default":true}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppVersionParametersUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/v/{app_version}/parameters/defaults/update":{"post":{"tags":["App Parameters"],"summary":"Update App Version Parameters Defaults","description":"Update App Version Parameters Defaults\n\n**Permission Required:** `kelvin.permission.app.update`\n","operationId":"updateAppVersionParametersDefaults","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"app_version","in":"path","required":true,"schema":{"type":"string"}},{"name":"patch","in":"query","description":"If set to `true`, it only updates the parameters that are explicitly defined in the request.","schema":{"type":"boolean","default":true}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppVersionParametersDefaultsUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/parameters/unique-values/get":{"post":{"tags":["App Parameters"],"summary":"Get App Version Parameters Unique Values","description":"Get App Version Parameters Unique Values\n\n**Permission Required:** `kelvin.permission.parameter.read`\n","operationId":"getAppVersionParametersUniqueValues","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppVersionParametersUniqueValuesGet"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AppVersionParametersUniqueValuesGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/{app_name}/v/{app_version}/parameters/fallback-values/get":{"post":{"tags":["App Parameters"],"summary":"Get App Version Parameters Fallback Values","description":"Get App Version Parameters Fallback Values\n\n**Permission Required:** `kelvin.permission.parameter.read`\n","operationId":"getAppVersionParametersFallbackValues","parameters":[{"name":"app_name","in":"path","required":true,"schema":{"type":"string"}},{"name":"app_version","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AppVersionParametersFallbackValuesGet"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.AppVersionParametersFallbackValuesGet"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AppVersionParametersFallbackValuesGet"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.AppVersionParametersFallbackValuesGet"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/parameters/schedules/create":{"post":{"tags":["App Parameters"],"summary":"Create Parameters Schedule","description":"Create a new schedule to apply parameters to an application.\n\nSchedules are sets of application parameter values that are applied to a\ngroup of assets at a given time.\n\nOptionally, those values can be reverted to the desired value. When doing\nso, parameter values are defined for each asset individually, and the\nassets and parameters must match the original schedule. For example, if 2\nparameters were changed for 2 assets and a revert operation is requested,\nthen the revert parameters must have 2 assets and 2 parameters for each\nasset.\n\nThe schedule must be created in the future and, if a revert operation is\nrequested, the revert date must be after the scheduled date.\n\nUpon creation, the current values of the parameters are stored in the\n`original_resource_parameters` field.\n\n\n**Permission Required:** `kelvin.permission.parameter.update`\n","operationId":"createParametersSchedule","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ParametersScheduleCreate"},"examples":{"complex":{"$ref":"#/components/examples/request.ParametersScheduleCreate.Complex"},"revert":{"$ref":"#/components/examples/request.ParametersScheduleCreate.Revert"},"simple":{"$ref":"#/components/examples/request.ParametersScheduleCreate.Simple"}}}}},"responses":{"201":{"description":"Schedule created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ParametersScheduleCreate"},"examples":{"complex":{"$ref":"#/components/examples/response.ParametersScheduleCreate.Simple"}}}}},"400":{"$ref":"#/components/responses/responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/error.Conflict"}}}},"/apps/parameters/schedules/{schedule_id}/get":{"get":{"tags":["App Parameters"],"summary":"Get Parameters Schedule","description":"Get a specific schedule.\n\n**Permission Required:** `kelvin.permission.parameter.read`\n","operationId":"getParametersSchedule","parameters":[{"name":"schedule_id","in":"path","description":"The parameter schedule key `id` to be retrieved.","required":true,"example":"123e4567-e89b-12d3-a456-426655440000","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ParametersScheduleGet"},"examples":{"complex":{"$ref":"#/components/examples/response.ParametersScheduleGet.AC"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/parameters/schedules/{schedule_id}/delete":{"post":{"tags":["App Parameters"],"summary":"Delete Parameters Schedule","description":"Delete a specific schedule.\n\n**Permission Required:** `kelvin.permission.parameter.update`\n","operationId":"deleteParametersSchedule","parameters":[{"name":"schedule_id","in":"path","description":"The parameter schedule key `id` to be delete.","required":true,"example":"123e4567-e89b-12d3-a456-426655440000","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/parameters/schedules/{schedule_id}/apply":{"post":{"tags":["App Parameters"],"summary":"Apply Parameters Schedule","description":"Apply the scheduled or reverted parameters of a specific schedule.\n\nThere are 2 types of the \"apply\" action:\n\n- `schedule`: Applies the scheduled parameters if the schedule is in the\n`scheduled` state.\n- `schedule-revert`: Applies the revert parameters if the schedule is in the\n`scheduled-revert` state.\n\nIf the schedule is not in the supported state for the selected type, the\nAPI will return an error.\n\nErrors encountered when calling this API will not affect the schedule\nstate.\n\n**Permission Required:** `kelvin.permission.parameter.update`\n","operationId":"applyParametersSchedule","parameters":[{"name":"schedule_id","in":"path","description":"The parameter schedule key `id` to be applied immediately.","required":true,"schema":{"type":"string","format":"uuid"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ParametersScheduleApply"}}}},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/parameters/schedules/list":{"post":{"tags":["App Parameters"],"summary":"List Parameters Schedule","description":"Returns a list of Parameter Schedules and its parameters. The Parameter Schedules can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.parameter.read`\n","operationId":"listParametersSchedule","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","description":"Sort the results by one or more enumerators.","style":"form","schema":{"type":"array","items":{"type":"string","default":"id","enum":["id","app_name","app_version","scheduled_for","revert.scheduled_for","comment","state","created_at","created_by","applied_at","applied_by","reverted_at","reverted_by"]}}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ParametersScheduleList"},"examples":{"all":{"$ref":"#/components/examples/request.ParametersScheduleList.All"},"app-manager-ui":{"$ref":"#/components/examples/request.ParametersScheduleList.AppManagerUI"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.ParametersScheduleListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.ParametersScheduleListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.ParametersScheduleListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/apps/workloads/create":{"post":{"tags":["App Workloads"],"summary":"Create Workload","description":"Create Workload\n\n**Permission Required:** `kelvin.permission.workload.create`\n","operationId":"createWorkload","parameters":[{"name":"stopped","in":"query","description":"If set to `true`, the workload created will be deployed in a stopped state.","schema":{"type":"boolean","default":false}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.WorkloadCreate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.WorkloadCreate.AllFields"},"cc-task":{"$ref":"#/components/examples/requests.WorkloadCreate.CCTask"}}}},"required":true},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.WorkloadCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/workloads/{workload_name}/get":{"get":{"tags":["App Workloads"],"summary":"Get Workload","description":"Returns details for a single workload identified by `workload_name`.\n\nIncludes runtime configuration, deployment metadata, and lifecycle status.\n\n**Permission Required:** `kelvin.permission.workload.read`\n","operationId":"getWorkload","parameters":[{"name":"workload_name","in":"path","description":"Unique workload `name`.","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Workload retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.WorkloadGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/workloads/{workload_name}/patch":{"post":{"tags":["App Workloads"],"summary":"Update Workload","description":"Update Workload\n\nUpdate the modifiable components of a Workload. The following keys can be\nupdated individually. If a key is not specified, its existing value will\nremain unchanged. If a key is specified, it will completely overwrite the\ncurrent value for that key and its nested fields.\n\n- `title`\n- `app_version`\n- `cluster_name`\n- `node_name`\n- `deployment_type`\n- `runtime.resources`\n- `runtime.configuration`\n- `system`\n- `api_permissions`\n\nThe `deployment_type` field controls how the update is applied rather than\nbeing a stored property of the workload. When set to a staged type, the\nupdate creates a staged version instead of applying changes directly.\n\nDeployment transitions from `enabled=false` to active execution are handled\nthrough `/apps/workloads/enable`.\n\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"updateWorkload","parameters":[{"name":"workload_name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.WorkloadUpdate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.WorkloadUpdate.AllFields"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.WorkloadUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/workloads/{workload_name}/download":{"get":{"tags":["App Workloads"],"summary":"Download Workload Package File","description":"Download the Workload package file for offline installation on the Edge\nSystem. The system automatically generates the file for download if the\npackage is not already available.\n\n**Permission Required:** `kelvin.permission.workload.read`","operationId":"downloadWorkload","parameters":[{"name":"workload_name","in":"path","description":"Unique identifier `name` of the Workload.","required":true,"schema":{"type":"string"}},{"name":"address","in":"query","description":"If true, the endpoint will return a direct URL to the workload package file.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Returns workload package file to download or a direct URL address. If\nthe package is not available, it will be automatically created before\ndownload.\n\n**`Note:`** The URL address is valid for a small period of time. If the\ndownload is not started within the time limit, a new URL address needs\nto be requested.\n","content":{"application/zip":{},"application/json":{"schema":{"$ref":"#/components/schemas/responses.WorkloadDownload"}}}},"202":{"description":"Workload is waiting for the worker to pick it up, or it's already processing.","content":{"application/json":{}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"412":{"$ref":"#/components/responses/error.PreconditionFailed"}}}},"/apps/workloads/list":{"get":{"tags":["App Workloads"],"summary":"List Workloads","description":"Returns workloads that match the provided filters.\n\n**Permission Required:** `kelvin.permission.workload.read`\n","operationId":"listWorkloads","parameters":[{"name":"search","in":"query","description":"Case-insensitive partial match against workload `name`, `title`, `app_name`, and `cluster_name`.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"app_names","in":"query","description":"Return only workloads whose `app_name` matches one or more values.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"app_versions","in":"query","description":"Return only workloads whose `app_version` matches one or more values.","style":"form","schema":{"type":"array","items":{"type":"string","format":"semver"}}},{"name":"app_types","in":"query","description":"Return only workloads whose `app_type` matches one or more values.","style":"form","schema":{"type":"array","items":{"$ref":"#/components/schemas/enum.AppType"}}},{"name":"cluster_names","in":"query","description":"Return only workloads whose `cluster_name` matches one or more values.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"node_names","in":"query","description":"Return only workloads whose `node_name` matches one or more values.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"workload_names","in":"query","description":"Return only workloads whose `name` matches one or more values.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"resources","in":"query","description":"Return only workloads associated with the provided resource KRN. Allowed namespace is `asset`.","schema":{"type":"string","format":"krn","x-allowed-krn":["asset"]}},{"name":"staged","in":"query","description":"If `true`, return only workloads that have staged updates.","schema":{"type":"boolean"}},{"name":"statuses","in":"query","schema":{"type":"array","description":"Return only workloads whose `status.state` matches one or more values.","items":{"$ref":"#/components/schemas/enum.WorkloadStatus"}}},{"name":"download_statuses","in":"query","schema":{"type":"array","description":"Return only workloads whose `download_status` matches one or more values.","items":{"$ref":"#/components/schemas/enum.WorkloadDownloadStatus"}}},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort results by one or more fields.","items":{"type":"string","enum":["name","title","app_name","app_version","cluster_name","node_name","status_last_seen","status_state","created_at","created_by","updated_at","updated_by"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"responses":{"200":{"description":"Workloads retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.WorkloadsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.WorkloadsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.WorkloadsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/apps/workloads/apply":{"post":{"tags":["App Workloads"],"summary":"Apply Workloads","description":"Initiate final deploy action for the downloaded Workloads. Only valid for Workloads that were previously deployed with the keys `staged` set to true and `instantly_apply` set to false.\n\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"applyWorkloads","requestBody":{"description":"Workload apply schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.WorkloadsApply"}}},"required":true},"responses":{"204":{"description":"No Content"},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/apps/workloads/enable":{"post":{"tags":["App Workloads"],"summary":"Enable Workloads","description":"Enable pending Workloads created with `enabled=false`.\n\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"enableWorkloads","requestBody":{"description":"Workloads to enable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.WorkloadsEnable"}}},"required":true},"responses":{"204":{"description":"No Content"},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/apps/workloads/start":{"post":{"tags":["App Workloads"],"summary":"Start Workloads","description":"\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"startWorkloads","requestBody":{"description":"Workloads to start","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.WorkloadsStart"}}}},"responses":{"204":{"description":"No Content"},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/apps/workloads/stop":{"post":{"tags":["App Workloads"],"summary":"Stop Workloads","description":"\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"stopWorkloads","requestBody":{"description":"Workloads to stop","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.WorkloadsStop"}}}},"responses":{"204":{"description":"No Content"},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/apps/workloads/delete":{"post":{"tags":["App Workloads"],"summary":"Delete Workloads","description":"Delete Workload\n\n**Permission Required:** `kelvin.permission.workload.delete`\n","operationId":"deleteWorkloads","parameters":[{"name":"staged","in":"query","schema":{"type":"boolean","default":false}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.WorkloadsDelete"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.WorkloadsDelete.AllFields"}}}},"required":true},"responses":{"204":{"description":"No Content"},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/apps/workloads/{workload_name}/logs/get":{"get":{"tags":["App Workloads"],"summary":"Get Workload Logs","description":"Get Workload Logs\n\n**Permission Required:** `kelvin.permission.workload.read`","operationId":"getWorkloadLogs","parameters":[{"name":"workload_name","in":"path","description":"Unique identifier `name` of the Workload.","required":true,"schema":{"type":"string"}},{"name":"tail_lines","in":"query","description":"Specify the number of the most recent log lines to retrieve, counting backwards from the latest entry.","schema":{"type":"integer"}},{"name":"since_time","in":"query","description":"UTC time of the starting point for log retrieval, formatted in RFC 3339.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.WorkloadLogsGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"424":{"$ref":"#/components/responses/error.FailedDependency"},"500":{"$ref":"#/components/responses/error.InternalServerError"},"501":{"description":"The operation is not implemented.","content":{"application/json":{}}}}}},"/apps/workloads/{workload_name}/resources/add":{"post":{"tags":["App Workloads"],"summary":"Add Workload Resources","description":"Add WorkloadResources\n\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"addWorkloadResources","parameters":[{"name":"workload_name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.WorkloadResourcesAdd"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.WorkloadResourcesAdd"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/apps/workloads/{workload_name}/resources/remove":{"post":{"tags":["App Workloads"],"summary":"Remove Workload Resources","description":"Remove WorkloadResources\n\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"removeWorkloadResources","parameters":[{"name":"workload_name","in":"path","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.WorkloadResourcesRemove"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/apps/workloads/bulk/update":{"post":{"tags":["App Workloads"],"summary":"Update Workloads Bulk","description":"Update Workloads Bulk\n\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"updateWorkloadsBulk","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.WorkloadsBulkUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/asset-insights/get":{"post":{"tags":["Asset Insights"],"summary":"Get Assets Insights","description":"Migrated Asset Insights API.\n\nAdvanced Asset Insights collates Asset data and optional custom defined fields and returns a structured array of Asset related objects. Ideal for generating UI lists, it accommodates search, filters, and optional enrichment data on Data Streams, Parameters, Control Changes, Recommendations, Data Tags, and more.\n\n**Permission Required:** `kelvin.permission.asset_insights.read`\n","operationId":"getAssetInsights","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more Asset Insights fields. Typical options are `name`, `title`, `asset_type_name`, `asset_type_title`, `status`, and `last_seen`.","items":{"type":"string"}}}],"requestBody":{"description":"Get Assets Insights schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetInsightsGet"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AssetInsightsGetPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AssetInsightsGetPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AssetInsightsGetPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/asset-insights/v1/get":{"post":{"tags":["Asset Insights"],"summary":"Get Assets Insights (Legacy v1)","description":"Deprecated legacy Asset Insights API.\n\nThis v1 endpoint is kept for backwards compatibility. Use `/asset-insights/get` for the migrated Asset Insights API.\n\n**Permission Required:** `kelvin.permission.asset_insights.read`\n","operationId":"getAssetInsightsV1","deprecated":true,"parameters":[{"name":"page_size","in":"query","description":"Number of Asset objects to be returned.","schema":{"type":"integer","default":20,"minimum":1,"maximum":10000}},{"name":"page","in":"query","description":"Return the list of Asset objects on requested page using the `page_size` as a page calculation reference.","schema":{"type":"integer","default":1}}],"requestBody":{"description":"Get Assets Insights schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetInsightsV1Get"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AssetInsightsV1GetPaginated"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"424":{"$ref":"#/components/responses/error.FailedDependency"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/assets/create":{"post":{"tags":["Asset"],"summary":"Create Asset","description":"Create a new Asset.\n\n**Permission Required:** `kelvin.permission.asset.create`\n","operationId":"createAsset","requestBody":{"description":"Asset create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AssetCreate"}}}},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/assets/bulk/create":{"post":{"tags":["Asset"],"summary":"Create Asset Bulk","description":"Create new Assets.\n\n**Permission Required:** `kelvin.permission.asset.create`\n","operationId":"createAssetBulk","parameters":[{"name":"dry_run","in":"query","description":"Executes a simulated run when set to true, providing feedback without altering server data.","schema":{"type":"boolean"}}],"requestBody":{"description":"Asset bulk create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetBulkCreate"}}},"required":true},"responses":{"201":{"description":"Assets created successfully","content":{"application/json":{}}},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/assets/list":{"get":{"tags":["Asset"],"summary":"List Assets","description":"Returns a list of Assets and its parameters. The Assets can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.asset.read`\n","operationId":"listAssets","parameters":[{"name":"search","in":"query","description":"Search and filter on the list based on the keys `title` (Display Name) or `name`. All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"names","in":"query","description":"A filter on the list based on the key `name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"asset_type_name","in":"query","description":"A filter on the list based on the key `asset_type_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"status_state","in":"query","description":"A filter on the list based on the key ['status']['state']. Multiple statuses can be given and will be filtered as `OR`. The allowed values are: `online`, `offline`, `unknown`.","style":"form","schema":{"type":"array","items":{"$ref":"#/components/schemas/enum.AssetState"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","created","updated","asset_type_name","asset_type_title","status_state","status_last_seen"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AssetsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AssetsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AssetsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}},"post":{"tags":["Asset"],"summary":"List Assets Advanced","description":"Returns a list of Assets and its parameters. The Assets can be filtered and sorted on the server before being returned. Advanced filter options available for more granular return list.\n\n**Permission Required:** `kelvin.permission.asset.read`\n","operationId":"listAssetsAdvanced","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","created","updated","asset_type_name","asset_type_title","status_state","status_last_seen"]}}}],"requestBody":{"description":"Assets list schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetsAdvancedList"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AssetsAdvancedListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AssetsAdvancedListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AssetsAdvancedListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/assets/status/count/get":{"get":{"tags":["Asset"],"summary":"Get Asset Status Count","description":"Retrieve the total count of Assets grouped by the parameter `status`.\n\n**Permission Required:** `kelvin.permission.asset.read`\n","operationId":"getAssetStatusCount","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AssetStatusCountGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/assets/status/current/get":{"get":{"tags":["Asset"],"summary":"Get Asset Statuses","description":"Returns a list of all Assets and their current status (`state`).\n\n**Permission Required:** `kelvin.permission.asset.read`\n","operationId":"getAssetStatusCurrent","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AssetStatusCurrentGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/assets/types/create":{"post":{"tags":["Asset"],"summary":"Create Asset Type","description":"Create a new Asset Type.\n\n**Permission Required:** `kelvin.permission.asset_type.create`\n","operationId":"createAssetType","requestBody":{"description":"Asset Type create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetTypeCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AssetTypeCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/assets/types/list":{"get":{"tags":["Asset"],"summary":"List Asset Types","description":"Returns a list of Asset Types and its parameters. The Asset Types can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.asset_type.read`\n","operationId":"listAssetTypes","parameters":[{"name":"search","in":"query","description":"Search and filter on the list based on the keys `title` (Display Name) or `name`. The search is case insensitive and will find partial matches as well.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","created","updated"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AssetTypesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AssetTypesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AssetTypesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}},"post":{"tags":["Asset"],"summary":"List Asset Types Advanced","description":"Returns a list of Asset Types and its parameters. The Asset Types can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.asset_type.read`\n","operationId":"listAssetTypesAdvanced","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","created","updated"]}}}],"requestBody":{"description":"Asset Types list schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetTypesAdvancedList"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.AssetTypesAdvancedListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.AssetTypesAdvancedListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.AssetTypesAdvancedListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/assets/types/{asset_type_name}/delete":{"post":{"tags":["Asset"],"summary":"Delete Asset Type","description":"Permanently delete an existing Asset Type. An error will be returned if there are any current links to an Asset. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.asset_type.delete`\n","operationId":"deleteAssetType","parameters":[{"name":"asset_type_name","in":"path","description":"Asset Type key `name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Asset Type deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/assets/types/delete":{"post":{"tags":["Asset"],"summary":"Delete Bulk Asset Type","description":"Delete a list of existing Asset Types.\n\nPermanently delete a list of existing Kelvin Asset Types. This cannot be undone once the API request has been submitted.\n\nThis command can not delete Kelvin Asset Types that are currently linked to any Kelvin Assets and will return an error 409.\n\n**Permission Required:** `kelvin.permission.asset_type.delete`\n","operationId":"deleteAssetTypeBulk","requestBody":{"description":"Asset Type delete bulk schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetTypeBulkDelete"}}},"required":true},"responses":{"200":{"description":"Asset Types deleted successfully","content":{}},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/assets/types/{asset_type_name}/get":{"get":{"tags":["Asset"],"summary":"Get Asset Type","description":"Retrieves the parameters of an Asset Type.\n**Permission Required:** `kelvin.permission.asset_type.read`","operationId":"getAssetType","parameters":[{"name":"asset_type_name","in":"path","description":"Asset Type key `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AssetTypeGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/assets/types/{asset_type_name}/update":{"post":{"tags":["Asset"],"summary":"Update Asset Type","description":"Updates an existing Asset Type with any new values passed through the body parameters. All body parameters are optional and if not provided will remain unchanged. Only the unique identifier `name` can not be changed.\n\n**Permission Required:** `kelvin.permission.asset_type.update`\n","operationId":"updateAssetType","parameters":[{"name":"asset_type_name","in":"path","description":"Asset Type key `name` to update. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"AssetType update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetTypeUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AssetTypeUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/assets/{asset_name}/delete":{"post":{"tags":["Asset"],"summary":"Delete Asset","description":"Permanently delete an existing Asset. This cannot be undone once the API request has been submitted.\n\nThe data in the Asset /  Data Stream pairs is not deleted and can be recovered if you create the same Asset name again.\n\n**Permission Required:** `kelvin.permission.asset.delete`\n","operationId":"deleteAsset","parameters":[{"name":"asset_name","in":"path","description":"Asset key `name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Asset deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/errors_asset_responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/assets/bulk/delete":{"post":{"tags":["Asset"],"summary":"Delete Asset Bulk","description":"Delete a list of existing Assets.\n\nPermanently delete a list of existing Kelvin Assets. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.asset.delete`\n","operationId":"deleteAssetBulk","requestBody":{"description":"Asset delete bulk schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetBulkDelete"}}},"required":true},"responses":{"200":{"description":"Assets deleted successfully","content":{}},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/assets/{asset_name}/get":{"get":{"tags":["Asset"],"summary":"Get Asset","description":"Retrieve the parameters of an Asset.\n\n**Permission Required:** `kelvin.permission.asset.read`\n","operationId":"getAsset","parameters":[{"name":"asset_name","in":"path","description":"Asset key `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AssetGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/assets/{asset_name}/update":{"post":{"tags":["Asset"],"summary":"Update Asset","description":"Update an existing Asset with any new values passed through the body parameters. The minimum required in the body parameters is `title`. If this body parameter does not need to be changed, it should still have the original Display Name (`title``) given. Any other body parameters that are not required and not provided will remain unchanged.\n\n**Permission Required:** `kelvin.permission.asset.update`\n","operationId":"updateAsset","parameters":[{"name":"asset_name","in":"path","description":"Asset key `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Asset update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.AssetUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.AssetUpdate"}}}},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/control-changes/clustering/get":{"post":{"tags":["Control Change"],"summary":"Get Control Change Clustering","description":"Retrieve the total count of Control Changes matching an array of `resources` and filter options between two dates grouped by the parameter `time_bucket`. Will also return a list of all the Control Change `id`s counted.\n\n**Permission Required:** `kelvin.permission.control_change.read`\n","operationId":"getControlChangeClustering","requestBody":{"description":"Control Change Clustering schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ControlChangeClusteringGet"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/responses.ControlChangeClustering"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/control-changes/create":{"post":{"tags":["Control Change"],"summary":"Create Control Change","description":"Send a new value to be written to an Asset / Data Stream pair. The Control Change Manager will automatically find which Cluster and Bridge to communicate the change to.\n\n**Permission Required:** `kelvin.permission.control_change.create`\n","operationId":"createControlChange","requestBody":{"description":"Control change create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ControlChangeCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ControlChangeCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/control-changes/last/get":{"post":{"tags":["Control Change"],"summary":"Get Last Control Change","description":"Returns the latest Control Change for each resource that matches the\nrequest filters.\n\n**Permission Required:** `kelvin.permission.control_change.read`\n","operationId":"getControlChangeLast","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["id"],"description":"Sort results by one or more fields.","items":{"type":"string","enum":["id","resource","last_state","created","updated","timestamp"]}}}],"requestBody":{"description":"Filters used to return the latest Control Change per resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ControlChangeLastGet"},"examples":{"basic":{"$ref":"#/components/examples/requests.ControlChangeLastGet.Basic"}}}},"required":true},"responses":{"200":{"description":"Latest Control Changes retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.ControlChangeLastGetPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.ControlChangeLastGetPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.ControlChangeLastGetPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/control-changes/list":{"post":{"tags":["Control Change"],"summary":"List Control Changes","description":"Returns Control Changes that match the request filters.\n\n**Permission Required:** `kelvin.permission.control_change.read`\n","operationId":"listControlChanges","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["id"],"description":"Sort results by one or more fields.","items":{"type":"string","enum":["id","resource","last_state","created","updated","timestamp"]}}}],"requestBody":{"description":"Optional filters to list Control Changes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ControlChangesList"},"examples":{"basic":{"$ref":"#/components/examples/requests.ControlChangesList.Basic"}}}},"required":true},"responses":{"200":{"description":"Control Changes retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.ControlChangesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.ControlChangesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.ControlChangesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/control-changes/range/get":{"post":{"tags":["Control Change"],"summary":"Get Control Change Range","description":"Returns Control Changes created within a specified time range that match\nthe request filters.\n\n**Permission Required:** `kelvin.permission.control_change.read`\n","operationId":"getControlChangeRange","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["id"],"description":"Sort results by one or more fields.","items":{"type":"string","enum":["id","resource","last_state","created","updated","timestamp"]}}}],"requestBody":{"description":"Time range and optional filters for Control Changes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ControlChangeRangeGet"},"examples":{"basic":{"$ref":"#/components/examples/requests.ControlChangeRangeGet.Basic"}}}},"required":true},"responses":{"200":{"description":"Control Changes retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.ControlChangeRangeGetPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.ControlChangeRangeGetPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.ControlChangeRangeGetPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/control-changes/{control_change_id}/get":{"get":{"tags":["Control Change"],"summary":"Get Control Change","description":"Returns a Control Change by `control_change_id`, including its current\nstate and status history.\n\n**Permission Required:** `kelvin.permission.control_change.read`\n","operationId":"getControlChange","parameters":[{"name":"control_change_id","in":"path","required":true,"description":"UUID of the Control Change.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Control Change retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ControlChangeGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/control-changes/{control_change_id}/delete":{"post":{"tags":["Control Change"],"summary":"Delete Control Change","description":"Deletes a control change\n\n**Permission Required:** `kelvin.permission.control_change.delete`\n","operationId":"deleteControlChange","parameters":[{"name":"control_change_id","in":"path","required":true,"description":"UUID of the Control Change.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Control change deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/control-changes/policies/create":{"post":{"tags":["Control Change"],"summary":"Create Control Change Policy","description":"Create a new Control Change Policy.\n\nA Control Change Policy defines default execution behavior and completion\ncriteria for Control Changes on a resource.\n\nPolicy fields override platform defaults. If a field is also set in the\nControl Change request, the Control Change value takes precedence.\nResolution is per field: if a field is unset in both the Control Change\nrequest and the policy, it falls back to the platform default.\n\n`expiration_date` is required in Control Change requests and is not part of\npolicy configuration. Guardrails are configured separately and are not part\nof policy configuration.\n\nValidation rules:\n- The policy `resource` and all `policy.resource_value_check[].resource`\n  values must belong to the same asset.\n- All referenced datastreams must share the same data type.\n\n**Permission Required:** `kelvin.permission.control_change.create`\n","operationId":"createControlChangePolicy","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ControlChangePolicyCreate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.ControlChangePolicyCreate.AllFields"},"minimal":{"$ref":"#/components/examples/requests.ControlChangePolicyCreate.Minimal"}}}},"required":true},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ControlChangePolicyCreate"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.ControlChangePolicyX.AllFields"},"minimal":{"$ref":"#/components/examples/responses.ControlChangePolicyX.Minimal"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/control-changes/policies/{resource}/get":{"get":{"tags":["Control Change"],"summary":"Get Control Change Policy","description":"Get a Control Change Policy by resource.\n\nThe response returns only fields explicitly configured in the resource\npolicy. Fields omitted in policy configuration inherit at runtime based on\nper-field precedence: Control Change request value, then resource policy,\nthen platform defaults.\n\n`expiration_date` and guardrails are not part of policy configuration.\n\n**Permission Required:** `kelvin.permission.control_change.read`\n","operationId":"getControlChangePolicy","parameters":[{"name":"resource","in":"path","required":true,"schema":{"type":"string","format":"krn","maxLength":256},"example":"krn:ad:beam_pump_01/motor_speed_set_point","description":"Asset/Data Stream pair to retrieve the associated Control Change Policy."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ControlChangePolicyGet"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.ControlChangePolicyX.AllFields"},"minimal":{"$ref":"#/components/examples/responses.ControlChangePolicyX.Minimal"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/control-changes/policies/list":{"post":{"tags":["Control Change"],"summary":"List Control Change Policies","description":"List Control Change Policies based on the provided filters.\n\nReturned items include only fields explicitly configured in each resource\npolicy. Fields omitted in policy configuration inherit at runtime based on\nper-field precedence: Control Change request value, then resource policy,\nthen platform defaults.\n\n**Permission Required:** `kelvin.permission.control_change.read`\n","operationId":"listControlChangePolicies","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"name":"search","description":"Search for Control Change Policies with `resources` matching the search term.","in":"query","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["resource"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["resource","created","created_by","updated","updated_by"]}}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ControlChangePoliciesList"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.ControlChangePoliciesList.AllFields"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.ControlChangePoliciesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.ControlChangePoliciesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.ControlChangePoliciesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/control-changes/policies/{resource}/update":{"post":{"tags":["Control Change"],"summary":"Update Control Change Policy","description":"Replace the full Control Change Policy configuration for the resource.\nAny policy fields omitted from this request are unset in policy\nconfiguration and therefore inherit at runtime, except\n`resource_value_check`, which is cleared when omitted.\n\nPolicy fields override platform defaults. If a field is also set in the\nControl Change request, the Control Change value takes precedence.\nResolution is per field: if a field is unset in both the Control Change\nrequest and the policy, it falls back to the platform default.\n\n`expiration_date` is required in Control Change requests and is not part of\npolicy configuration. Guardrails are configured separately and are not part\nof policy configuration.\n\nValidation rules:\n- The path `resource` and all `policy.resource_value_check[].resource`\n  values must belong to the same asset.\n- All referenced datastreams must share the same data type.\n\n**Permission Required:** `kelvin.permission.control_change.update`\n","operationId":"updateControlChangePolicy","parameters":[{"name":"resource","in":"path","required":true,"schema":{"type":"string","format":"krn","maxLength":256},"example":"krn:ad:beam_pump_01/motor_speed_set_point","description":"Asset/Data Stream pair to update the associated Control Change Policy."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ControlChangePolicyUpdate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.ControlChangePolicyX.AllFields"},"no-checks":{"$ref":"#/components/examples/requests.ControlChangePolicyX.NoChecks"},"minimal":{"$ref":"#/components/examples/requests.ControlChangePolicyX.Minimal"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ControlChangePolicyUpdate"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.ControlChangePolicyX.AllFields"},"no-checks":{"$ref":"#/components/examples/responses.ControlChangePolicyX.NoChecks"},"minimal":{"$ref":"#/components/examples/responses.ControlChangePolicyX.Minimal"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/control-changes/policies/{resource}/delete":{"post":{"tags":["Control Change"],"summary":"Delete Control Change Policy","description":"Delete a Control Change Policy by resource.\n\n**Permission Required:** `kelvin.permission.control_change.delete`\n","operationId":"deleteControlChangePolicy","parameters":[{"name":"resource","in":"path","required":true,"schema":{"type":"string","format":"krn","maxLength":256},"example":"krn:ad:beam_pump_01/motor_speed_set_point","description":"Asset/Data Stream pair used to delete the associated Control Change Policy."}],"responses":{"200":{"description":"OK"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/custom-actions/create":{"post":{"tags":["Custom Actions"],"summary":"Create Custom Action","description":"Create Custom Action\n\n**Permission Required:** `kelvin.permission.custom-actions.create`\n","operationId":"createCustomAction","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.CustomActionCreate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.CustomActionCreate.Email"}}}},"required":true},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.CustomActionCreate"},"examples":{"email":{"$ref":"#/components/examples/responses.CustomActionCreate.Email"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/custom-actions/list":{"post":{"tags":["Custom Actions"],"summary":"List Custom Actions","description":"Returns Custom Actions that match the provided filters.\n\nUse query parameters for pagination and sorting, and the request body for\nfield-based filtering.\n\n**Permission Required:** `kelvin.permission.custom-actions.read`\n","operationId":"listCustomActions","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["id"],"description":"Sort results by one or more fields listed below.","items":{"type":"string","enum":["id","title","resource","description","expiration_date","timestamp","trace_id","type","state","created","created_by","updated","updated_by"]}}}],"requestBody":{"description":"Filter criteria for listing Custom Actions.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.CustomActionsList"},"examples":{"by-resource-and-state":{"$ref":"#/components/examples/requests.CustomActionsList.ByResourceAndState"}}}},"required":true},"responses":{"200":{"description":"Paginated Custom Actions retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.CustomActionsListPaginatedResponseCursor"},"examples":{"default":{"$ref":"#/components/examples/responses.CustomActionsList.Cursor"}}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.CustomActionsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.CustomActionsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/custom-actions/{action_id}/delete":{"post":{"tags":["Custom Actions"],"summary":"Delete Custom Action","description":"Permanently delete an existing Custom Action.\n\n**Permission Required:** `kelvin.permission.custom-actions.delete`\n","operationId":"deleteCustomAction","parameters":[{"name":"action_id","in":"path","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/custom-actions/{action_id}/get":{"get":{"tags":["Custom Actions"],"summary":"Get Custom Action","description":"Returns a single Custom Action by `action_id`.\n\nIncludes current lifecycle state, transition history, and payload details.\n\n**Permission Required:** `kelvin.permission.custom-actions.read`\n","operationId":"getCustomAction","parameters":[{"name":"action_id","in":"path","description":"UUID of the Custom Action to retrieve.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Custom Action retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.CustomActionGet"},"examples":{"email-ok":{"$ref":"#/components/examples/responses.CustomActionGet.EmailOK"},"email-fail":{"$ref":"#/components/examples/responses.CustomActionGet.EmailFail"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/custom-actions/types/create":{"post":{"tags":["Custom Actions"],"summary":"Create Custom Action Type","description":"Create a new Custom Action Type.\n\n**Permission Required:** `kelvin.permission.custom-actions.create`\n","operationId":"createCustomActionsType","requestBody":{"description":"CustomActions type create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.CustomActionsTypeCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.CustomActionsTypeCreate"}}}},"400":{"$ref":"#/components/responses/errors_action_type_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/responses-error.NotFound"}}}},"/custom-actions/types/list":{"get":{"tags":["Custom Actions"],"summary":"List Custom Action Types","description":"Returns a list of Custom Action Type objects. The list can be optionally filtered and sorted on the server before being returned.\n**Permission Required:** `kelvin.permission.custom-actions.read`\n","operationId":"listCustomActionsTypes","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators. Options are; `name`, `title`, `created`, `created_by`, `updated` and `updated_by`.","items":{"type":"string"}}},{"name":"search","in":"query","description":"Search and filter on the list based on the key `name` and `title`. The search is case insensitive and will find partial matches as well.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}},{"name":"app_names","in":"query","description":"Filter the list of custom action types to include only those that are currently in use by the specified applications.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.CustomActionsTypesListPaginatedCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.CustomActionsTypesListPaginatedLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.CustomActionsTypesListPaginatedStream"}}}},"400":{"$ref":"#/components/responses/errors_action_type_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/custom-actions/types/{name}/delete":{"post":{"tags":["Custom Actions"],"summary":"Delete Custom Action Type","description":"Permanently delete an existing Custom Action Type. An error will be returned if there are any current Custom Action linked to the Custom Action Type. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.custom-actions.delete`\n","operationId":"deleteCustomActionType","parameters":[{"name":"name","in":"path","description":"Custom Action Type key `name` to delete. Case sensitive name.","required":true,"schema":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$"}}],"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/errors_action_type_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/responses-error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/custom-actions/types/{name}/get":{"get":{"tags":["Custom Actions"],"summary":"Get Custom Action Type","description":"Retrieves the parameters of a Custom Action Type.\n\n**Permission Required:** `kelvin.permission.custom-actions.read`\n","operationId":"getCustomActionsType","parameters":[{"name":"name","in":"path","description":"Custom Action Type key `name` to get. Case sensitive name.","required":true,"schema":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.CustomActionsTypeGet"}}}},"400":{"$ref":"#/components/responses/errors_action_type_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/responses-error.NotFound"}}}},"/custom-actions/types/{name}/update":{"post":{"tags":["Custom Actions"],"summary":"Update Custom Action Type","description":"Updates an existing Custom Action Type with any new values passed through the body parameters. All body parameters are optional and if not provided will remain unchanged. Only the unique identifier `name` can not be changed.\n\n**Permission Required:** `kelvin.permission.custom-actions.update`\n","operationId":"updateCustomActionsType","parameters":[{"name":"name","in":"path","description":"Custom Action Type key `name` to update. Case sensitive name.","required":true,"schema":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$"}}],"requestBody":{"description":"CustomActions type update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.CustomActionsTypeUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.CustomActionsTypeUpdate"}}}},"400":{"$ref":"#/components/responses/errors_action_type_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/responses-error.NotFound"}}}},"/data-quality/configuration/create":{"post":{"tags":["Data Quality"],"summary":"Create Data Quality Configuration","description":"Create a new Data Quality Configuration.\n\nA data Quality is a configuration that defines all the algorithms being used to monitor a resource data quality.\n\nAll configurations are optional. There are no validations done regarding each configuration content.\n\n**Permission Required:** `kelvin.permission.data-quality.create`\n","operationId":"createDataQuality","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataQualityCreate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.DataQualityCreate.AllFields"}}}},"required":true},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataQualityCreate"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.DataQuality.AllFields"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/data-quality/configuration/{resource}/get":{"get":{"tags":["Data Quality"],"summary":"Get a Data Quality Configuration","description":"Get a Data Quality configuration by resource.\n\n**Permission Required:** `kelvin.permission.data-quality.read`\n","operationId":"getDataQuality","parameters":[{"name":"resource","in":"path","required":true,"schema":{"type":"string","format":"krn","maxLength":256},"example":"krn:ad:asset1/setpoint","description":"Asset/Data Stream pair to retrieve the associated DataQuality configurations. (example: `krn:ad:asset1/setpoint`)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataQualityGet"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.DataQuality.AllFields"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/data-quality/configuration/{resource}/delete":{"post":{"tags":["Data Quality"],"summary":"Delete a Data Quality Configuration","description":"Delete a Data Quality configuration by resource.\n\n**Permission Required:** `kelvin.permission.data-quality.delete`\n","operationId":"deleteDataQuality","parameters":[{"name":"resource","in":"path","required":true,"schema":{"type":"string","format":"krn","maxLength":256},"example":"krn:ad:asset1/setpoint","description":"Asset Data Stream pair for deleting the associated DataQuality configurations. (example: `krn:ad:asset1/setpoint`)."}],"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/data-quality/configuration/{resource}/update":{"post":{"tags":["Data Quality"],"summary":"Update a Data Quality Configuration","description":"Update a Data Quality by providing the new configuration.\nThis request changes the whole Data Quality Configuration.\n\n**Permission Required:** `kelvin.permission.data-quality.update`\n","operationId":"updateDataQuality","parameters":[{"name":"resource","in":"path","required":true,"schema":{"type":"string","format":"krn","maxLength":256},"example":"krn:ad:asset1/setpoint","description":"Asset Data Stream pair to update the associated Data Quality configurations. (example: `krn:ad:asset1/setpoint`)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataQualityUpdate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.DataQualityUpdate.AllFields"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataQualityUpdate"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.DataQuality.AllFields"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/data-quality/configuration/list":{"post":{"tags":["Data Quality"],"summary":"List Data Quality Configurations","description":"List data quality configurations based on the provided filters.\n\n**Permission Required:** `kelvin.permission.data-quality.read`\n","operationId":"listDataQuality","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"search","description":"Search for data qualities with `resources` matching the search term.","in":"query","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["resource"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["resource","asset","datastream","created","created_by","updated","updated_by"]}}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataQualityList"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.DataQualityList.AllFields"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.DataQualityListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.DataQualityListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.DataQualityListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/data-quality/configuration/bulk/upsert":{"post":{"tags":["Data Quality"],"summary":"Create or Update Data Quality Configurations (Bulk)","description":"Create or update multiple data quality configurations at once.\n\n**Permission Required:** `kelvin.permission.data-quality.create`\n","operationId":"upsertBulkDataQuality","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.BulkDataQualityUpsert"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.BulkDataQualityUpsert.AllFields"}}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/data-quality/configuration/bulk/delete":{"post":{"tags":["Data Quality"],"summary":"Delete Data Quality Configurations (Bulk)","description":"Deletes multiple data quality configurations.\n\n**Permission Required:** `kelvin.permission.data-quality.delete`\n","operationId":"deleteBulkDataQuality","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.BulkDataQualityDelete"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.BulkDataQualityDelete.AllFields"}}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/data-quality/metric/create":{"post":{"tags":["Data Quality"],"summary":"Create Data Quality Metric","description":"Create a new Data Quality Metric.\n\n**Permission Required:** `kelvin.permission.data-quality.create`\n","operationId":"createDataQualityMetric","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataQualityMetricCreate"},"examples":{"AllFields":{"$ref":"#/components/examples/requests.DataQualityMetricCreate.AllFields"},"RequiredOnly":{"$ref":"#/components/examples/requests.DataQualityMetricCreate.RequiredOnly"}}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataQualityMetricCreate"},"examples":{"AllFields":{"$ref":"#/components/examples/responses.DataQualityMetric.AllFields"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/data-quality/metric/{metric_name}/get":{"get":{"tags":["Data Quality"],"summary":"Get Data Quality Metric","description":"Retrieve the parameters of a Data Quality Metric.\n\n**Permission Required:** `kelvin.permission.data-quality.read`\n","operationId":"getDataQualityMetric","parameters":[{"name":"metric_name","in":"path","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","maxLength":64},"example":"custom_availability_metric","description":"The unique identifier `name` of the Data Quality Metric to retrieve."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataQualityMetricGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/data-quality/metric/{metric_name}/delete":{"post":{"tags":["Data Quality"],"summary":"Delete Data Quality Metric","description":"Delete a Data Quality Metric by name.\n\n**Permission Required:** `kelvin.permission.data-quality.delete`\n","operationId":"deleteDataQualityMetric","parameters":[{"name":"metric_name","in":"path","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","maxLength":64},"example":"custom_availability_metric","description":"The unique identifier `name` of the Data Quality Metric to delete."}],"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/errors_metric_responses-error.Conflict"}}}},"/data-quality/metric/{metric_name}/update":{"post":{"tags":["Data Quality"],"summary":"Update Data Quality Metric","description":"Update an existing Data Quality Metric.\n\n**Permission Required:** `kelvin.permission.data-quality.update`\n","operationId":"updateDataQualityMetric","parameters":[{"name":"metric_name","in":"path","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","maxLength":64},"example":"custom_availability_metric","description":"The unique identifier `name` of the Data Quality Metric to update."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataQualityMetricUpdate"},"examples":{"AllFields":{"$ref":"#/components/examples/requests.DataQualityMetricUpdate.AllFields"},"TitleOnly":{"$ref":"#/components/examples/requests.DataQualityMetricUpdate.TitleOnly"}}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataQualityMetricUpdate"},"examples":{"AllFields":{"$ref":"#/components/examples/responses.DataQualityMetric.AllFields"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/data-quality/metric/list":{"post":{"tags":["Data Quality"],"summary":"List Data Quality Metrics","description":"Returns a list of Data Quality Metrics and its parameters. The Data Quality Metrics can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.data-quality.read`\n","operationId":"listDataQualityMetrics","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","data_type_name","created","created_by","updated","updated_by"]}}}],"requestBody":{"description":"Data Quality Metrics list schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataQualityMetricsList"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.DataQualityMetricsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.DataQualityMetricsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.DataQualityMetricsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/data-quality/metric/bulk/upsert":{"post":{"tags":["Data Quality"],"summary":"Bulk Upsert Data Quality Metrics","description":"Create or update multiple Data Quality Metrics in a single request.\n\n**Permission Required:** `kelvin.permission.data-quality.create` and `kelvin.permission.data-quality.update`\n","operationId":"bulkUpsertDataQualityMetrics","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.UpsertDataQualityMetricsBulk"},"examples":{"AllFields":{"$ref":"#/components/examples/requests.DataQualityMetricBulkUpsert.AllFields"}}}}},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"}}}},"/data-quality/metric/bulk/delete":{"post":{"tags":["Data Quality"],"summary":"Bulk Delete Data Quality Metrics","description":"Delete multiple Data Quality Metrics by their names in a single request.\n\n**Permission Required:** `kelvin.permission.data-quality.delete`\n","operationId":"bulkDeleteDataQualityMetrics","requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DeleteDataQualityMetricsBulk"},"examples":{"AllFields":{"$ref":"#/components/examples/requests.DataQualityMetricBulkDelete.AllFields"}}}}},"responses":{"204":{"description":"No Content"},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"}}}},"/data-quality/simulate":{"post":{"tags":["Data Quality"],"summary":"Data Quality Simulate","description":"Simulate the effect of data quality updates without making permanent changes.\n\n**Permission Required:** `kelvin.permission.data-quality.read`\n","operationId":"DataQualitySimulate","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataQualitySimulate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.DataQualitySimulate.AllFields"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataQualitySimulate"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.DataQualitySimulate.AllFields"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/data-quality/statistics":{"post":{"tags":["Data Quality"],"summary":"Data Quality Statistics","description":"Retrieve data quality statistics regarding the 'kelvin_data_quality_score' metric.\n\n**Permission Required:** `kelvin.permission.data-quality.read`\n","operationId":"DataQualityStatistics","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataQualityStatistics"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.DataQualityStatistics.AllFields"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataQualityStatistics"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.DataQualityStatistics.AllFields"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/datastreams/data-types/list":{"get":{"tags":["Datastreams"],"summary":"List Data Types","description":"Returns a list of Data Types and its parameters. The Data Types can be optionally filtered and sorted on the server before being returned.\n\n**Pagination Sortable Columns:** `name`, `title`, `created`, `updated`\n\n**Permission Required:** `kelvin.permission.datastreams.read`\n","operationId":"listDataStreamsDataTypes","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","created","updated"]}}},{"name":"search","in":"query","style":"form","schema":{"type":"array","description":"Search and filter on the list based on the key `name`. All strings in the array are treated as `OR`. The search is case insensitive and will find partial matches as well.","items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsDataTypesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsDataTypesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsDataTypesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/datastreams/semantic-types/create":{"post":{"tags":["Datastreams"],"summary":"Create Semantic Type","description":"Create a new Semantic Type.\n\n**Permission Required:** `kelvin.permission.datastreams.create`\n","operationId":"createDataStreamSemanticType","requestBody":{"description":"Semantic Type create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataStreamSemanticTypeCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataStreamSemanticTypeCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/datastreams/semantic-types/{semantic_type_name}/update":{"post":{"tags":["Datastreams"],"summary":"Update Semantic Type","description":"Updates an existing Semantic Type with any new values passed through the body parameters. All body parameters are optional and if not provided will remain unchanged.\n\n**Permission Required:** `kelvin.permission.datastreams.create`\n","operationId":"updateDataStreamSemanticType","parameters":[{"name":"semantic_type_name","in":"path","description":"Semantic Type key `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Semantic Type update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataStreamSemanticTypeUpdate"}}},"required":true},"responses":{"200":{"description":"Updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataStreamSemanticTypeUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datastreams/semantic-types/{semantic_type_name}/get":{"get":{"tags":["Datastreams"],"summary":"Get Semantic Type","description":"Retrieve the parameters of a Semantic Type.\n\n**Permission Required:** `kelvin.permission.datastreams.read`\n","operationId":"getDataStreamSemanticType","parameters":[{"name":"semantic_type_name","in":"path","description":"Semantic Type key `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataStreamSemanticTypeGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datastreams/semantic-types/list":{"get":{"tags":["Datastreams"],"summary":"List Semantic Types","description":"Returns a list of Semantic Types and its parameters. The Semantic Types can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.datastreams.read`\n","operationId":"listDataStreamsSemanticTypes","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","created","updated"]}}},{"name":"search","in":"query","style":"form","explode":false,"schema":{"type":"array","description":"Search and filter on the list based on the key `name`. All strings in the array are treated as `OR`. The search is case insensitive and will find partial matches as well.","items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsSemanticTypesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsSemanticTypesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsSemanticTypesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/datastreams/semantic-types/{semantic_type_name}/delete":{"post":{"tags":["Datastreams"],"summary":"Delete Semantic Type","description":"Permanently delete an existing Semantic Type. An error will be returned if there are any current links to a Semantic Type. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.datastreams.delete`\n","operationId":"deleteDataStreamSemanticType","parameters":[{"name":"semantic_type_name","in":"path","description":"Semantic Type key `name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Semantic Type deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/datastreams/units/create":{"post":{"tags":["Datastreams"],"summary":"Create Unit","description":"Create a new Unit.\n\n**Permission Required:** `kelvin.permission.datastreams.create`\n","operationId":"createDataStreamUnit","requestBody":{"description":"Unit create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataStreamUnitCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataStreamUnitCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/datastreams/units/bulk/create":{"post":{"tags":["Datastreams"],"summary":"Create Bulk Unit","description":"Create a list of new Units.\n\n**Permission Required:** `kelvin.permission.datastreams.create`\n","operationId":"createBulkDataStreamUnit","requestBody":{"description":"Unit bulk create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.BulkDataStreamUnitCreate"}}},"required":true},"responses":{"201":{"description":"Units created successfully","content":{"application/json":{}}},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/datastreams/units/{unit_name}/update":{"post":{"tags":["Datastreams"],"summary":"Update Unit","description":"Updates an existing Unit with any new values passed through the body parameters. All body parameters are optional and if not provided will remain unchanged.\n\n**Permission Required:** `kelvin.permission.datastreams.update`\n","operationId":"updateDataStreamUnit","parameters":[{"name":"unit_name","in":"path","description":"Unit parameter `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Unit update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataStreamUnitUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataStreamUnitUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datastreams/units/{unit_name}/get":{"get":{"tags":["Datastreams"],"summary":"Get Unit","description":"Retrieve the parameters of a Unit.\n\n**Permission Required:** `kelvin.permission.datastreams.read`\n","operationId":"getDataStreamUnit","parameters":[{"name":"unit_name","in":"path","description":"Unit parameter `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataStreamUnitGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datastreams/units/list":{"get":{"tags":["Datastreams"],"summary":"List Units","description":"Returns a list of Units and its parameters. The Units can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.datastreams.read`\n","operationId":"listDataStreamsUnits","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","symbol","created","updated"]}}},{"name":"search","in":"query","style":"form","explode":false,"schema":{"type":"array","description":"Search and filter on the list based on the key `name`. All strings in the array are treated as `OR`. The search is case insensitive and will find partial matches as well.","items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsUnitsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsUnitsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsUnitsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/datastreams/units/{unit_name}/delete":{"post":{"tags":["Datastreams"],"summary":"Delete Unit","description":"Permanently delete an existing Unit. An error will be returned if there are any current links to a Unit. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.datastreams.delete`\n","operationId":"deleteDataStreamUnit","parameters":[{"name":"unit_name","in":"path","description":"Unit key `name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Unit deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/datastreams/create":{"post":{"tags":["Datastreams"],"summary":"Create Data Stream","description":"Create a new Data Stream.\n\n**Permission Required:** `kelvin.permission.datastreams.create`\n","operationId":"createDataStream","requestBody":{"description":"Datastreams create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataStreamCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataStreamCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/datastreams/bulk/create":{"post":{"tags":["Datastreams"],"summary":"Create Bulk Data Stream","description":"Create a list of new Data Streams.\n\n**Permission Required:** `kelvin.permission.datastreams.create`\n","operationId":"createBulkDataStream","requestBody":{"description":"Datastreams bulk create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.BulkDataStreamCreate"}}},"required":true},"responses":{"201":{"description":"Datastreams created successfully","content":{"application/json":{}}},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/datastreams/{datastream_name}/update":{"post":{"tags":["Datastreams"],"summary":"Update Data Stream","description":"Update an existing Data Stream with a new 'title' and/or 'description' and/or 'type' and/or 'semantic_type_name' and/or 'unit_name'. Any parameters that are not provided will remain unchanged.\n\n**Permission Required:** `kelvin.permission.datastreams.update`","operationId":"updateDataStream","parameters":[{"name":"datastream_name","in":"path","description":"Data Stream key `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Data Stream update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataStreamUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataStreamUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datastreams/{datastream_name}/get":{"get":{"tags":["Datastreams"],"summary":"Get Data Stream","description":"Retrieve the parameters of a Data Stream.\n\n**Permission Required:** `kelvin.permission.datastreams.read`\n","operationId":"getDataStream","parameters":[{"name":"datastream_name","in":"path","description":"Data Stream key `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataStreamGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datastreams/list":{"post":{"tags":["Datastreams"],"summary":"List Data Streams","description":"Returns a list of Data Streams and its parameters. The Data Streams can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.datastreams.read`\n","operationId":"listDataStreams","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","type","data_type_name","unit_name","semantic_type_name","created","updated"]}}}],"requestBody":{"description":"Datastreams list schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataStreamsList"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.DataStreamsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/datastreams/{datastream_name}/delete":{"post":{"tags":["Datastreams"],"summary":"Delete Data Stream","description":"Permanently delete an existing Data Stream. You will no longer be able to access any data saved in Asset / Data Stream pairs. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.datastreams.delete`\n","operationId":"deleteDataStream","parameters":[{"name":"datastream_name","in":"path","description":"Data Stream key `name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Data Stream deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/errors_datastreams_responses-error.Conflict"}}}},"/datastreams/bulk/delete":{"post":{"tags":["Datastreams"],"summary":"Delete Bulk Data Stream","description":"Delete a list of Data Streams.\n\n**Permission Required:** `kelvin.permission.datastreams.delete`\n","operationId":"deleteBulkDataStream","requestBody":{"description":"Datastreams bulk delete schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.BulkDataStreamDelete"}}},"required":true},"responses":{"200":{"description":"Data Streams deleted successfully","content":{}},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datastreams/{datastream_name}/context/get":{"get":{"tags":["Datastreams"],"summary":"Get Data Stream Context","description":"Retrieve an array of Assets and respective data sources contextualized within a specific Data Stream.\n\n**Permission Required:** `kelvin.permission.datastreams.read`\n","operationId":"getDataStreamContext","parameters":[{"name":"datastream_name","in":"path","description":"Data Stream key `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataStreamContextGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datastreams/context/list":{"post":{"tags":["Datastreams"],"summary":"List Data Stream Contexts","description":"Returns a list of Data Streams, where each stream includes an array of its associated Assets and respective data sources. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.datastreams.read`\n","operationId":"listDataStreamContexts","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["datastream_name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["datastream_name"]}}}],"requestBody":{"description":"Datastreams context list schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataStreamContextsList"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.DataStreamContextsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.DataStreamContextsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.DataStreamContextsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/datatags/create":{"post":{"tags":["Data Tag"],"summary":"Create Data Tag","description":"Create a new Data Tag event.\n\n**Permission Required:** `kelvin.permission.datatag.create`\n","operationId":"createDataTag","requestBody":{"description":"Data Tag create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataTagCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataTagCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/datatags/{datatag_id}/update":{"post":{"tags":["Data Tag"],"summary":"Update Data Tag","description":"Update an existing Data Tag. Any parameters that are not provided will remain unchanged.\n\n**Permission Required:** `kelvin.permission.datatag.update`\n","operationId":"updateDataTag","parameters":[{"$ref":"#/components/parameters/type.DataTagID"}],"requestBody":{"description":"Data Tag update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataTagUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataTagUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datatags/{datatag_id}/get":{"get":{"tags":["Data Tag"],"summary":"Get Data Tag","description":"Returns a single Data Tag by `datatag_id`.\n\nIncludes the tagged time interval, source, and optional context\ndatastreams.\n\n**Permission Required:** `kelvin.permission.datatag.read`\n","operationId":"getDataTag","parameters":[{"$ref":"#/components/parameters/type.DataTagID"}],"responses":{"200":{"description":"Data Tag retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.DataTagGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datatags/list":{"post":{"tags":["Data Tag"],"summary":"List Data Tags","description":"Returns Data Tags that match the provided filters.\n\nUse query parameters for pagination and sorting, and the request body for\nfield-based filtering.\n\n**Permission Required:** `kelvin.permission.datatag.read`\n","operationId":"listDataTag","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["id"],"description":"Sort results by one or more fields listed below.","items":{"type":"string","enum":["id","start_date","end_date","tag_name","resource","source","description","created","updated"]}}}],"requestBody":{"description":"Filter criteria for listing Data Tags.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.DataTagList"},"examples":{"by-resource-and-date":{"$ref":"#/components/examples/requests.DataTagList.ByResourceAndDate"}}}},"required":true},"responses":{"200":{"description":"Paginated Data Tags retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.DataTagListPaginatedResponseCursor"},"examples":{"default":{"$ref":"#/components/examples/responses.DataTagList.Cursor"}}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.DataTagListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.DataTagListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/datatags/{datatag_id}/delete":{"post":{"tags":["Data Tag"],"summary":"Delete Data Tag","description":"Permanently delete an existing Data Tag.\n**Permission Required:** `kelvin.permission.datatag.delete`","operationId":"deleteDataTag","parameters":[{"$ref":"#/components/parameters/type.DataTagID"}],"responses":{"200":{"description":"Data Tag deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datatags/tags/create":{"post":{"tags":["Data Tag"],"summary":"Create Tag","description":"Create a new Tag.\n\n**Permission Required:** `kelvin.permission.datatag.create`\n","operationId":"createTag","requestBody":{"description":"Tag create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.TagCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.TagCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/datatags/tags/{tag_name}/update":{"post":{"tags":["Data Tag"],"summary":"Update Tag","description":"Update an existing Tag. The Tag key `name` can not be updated.\n\n**Permission Required:** `kelvin.permission.datatag.update`\n","operationId":"updateTag","parameters":[{"$ref":"#/components/parameters/type.TagName"}],"requestBody":{"description":"Tag update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.TagUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.TagUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datatags/tags/{tag_name}/get":{"get":{"tags":["Data Tag"],"summary":"Get Tag","description":"Retrieves a Tag.\n\n**Permission Required:** `kelvin.permission.datatag.read`\n","operationId":"getTag","parameters":[{"$ref":"#/components/parameters/type.TagName"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.TagGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/datatags/tags/list":{"get":{"tags":["Data Tag"],"summary":"List Tag","description":"Returns a list of Tags. The Tags can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.datatag.read`\n","operationId":"listTag","parameters":[{"name":"search","in":"query","description":"Search and filter on the list based on the key `name` (Tag Name). All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"names","in":"query","description":"Filter on the list based on the key `name` (Tag Name). All values in array will be filtered as `OR`. The search is case insensitive and is on the full Tags `name` only.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","created","updated"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.TagListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.TagListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.TagListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/datatags/tags/{tag_name}/delete":{"post":{"tags":["Data Tag"],"summary":"Delete Tag","description":"Permanently delete an existing Tag. An error will be returned if there are any current links to a DataTag and the Tag will not be deleted.\n**Permission Required:** `kelvin.permission.datatag.delete`","operationId":"deleteTag","parameters":[{"$ref":"#/components/parameters/type.TagName"}],"responses":{"200":{"description":"Tag deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/filestorage/upload":{"post":{"tags":["Filestorage"],"summary":"Upload a file","description":"Upload a file \n\n**Permission Required:** `kelvin.permission.filestorage.upload`\n","operationId":"uploadFile","requestBody":{"required":true,"description":"File to be uploaded","content":{"multipart/form-data":{"schema":{"type":"object","required":["file"],"properties":{"file":{"type":"string","format":"binary"},"metadata":{"type":"object","additionalProperties":true}}}}}},"responses":{"201":{"description":"File uploaded successfully","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.FileUpload"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/filestorage/{file_id}/download":{"get":{"tags":["Filestorage"],"summary":"Download a file","description":"Downloads the requested file \n\n**Permission Required:** `kelvin.permission.filestorage.download`\n","operationId":"downloadFile","parameters":[{"name":"file_id","in":"path","description":"UUID of the desired file","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"File attachment download successful","content":{"application/octet-stream":{"schema":{"type":"string","format":"binary"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/filestorage/list":{"post":{"tags":["Filestorage"],"summary":"List files","description":"List the files currently present in the filestorage\n\n**Permission Required:** `kelvin.permission.filestorage.read`\n","operationId":"listFiles","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"requestBody":{"required":false,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.FilesList"}}}},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.FilesListPaginatedCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.FilesListPaginatedLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.FilesListPaginatedStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/filestorage/{file_id}/delete":{"post":{"tags":["Filestorage"],"summary":"Delete a file","description":"Deletes the requested file from filestorage\n\n**Permission Required:** `kelvin.permission.filestorage.delete`\n","operationId":"deleteFile","parameters":[{"name":"file_id","in":"path","description":"UUID of the desired file","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"File deleted successfully"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/filestorage/{file_id}/get":{"get":{"tags":["Filestorage"],"summary":"Get file info","description":"Fetches the information for a specific file\n\n**Permission Required:** `kelvin.permission.filestorage.read`\n","operationId":"getFile","parameters":[{"name":"file_id","in":"path","description":"UUID of the desired file","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The file information is returned","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.FileGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/guardrails/create":{"post":{"tags":["Guardrails"],"summary":"Create Guardrail","description":"Create a new Guardrail.\n\nA Guardrail is a configuration that defines a range of values, absolute or\nrelative, that a control change must stay within. If the control change is\noutside of the defined range, it will be blocked and marked as rejected.\n\nAll configurations are optional. There are no validations done regarding a\n`min` being higher than a `max` or vice versa.\n\nAdditionally, a Guardrail value may be set by a data stream.\n\n**Permission Required:** `kelvin.permission.guardrails.create`\n","operationId":"createGuardrail","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.GuardrailCreate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.GuardrailCreate.AllFields"},"simple-static":{"$ref":"#/components/examples/requests.GuardrailCreate.SimpleStatic"},"simple-dynamic":{"$ref":"#/components/examples/requests.GuardrailCreate.SimpleDynamic"},"single-component":{"$ref":"#/components/examples/requests.GuardrailCreate.SingleComponent"},"non-numeric":{"$ref":"#/components/examples/requests.GuardrailCreate.NonNumeric"}}}},"required":true},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.GuardrailCreate"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.GuardrailX.AllFields"},"non-numeric":{"$ref":"#/components/examples/responses.GuardrailX.NonNumeric"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/guardrails/{resource}/get":{"get":{"tags":["Guardrails"],"summary":"Get a Guardrail","description":"Get a Guardrail by ID.\n\n**Permission Required:** `kelvin.permission.guardrails.read`\n","operationId":"getGuardrail","parameters":[{"name":"resource","in":"path","required":true,"schema":{"type":"string","format":"krn"},"example":"krn:ad:asset1/setpoint","description":"Asset/Data Stream pair to retrieve the associated Guardrail configurations. (example: `krn:ad:asset1/setpoint`)."}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.GuardrailGet"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.GuardrailX.AllFields"},"simple-static":{"$ref":"#/components/examples/responses.GuardrailX.SimpleStatic"},"simple-mixed":{"$ref":"#/components/examples/responses.GuardrailX.SimpleMixed"},"non-numeric":{"$ref":"#/components/examples/responses.GuardrailX.NonNumeric"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/guardrails/{resource}/delete":{"post":{"tags":["Guardrails"],"summary":"Delete a Guardrail","description":"Delete a Guardrail by ID.\n\n**Permission Required:** `kelvin.permission.guardrails.delete`\n","operationId":"deleteGuardrail","parameters":[{"name":"resource","in":"path","required":true,"schema":{"type":"string","format":"krn"},"example":"krn:ad:asset1/setpoint","description":"Asset/Data Stream pair for deleting the associated Guardrail configurations. (example: `krn:ad:asset1/setpoint`)."}],"responses":{"200":{"description":"OK"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/guardrails/{resource}/update":{"post":{"tags":["Guardrails"],"summary":"Update a Guardrail","description":"Update a Guardrail by providing the Guardrail ID and the fields to update.\nThis request changes the whole Guardrail.\n\n**Permission Required:** `kelvin.permission.guardrails.update`\n","operationId":"updateGuardrail","parameters":[{"name":"resource","in":"path","required":true,"schema":{"type":"string","format":"krn"},"example":"krn:ad:asset1/setpoint","description":"Asset/Data Stream pair to update the associated Guardrail configurations. (example: `krn:ad:asset1/setpoint`)."}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.GuardrailUpdate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.GuardrailX.AllFields"},"non-numeric":{"$ref":"#/components/examples/requests.GuardrailX.NonNumeric"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.GuardrailUpdate"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.GuardrailX.AllFields"},"simple-static":{"$ref":"#/components/examples/responses.GuardrailX.SimpleStatic"},"simple-mixed":{"$ref":"#/components/examples/responses.GuardrailX.SimpleMixed"},"non-numeric":{"$ref":"#/components/examples/responses.GuardrailX.NonNumeric"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/guardrails/list":{"post":{"tags":["Guardrails"],"summary":"List Guardrails","description":"List guardrails based on the provided filters.\n\n**Permission Required:** `kelvin.permission.guardrails.read`\n","operationId":"listGuardrails","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"search","description":"Search for guardrails with `resources` matching the search term.","in":"query","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["asset"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["asset","datastream","created","created_by","updated","updated_by"]}}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.GuardrailsList"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.GuardrailsList.AllFields"}}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.GuardrailsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.GuardrailsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.GuardrailsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/guardrails/bulk/create":{"post":{"tags":["Guardrails"],"summary":"Create Guardrails (Bulk)","description":"Create multiple guardrails at once.\n\n**Permission Required:** `kelvin.permission.guardrails.create`\n","operationId":"createBulkGuardrails","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.BulkGuardrailsCreate"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.BulkGuardrailsCreate.AllFields"}}}},"required":true},"responses":{"201":{"description":"All Guardrails were created successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.BulkGuardrailsCreate"},"examples":{"all-fields":{"$ref":"#/components/examples/responses.BulkGuardrailsCreate.AllFields"}}}}},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/guardrails/bulk/delete":{"post":{"tags":["Guardrails"],"summary":"Delete Guardrails (Bulk)","description":"Deletes multiple guardrails.\n\n**Permission Required:** `kelvin.permission.guardrails.delete`\n","operationId":"deleteBulkGuardrails","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.BulkGuardrailsDelete"},"examples":{"all-fields":{"$ref":"#/components/examples/requests.BulkGuardrailsDelete.AllFields"}}}},"required":true},"responses":{"200":{"description":"All Guardrails were deleted successfully."},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/instance/auditlog/list":{"get":{"tags":["Instance"],"summary":"List Audit Log","description":"List Audit Log\n**Permission Required:** `kelvin.permission.audit_log.read`","operationId":"listInstanceAuditLogs","parameters":[{"name":"action","in":"query","style":"form","description":"A filter on the list based on the key `action`. The filter is on the full name only.","schema":{"type":"array","items":{"type":"string"}}},{"name":"user_id","in":"query","style":"form","description":"A filter on the list based on the key `user_id`. The filter is on the full name only.","schema":{"type":"array","items":{"type":"string","format":"uuid"}}},{"name":"namespace","in":"query","style":"form","description":"A filter on the list based on the key `namespace`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters. If set, it will override acp_name","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"identifier","in":"query","style":"form","description":"A filter on the list based on the key `identifier`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters. If set, it will override acp_name","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"username","in":"query","style":"form","description":"A filter on the list based on the key `username`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters. If set, it will override acp_name","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"request_id","in":"query","style":"form","description":"A filter on the list based on the key `request_id`. The filter is on the full name only.","schema":{"type":"array","items":{"type":"string","minLength":1,"maxLength":64}}},{"name":"search","in":"query","style":"form","description":"Search Audit Logs by key `action`, `username` or `namespace`. All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","schema":{"type":"array","items":{"type":"string"}}},{"name":"from_date_time","in":"query","description":"Filter actions that occurred at or after this UTC time, formatted in RFC 3339.","schema":{"type":"string","format":"date-time"}},{"name":"to_date_time","in":"query","description":"Filter actions that occurred until or at this UTC time, formatted in RFC 3339.","schema":{"type":"string","format":"date-time"}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["id"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["id","action","username","created","request_uri"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.InstanceAuditLogsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.InstanceAuditLogsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.InstanceAuditLogsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/instance/auditlog/{audit_logger_id}/get":{"get":{"tags":["Instance"],"summary":"Get Audit Log","description":"Get Audit Log\n\n**Permission Required:** `kelvin.permission.audit_log.read`","operationId":"getInstanceAuditLog","parameters":[{"name":"audit_logger_id","in":"path","required":true,"description":"Unique ID of the Audit Log entry to get.","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.InstanceAuditLogGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/instance/settings/kelvin-cluster/get":{"get":{"tags":["Instance"],"summary":"Get Kelvin Cluster Instance Setting","description":"Retrieve the Cluster Instance Settings.\n\n**Permission Required:** `kelvin.permission.instance.read`\n","operationId":"getInstanceSettingsKelvinCluster","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.InstanceSettingsKelvinClusterGet"}}}},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/instance/settings/kelvin-cluster/update":{"post":{"tags":["Instance"],"summary":"Update Kelvin Cluster Instance Setting","description":"Updates an existing Kelvin Cluster Instance Settings with any new values passed through the body parameters. All body parameters are optional and if not provided will remain unchanged.\n\n**Permission Required:** `kelvin.permission.instance.update`\n","operationId":"updateInstanceSettingsKelvinCluster","requestBody":{"description":"Kelvin Cluster Instance Setting update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.InstanceSettingsKelvinClusterUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.InstanceSettingsKelvinClusterUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/instance/settings/list":{"get":{"tags":["Instance"],"summary":"List Instance Settings","description":"List Instance Settings\n\n**Permission Required:** `kelvin.permission.instance.read`\n","operationId":"listInstanceSettings","parameters":[{"name":"names","in":"query","description":"Filter Instance Setting list based on the key `name`.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"search","in":"query","description":"Search and filter on the Instance Setting list based on the key `name`. The search is case sensitive but will find partial matches anywhere in the `name`.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","created","updated"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.InstanceSettingsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.InstanceSettingsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.InstanceSettingsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/instance/settings/{setting_name}/delete":{"post":{"tags":["Instance"],"summary":"Delete Instance Setting","description":"Permanently delete an existing Instance Setting. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.instance.delete`\n","operationId":"deleteInstanceSetting","parameters":[{"name":"setting_name","in":"path","required":true,"description":"Unique identifier `name` of the Instance Setting to delete.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Instance Setting deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/instance/settings/{setting_name}/get":{"get":{"tags":["Instance"],"summary":"Get Instance Setting","description":"Retrieve the parameters of an Instance Setting.\n\n**Permission Required:** `kelvin.permission.instance.read`\n","operationId":"getInstanceSettings","parameters":[{"name":"setting_name","in":"path","required":true,"description":"Unique identifier `name` of the Instance Setting to get.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.InstanceSettingsGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/instance/settings/{setting_name}/update":{"post":{"tags":["Instance"],"summary":"Update Instance Setting","description":"Update an existing Instance Settings. Any parameters that are not provided will remain unchanged.\n\n**Permission Required:** `kelvin.permission.instance.update`","operationId":"updateInstanceSettings","parameters":[{"name":"setting_name","in":"path","required":true,"description":"Unique identifier `name` of the Instance Setting to update.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Instance Setting update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.InstanceSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.InstanceSettingsUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/error.Forbidden"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/instance/status/get":{"get":{"tags":["Instance"],"summary":"Get Instance Health Status","description":"Retrieve the Health Status of all services on the Instance\n\n**Permission Required:** `n/a`\n","operationId":"getInstanceStatus","responses":{"200":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.InstanceStatusGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"500":{"$ref":"#/components/responses/error.InternalServerError"},"503":{"description":"Service Unavailable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.InstanceStatusGet"}}}}}}},"/orchestration/clusters/create":{"post":{"tags":["Orchestration"],"summary":"Create Cluster","description":"Create a new Cluster. This only creates the Cloud registration, the actual installation still needs to be manually performed on the server/kubernetes cluster. The provision script to run locally on the server for `type` registered as `k3s` or on an existing kubernetes cluster for `type` registered as `kubernetes` will be in the key `provision_script ` in the 201 response body.\n\n**Permission Required:** `kelvin.permission.cluster.create`\n","operationId":"createOrchestrationClusters","requestBody":{"description":"Cluster create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.OrchestrationClustersCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersCreate"},"examples":{"default":{"$ref":"#/components/examples/responses.OrchestrationClustersCreate.Default"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/list":{"get":{"tags":["Orchestration"],"summary":"List Cluster","description":"Returns a list of Cluster objects. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.cluster.read`\n","operationId":"listOrchestrationClusters","parameters":[{"name":"names","in":"query","description":"A filter on the list based on the Cluster key `name`. The filter is on the full name only. All strings in the array are treated as `OR`. Can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}}},{"name":"search","in":"query","description":"Search and filter on the list based on the Cluster keys `title` (Display Name) or `name`. The search is case insensitive and will find partial matches as well.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"type","in":"query","description":"A filter on the list based on the Cluster key `type`. The filter is on the full name only. All strings in the array are treated as `OR`. Options are `k3s` and `kubernetes`","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"ready","in":"query","description":"A filter on the list based on the Cluster key `ready`. Options are `true` and `false`","schema":{"type":"boolean"}},{"name":"status","in":"query","description":"A filter on the list based on the Cluster key `status`. The filter is on the full name only. All strings in the array are treated as `OR`. Options are `pending_provision`, `pending`, `online`, `unreachable` and `requires_attention`","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","description":"Sort the results by one of the Cluster parameters. Only one parameter can be selected. Options: `name`, `title`, `ready`, `type`, `status`, `last_seen`, `created`, `updated`, `kelvin_version`, `container_version`.","style":"form","schema":{"type":"array","default":["name"],"items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/provision/bin/download":{"get":{"tags":["Orchestration"],"summary":"Download Cluster Provision Binary","description":"Download Cluster Provision Binary\n\n**Permission Required:** `kelvin.permission.cluster.read`\n","operationId":"downloadOrchestrationClusterProvisionBinary","parameters":[{"name":"arch","in":"query","description":"Architecture of the binary to download. Options are `amd64`, `arm64`, `armv7` (default: `amd64`)","required":false,"schema":{"type":"string","enum":["amd64","arm64","armv7"]}},{"name":"type","in":"query","description":"Type of the binary to download. Options are `kubernetes`, `docker` (default: `kubernetes`)","required":false,"schema":{"type":"string","enum":["kubernetes","docker"]}}],"responses":{"200":{"description":"Returns executable","content":{"application/json":{"schema":{"type":"string","format":"binary","example":"File in binary format","description":"Cluster provision as a binary file."}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/{cluster_name}/delete":{"post":{"tags":["Orchestration"],"summary":"Delete Cluster","description":"Permanently delete an existing Cluster and its Nodes. This will also delete Workloads, Bridges and Services residing on the Cluster. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.cluster.delete`\n","operationId":"deleteOrchestrationClusters","parameters":[{"name":"cluster_name","in":"path","description":"Cluster key `name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Cluster deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/{cluster_name}/edge-apps/version/apply":{"get":{"tags":["Orchestration"],"summary":"Apply Cluster Upgrade","description":"Initiates available cluster upgrades; requires cluster to be online and ready.\n\n**Permission Required:** `kelvin.permission.cluster.update`\n","operationId":"applyOrchestrationClustersEdgeAppsVersion","parameters":[{"name":"cluster_name","in":"path","description":"Cluster key `name` to initiate upgrades. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Upgrade apply trigger sent to the cluster","content":{"application/json":{}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"406":{"$ref":"#/components/responses/error.NotAcceptable"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/{cluster_name}/edge-apps/version/force-update":{"post":{"tags":["Orchestration"],"summary":"Force Update Cluster Edge App Version","description":"Force available updates to Cluster even if update setting is disabled. Optionally keep a force update action on standby if the Cluster is offline. This ensures the update is applied once the Cluster returns online.\n\n**Permission Required:** `kelvin.permission.cluster.update`\n","operationId":"updateOrchestrationClustersEdgeAppsVersionForce","parameters":[{"name":"cluster_name","in":"path","description":"Cluster key `name` to initiate upgrades. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}},{"name":"persist","in":"query","description":"Optional setting to wait if the Cluster is currently unreachable and force the update when the Cluster is next online.","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Cluster Edge app version forced update succeeded.","content":{"application/json":{}}},"202":{"description":"Forced Update initiation accepted by the server. Will send remote request to the Cluster when it next comes online.","content":{"application/json":{}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/{cluster_name}/get":{"get":{"tags":["Orchestration"],"summary":"Get Cluster","description":"Retrieve the parameters and status of a Cluster.\n\n**Permission Required:** `kelvin.permission.cluster.read`","operationId":"getOrchestrationClusters","parameters":[{"name":"cluster_name","in":"path","description":"Cluster key `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/{cluster_name}/manifests/get":{"get":{"tags":["Orchestration"],"summary":"Get Cluster Manifests","description":"Get Cluster Manifests\n\n**Permission Required:** `kelvin.permission.cluster.read`","operationId":"getOrchestrationClustersManifests","parameters":[{"name":"cluster_name","in":"path","description":"Cluster key `name` to retrieve provision yaml file. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}},{"name":"version","in":"query","description":"Current version of the key `kelvin_version` in `version` object of the Cluster parameters.","required":true,"schema":{"type":"string","format":"^([0-9]+)\\.([0-9]+)\\.([0-9]+)(?:-([0-9A-Za-z-]+(?:\\.[0-9A-Za-z-]+)*))?(?:\\+[0-9A-Za-z-]+)?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersManifestsGet"}}}},"204":{"description":"Version is up to date","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/{cluster_name}/nodes/list":{"get":{"tags":["Orchestration"],"summary":"List Node","description":"Returns a list of Node objects in a Cluster. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.cluster.read`\n","operationId":"listOrchestrationClustersNode","parameters":[{"name":"cluster_name","in":"path","description":"Cluster key `name` containing the Nodes to list. The filter is on the full name only. Can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}},{"name":"search","in":"query","description":"Search and filter on the list based on the Node `name`. The search is case insensitive and will find partial matches as well.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"status","in":"query","description":"A filter on the list based on the Node key `status`. The filter is on the full name only. All strings in the array are treated as `OR`. Options are `online`, `unreachable` and `not_ready`","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","description":"Sort the results by one of the Cluster parameters. Only one parameter can be selected. Options: `id`, `name`, `status`, `last_seen`, `created` and `updated`.","style":"form","schema":{"type":"array","default":["name"],"items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersNodeListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersNodeListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersNodeListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/{cluster_name}/nodes/{node_name}/get":{"get":{"tags":["Orchestration"],"summary":"Get Node","description":"Retrieve the parameters and status of a specific Node on a Cluster.\n\n**Permission Required:** `kelvin.permission.cluster.read`\n","operationId":"getOrchestrationClustersNodes","parameters":[{"name":"cluster_name","in":"path","description":"Cluster key `name` to look for Node. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}},{"name":"node_name","in":"path","description":"Node key `name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersNodesGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/{cluster_name}/provision/get":{"get":{"tags":["Orchestration"],"summary":"Get Cluster Provision YAML Spec","description":"Get Clusters Provision YAML Specifications\n\n**Permission Required:** `kelvin.permission.cluster.read`\n","operationId":"getOrchestrationClustersProvision","parameters":[{"name":"cluster_name","in":"path","description":"Cluster key `name` to retrieve provision yaml file. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Returns YAML specifications","content":{"application/yaml":{"schema":{"type":"string","description":"Specifications in YAML format"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/{cluster_name}/services/list":{"get":{"tags":["Orchestration"],"summary":"List Service","description":"Returns a list of Service objects in a Cluster. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.cluster.read`\n","operationId":"listOrchestrationClustersService","parameters":[{"name":"cluster_name","in":"path","description":"Cluster key `name` containing the Services to list. The filter is on the full name only. Can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}},{"name":"search","in":"query","description":"Search and filter on the list based on any of the Service keys `name`, `workload_name`, `network_interface`, `address`, and `service_type`. The search is case insensitive and will find partial matches as well. All strings in the array are treated as `OR`.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"workload_name","in":"query","description":"A filter on the list based on the Workload key `name`. The filter is on the full name only. All strings in the array are treated as `OR`.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"service_type","in":"query","description":"A filter on the list based on the Service Type key `service_type`. The filter is on the full name only. All strings in the array are treated as `OR`. Options are `cluster_ip`, `node_port` and `host_port`.","style":"form","schema":{"type":"array","items":{"type":"string","enum":["node_port","host_port","cluster_ip"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","description":"Sort the results by one of the Cluster parameters. Only one parameter can be selected. Options: `name`, `workload_name`, `network_interface`, `service_type`, `address`, `created` and `updated`.","style":"form","schema":{"type":"array","default":["name"],"items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersServiceListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersServiceListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersServiceListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/orchestration/clusters/{cluster_name}/update":{"post":{"tags":["Orchestration"],"summary":"Update Cluster","description":"Update the configuration settings of the Cluster. Only key/values provided in the request body will be updated, all other settings will remain unchanged.\n\n**Permission Required:** `kelvin.permission.cluster.update`\n","operationId":"updateOrchestrationClusters","parameters":[{"name":"cluster_name","in":"path","description":"Cluster key `name` target for sending parameter updates. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Cluster update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.OrchestrationClustersUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.OrchestrationClustersUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/properties/create":{"post":{"tags":["Properties"],"summary":"Create Property","description":"Create a new Property Definition\n\n**Permission Required:** `kelvin.permission.property.create`\n","operationId":"createProperty","requestBody":{"description":"Property Definition create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.PropertyCreate"}}}},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.PropertyCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/properties/{property_name}/get":{"get":{"tags":["Properties"],"summary":"Get Property","description":"Retrieve a Property Definition.\n\n**Permission Required:** `kelvin.permission.property.read`\n","operationId":"getProperty","parameters":[{"name":"property_name","in":"path","description":"Property Definition `name` to fetch. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.PropertyGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/properties/list":{"get":{"tags":["Properties"],"summary":"List Properties","description":"Returns a list of Property Definitions. The Properties can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.property.read`\n","operationId":"listProperties","parameters":[{"name":"search","in":"query","description":"Search and filter on the list based on the keys `title` (Display Name) or `name`. All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"primitive_type","in":"query","description":"A filter on the list based on the key `primitive_type`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","primitive_type","title","created","updated"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.PropertiesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.PropertiesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.PropertiesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/properties/unique/values/get":{"post":{"tags":["Properties"],"summary":"Get Property Unique Values","description":"Fetch the unique values for each property.\n\n**Permission Required:** `kelvin.permission.property.read`\n","operationId":"getPropertyUniqueValues","requestBody":{"description":"Property unique values schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.PropertyUniqueValuesGet"}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.PropertyUniqueValuesGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/properties/{property_name}/delete":{"post":{"tags":["Properties"],"summary":"Delete Property","description":"Permanently delete an existing Property. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.property.delete`\n","operationId":"deleteProperty","parameters":[{"name":"property_name","in":"path","description":"Property `name`, also known as `property_name`, to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Property deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/properties/{property_name}/values/update":{"post":{"tags":["Properties"],"summary":"Update Values","description":"Create or update Property Values.\n\n**Permission Required:** `kelvin.permission.property.create`\n","operationId":"updatePropertyValues","parameters":[{"name":"property_name","in":"path","description":"Property `name` for which the values are to be updated. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Property values update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.PropertyValuesUpdate"}}}},"responses":{"201":{"description":"Values created/updated","content":{"application/json":{}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/properties/{property_name}/values/get":{"get":{"tags":["Properties"],"summary":"Get Property Values","description":"Fetch property values belonging to a particular property definition.\n\n**Permission Required:** `kelvin.permission.property.read`\n","operationId":"getPropertyValues","parameters":[{"name":"property_name","in":"path","description":"Property `name` for which the values are to be fetched. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}},{"name":"resource_type","in":"query","description":"Array of resource types to filter the list of Property values returned.","required":false,"example":["asset","datastream"],"schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.PropertyValuesGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/properties/{property_name}/values/delete":{"post":{"tags":["Properties"],"summary":"Delete Property Values","description":"Permanently delete existing property Values. This cannot be undone once the API request has been submitted.\n**Permission Required:** `kelvin.permission.property.delete`","operationId":"deletePropertyValues","parameters":[{"name":"property_name","in":"path","description":"Property `name` for which the values are to be deleted. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Property Values delete schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.PropertyValuesDelete"}}}},"responses":{"200":{"description":"OK"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/properties/{property_name}/values/range/get":{"post":{"tags":["Properties"],"summary":"Range Get Values","description":"Fetch the value history for a property given a time range.\n\n**Permission Required:** `kelvin.permission.property.read`\n","operationId":"propertyRangeGet","parameters":[{"name":"property_name","in":"path","description":"Property `name` for which the values are to be updated. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["ts"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["ts"]}}}],"requestBody":{"description":"Property values range schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RangeGetPropertyValues"}}}},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.RangeGetPropertyPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.RangeGetPropertyPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.RangeGetPropertyPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/recommendations/clustering/get":{"post":{"tags":["Recommendation"],"summary":"Get Recommendation Clustering","description":"Retrieve the total count of Recommendations matching an array of `resources` and filter options between two dates grouped by the parameter `time_bucket`. Will also return a list of all the Recommendation `id`s counted.\n\n**Permission Required:** `kelvin.permission.recommendation.read`\n","operationId":"getRecommendationClustering","requestBody":{"description":"Recommendation Clustering schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RecommendationClusteringGet"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/responses.RecommendationClustering"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/recommendations/create":{"post":{"tags":["Recommendation"],"summary":"Create Recommendation","description":"Create a new Recommendation. The new recommendation will automatically inherit the state `pending`.\n\n**Permission Required:** `kelvin.permission.recommendation.create`\n","operationId":"createRecommendation","requestBody":{"description":"Recommendation create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RecommendationCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RecommendationCreate"}}}},"400":{"$ref":"#/components/responses/errors_recommendation_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"403":{"$ref":"#/components/responses/responses-error.Forbidden"}}}},"/recommendations/last/get":{"post":{"tags":["Recommendation"],"summary":"Get Last Recommendation","description":"Returns the latest Recommendation for each resource that matches the\nrequest filters.\n\n**Permission Required:** `kelvin.permission.recommendation.read`\n","operationId":"getRecommendationLast","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["id"],"description":"Sort results by one or more fields.","items":{"type":"string","enum":["id","custom_identifier","resource","description","confidence","expiration_date","source","state","type","created","updated","updated_by"]}}}],"requestBody":{"description":"Filters used to return the latest Recommendation per asset.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RecommendationLastGet"},"examples":{"basic":{"$ref":"#/components/examples/requests.RecommendationLastGet.Basic"}}}},"required":true},"responses":{"200":{"description":"Latest Recommendations retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.RecommendationLastGetPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.RecommendationLastGetPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.RecommendationLastGetPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/recommendations/list":{"post":{"tags":["Recommendation"],"summary":"List Recommendations","description":"Returns Recommendations that match the request filters.\n\n**Permission Required:** `kelvin.permission.recommendation.read`\n","operationId":"listRecommendations","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["id"],"description":"Sort results by one or more fields.","items":{"type":"string","enum":["id","custom_identifier","resource","description","confidence","expiration_date","source","state","type","created","updated","updated_by"]}}}],"requestBody":{"description":"Optional filters to list Recommendations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RecommendationsList"},"examples":{"basic":{"$ref":"#/components/examples/requests.RecommendationsList.Basic"}}}},"required":true},"responses":{"200":{"description":"Recommendations retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.RecommendationsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.RecommendationsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.RecommendationsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/recommendations/range/get":{"post":{"tags":["Recommendation"],"summary":"Get Recommendation Range","description":"Returns Recommendations created within a specified time range that match\nthe request filters.\n\n**Permission Required:** `kelvin.permission.recommendation.read`\n","operationId":"getRecommendationRange","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["id"],"description":"Sort results by one or more fields.","items":{"type":"string","enum":["id","custom_identifier","resource","description","confidence","expiration_date","source","state","type","created","updated","updated_by"]}}}],"requestBody":{"description":"Time range and optional filters for Recommendations.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RecommendationRangeGet"},"examples":{"basic":{"$ref":"#/components/examples/requests.RecommendationRangeGet.Basic"}}}},"required":true},"responses":{"200":{"description":"Recommendations retrieved successfully.","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.RecommendationRangeGetPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.RecommendationRangeGetPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.RecommendationRangeGetPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/recommendations/types/create":{"post":{"tags":["Recommendation"],"summary":"Create Recommendation Type","description":"Create a new Recommendation Type.\n\n**Permission Required:** `kelvin.permission.recommendation.create`\n","operationId":"createRecommendationType","requestBody":{"description":"Recommendation type create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RecommendationTypeCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RecommendationTypeCreate"}}}},"400":{"$ref":"#/components/responses/errors_recommendation_type_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/errors_recommendation_type_responses-error.NotFound"}}}},"/recommendations/types/list":{"get":{"tags":["Recommendation"],"summary":"List Recommendation Types","description":"Returns a list of Recommendation Type objects. The list can be optionally filtered and sorted on the server before being returned.\n**Permission Required:** `kelvin.permission.recommendation.read`\n","operationId":"listRecommendationTypes","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators. Options are; `name`, `title`, `created`, `created_by`, `updated` and `updated_by`.","items":{"type":"string"}}},{"name":"search","in":"query","description":"Search and filter on the list based on the key `name` and `title`. The search is case insensitive and will find partial matches as well.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.RecommendationTypesListPaginatedCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.RecommendationTypesListPaginatedLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.RecommendationTypesListPaginatedStream"}}}},"400":{"$ref":"#/components/responses/errors_recommendation_type_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/recommendations/types/{name}/delete":{"post":{"tags":["Recommendation"],"summary":"Delete Recommendation Type","description":"Permanently delete an existing Recommendation Type. An error will be returned if there are any current Recommendations linked to the Recommendation Type. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.recommendation.delete`\n","operationId":"deleteRecommendationType","parameters":[{"name":"name","in":"path","description":"Recommendation Type key `name` to delete. Case sensitive name.","required":true,"schema":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","maxLength":64}}],"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/errors_recommendation_type_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/errors_recommendation_type_responses-error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/recommendations/types/{name}/get":{"get":{"tags":["Recommendation"],"summary":"Get Recommendation Type","description":"Retrieves the parameters of a Recommendation Type.\n\n**Permission Required:** `kelvin.permission.recommendation.read`\n","operationId":"getRecommendationType","parameters":[{"name":"name","in":"path","description":"Recommendation Type key `name` to get. Case sensitive name.","required":true,"schema":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","maxLength":64}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RecommendationTypeGet"}}}},"400":{"$ref":"#/components/responses/errors_recommendation_type_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/errors_recommendation_type_responses-error.NotFound"}}}},"/recommendations/types/{name}/update":{"post":{"tags":["Recommendation"],"summary":"Update Recommendation Type","description":"Updates an existing Recommendation Type with any new values passed through the body parameters. All body parameters are optional and if not provided will remain unchanged. Only the unique identifier `name` can not be changed.\n\n**Permission Required:** `kelvin.permission.recommendation.update`\n","operationId":"updateRecommendationType","parameters":[{"name":"name","in":"path","description":"Recommendation Type key `name` to update. Case sensitive name.","required":true,"schema":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","maxLength":64}}],"requestBody":{"description":"Recommendation type update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RecommendationTypeUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RecommendationTypeUpdate"}}}},"400":{"$ref":"#/components/responses/errors_recommendation_type_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/errors_recommendation_type_responses-error.NotFound"}}}},"/recommendations/{recommendation_id}/accept/update":{"post":{"tags":["Recommendation"],"summary":"Update Accept Recommendation","description":"Update a Recommendation `state` to `accepted`. This will trigger all objects in the `actions` parameter to be initiated. You will need to continue to monitor each action individually (for example a Control Change) to ensure it is completed successfully.\n\n**Permission Required:** `kelvin.permission.recommendation.update`\n","operationId":"updateRecommendationAccept","parameters":[{"name":"recommendation_id","in":"path","required":true,"description":"Recommendation key `id` to accept. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"description":"Recommendation accept schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RecommendationAcceptUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/errors_recommendation_responses-error.NotFound"}}}},"/recommendations/{recommendation_id}/delete":{"post":{"tags":["Recommendation"],"summary":"Delete Recommendation","description":"Permanently delete an existing Recommendation. Recommendations with `states` tagged as `accepted` or `auto_accepted` can not be deleted. This action cannot be undone once the API request has been submitted.\n**Permission Required:** `kelvin.permission.recommendation.delete`","operationId":"deleteRecommendation","parameters":[{"name":"recommendation_id","in":"path","required":true,"description":"Recommendation key `id` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"uuid"}}],"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/errors_recommendation_responses-error.NotFound"}}}},"/recommendations/{recommendation_id}/get":{"get":{"tags":["Recommendation"],"summary":"Get Recommendation","description":"Returns a Recommendation by `recommendation_id`, including its current\nstate and associated actions.\n\n**Permission Required:** `kelvin.permission.recommendation.read`\n","operationId":"getRecommendation","parameters":[{"name":"recommendation_id","in":"path","required":true,"description":"UUID of the Recommendation.","schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"Recommendation retrieved successfully.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RecommendationGet"}}}},"404":{"$ref":"#/components/responses/errors_recommendation_responses-error.NotFound"}}}},"/recommendations/{recommendation_id}/reject/update":{"post":{"tags":["Recommendation"],"summary":"Update Reject Recommendation","description":"Update a Recommendation `state` to `rejected`. All `actions` will only be archived and not implemented.\n\n**Permission Required:** `kelvin.permission.recommendation.update`\n","operationId":"updateRecommendationReject","parameters":[{"name":"recommendation_id","in":"path","required":true,"description":"Recommendation key `id` to reject. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"uuid"}}],"requestBody":{"description":"Recommendation reject schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RecommendationRejectUpdate"}}},"required":true},"responses":{"204":{"description":"No Content"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/errors_recommendation_responses-error.NotFound"}}}},"/secrets/create":{"post":{"tags":["Secret"],"summary":"Create Secret","description":"Create a new Secret.\n\nOnce this is created you can not change or see the value itself from Kelvin API. Retrieval of the value can only be done through an App.\n\n**Permission Required:** `kelvin.permission.secret.create`\n","operationId":"createSecret","requestBody":{"description":"Secret create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.SecretCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.SecretCreate"}}}},"400":{"$ref":"#/components/responses/errors_responses-error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"409":{"$ref":"#/components/responses/errors_responses-error.Conflict"}}}},"/secrets/list":{"get":{"tags":["Secret"],"summary":"List Secrets","description":"Returns a list of Secrets. The actual Secret itself can not be retrieved here and is only available from an App.\n\n**Permission Required:** `kelvin.permission.secret.read`\n","operationId":"listSecrets","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","created","created_by","updated","updated_by"]}}},{"name":"search","in":"query","style":"form","explode":false,"schema":{"type":"array","description":"Search and filter on the list based on the key `name`. All strings in the array are treated as `OR`. The search is case insensitive and will find partial matches as well.","items":{"type":"string"}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.SecretsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.SecretsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.SecretsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/secrets/{secret_name}/update":{"post":{"tags":["Secret"],"summary":"Update Secret","description":"Update an existing Secret with a new 'value'. Any parameters that are not provided will remain unchanged.\n\n**Permission Required:** `kelvin.permission.secret.update`","operationId":"updateSecret","parameters":[{"name":"secret_name","in":"path","description":"Secret key `name` to update. The string can only contain lowercase alphanumeric characters and `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Secret update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.SecretUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.SecretUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/errors_responses-error.NotFound"}}}},"/secrets/{secret_name}/delete":{"post":{"tags":["Secret"],"summary":"Delete Secret","description":"Permanently delete a Secret. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.secret.delete`","operationId":"deleteSecret","parameters":[{"name":"secret_name","in":"path","description":"Secret key `name` to delete. The string can only contain lowercase alphanumeric characters and `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Secret deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/errors_responses-error.NotFound"}}}},"/threads/create":{"post":{"tags":["Thread"],"summary":"Create Thread","description":"Create Thread\n\n**Permission Required:** `kelvin.permission.threads.create`\n","operationId":"createThread","requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/requests.ThreadCreate"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ThreadCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/threads/list":{"get":{"tags":["Thread"],"summary":"List Threads","description":"List Threads\n\n**Pagination Sortable Columns:** `thread.id`\n\n**Permission Required:** `kelvin.permission.threads.read`\n","operationId":"listThreads","parameters":[{"name":"type","in":"query","description":"Filter threads by type","schema":{"type":"string"}},{"name":"related_to","in":"query","description":"Filter threads by related_to","schema":{"type":"string"}},{"name":"user_id","in":"query","description":"Filter threads by user_id","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/responses.ThreadsList"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/threads/{thread_id}/delete":{"post":{"tags":["Thread"],"summary":"Delete Thread","description":"Delete Thread\n\n**Permission Required:** `kelvin.permission.threads.delete`\n","operationId":"deleteThread","parameters":[{"name":"thread_id","in":"path","description":"Thread ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Thread deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"403":{"$ref":"#/components/responses/error.Forbidden"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/threads/{thread_id}/follow/update":{"post":{"tags":["Thread"],"summary":"Update Thread Follow","description":"Update Thread Follow\n\n**Permission Required:** `kelvin.permission.threads.read`\n","operationId":"updateThreadFollow","parameters":[{"name":"thread_id","in":"path","description":"Thread ID","required":true,"schema":{"type":"string"}},{"name":"follow","in":"query","description":"Set user follow value to true or false","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ThreadFollowUpdate"}}}},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/threads/{thread_id}/get":{"get":{"tags":["Thread"],"summary":"Get Thread","description":"Get Thread\n\n**Permission Required:** `kelvin.permission.threads.read`\n","operationId":"getThread","parameters":[{"name":"thread_id","in":"path","description":"Thread ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ThreadGet"}}}},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/threads/{thread_id}/replies/create":{"post":{"tags":["Thread"],"summary":"Create Thread Reply","description":"Create Thread Reply\n\n**Permission Required:** `kelvin.permission.threads.create`\n","operationId":"createThreadReply","parameters":[{"name":"thread_id","in":"path","description":"Thread ID","required":true,"schema":{"type":"string"}},{"name":"reply_id","in":"query","description":"Reply ID","schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/requests.ThreadReplyCreate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ThreadReplyCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/threads/{thread_id}/replies/{reply_id}/delete":{"post":{"tags":["Thread"],"summary":"Delete Thread Reply","description":"Delete Thread Reply\n\n**Permission Required:** `kelvin.permission.threads.delete`","operationId":"deleteThreadReply","parameters":[{"name":"thread_id","in":"path","description":"Thread ID","required":true,"schema":{"type":"string"}},{"name":"reply_id","in":"path","description":"Reply ID","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/threads/{thread_id}/replies/{reply_id}/update":{"post":{"tags":["Thread"],"summary":"Update Thread Reply","description":"Update Thread Reply\n\n**Permission Required:** `kelvin.permission.threads.update`\n","operationId":"updateThreadReply","parameters":[{"name":"thread_id","in":"path","description":"Thread ID","required":true,"schema":{"type":"string"}},{"name":"reply_id","in":"path","description":"Reply ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/requests.ThreadReplyUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ThreadReplyUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/threads/{thread_id}/seen/update":{"post":{"tags":["Thread"],"summary":"Update Thread Seen","description":"Update Thread Seen\n\n**Permission Required:** `kelvin.permission.threads.read`\n","operationId":"updateThreadSeen","parameters":[{"name":"thread_id","in":"path","description":"Thread ID","required":true,"schema":{"type":"string"}},{"name":"seen","in":"query","description":"Set user seen value to true or false","schema":{"type":"boolean"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ThreadSeenUpdate"}}}},"404":{"$ref":"#/components/responses/error.NotFound"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/threads/{thread_id}/update":{"post":{"tags":["Thread"],"summary":"Update Thread","description":"Update Thread\n\n**Permission Required:** `kelvin.permission.threads.update`\n","operationId":"updateThread","parameters":[{"name":"thread_id","in":"path","description":"Thread ID","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/requests.ThreadUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ThreadUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/timeseries/create":{"post":{"tags":["Timeseries"],"summary":"Create Time Series Data","description":"Create Time Series Data individually or in bulk for one or more Asset / Data Stream resources.\n\n<span style=\"color: #ff0000;font-weight: bold;\">WARNING</span> : If a value already\nexists at the defined time, then it will be overwritten with the new payload value.\nThe old value will be lost and is not recoverable !\n\n**Permission Required:** `kelvin.permission.storage.create`\n","operationId":"createTimeseries","parameters":[{"name":"publish","in":"query","style":"form","schema":{"type":"boolean","default":true,"description":"If false, data will only be stored in the time series database. If true, it will also be published to the Kelvin platform as real-time data and reach apps subscribing to it."}}],"requestBody":{"description":"Time series create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.TimeseriesCreate"}}},"required":true},"responses":{"201":{"description":"Success","content":{"application/json":{}}},"207":{"$ref":"#/components/responses/error.Multi"},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/timeseries/last/get":{"post":{"tags":["Timeseries"],"summary":"Get Last Timeseries Data","description":"Returns the latest stored value for each selector in the request.\nFor advanced field projection behavior, see the `fields` property\ndescription.\nThis endpoint is not paginated.\n\n**Permission Required:** `kelvin.permission.storage.read`\n","operationId":"getTimeseriesLast","requestBody":{"description":"Selectors used to fetch the latest available value per resource.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.TimeseriesLastGet"},"examples":{"all-cases":{"$ref":"#/components/examples/requests.TimeseriesLastGet.AllCases"}}}},"required":true},"responses":{"200":{"description":"Latest values retrieved successfully.","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/responses.TimeseriesLastGet"}},"examples":{"all-cases":{"$ref":"#/components/examples/responses.TimeseriesLastGet.AllCases"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/timeseries/list":{"post":{"tags":["Timeseries"],"summary":"List Time Series Data","description":"Returns a list of Time Series objects and its latest value. The list returned can be optionally restricted to one or more resources and/or sources.\n\n**Permission Required:** `kelvin.permission.storage.read`\n","operationId":"listTimeseries","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["resource"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["resource","data_type","source","last_timestamp","created","updated"]}}}],"requestBody":{"description":"Time series list schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.TimeseriesList"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.TimeseriesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.TimeseriesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.TimeseriesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/timeseries/range/download":{"post":{"tags":["Timeseries"],"summary":"Download Range Timeseries Data","description":"Returns a **CSV file** with Time Series data within the specified time range one or more resources (Asset /Data Stream pairs). Optional to preprocess and aggregate the data on the server using `agg` and `time_bucket` before downloading. \n\n**Permission Required:** `kelvin.permission.storage.read`'\n","operationId":"downloadTimeseriesRange","requestBody":{"description":"Timeseries get range schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.TimeseriesRangeDownload"}}},"required":true},"responses":{"200":{"description":"CSV file","content":{"text/csv":{}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/timeseries/range/get":{"post":{"tags":["Timeseries"],"summary":"Get Timeseries Range Data","description":"Streams timeseries points within the requested time range for one or more\nresources.\nFor field projection behavior, see the `fields` property description.\nWhen aggregation is enabled, `fill` controls empty aggregation buckets.\n\n**Permission Required:** `kelvin.permission.storage.read`\n","operationId":"getTimeseriesRange","requestBody":{"description":"Time range, selectors, and optional aggregation settings.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.TimeseriesRangeGet"},"examples":{"raw-basic":{"$ref":"#/components/examples/requests.TimeseriesRangeGet.RawBasic"},"aggregated-mean-1h":{"$ref":"#/components/examples/requests.TimeseriesRangeGet.AggregatedMean1h"},"aggregated-projected-max-15m":{"$ref":"#/components/examples/requests.TimeseriesRangeGet.AggregatedProjectedMax15m"}}}},"required":true},"responses":{"200":{"description":"Stream of timeseries points.","content":{"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.TimeseriesRangeGet"},"examples":{"raw-basic":{"$ref":"#/components/examples/responses.TimeseriesRangeGet.RawBasic"},"aggregated-mean-1h":{"$ref":"#/components/examples/responses.TimeseriesRangeGet.AggregatedMean1h"},"aggregated-projected-max-15m":{"$ref":"#/components/examples/responses.TimeseriesRangeGet.AggregatedProjectedMax15m"}}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"500":{"$ref":"#/components/responses/error.InternalServerError"}}}},"/users/list":{"get":{"tags":["User"],"summary":"List Users","description":"Returns a list of Users and its parameters. The list can be optionally filtered and sorted on the server before being returned.\n**Permission Required:** `kelvin.permission.users.read`","operationId":"listUsers","parameters":[{"name":"username","in":"query","description":"A filter on the list based on the key `username`. The filter is on the full name only. All values in array will be filtered as `OR`. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"email","in":"query","description":"A filter on the list based on the key `email`. The search is case insensitive and will find partial matches as well. All values in array will be filtered as `OR`.","style":"form","schema":{"type":"array","items":{"type":"string","format":"email"}}},{"name":"name","in":"query","description":"A filter on the list based on the User's `first_name` and `last_name` separated by a space. The filter is on exact matches only and is case sensitive. All values in array will be filtered as `OR`.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"search","in":"query","style":"form","description":"Search Users by key `first_name`, `last_name` or `email`. All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","schema":{"type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["id"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["id","username","first_name","last_name","email","created"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.UsersListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.UsersListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.UsersListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/users/me":{"get":{"tags":["User"],"summary":"Get Current User","description":"Get Current User\n\n**Permission Required:** `n/a`\n","operationId":"getUserMe","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.UserMeGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/users/settings/list":{"get":{"tags":["User"],"summary":"List User Settings","description":"Returns a list of User Settings and its parameters. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.users.read`\n","operationId":"listUserSettings","parameters":[{"name":"names","in":"query","description":"Filter User Setting list based on the key `setting_name`.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"search","in":"query","description":"Search User Setting by key `setting_name`. All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["setting_name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["setting_name","created","updated"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.UserSettingsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.UserSettingsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.UserSettingsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/users/settings/{setting_name}/delete":{"post":{"tags":["User"],"summary":"Delete User Setting","description":"Permanently delete an existing User Setting. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.users.delete`\n","operationId":"deleteUserSettings","parameters":[{"name":"setting_name","in":"path","required":true,"description":"The User Setting key `setting_name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"User Setting deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/users/settings/{setting_name}/get":{"get":{"tags":["User"],"summary":"Get User Setting","description":"Retrieve the parameters of a User Setting.\n\n**Permission Required:** `kelvin.permission.users.read`\n","operationId":"getUserSettings","parameters":[{"name":"setting_name","in":"path","required":true,"description":"The User Setting key `setting_name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.UserSettingsGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/users/settings/{setting_name}/update":{"post":{"tags":["User"],"summary":"Update User Setting","description":"Updates an existing User Setting  `payload` with any new values.\n\n**Permission Required:** `kelvin.permission.users.update`\n","operationId":"updateUserSettings","parameters":[{"name":"setting_name","in":"path","required":true,"description":"The User Setting key `setting_name`. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"User update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.UserSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.UserSettingsUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/users/{user_id}/get":{"get":{"tags":["User"],"summary":"Get User","description":"Retrieve the parameters of a User.\n\n**Permission Required:** `kelvin.permission.users.read`\n","operationId":"getUser","parameters":[{"name":"user_id","in":"path","description":"The generated UUID for the User to get.","required":true,"schema":{"type":"string","format":"uuid"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.UserGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/users/shared/settings/{setting_name}/update":{"post":{"tags":["User"],"summary":"Update Shared Setting","description":"Updates an existing Shared Setting  `payload` with any new values.\n\n**Permission Required:** `kelvin.permission.users.update`\n","operationId":"updateSharedSettings","parameters":[{"name":"setting_name","in":"path","required":true,"description":"The Shared Setting key `setting_name`. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","maxLength":64}}],"requestBody":{"description":"Shared update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.SharedSettingsUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.SharedSettingsUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/users/shared/settings/{setting_name}/get":{"get":{"tags":["User"],"summary":"Get Shared Setting","description":"Retrieve the parameters of a Shared Setting.\n\n**Permission Required:** `kelvin.permission.users.read`\n","operationId":"getSharedSettings","parameters":[{"name":"setting_name","in":"path","required":true,"description":"The Shared Setting key `setting_name` to get. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","maxLength":64}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.SharedSettingsGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/users/shared/settings/{setting_name}/delete":{"post":{"tags":["User"],"summary":"Delete Shared Setting","description":"Permanently delete an existing Shared Setting. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.users.delete`\n","operationId":"deleteSharedSettings","parameters":[{"name":"setting_name","in":"path","required":true,"description":"The Shared Setting key `setting_name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","maxLength":64}}],"responses":{"200":{"description":"Shared Setting deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/users/shared/settings/list":{"get":{"tags":["User"],"summary":"List Shared Settings","description":"Returns a list of Shared Settings and its parameters. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.users.read`\n","operationId":"listSharedSettings","parameters":[{"name":"names","in":"query","description":"Filter Shared Setting list based on the key `setting_name`.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"search","in":"query","description":"Search Shared Setting by key `setting_name`. All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","style":"form","explode":false,"schema":{"type":"array","items":{"type":"string"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["setting_name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["setting_name","created","created_by","updated","updated_by"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.SharedSettingsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.SharedSettingsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.SharedSettingsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/authorization/groups/create":{"post":{"tags":["User Authorization"],"summary":"Create a group","description":"Creates a group\n\n**Permission Required:** `kelvin.permission.authorization.create`\n","operationId":"createGroup","requestBody":{"description":"Create group schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.GroupCreate"}}},"required":true},"responses":{"201":{"description":"Group created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.GroupCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/authorization/groups/list":{"get":{"tags":["User Authorization"],"summary":"List Groups","description":"Returns a list of Groups and its parameters. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.authorization.read`\n","operationId":"listGroups","parameters":[{"name":"search","in":"query","style":"form","description":"Search groups by key `name` or `title`. All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","schema":{"type":"array","items":{"type":"string"}}},{"name":"names","in":"query","description":"Filter Group list based on the key `name`.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"role_names","in":"query","description":"Filter Group list based on the key `role_name`.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","description","created","updated"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.GroupsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.GroupsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.GroupsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/authorization/groups/{group_name}/get":{"get":{"tags":["User Authorization"],"summary":"Get a Group","description":"Retrieve a Group.\n\n**Permission Required:** `kelvin.permission.authorization.read`\n","operationId":"getGroup","parameters":[{"name":"group_name","in":"path","required":true,"description":"Fill the group name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.GroupGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/authorization/groups/{group_name}/update":{"post":{"tags":["User Authorization"],"summary":"Update a Group","description":"Update a group.\n\n**Permission Required:** `kelvin.permission.authorization.update`\n","operationId":"updateGroup","parameters":[{"name":"group_name","in":"path","required":true,"description":"Fill the group name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Update group schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.GroupUpdate"}}},"required":true},"responses":{"200":{"description":"Group updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.GroupUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/authorization/groups/{group_name}/delete":{"post":{"tags":["User Authorization"],"summary":"Delete a group","description":"Delete a group.\n\n**Permission Required:** `kelvin.permission.authorization.delete`\n","operationId":"deleteGroup","parameters":[{"name":"group_name","in":"path","required":true,"description":"Fill the group name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Group deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/authorization/roles/create":{"post":{"tags":["User Authorization"],"summary":"Create a role","description":"Creates a role\n\n**Permission Required:** `kelvin.permission.authorization.create`\n","operationId":"createRole","requestBody":{"description":"Create role schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RoleCreate"}}},"required":true},"responses":{"201":{"description":"Role created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RoleCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/authorization/roles/list":{"get":{"tags":["User Authorization"],"summary":"List Roles","description":"Returns a list of Roles. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.authorization.read`\n","operationId":"listRoles","parameters":[{"name":"search","in":"query","style":"form","description":"Search roles by key `name` or `title`. All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","schema":{"type":"array","items":{"type":"string"}}},{"name":"names","in":"query","description":"Filter Role list based on the key `name`.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"group_names","in":"query","description":"Filter Role list based on the key `group_name`.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","description","created","updated"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.RolesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.RolesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.RolesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/authorization/roles/{role_name}/get":{"get":{"tags":["User Authorization"],"summary":"Get a Role","description":"Retrieve a Role.\n\n**Permission Required:** `kelvin.permission.authorization.read`\n","operationId":"getRole","parameters":[{"name":"role_name","in":"path","required":true,"description":"Fill the role name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RoleGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/authorization/roles/{role_name}/update":{"post":{"tags":["User Authorization"],"summary":"Update a Role","description":"Update a role.\n\n**Permission Required:** `kelvin.permission.authorization.update`\n","operationId":"updateRole","parameters":[{"name":"role_name","in":"path","required":true,"description":"Fill the role name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Update role schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RoleUpdate"}}},"required":true},"responses":{"200":{"description":"Role updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RoleUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/authorization/roles/{role_name}/delete":{"post":{"tags":["User Authorization"],"summary":"Delete a Role","description":"Delete a role.\n\n**Permission Required:** `kelvin.permission.authorization.delete`\n","operationId":"deleteRole","parameters":[{"name":"role_name","in":"path","required":true,"description":"Fill the role name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Role deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/authorization/roles/{role_name}/policies/create":{"post":{"tags":["User Authorization"],"summary":"Create a role policy","description":"Creates a role policy\n\n**Permission Required:** `kelvin.permission.authorization.create`\n","operationId":"createRolePolicy","parameters":[{"name":"role_name","in":"path","required":true,"description":"Fill the role name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Create role policy schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RolePolicyCreate"}}},"required":true},"responses":{"201":{"description":"Role policy created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RolePolicyCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"},"409":{"$ref":"#/components/responses/responses-error.Conflict"}}}},"/authorization/roles/{role_name}/policies/list":{"get":{"tags":["User Authorization"],"summary":"List role policies","description":"Returns a list of policies for a role. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.authorization.read`\n","operationId":"listRolePolicies","parameters":[{"name":"role_name","in":"path","required":true,"description":"Fill the role name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}},{"name":"search","in":"query","style":"form","description":"Search policies by key `name` or `title`. All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","schema":{"type":"array","items":{"type":"string"}}},{"name":"names","in":"query","description":"Filter policies list based on the key `name`.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"resource_types","in":"query","description":"Filter policies list based on the key `resource_types`.","style":"form","schema":{"type":"array","items":{"$ref":"#/components/schemas/enum.ResourceType","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","description","resource_type","created","updated"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.RolePoliciesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.RolePoliciesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.RolePoliciesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"}}}},"/authorization/roles/{role_name}/policies/{policy_name}/get":{"get":{"tags":["User Authorization"],"summary":"Get a Role Policy","description":"Retrieve a Role Policy.\n\n**Permission Required:** `kelvin.permission.authorization.read`\n","operationId":"getRolePolicy","parameters":[{"name":"role_name","in":"path","required":true,"description":"Fill the role name related to the policy. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}},{"name":"policy_name","in":"path","required":true,"description":"Fill the policy name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RolePolicyGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/authorization/roles/{role_name}/policies/{policy_name}/update":{"post":{"tags":["User Authorization"],"summary":"Update a Role Policy","description":"Update a role policy.\n\n**Permission Required:** `kelvin.permission.authorization.update`\n","operationId":"updateRolePolicy","parameters":[{"name":"role_name","in":"path","required":true,"description":"Fill the role name related to the policy. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}},{"name":"policy_name","in":"path","required":true,"description":"Fill the policy name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Update role policy schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.RolePolicyUpdate"}}},"required":true},"responses":{"200":{"description":"Role policy updated","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.RolePolicyUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/authorization/roles/{role_name}/policies/{policy_name}/delete":{"post":{"tags":["User Authorization"],"summary":"Delete role policy","description":"Delete a role policy.\n\n**Permission Required:** `kelvin.permission.authorization.delete`\n","operationId":"deleteRolePolicy","parameters":[{"name":"role_name","in":"path","required":true,"description":"Fill the role name related to the policy. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}},{"name":"policy_name","in":"path","required":true,"description":"Fill the policy name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Role policy deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequest"},"401":{"$ref":"#/components/responses/error.Unauthorized"},"404":{"$ref":"#/components/responses/error.NotFound"}}}},"/appregistry/create":{"post":{"deprecated":true,"tags":["(Deprecated) App Registry"],"summary":"Create App","description":"Create a new App or App Version in the App Registry. A new version will be automatically appended if the App already exists.\n\nNote : The Kelvin API request is not the recommended way to create an App and will not be documented. Check Kelvin's documentation on the best methods to create Apps.\n\nBecause the Applications have migrated to new types, this endpoint converts\nthe legacy type to the current one as shown in the following table: \n\n| Legacy Type | Current Type |\n|-------------|--------------|\n| `kelvin`    | `app`        |\n| `bridge`    | `importer    |\n| `docker`    | `docker`     |\n\n**Permission Required:** `kelvin.permission.app_registry.create`\n","operationId":"createLegacyApp","requestBody":{"description":"App create schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.LegacyAppCreate"}}},"required":true},"responses":{"201":{"description":"The versions field is omitted in this response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.LegacyAppCreate"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"}}}},"/appregistry/list":{"get":{"deprecated":true,"tags":["(Deprecated) App Registry"],"summary":"List App Registry Apps","description":"Returns a list of Apps in the App Registry and its parameters. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.app_registry.read`\n","operationId":"listLegacyAppRegistryApps","parameters":[{"name":"type","in":"query","description":"A filter on the list based on the key `type`. This type is the **legacy type**, mapped from the current App Types.","style":"form","schema":{"type":"array","items":{"$ref":"#/components/schemas/enum.LegacyAppType"}}},{"name":"search","in":"query","style":"form","schema":{"type":"array","description":"Search and filter on the list based on the key `name` and `title`. All strings in the array are treated as `OR`. The search is case insensitive and will find partial matches as well.","items":{"type":"string","minLength":1,"maxLength":64}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","type","latest_version","created","updated"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.LegacyAppRegistryAppsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.LegacyAppRegistryAppsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.LegacyAppRegistryAppsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"}}}},"/appregistry/{app_name}/delete":{"post":{"deprecated":true,"tags":["(Deprecated) App Registry"],"summary":"Delete App","description":"Permanently delete all versions of an App in the App Registry. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.app_registry.delete`\n","operationId":"deleteLegacyApp","parameters":[{"name":"app_name","in":"path","description":"App Registry App key `name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}}],"responses":{"200":{"description":"App deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"}}}},"/appregistry/{app_name}/get":{"get":{"deprecated":true,"tags":["(Deprecated) App Registry"],"summary":"Get App Registry App","description":"Retrieve the parameters of an App in the App Registry.\n\nBecause the Applications have migrated to new types, this endpoint converts\nthe current type to the legacy one as shown in the following table: \n\n| Current Type | Legacy Type |\n|--------------|-------------|\n| `app`        | `kelvin`    |\n| `importer`   | `bridge`    |\n| `exporter`   | `bridge`    |\n| `docker`     | `docker`    |\n\n**Permission Required:** `kelvin.permission.app_registry.read`\n","operationId":"getLegacyAppRegistryApp","parameters":[{"name":"app_name","in":"path","description":"App Registry App key `name` to retrieve. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.LegacyAppRegistryAppGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"}}}},"/appregistry/{app_name}/update":{"post":{"deprecated":true,"tags":["(Deprecated) App Registry"],"summary":"Update App","description":"Update an existing App with a new 'title' and/or 'description'. Any parameters that are not provided will remain unchanged.\n\n**Permission Required:** `kelvin.permission.app_registry.update`\n","operationId":"updateLegacyApp","parameters":[{"name":"app_name","in":"path","description":"App Registry App key `name` to retrieve. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}}],"requestBody":{"description":"App update schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.LegacyAppUpdate"}}},"required":true},"responses":{"200":{"description":"The versions field is omitted in this response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.LegacyAppUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"}}}},"/appregistry/{app_name}/versions/{app_version}/delete":{"post":{"deprecated":true,"tags":["(Deprecated) App Registry"],"summary":"Delete App Version","description":"Permanently one version of an App in the App Registry. All other versions of an App will remain unaffected. This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.app_registry.delete`\n","operationId":"deleteLegacyAppVersion","parameters":[{"name":"app_name","in":"path","description":"App Registry App key `name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},{"name":"app_version","in":"path","description":"Version number of the App in the App Registry to delete.","required":true,"schema":{"type":"string","format":"Major.Minor.Patch"}}],"responses":{"200":{"description":"App Version deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"}}}},"/appregistry/{app_name}/versions/{app_version}/get":{"get":{"deprecated":true,"tags":["(Deprecated) App Registry"],"summary":"Get App Version","description":"Retrieve the parameters of a specific version of an App in the App Registry.\n\nBecause the Applications have migrated to new types, this endpoint converts\nthe current type to the legacy one as shown in the following table: \n\n| Current Type | Legacy Type |\n|--------------|-------------|\n| `app`        | `kelvin`    |\n| `importer`   | `bridge`    |\n| `exporter`   | `bridge`    |\n| `docker`     | `docker`    |\n\n**Permission Required:** `kelvin.permission.app_registry.read`\n","operationId":"getLegacyAppVersion","parameters":[{"name":"app_name","in":"path","description":"App Registry App key `name` to retrieve. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},{"name":"app_version","in":"path","description":"Version number of the App in the App Registry to retrieve.","required":true,"schema":{"type":"string","format":"Major.Minor.Patch"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.LegacyAppVersionGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"}}}},"/bridges/deploy":{"post":{"deprecated":true,"tags":["(Deprecated) Bridge"],"summary":"Deploy Bridge","description":"Deploy a Bridge (Connection) from the App Registry as a Workload to a Cluster/Node.\n\n**Permission Required:** `kelvin.permission.bridge.create`\n","operationId":"deployBridge","requestBody":{"description":"Bridge (Connection) deploy schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.BridgeDeploy"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.BridgeDeploy"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"409":{"$ref":"#/components/responses/error.ConflictLegacy2"},"424":{"$ref":"#/components/responses/error.FailedDependencyLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"}}}},"/bridges/list":{"get":{"deprecated":true,"tags":["(Deprecated) Bridge"],"summary":"List Bridges","description":"Returns a list of Bridges (also known as Connections) and its parameters. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.bridge.read`\n","operationId":"listBridges","parameters":[{"name":"names","in":"query","style":"form","description":"A filter on the list based on the key `name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"array","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}},{"name":"search","in":"query","style":"form","description":"Search and filter on the list based on the keys `name`, `title` (Display Name), `cluster_name`, `node_name` and `workload_name`. All strings in the array are treated as `OR`. The search is case insensitive and will find partial matches as well.","schema":{"type":"array","items":{"type":"string"}}},{"name":"cluster_name","in":"query","style":"form","description":"A filter on the list based on the key `cluster_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters. If set, it will override acp_name","schema":{"type":"array","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}},{"name":"workload_name","in":"query","style":"form","description":"A filter on the list based on the key `workload_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"array","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}},{"name":"status_state","in":"query","style":"form","description":"A filter on the list based on the key `state` in the `status` object. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"array","items":{"$ref":"#/components/schemas/enum.WorkloadStatus"}}},{"name":"app_name","in":"query","style":"form","description":"Unique identifier `name` of the App. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"array","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}},{"name":"app_version","in":"query","style":"form","description":"App version","schema":{"type":"array","items":{"type":"string","format":"Major.Minor.Patch"}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","app_name","app_version","cluster_name","node_name","status_last_seen","status_state","created_at","created_by","updated_at","updated_by"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.BridgesListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.BridgesListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.BridgesListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"}}}},"/bridges/{bridge_name}/delete":{"post":{"deprecated":true,"tags":["(Deprecated) Bridge"],"summary":"Delete Bridge","description":"Permanently delete an existing Bridge (Connection). You will no longer receive Asset / Data Stream data from the assets associated with the Bridge (Connection). This cannot be undone once the API request has been submitted.\n\n**Permission Required:** `kelvin.permission.bridge.delete`\n","operationId":"deleteBridge","parameters":[{"name":"bridge_name","in":"path","description":"Unique identifier `name` of the Bridge (Connection).","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Bridge deleted successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{}}}}},"/bridges/{bridge_name}/get":{"get":{"deprecated":true,"tags":["(Deprecated) Bridge"],"summary":"Get Bridge","description":"Retrieve the parameters of a Bridge (Connection).\n\n**Permission Required:** `kelvin.permission.bridge.read`\n","operationId":"getBridge","parameters":[{"name":"bridge_name","in":"path","description":"Unique identifier `name` of the Bridge (Connection).","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.BridgeGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"}}}},"/bridges/{bridge_name}/start":{"get":{"deprecated":true,"tags":["(Deprecated) Bridge"],"summary":"Start Bridge","description":"Start running the Bridge (Connection).\n\n**Permission Required:** `kelvin.permission.bridge.update`\n","operationId":"startBridge","parameters":[{"name":"bridge_name","in":"path","description":"Unique identifier `name` of the Bridge (Connection).","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Bridge started successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{}}}}},"/bridges/{bridge_name}/stop":{"get":{"deprecated":true,"tags":["(Deprecated) Bridge"],"summary":"Stop Bridge","description":"Stop running the Bridge (Connection).\n**Permission Required:** `kelvin.permission.bridge.update`","operationId":"stopBridge","parameters":[{"name":"bridge_name","in":"path","description":"Unique identifier `name` of the Bridge (Connection).","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Bridge stopped successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{}}}}},"/parameters/app/{app_name}/versions/{version}/update":{"post":{"deprecated":true,"tags":["(Deprecated) Parameters"],"summary":"App Version Parameters - Update","description":"Bulk update Parameters for multiple resources of a given App Version.\nParameters belonging to the App Version but not specified in the payload\nwill **not** be changed. Setting a value to `null` will cause the parameter\nto be unset.  Additionally, it's also possible to set a comment for each\nparameter change.\n\nThe source of the change will, by default, be the user making the API\nrequest. If the user making the request is a Service Account, it can,\noptionally, set its own source KRN.\n","operationId":"updateParametersAppVersion","parameters":[{"name":"app_name","in":"path","description":"Application key `name` to associate with Assets (resources) to perform the required actions.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}},{"name":"version","in":"path","description":"Version of Application.","required":true,"schema":{"type":"string","format":"Major.Minor.Patch"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ParametersAppVersionUpdate"},"examples":{"simple":{"$ref":"#/components/examples/requests.ParametersAppVersionUpdate.SingleRes"},"multi":{"$ref":"#/components/examples/requests.ParametersAppVersionUpdate.MultiRes"},"single":{"$ref":"#/components/examples/requests.ParametersAppVersionUpdate.SingleParam"},"source":{"$ref":"#/components/examples/requests.ParametersAppVersionUpdate.Source"}}}}},"responses":{"200":{"description":"Parameters updated successfully"},"400":{"$ref":"#/components/responses/error.BadRequestLegacy"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy"}}}},"/parameters/definitions/list":{"post":{"deprecated":true,"tags":["(Deprecated) Parameters"],"summary":"List Parameter Definitions","description":"Returns a list of Parameters and its definition in each App. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.parameter.read`\n","operationId":"listParametersDefinitions","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","description":"Sort the results by one or more enumerators.","style":"form","schema":{"type":"array","default":["name"],"items":{"type":"string","enum":["name","app_name","primitive_type","last_title","created","updated"]}}}],"requestBody":{"description":"List parameter definitions schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ParametersDefinitionsList"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.ParametersDefinitionsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.ParametersDefinitionsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.ParametersDefinitionsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy"}}}},"/parameters/resources/list":{"post":{"deprecated":true,"tags":["(Deprecated) Parameters"],"summary":"List Resource Parameters","description":"Returns a list of Parameters and all values for each Resource. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.parameter.read`\n","operationId":"listResourceParameters","parameters":[{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","description":"Sort the results by one or more enumerators.","style":"form","schema":{"type":"array","default":["parameter_name"],"items":{"type":"string","enum":["parameter_name","app_name","app_version","resource","source","comment","created","updated","invalidated"]}}}],"requestBody":{"description":"List resource parameters schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ResourceParametersList"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.ResourceParametersListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.ResourceParametersListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.ResourceParametersListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy"}}}},"/parameters/values/get":{"post":{"deprecated":true,"tags":["(Deprecated) Parameters"],"summary":"Get Parameter Values","description":"Returns a list of all unique values for each Parameter. Default values will not be shown. If the App is not specified, then the response will be grouped by App Name.\n\n**Permission Required:** `kelvin.permission.parameter.read`\n","operationId":"getParametersValues","requestBody":{"description":"Get parameter values schema. Optionally filter by app and it's parameters and/or by primitive type.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.ParametersValuesGet"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.ParametersValuesGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy"}}}},"/workloads/deploy":{"post":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"Deploy Workload","description":"Deploy an App from the App Registry as a Workload to a Cluster/Node.\n\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"deployLegacyWorkload","requestBody":{"description":"Workload deploy schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.LegacyWorkloadDeploy"}}},"required":true},"responses":{"201":{"description":"Created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.LegacyWorkloadDeploy"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"409":{"$ref":"#/components/responses/error.ConflictLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{}}}}},"/workloads/list":{"get":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"List Workloads","description":"Returns a list of Workload objects. The list can be optionally filtered and sorted on the server before being returned.\n\n**Permission Required:** `kelvin.permission.workload.read`\n","operationId":"listLegacyWorkloads","parameters":[{"name":"search","in":"query","description":"Search and filter on the list based on the keys `name`, `title` (Display Name), `app_name`, `cluster_name` and `node_name`. All strings in the array are treated as `OR`. The search is case insensitive and will find partial matches as well.","style":"form","schema":{"type":"array","items":{"type":"string"}}},{"name":"app_name","in":"query","description":"A filter on the list based on the key `app_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}},{"name":"app_version","in":"query","description":"A filter on the list based on the key `app_version`. The filter is on the full value only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","style":"form","schema":{"type":"array","items":{"type":"string","format":"Major.Minor.Patch"}}},{"name":"acp_name","in":"query","description":"[`Deprecated`] A filter on the list based on the key `acp_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}},{"name":"cluster_name","in":"query","description":"A filter on the list based on the key `cluster_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters. If set, it will override acp_name","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}},{"name":"node_name","in":"query","description":"A filter on the list based on the key `node_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$"}}},{"name":"workload_name","in":"query","description":"A filter on the list based on the key `name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","style":"form","schema":{"type":"array","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}},{"name":"enabled","in":"query","description":"A filter on the list based on the key `status` (start/stop function in Kelvin UI) of the Workloads.","schema":{"type":"boolean"}},{"name":"asset_name","in":"query","description":"A filter on the list based on Asset `name` associated with the Workload. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","schema":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"}},{"name":"staged","in":"query","description":"A filter on the key staged. Using true will only show staged workloads, false will show all workloads.","schema":{"type":"boolean"}},{"name":"download_statuses","in":"query","schema":{"type":"array","description":"A filter on the list based on the key `download_status`.","items":{"type":"string","enum":["pending","scheduled","processing","downloading","ready","failed"]}}},{"$ref":"#/components/parameters/paginator.paginationType"},{"$ref":"#/components/parameters/paginator.pageSize"},{"$ref":"#/components/parameters/paginator.page"},{"$ref":"#/components/parameters/paginator.next"},{"$ref":"#/components/parameters/paginator.previous"},{"$ref":"#/components/parameters/paginator.direction"},{"$ref":"#/components/parameters/paginator.nulls"},{"name":"sort_by","in":"query","style":"form","schema":{"type":"array","default":["name"],"description":"Sort the results by one or more enumerators.","items":{"type":"string","enum":["name","title","app_name","app_version","cluster_name","node_name","status_last_seen","status_state","created_at","created_by","updated_at","updated_by"]}}}],"responses":{"200":{"description":"OK","content":{"application/json-cursor":{"schema":{"$ref":"#/components/schemas/responses.LegacyWorkloadsListPaginatedResponseCursor"}},"application/x-json-limits":{"schema":{"$ref":"#/components/schemas/responses.LegacyWorkloadsListPaginatedResponseLimits"}},"application/x-json-stream":{"schema":{"$ref":"#/components/schemas/responses.LegacyWorkloadsListPaginatedResponseStream"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"}}}},"/workloads/apply":{"post":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"Apply Workload","description":"Initiate final deploy action for the downloaded Workloads. Only valid for Workloads that were previously deployed with the keys `staged` set to true and `instantly_apply` set to false.\n\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"applyLegacyWorkload","requestBody":{"description":"Workload apply schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.LegacyWorkloadApply"}}},"required":true},"responses":{"200":{"description":"Workloads applied successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"406":{"$ref":"#/components/responses/error.NotAcceptableLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{}}}}},"/workloads/{workload_name}/configurations/get":{"get":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"Get Workload Configuration","description":"Retrieve the configuration of a Workload.\n\n**Permission Required:** `kelvin.permission.workload.read`\n","operationId":"getLegacyWorkloadConfiguration","parameters":[{"name":"workload_name","in":"path","description":"Unique identifier `name` of the Workload.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.LegacyWorkloadConfigurationGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"409":{"$ref":"#/components/responses/error.ConflictLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{}}}}},"/workloads/{workload_name}/configurations/update":{"post":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"Update Workload Configuration","description":"Update the configuration of a Workload.\n\n**Permission Required:** `kelvin.permission.workload.update`\n\n**`WARNING!!`: Sending an empty configuration object will remove all configurations**\n","operationId":"updateLegacyWorkloadConfiguration","parameters":[{"name":"workload_name","in":"path","description":"Unique identifier `name` of the Workload.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"requestBody":{"description":"Workload configuration schema","content":{"application/json":{"schema":{"$ref":"#/components/schemas/requests.LegacyWorkloadConfigurationUpdate"}}},"required":true},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.LegacyWorkloadConfigurationUpdate"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"409":{"$ref":"#/components/responses/error.ConflictLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{}}}}},"/workloads/{workload_name}/download":{"get":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"Download Workload Package File","description":"Download the Workload package file for offline installation on the Edge System. The system automatically generates the file for download if the package is not already available.\n\n**Permission Required:** `kelvin.permission.workload.read`","operationId":"downloadLegacyWorkload","parameters":[{"name":"workload_name","in":"path","description":"Unique identifier `name` of the Workload.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}},{"name":"address","in":"query","description":"If true, the endpoint will return a direct URL to the workload package file.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Returns workload package file to download or a direct URL address. If the package is not available, it will be automatically created before download.\n\n**`Note:`** The URL address is valid for a small period of time. If the download is not started within the time limit, a new URL address needs to be requested.\n","content":{"application/zip":{},"application/json":{"schema":{"$ref":"#/components/schemas/responses.LegacyWorkloadDownload"}}}},"202":{"description":"Workload is waiting for the worker to pick it up, or it's already processing.","content":{}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"409":{"$ref":"#/components/responses/error.ConflictLegacy2"},"412":{"$ref":"#/components/responses/error.PreconditionFailedLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"}}}},"/workloads/{workload_name}/get":{"get":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"Get Workload","description":"Retrieve the parameters of a Workload.\n\n**Permission Required:** `kelvin.permission.workload.read`\n","operationId":"getLegacyWorkload","parameters":[{"name":"workload_name","in":"path","description":"Unique identifier `name` of the Workload.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.LegacyWorkloadGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"}}}},"/workloads/{workload_name}/logs/get":{"get":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"Get Workload Logs","description":"Get Workload Logs\n\n**Permission Required:** `kelvin.permission.workload.read`","operationId":"getLegacyWorkloadLogs","parameters":[{"name":"workload_name","in":"path","description":"Unique identifier `name` of the Workload.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}},{"name":"tail_lines","in":"query","description":"Specify the number of the most recent log lines to retrieve, counting backwards from the latest entry.","schema":{"type":"integer"}},{"name":"since_time","in":"query","example":"2023-12-23T18:22:18.582724Z","description":"UTC time of the starting point for log retrieval, formatted in RFC 3339.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/responses.LegacyWorkloadLogsGet"}}}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"409":{"$ref":"#/components/responses/error.ConflictLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{"application/json":{}}}}}},"/workloads/{workload_name}/start":{"get":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"Start Workload","description":"Start running the Workload.\n\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"startWorkload","parameters":[{"name":"workload_name","in":"path","description":"Unique identifier `name` of the Workload.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Workload started successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"409":{"$ref":"#/components/responses/error.ConflictLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{}}}}},"/workloads/{workload_name}/stop":{"get":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"Stop Workload","description":"Stop running the Workload.\n\n**Permission Required:** `kelvin.permission.workload.update`\n","operationId":"stopWorkload","parameters":[{"name":"workload_name","in":"path","description":"Unique identifier `name` of the Workload.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}}],"responses":{"200":{"description":"Workload stopped successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"409":{"$ref":"#/components/responses/error.ConflictLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{}}}}},"/workloads/{workload_name}/undeploy":{"post":{"deprecated":true,"tags":["(Deprecated) Workload"],"summary":"Undeploy Workload","description":"Undeploy Workload from the Edge System.\n\n**Permission Required:** `kelvin.permission.workload.delete`\n","operationId":"undeployWorkload","parameters":[{"name":"workload_name","in":"path","description":"Unique identifier `name` of the Workload.","required":true,"schema":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"}},{"name":"staged","in":"query","description":"If true, the endpoint only undeploys the staged workload, if any.","required":false,"schema":{"type":"boolean"}}],"responses":{"200":{"description":"Workload undeployed successfully","content":{}},"400":{"$ref":"#/components/responses/error.BadRequestLegacy2"},"401":{"$ref":"#/components/responses/error.UnauthorizedLegacy2"},"404":{"$ref":"#/components/responses/error.NotFoundLegacy2"},"500":{"$ref":"#/components/responses/error.InternalServerErrorLegacy2"},"501":{"description":"The operation is not implemented.","content":{}}}}}},"components":{"securitySchemes":{"HTTP":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"enum.AppType":{"type":"string","enum":["app","importer","exporter","docker","task"],"description":"The type of application.\n\n- `app`: An App that allows mapping inputs and outputs to data\nstreams, sending control changes, recommendations, and data tags.\n- `importer`: Connects to an external system to import data into the\nplatform as well as receive control changes to act on the external\nsystem.\n- `exporter`: Connects to the platform to export data to an external\nsystem.\n- `docker`: An external application that does not connect to the\nplatform's data streams.\n- `task`: An application type used internally by the Tasks feature."},"manifest.AppInfo":{"type":"object","required":["name","title","description","type"],"properties":{"name":{"type":"string","description":"The name of the application. This is the unique identifier for the application."},"title":{"type":"string","description":"Human-readable name of the application."},"description":{"type":"string","description":"Human-readable description of the application."},"category":{"type":"string","description":"The category of the application."},"type":{"$ref":"#/components/schemas/enum.AppType"}}},"enum.AppImageMode":{"type":"string","description":"This option tells the platform how to get the image for the App.\n\nPossible options:\n\n- `auto`: Automatically infers the URI from the App name and version,\n  which matches what the SDK uses.\n- `manual`: Manually define the image address URI. The existence of\n  this image is not verified at App creation time.\n- `undefined`: No image is provided. It can later be updated to `manual`\n  with an image URI. Apps with undefined images can only be deployed in\n  \"disabled\" mode.","enum":["auto","manual","undefined"]},"manifest.AppImage":{"type":"object","description":"Image configuration for App Versions.","required":["mode"],"properties":{"mode":{"$ref":"#/components/schemas/enum.AppImageMode"},"uri":{"type":"string","description":"The URI of the container image. Only relevant in manual image mode,\nwhere it is required.\nUsing the tag `latest` is not allowed.","example":"example.com/my-app:1.0.0"}}},"enum.GatewayMode":{"type":"string","description":"The mode which the gateway is operates on. The default is `socket`, which uses a socket as an interface for the application to connect to the realtime data flow.","enum":["socket","legacy"]},"manifest.DataType":{"type":"string","description":"Primitive data types are: `string`, `number`, `boolean` and `object`. If another name is used, it will be considered an object with that name. It's highly recommended using a custom name when using objects."},"enum.Way":{"type":"string","enum":["output","input-cc","input-cc+output","input","output-cc","input+output-cc"],"description":"The direction and characteristics of the input/output. The `cc` suffix means that in accepts or sends Control Changes on the input or output respectively."},"enum.Storage":{"type":"string","enum":["node-and-cloud","node","none"],"description":"The storage location of the data. `node-and-cloud` means that the data is stored in the node and in the cloud. `node` means that the data is stored only in the node. `none` means that the data is not stored."},"manifest.AppIO":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the input/output used in the Application."},"data_type":{"$ref":"#/components/schemas/manifest.DataType"},"way":{"$ref":"#/components/schemas/enum.Way"},"storage":{"$ref":"#/components/schemas/enum.Storage"},"unit":{"type":"string","description":"The unit of the data. It's recommended to use the [UCUM](http://unitsofmeasure.org/ucum.html) standard for units."}}},"enum.DynamicIOOwnership":{"type":"string","enum":["both","owned","remote"]},"enum.DynamicIOType":{"type":"string","enum":["both","data","control"]},"manifest.DynamicAppIO":{"type":"object","required":["type_name"],"properties":{"type_name":{"type":"string","description":"Dynamic I/O type name."},"data_types":{"type":"array","items":{"$ref":"#/components/schemas/manifest.DataType"},"description":"List of data types that the dynamic I/O type can have. If empty, any data type is allowed."},"ownership":{"$ref":"#/components/schemas/enum.DynamicIOOwnership"},"type":{"$ref":"#/components/schemas/enum.DynamicIOType"}}},"enum.ParameterDataType":{"type":"string","enum":["string","number","boolean"],"description":"The data type of the parameter. It can be `string`, `number`, or `boolean`."},"manifest.Parameter":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"The name of the parameter."},"title":{"type":"string","description":"Human-readable name of the parameter."},"data_type":{"$ref":"#/components/schemas/enum.ParameterDataType"},"default":{"oneOf":[{"type":"string"},{"type":"number"},{"type":"boolean"}]}}},"enum.CAWay":{"type":"string","enum":["input-ca","output-ca"],"description":"The direction of the custom action. If `input-ca`, the app recieves and executes custom actions. If `output-ca`, the app sends custom actions which are then executed by an app with the corresponding `input-ca`."},"manifest.CustomAction":{"type":"object","required":["type"],"properties":{"type":{"type":"string","description":"The type of the custom action."},"way":{"$ref":"#/components/schemas/enum.CAWay"}}},"enum.DQWay":{"type":"string","enum":["output","input"],"description":"The direction of the data quality. If `output`, the app computes and produces the data quality value. If `input`, the app receives the data quality value."},"manifest.CustomDataQuality":{"type":"object","properties":{"name":{"type":"string","description":"The name of the data quality."},"data_type":{"$ref":"#/components/schemas/manifest.DataType"},"datastreams":{"type":"array","items":{"type":"string"}},"way":{"$ref":"#/components/schemas/enum.DQWay"}}},"enum.DTWay":{"type":"string","enum":["output","input"],"description":"The direction of the data tag. If `output`, the app produces data tags. If `input`, the app receives data tags."},"manifest.DataTag":{"type":"object","properties":{"tag_name":{"type":"string","description":"The name of the tag."},"way":{"$ref":"#/components/schemas/enum.DTWay"}}},"manifest.AppVersion":{"allOf":[{"$ref":"#/components/schemas/manifest.AppInfo"},{"type":"object","required":["version"],"properties":{"version":{"type":"string","format":"semver","description":"The version of the application being created."},"image":{"$ref":"#/components/schemas/manifest.AppImage"},"flags":{"type":"object","description":"Flags that can be set to enable specific behaviours on the platform when managing the application.","properties":{"spec_version":{"type":"string","format":"semver","description":"The version of the specification that the application is using."},"legacy_data_types":{"type":"boolean","default":false,"description":"If `true`, the application uses the legacy data types (e.g. `raw.float64`, `raw.int32`,...)."},"legacy_extras":{"type":"object"},"gateway_mode":{"$ref":"#/components/schemas/enum.GatewayMode"},"enable_runtime_update":{"type":"object","properties":{"configuration":{"type":"boolean","default":false},"resource_parameters":{"type":"boolean","default":true},"resource_properties":{"type":"boolean","default":true}}},"deployment":{"type":"object","properties":{"allowed_resources":{"type":"array","items":{"type":"string","format":"krn","x-kelvin-supported-krns":["asset-type"]}}}},"resources_required":{"type":"boolean","description":"Define whether the application is deployed to specific resources (e.g. assets) or not. Applications that have inputs or outputs always require resources."}}},"io":{"type":"array","items":{"$ref":"#/components/schemas/manifest.AppIO"}},"dynamic_io":{"type":"array","items":{"$ref":"#/components/schemas/manifest.DynamicAppIO"}},"parameters":{"type":"array","items":{"$ref":"#/components/schemas/manifest.Parameter"}},"custom_actions":{"type":"array","items":{"$ref":"#/components/schemas/manifest.CustomAction"}},"data_quality":{"type":"array","items":{"$ref":"#/components/schemas/manifest.CustomDataQuality"}},"data_tags":{"type":"array","items":{"$ref":"#/components/schemas/manifest.DataTag"}}}}]},"manifest.Schemas":{"type":"object","description":"Custom JSON Schemas to be used by the UI when configuring the application.","properties":{"parameters":{"type":"object","description":"JSON Schema that defines the Resource Parameters that can be configured for the App. The schema is limited to the having an `object` with `properties` that are `number`, `boolean`, or `string`."},"configuration":{"type":"object","description":"JSON Schema used to generate the UI."},"io_configurations":{"type":"array","description":"JSON Schema of each asset's dynamic I/O configuration.","items":{"type":"object","properties":{"type_name":{"type":"string","description":"Dynamic I/O type name."},"schema":{"type":"object","description":"JSON Schema to build the configuration by the UI."}}}}}},"enum.DeploymentType":{"type":"string","enum":["standard","staged+instant-apply","staged-only"],"description":"Specifies the method for deploying a workload on the platform.\n\n- `standard`: The default deployment method. The workload is\nautomatically created and started.\n- `staged+instant-apply`: Similar to `standard`, but if the workload\nexists with a different app image, the new image is downloaded before\nstopping the existing workload. This minimizes application downtime.\n- `staged-only`: Prepares the workload by downloading the necessary\nimages, but does not create or start the workload. The workload is only\nstarted upon explicit user request (see `/apps/workloads/apply`)."},"enum.DeploymentTargetType":{"type":"string","enum":["cluster","resource-cluster"],"default":"cluster","description":"Type of target to deploy the application to.\n\n- `cluster`: Deploy the application to a specific cluster, and optionally to a specific node.\n- `resource-cluster`: Deploy the application to the cluster specified by the resource property `cluster`."},"manifest.DeploymentTarget":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/enum.DeploymentTargetType"},"cluster":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"Cluster to deploy the application to."},"node_name":{"type":"string","description":"Node to deploy the application to."}}}}},"enum.LivenessProbeType":{"type":"string","description":"Method to perform the health check.","enum":["http_get","tcp_socket","exec"]},"enum.URIScheme":{"type":"string","description":"Protocol to use.","enum":["http","https"]},"manifest.LivenessProbe":{"type":"object","title":"Liveness Probe","description":"Checks if the container is running. Failing the probe restarts the container.","properties":{"initial_delay_seconds":{"type":"integer","title":"Initial Delay (s)","description":"Seconds to wait before starting probes.","default":1,"minimum":0,"maximum":2147483647},"period_seconds":{"type":"integer","title":"Probe Interval (s)","description":"Frequency of probe execution.","default":10,"minimum":1,"maximum":2147483647},"timeout_seconds":{"type":"integer","title":"Timeout (s)","description":"Seconds before the probe times out.","default":1,"minimum":1,"maximum":2147483647},"failure_threshold":{"type":"integer","title":"Failure Threshold","description":"Failures before restarting the container.","default":3,"minimum":1,"maximum":2147483647},"type":{"$ref":"#/components/schemas/enum.LivenessProbeType"},"http_get":{"type":"object","title":"HTTP GET Probe","description":"Performs an HTTP GET request to check health.","required":["port"],"properties":{"path":{"type":"string","title":"Path","description":"HTTP path to access."},"port":{"type":"integer","title":"Port","description":"Port for the HTTP server.","minimum":1,"maximum":65535},"scheme":{"$ref":"#/components/schemas/enum.URIScheme"},"http_headers":{"type":"array","title":"HTTP Headers","description":"Custom headers for the request.","items":{"type":"object","properties":{"name":{"type":"string","title":"Header Name","format":"^[A-Za-z0-9]+(?:-[A-Za-z0-9]+)*$"},"value":{"type":"string","title":"Header Value","format":"^[\\x20-\\x7E]*$"}}}}}},"tcp_socket":{"type":"object","title":"TCP Socket Probe","description":"Checks if a TCP port is open.","required":["port"],"properties":{"port":{"type":"integer","title":"Port","description":"TCP port to check.","minimum":1,"maximum":65535}}},"exec":{"type":"object","title":"Exec Probe","description":"Runs a command inside the container to check health.","required":["command"],"properties":{"command":{"type":"array","title":"Command","description":"Command to execute. Exit code 0 is healthy.","items":{"type":"string"}}}}}},"enum.PortType":{"type":"string","description":"Type of port to expose.","enum":["host","service"]},"enum.VolumeType":{"type":"string","description":"Type of volume to use.","enum":["persistent","host","text"]},"enum.VolumeEncoding":{"type":"string","title":"Encoding","description":"Text encoding format.","enum":["utf-8","ascii","latin_1"]},"manifest.System":{"type":"object","properties":{"health_check":{"type":"object","title":"Health Check","properties":{"liveness_probe":{"$ref":"#/components/schemas/manifest.LivenessProbe"}}},"resources":{"type":"object","title":"Resource Configuration","properties":{"requests":{"type":"object","title":"Resource Requests","properties":{"cpu":{"type":"string","title":"CPU Request","description":"Minimum CPU required.","format":"^([0-9]+m|[0-9]+(\\.[0-9]+)?|[0-9]+)$"},"memory":{"type":"string","title":"Memory Request","description":"Minimum memory required.","format":"^([0-9]+(\\.[0-9]+)?(Ei|Pi|Ti|Gi|Mi|Ki|E|P|T|G|M|K)?|[0-9]+)$"}}},"limits":{"type":"object","properties":{"cpu":{"type":"string","title":"CPU Limit","description":"Maximum CPU allowed.","format":"^([0-9]+m|[0-9]+(\\.[0-9]+)?|[0-9]+)$"},"memory":{"type":"string","title":"Memory Limit","description":"Maximum memory allowed.","format":"^([0-9]+(\\.[0-9]+)?(Ei|Pi|Ti|Gi|Mi|Ki|E|P|T|G|M|K)?|[0-9]+)$"}}}}},"privileged":{"type":"boolean","description":"Run the container in privileged mode.","default":false},"environment_vars":{"type":"array","title":"Environment Variables","description":"List of environment variables.","items":{"type":"object","properties":{"name":{"type":"string","title":"Variable Name","description":"Name of the environment variable.","format":"^[A-Za-z_][A-Za-z0-9_]*$"},"value":{"type":"string","title":"Variable Value","description":"Value of the environment variable."}}}},"ports":{"type":"array","title":"Container Ports","description":"List of ports exposed by the container.","items":{"type":"object","properties":{"name":{"type":"string","title":"Port Name","description":"Name identifier for the port.","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"},"type":{"$ref":"#/components/schemas/enum.PortType"},"host":{"type":"object","title":"Host Configuration","required":["port"],"properties":{"port":{"type":"integer","title":"Host Port","description":"Port on the host machine.","minimum":1,"maximum":65535}}},"service":{"type":"object","title":"Service Configuration","required":["port"],"properties":{"port":{"type":"integer","title":"Service Port","description":"Port exposed by the service.","minimum":1,"maximum":65535},"container_port":{"type":"integer","title":"Container Port","description":"Port exposed by the container.","minimum":1,"maximum":65535},"exposed":{"type":"boolean","title":"Exposed","description":"Expose the port outside the cluster.","default":false},"exposed_port":{"type":"integer","title":"Exposed Port","description":"Port exposed outside the cluster.","minimum":30001,"maximum":32767}}}}}},"volumes":{"type":"array","title":"Volumes","description":"List of volumes mounted by the container.","items":{"type":"object","properties":{"name":{"type":"string","title":"Volume Name","description":"Name identifier for the volume.","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"},"target":{"type":"string","title":"Mount Path","description":"Path where the volume is mounted."},"type":{"$ref":"#/components/schemas/enum.VolumeType"},"text":{"type":"object","title":"Text Volume","required":["data"],"properties":{"data":{"type":"string","title":"Data","description":"Text content of the volume."},"base64":{"type":"boolean","title":"Base64 Encoded","description":"Data is base64 encoded.","default":false},"encoding":{"$ref":"#/components/schemas/enum.VolumeEncoding"}}},"host":{"type":"object","title":"Host Volume","required":["source"],"properties":{"source":{"type":"string","title":"Source Path","description":"Path on the host machine."}}}}}}}},"manifest.ApiPermissions":{"type":"array","items":{"type":"string","minLength":1,"maxLength":256},"example":["kelvin.permission.control_change.create","kelvin.permission.recommendation.create"],"description":"List of API permissions that the application requires to operate. This is used to determine which default permissions to grant when deploying the application."},"manifest.Defaults":{"type":"object","description":"Default values for the application deployment and runtime configurations.","properties":{"deployment":{"type":"object","description":"Default rules for application deployment.","properties":{"max_resources":{"description":"Maximum number of resources that a single workload handles when deploying the application.","type":"integer","default":1},"deployment_type":{"$ref":"#/components/schemas/enum.DeploymentType"},"target":{"$ref":"#/components/schemas/manifest.DeploymentTarget"}}},"app":{"type":"object","properties":{"configuration":{"type":"object"},"io_datastream_mapping":{"type":"array","description":"Mapping of Application inputs and outputs to Data Streams.","items":{"type":"object","required":["io","datastream"],"properties":{"io":{"type":"string","description":"Name of the input/output used in the Application."},"datastream":{"type":"string","description":"Name of the Data Stream linked to the input/output in the Application."}}}}}},"system":{"$ref":"#/components/schemas/manifest.System"},"api_permissions":{"$ref":"#/components/schemas/manifest.ApiPermissions"}}},"manifest.AppManifest":{"allOf":[{"type":"object","description":"The Application Manifest."},{"$ref":"#/components/schemas/manifest.AppVersion"},{"type":"object","properties":{"schemas":{"$ref":"#/components/schemas/manifest.Schemas"},"defaults":{"$ref":"#/components/schemas/manifest.Defaults"}}}]},"requests.AppVersionCreate":{"allOf":[{"$ref":"#/components/schemas/manifest.AppManifest"}]},"type.Created":{"type":"object","properties":{"created_at":{"type":"string","description":"UTC time when the object was created, formatted in RFC 3339.","format":"date-time"},"created_by":{"type":"string","description":"KRN of the user or process that created the object.","format":"krn","example":"krn:user:me@example.com"}}},"type.Updated":{"type":"object","properties":{"updated_at":{"type":"string","description":"UTC time when any keys were last updated, formatted in RFC 3339.","format":"date-time"},"updated_by":{"type":"string","description":"KRN of the user or process that last updated any of the keys.","format":"krn","example":"krn:user:me@example.com"}}},"type.AppVersion":{"allOf":[{"$ref":"#/components/schemas/manifest.AppManifest"},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"},{"type":"object","required":["created_at","created_by","updated_at","updated_by"]}]},"responses.AppVersionCreate":{"allOf":[{"$ref":"#/components/schemas/type.AppVersion"}]},"type.Any":{"description":"Value represented in one of these formats.","oneOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"object"}]},"response.ErrorObject":{"type":"object","properties":{"name":{"type":"string","description":"ID of the error."},"title":{"type":"string","description":"Title of the error."},"description":{"type":"string","description":"A description of what the problem may be."},"solution":{"type":"string","description":"A possible solution to the problem."},"payload":{"oneOf":[{"type":"object"},{"type":"array","items":{"$ref":"#/components/schemas/type.Any"}}],"description":"Optional additional information. For example an array of objects listing all the errors that triggered the 4XX response."}}},"response.Error":{"type":"object","properties":{"errors":{"type":"array","description":"An array of all errors detected during the validation.","items":{"$ref":"#/components/schemas/response.ErrorObject"}}}},"responses.AppVersionGet":{"description":"App version identified by `app_name` and `app_version`.","allOf":[{"$ref":"#/components/schemas/type.AppVersion"}]},"requests.AppVersionPatch":{"type":"object","properties":{"image":{"type":"object","description":"Image update payload.\n\nUpdating the App image is only possible when the current mode is\n`undefined`, and the update must set `mode=manual` with an explicit\nimage URI.","required":["mode","uri"],"additionalProperties":false,"properties":{"mode":{"type":"string","enum":["manual"]},"uri":{"type":"string","minLength":1,"example":"example.com/my-app:1.0.0"}}},"schemas":{"$ref":"#/components/schemas/manifest.Schemas"},"defaults":{"$ref":"#/components/schemas/manifest.Defaults"}}},"responses.AppVersionPatch":{"allOf":[{"$ref":"#/components/schemas/type.AppVersion"}]},"requests.AppVersionUpdate":{"type":"object","properties":{"schemas":{"$ref":"#/components/schemas/manifest.Schemas"},"defaults":{"$ref":"#/components/schemas/manifest.Defaults"}}},"responses.AppVersionUpdate":{"allOf":[{"$ref":"#/components/schemas/type.AppVersion"}]},"type.PropertyValue":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"boolean"},{"type":"array","items":{"type":"number"}},{"type":"array","items":{"type":"string"}},{"type":"array","items":{"type":"boolean"}}]},"type.AppDataQuality":{"type":"object","properties":{"way":{"$ref":"#/components/schemas/enum.DQWay"},"datastreams":{"type":"object","additionalProperties":{"type":"object","properties":{"map_to":{"type":"string"},"configuration":{"type":"object"}}}},"configuration":{"type":"object"}}},"type.AppDataTags":{"type":"object","properties":{"way":{"$ref":"#/components/schemas/enum.DTWay"}}},"type.AppDeploymentRuntimeResources":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"object","properties":{"resource":{"type":"string","format":"krn"},"parameters":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/type.PropertyValue"}},"datastreams":{"type":"object","additionalProperties":{"type":"object","properties":{"map_to":{"type":"string"},"configuration":{"type":"object"},"remote":{"type":"boolean","deprecated":true,"description":"DEPRECATED: This feature is now automatic.\nThis field is only relevant for inputs (`way` `input` or `input+output-cc`). It instructs the workload to get this resource's data either from the local cluster or a remote source."},"way":{"$ref":"#/components/schemas/enum.Way"},"storage":{"$ref":"#/components/schemas/enum.Storage"},"dynamic_io_type_name":{"type":"string"}}}},"data_quality":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/type.AppDataQuality"}},"data_tags":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/type.AppDataTags"}}}}}}},"type.AppDeploymentRuntime":{"allOf":[{"$ref":"#/components/schemas/type.AppDeploymentRuntimeResources"},{"type":"object","properties":{"configuration":{"type":"object"}}}]},"requests.AppVersionDeploy":{"allOf":[{"type":"object","properties":{"runtime":{"allOf":[{"$ref":"#/components/schemas/type.AppDeploymentRuntime"},{"type":"object","properties":{"custom_actions":{"type":"array","items":{"$ref":"#/components/schemas/manifest.CustomAction"}}}}]}}},{"type":"object","properties":{"system":{"$ref":"#/components/schemas/manifest.System"}}},{"type":"object","properties":{"api_permissions":{"$ref":"#/components/schemas/manifest.ApiPermissions"}}},{"type":"object","properties":{"deployment":{"type":"object","description":"Default rules for application deployment.","properties":{"enabled":{"type":"boolean","default":true,"description":"Defines whether the workloads should be enabled or disabled. If enabled, the regular flow of deploying the workload to the Edge is executed. If disabled, the workload will only be created in the database and not sent to the Edge.\nOnce enabled, the workload can't be disabled. Enabling a disabled workload is done using `/apps/workloads/enable`.\nIf an App has an undefined image, it may only deploy with enabled set to `false`."},"deployment_type":{"$ref":"#/components/schemas/enum.DeploymentType"},"max_resources":{"description":"Maximum number of resources that a single workload handles when deploying the application. This is only relevant if the application supports multiple assets.","type":"integer","minimum":1},"target":{"$ref":"#/components/schemas/manifest.DeploymentTarget"}}}}}]},"responses.AppVersionDeploy":{"type":"object","properties":{"workload_names":{"type":"array","items":{"type":"string"}}}},"requests.AppResourcesEnable":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string","format":"krn"}}}},"requests.AppResourcesDisable":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string","format":"krn"}}}},"requests.AppResourcesDelete":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string","format":"krn"}}}},"type.AppResourceWorkload":{"type":"object","properties":{"app_version":{"type":"string","format":"semver"},"workload_name":{"type":"string"},"cluster_name":{"type":"string"}}},"type.AppResource":{"allOf":[{"type":"object","properties":{"resource":{"type":"string","format":"krn"},"app_name":{"type":"string"},"enabled":{"type":"boolean"},"workloads":{"type":"array","items":{"$ref":"#/components/schemas/type.AppResourceWorkload"}}}},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"pagination.PaginationCursor":{"type":"object","description":"Pagination information for future page requests using the parameter `pagination_type` value `cursor`.","properties":{"next_page":{"type":"string","example":"W3siS2V5IjoicmVzb3VyY2UiLCJWYWx1ZSI6ImtybjphZDpkZW1vLWNlbnRyaWZ1Z2FsLXB1bXAtMS9odW1pZGl0eSJ9XQ==","description":"Bookmark location for `starting_after` parameter in future API requests."},"previous_page":{"type":"string","example":"W3siS2V5IjoicmVzb3VyY2UiLCJWYWx1ZSI6ImtybjphZDpkZW1vLWNlbnRyaWZ1Z2FsLXB1bXAtMS9odW1pZGl0eSJ9XQ==","description":"Bookmark location for `ending_before` parameter in future API requests."}}},"responses.AppResourcesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.AppResource"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"pagination.PaginationLimits":{"type":"object","description":"Pagination information for current page and total filtered results.","properties":{"page_size":{"type":"integer","example":20,"description":"Number of objects returned in current page."},"page":{"type":"integer","example":8,"description":"Current page number of returned objects."},"total_pages":{"type":"integer","example":39,"description":"Total pages available based on current request parameters."},"total_items":{"type":"integer","example":628,"description":"Total number of objects based on current request parameters."}}},"responses.AppResourcesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.AppResource"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.AppResourcesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.AppResource"}]},"type.AppVersionOnly":{"allOf":[{"type":"object","required":["version","created_at","created_by","updated_at","updated_by"],"properties":{"version":{"type":"string","format":"semver"}}},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"enum.AppStatus":{"type":"string","enum":["running","stopped","updating","requires_attention"]},"type.App":{"allOf":[{"$ref":"#/components/schemas/manifest.AppInfo"},{"type":"object","required":["latest_version","versions","deployment","created_at","created_by","updated_at","updated_by"],"properties":{"dashboard_uid":{"type":"string"},"latest_version":{"type":"string","format":"semver","description":"Latest published version of the App."},"versions":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/type.AppVersionOnly"}},"deployment":{"allOf":[{"type":"object","required":["status"],"properties":{"status":{"$ref":"#/components/schemas/enum.AppStatus"}}}]}}},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"responses.AppGet":{"description":"App identified by `app_name`.","allOf":[{"$ref":"#/components/schemas/type.App"},{"type":"object","properties":{"deployment":{"type":"object","required":["status","resource_count"],"description":"Current deployment summary for the App.","properties":{"status":{"$ref":"#/components/schemas/enum.AppStatus","description":"Current deployment status."},"resource_count":{"type":"object","required":["total","running"],"description":"Number of associated resources by deployment state.","properties":{"total":{"type":"integer","description":"Total number of associated resources."},"running":{"type":"integer","description":"Number of associated resources currently running."}}}}}}}]},"type.AppShort":{"allOf":[{"$ref":"#/components/schemas/manifest.AppInfo"},{"type":"object","required":["latest_version","status"],"properties":{"dashboard_uid":{"type":"string"},"latest_version":{"type":"string","format":"semver","description":"Latest published version of the App."},"status":{"$ref":"#/components/schemas/enum.AppStatus"}}},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"responses.AppsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"Apps matching the request filters for the current cursor page.","items":{"$ref":"#/components/schemas/type.AppShort"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.AppsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"Apps matching the request filters for the requested page.","items":{"$ref":"#/components/schemas/type.AppShort"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.AppsListPaginatedResponseStream":{"description":"Single App object emitted in stream mode.","allOf":[{"$ref":"#/components/schemas/type.AppShort"}]},"requests.AppPatch":{"type":"object","properties":{"title":{"type":"string"},"description":{"type":"string"},"category":{"type":"string"}}},"responses.AppPatch":{"allOf":[{"$ref":"#/components/schemas/type.App"},{"type":"object","properties":{"deployment":{"type":"object","required":["status","resource_count"],"properties":{"status":{"$ref":"#/components/schemas/enum.AppStatus"},"resource_count":{"type":"object","required":["total","running"],"properties":{"total":{"type":"integer"},"running":{"type":"integer"}}}}}}}]},"requests.AppsContextList":{"type":"object","properties":{"resources":{"type":"array","description":"Return only contexts associated with the provided resource KRNs. Allowed namespaces are `ad`, `dqad`, `dqasset`, `action`, `aca`, `asset`, and `datastream`.","items":{"type":"string","format":"krn","x-allowed-krn":["ad","aca","action","asset","datastream","dqad","dqasset"]}},"sources":{"type":"array","description":"Return only contexts whose source matches one or more source KRNs. Allowed namespaces are `wl`, `wlappv`, `app`, and `appversion`.","items":{"type":"string","format":"krn","x-allowed-krn":["app","appversion","wl","wlappv"]}}}},"type.AppsResourceContext":{"type":"object","properties":{"resource":{"type":"string","format":"krn","x-allowed-krn":["ad","aca","action","dqad","dqasset"],"example":"krn:ad:pcp_01/casing_pressure","description":"App context resource KRN. Allowed namespaces are `ad`, `dqad`, `dqasset`, `action`, and `aca`."},"source":{"type":"string","format":"krn","x-allowed-krn":["wlappv"],"example":"krn:wlappv:my-cluster/my-workload:my-app/1.0.0","description":"Workload that owns the resource. Allowed namespace is `wlappv`."}}},"responses.AppsContextListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"App contexts matching the request filters for the current cursor page.","items":{"$ref":"#/components/schemas/type.AppsResourceContext"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.AppsContextListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"App contexts matching the request filters for the requested page.","items":{"$ref":"#/components/schemas/type.AppsResourceContext"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.AppsContextListPaginatedResponseStream":{"description":"Single App context object emitted in stream mode.","allOf":[{"$ref":"#/components/schemas/type.AppsResourceContext"}]},"postparams.AppVersionParameterListBase":{"type":"object","properties":{"apps":{"type":"array","description":"A filter on the list for Apps and its Versions. Multiple Apps and Versions can be given. All App Versions in the array are treated as `OR`.","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","description":"A filter on the list based on the key `app_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"version":{"type":"string","description":"A filter on the list based on the key `app_version`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."}}}},"resources":{"type":"array","description":"A filter on the list showing only current Parameter values associated with any Assets in the array. The filter is on the full name only. All strings in the array are treated as `OR`. Each Asset name can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"krn"}},"parameter_names":{"type":"array","description":"A filter on the list for Parameters. The filter is on the full name only. All strings in the array are treated as `OR`. Each Parameter name can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string"}}}},"requests.AppVersionParameterValuesList":{"allOf":[{"$ref":"#/components/schemas/postparams.AppVersionParameterListBase"}]},"type.AppVersionParameter":{"allOf":[{"type":"object","properties":{"app_name":{"type":"string","description":"Unique identifier `name` of the App in the App Registry linked to this Parameter."},"app_version":{"type":"string","description":"Version number of the App in the App Registry linked to this Parameter."},"comment":{"type":"string","description":"Latest information from user when creating or updating this Parameter."},"created":{"type":"string","format":"date-time","description":"UTC time when the Parameter was first created, formatted in RFC 3339."},"name":{"type":"string","description":"The name of the Parameter."},"resource":{"type":"string","format":"krn","description":"KRN of the Asset associated with the Parameter."},"value":{"$ref":"#/components/schemas/type.Any"}}},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"responses.AppVersionParameterValuesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.AppVersionParameter"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.AppVersionParameterValuesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.AppVersionParameter"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.AppVersionParameterValuesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.AppVersionParameter"}]},"requests.AppVersionParametersHistoryList":{"allOf":[{"$ref":"#/components/schemas/postparams.AppVersionParameterListBase"},{"type":"object","properties":{"start_date":{"type":"string","format":"date-time","description":"Earliest `created` time for the list of Parameters. Time is based on UTC timezone, formatted in RFC 3339."},"end_date":{"type":"string","format":"date-time","description":"Most recent `created` time for the list of Parameters. Time is based on UTC timezone, formatted in RFC 3339."}}}]},"responses.AppVersionParametersHistoryListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.AppVersionParameter"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.AppVersionParametersHistoryListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.AppVersionParameter"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"type.AppVersionHistoricParameter":{"allOf":[{"$ref":"#/components/schemas/type.AppVersionParameter"},{"type":"object","properties":{"invalidated":{"type":"string","format":"date-time","description":"UTC time when any Parameter value were invalidated, formatted in RFC 3339."}}}]},"responses.AppVersionParametersHistoryListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.AppVersionHistoricParameter"}]},"enum.ParameterType":{"type":"string","enum":["number","string","boolean"]},"requests.AppParametersList":{"type":"object","properties":{"app_names":{"type":"array","description":"Return only parameters that belong to one or more App names.","items":{"type":"string"}},"names":{"type":"array","description":"Return only parameters whose `name` matches one or more values.","items":{"type":"string"}},"data_types":{"type":"array","description":"Return only parameters whose `data_type` matches one or more values.","items":{"$ref":"#/components/schemas/enum.ParameterType"}},"search":{"type":"array","description":"Case-insensitive partial match against parameter `name` and `title`.","items":{"type":"string"}}}},"type.AppParameter":{"allOf":[{"type":"object","properties":{"app_name":{"type":"string","description":"Unique identifier `name` of the App in the App Registry linked to this Paramete Definition."},"title":{"type":"string","description":"Latest Display name (`title`) of the Parameter in the App."},"name":{"type":"string","description":"The name of the Parameter."},"data_type":{"$ref":"#/components/schemas/enum.ParameterType"}}},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"responses.AppParametersListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"App parameters matching the request filters for the current cursor page.","items":{"$ref":"#/components/schemas/type.AppParameter"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.AppParametersListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"App parameters matching the request filters for the requested page.","items":{"$ref":"#/components/schemas/type.AppParameter"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.AppParametersListPaginatedResponseStream":{"description":"Single App parameter object emitted in stream mode.","allOf":[{"$ref":"#/components/schemas/type.AppParameter"}]},"type.ParameterValue":{"oneOf":[{"type":"number","description":"Parameter value as number"},{"type":"string","description":"Parameter value as string"},{"type":"boolean","description":"Parameter value as boolean"}]},"type.ParameterItemNoComment":{"type":"object","required":["name","value"],"properties":{"name":{"type":"string","description":"Parameter name"},"value":{"$ref":"#/components/schemas/type.ParameterValue"}}},"type.ParameterItem":{"allOf":[{"$ref":"#/components/schemas/type.ParameterItemNoComment"},{"type":"object","properties":{"comment":{"type":"string","description":"Comment regarding the parameter change action"}}}]},"type.AppVersionResourceParameters":{"type":"object","required":["resource","parameters"],"properties":{"resource":{"type":"string","format":"krn","description":"The target resource to which the parameters are to be applied"},"parameters":{"type":"array","items":{"$ref":"#/components/schemas/type.ParameterItem"}}}},"requests.AppVersionParametersUpdate":{"type":"object","required":["resource_parameters"],"properties":{"source":{"type":"string","format":"krn","description":"The source of the change request (restricted to Service Accounts)"},"resource_parameters":{"type":"array","items":{"$ref":"#/components/schemas/type.AppVersionResourceParameters"}}}},"requests.AppVersionParametersDefaultsUpdate":{"type":"object","properties":{"parameters":{"type":"array","items":{"$ref":"#/components/schemas/type.ParameterItemNoComment"}}}},"requests.AppVersionParametersUniqueValuesGet":{"type":"object","properties":{"app_parameters":{"type":"array","description":"Filter on the list based on the key `app_name` and wanted Parameter `name` per App. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"required":["app_name"],"type":"object","properties":{"app_name":{"type":"string","description":"A filter on the list based on the key `app_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"parameters":{"type":"array","description":"Array of Parameter `names` to fetch associated values for Apps.","items":{"type":"string"}}}}},"data_types":{"type":"array","description":"Filter on the list based on the Parameter data type key `data_type` of the Parameter.","items":{"$ref":"#/components/schemas/enum.ParameterType"}}}},"responses.AppVersionParametersUniqueValuesGet":{"type":"object","properties":{"app_parameter_values":{"type":"object","description":"Collection of objects where each object is an App containing an array of values for each Parameter that meets the request filter definitions. Only unique Parameter Values are shown, default values will not be shown.","additionalProperties":{"type":"object","description":"Names of the Apps using Parameters.","additionalProperties":{"type":"array","description":"All Parameter values saved which are not the default value.","items":{"$ref":"#/components/schemas/type.ParameterValue"}}}}}},"requests.AppVersionParametersFallbackValuesGet":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string","format":"krn"}}}},"responses.AppVersionParametersFallbackValuesGet":{"type":"object","properties":{"resource_parameters":{"type":"object","description":"List of resources in KRN format and their current or fallback asset parameter values.","additionalProperties":{"type":"object","description":"Set of parameter names and their values for the resource.","additionalProperties":{"$ref":"#/components/schemas/type.ParameterValue"}}}}},"type.ParameterMap":{"type":"object","description":"List of parameter names and their associated values.","additionalProperties":{"allOf":[{"$ref":"#/components/schemas/type.ParameterValue"}]}},"type.ParameterScheduleResourceParameters":{"type":"array","items":{"type":"object","required":["resource","parameters"],"properties":{"resource":{"type":"string","format":"krn","description":"The target Asset to which the parameters are to be applied."},"parameters":{"$ref":"#/components/schemas/type.ParameterMap"}}}},"type.ParameterScheduleBase":{"type":"object","required":["app_name","app_version","scheduled_for","parameters","resources"],"properties":{"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","description":"Application key `name` to associate with Assets (resources) to perform the required actions."},"app_version":{"type":"string","format":"Major.Minor.Patch","description":"Version of Application."},"scheduled_for":{"type":"string","format":"date-time","description":"UTC date and time when the new parameters are to be applied, formatted in RFC 3339."},"resources":{"type":"array","minItems":1,"description":"List of assets for which the parameters to be updated at the scheduled time. (example `krn:asset:bp_16`)","example":["krn:asset:bp_16"],"items":{"type":"string","format":"krn"}},"parameters":{"$ref":"#/components/schemas/type.ParameterMap"},"comment":{"type":"string","description":"Additional comments associated with the scheduled parameter change"},"revert":{"type":"object","description":"Revert parameters configuration at a schedule time after the initial parameter change is implemented.","required":["scheduled_for","resource_parameters"],"properties":{"scheduled_for":{"type":"string","format":"date-time","description":"UTC date and time when the original or alternative parameters are to be applied, formatted in RFC 3339. This must be a time after the original change schedule in the key `scheduled_for` in the root of this json data package."},"resource_parameters":{"$ref":"#/components/schemas/type.ParameterScheduleResourceParameters"}}}}},"requests.ParametersScheduleCreate":{"allOf":[{"$ref":"#/components/schemas/type.ParameterScheduleBase"}]},"enum.ParameterScheduleState":{"type":"string","enum":["scheduled","scheduled-revert","completed","error"]},"type.ParameterSchedule":{"allOf":[{"$ref":"#/components/schemas/type.ParameterScheduleBase"},{"type":"object","required":["id","state","created_at","created_by"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique ID of this parameter schedule"},"state":{"$ref":"#/components/schemas/enum.ParameterScheduleState"},"original_resource_parameters":{"$ref":"#/components/schemas/type.ParameterScheduleResourceParameters"},"error_msg":{"type":"string","description":"Error message if the schedule fails to be implemented."},"created_at":{"type":"string","format":"date-time","description":"UTC date and time when the parameter schedule is first created, formatted in RFC 3339."},"created_by":{"type":"string","format":"krn","description":"The user or process that initiated the creation of this parameter scheduled."},"applied_at":{"type":"string","format":"date-time","description":"UTC date and time when the new parameters are actually applied, formatted in RFC 3339."},"applied_by":{"type":"string","format":"krn","description":"The user or process that initiated the apply parameters command of this parameter scheduled."},"reverted_at":{"type":"string","format":"date-time","description":"UTC date and time when the new revert parameters are actually applied, formatted in RFC 3339."},"reverted_by":{"type":"string","format":"krn","description":"The user or process that initiated the revert parameters command of this parameter scheduled."}}}]},"responses.ParametersScheduleCreate":{"allOf":[{"$ref":"#/components/schemas/type.ParameterSchedule"}]},"responses.ParametersScheduleGet":{"allOf":[{"$ref":"#/components/schemas/type.ParameterSchedule"}]},"enum.ParameterScheduleApplyType":{"type":"string","enum":["schedule","schedule-revert"],"description":"Type of the schedule action to apply. `schedule` applies the new parameters, `schedule-revert` reverts to the original parameters."},"requests.ParametersScheduleApply":{"type":"object","required":["type"],"properties":{"type":{"$ref":"#/components/schemas/enum.ParameterScheduleApplyType"}}},"requests.ParametersScheduleList":{"type":"object","properties":{"apps":{"type":"array","description":"Array of Applications to filter.","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$.","description":"Application key `name` to filter the returned Parameter Schedule list."},"version":{"type":"string","format":"Major.Minor.Patch","description":"Version of Application."}}}},"states":{"type":"array","description":"Array of filtered states for the returned Parameter Schedule list.","items":{"$ref":"#/components/schemas/enum.ParameterScheduleState"}},"resources":{"type":"array","description":"Array of filtered Assets for the returned Parameter Schedule list.","items":{"type":"string","format":"krn"}},"parameter_names":{"type":"array","description":"Array of filtered Parameter names for the returned Parameter Schedule list.","items":{"type":"string"}}}},"responses.ParametersScheduleListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Parameter objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.ParametersScheduleGet"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.ParametersScheduleListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Parameter objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.ParametersScheduleGet"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.ParametersScheduleListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.ParametersScheduleGet"}]},"requests.WorkloadCreate":{"allOf":[{"type":"object","required":["name","cluster_name","app_name","app_version"],"properties":{"name":{"type":"string"},"title":{"type":"string"},"app_name":{"type":"string"},"app_version":{"type":"string"},"cluster_name":{"type":"string"},"node_name":{"type":"string"},"runtime":{"allOf":[{"$ref":"#/components/schemas/type.AppDeploymentRuntime"},{"type":"object","properties":{"custom_actions":{"type":"array","items":{"$ref":"#/components/schemas/manifest.CustomAction"}}}}]},"system":{"$ref":"#/components/schemas/manifest.System"},"deployment_type":{"$ref":"#/components/schemas/enum.DeploymentType"},"api_permissions":{"$ref":"#/components/schemas/manifest.ApiPermissions"},"enabled":{"type":"boolean","default":true,"description":"Defines whether the workloads should be enabled or disabled. If enabled, the regular flow of deploying the workload to the Edge is executed. If disabled, the workload will only be created in the database and not sent to the Edge.\nOnce enabled, the workload can't be disabled. Enabling a disabled workload is done using `/apps/workloads/enable`.\nIf an App has an undefined image, it may only deploy with enabled set to `false`."}}}]},"enum.WorkloadDownloadStatus":{"type":"string","description":"Status of downloading Workload to the Edge System.","enum":["pending","scheduled","processing","downloading","ready","failed"]},"enum.WorkloadStatus":{"type":"string","description":"Current lifecycle state of the workload.","enum":["pending_deploy","pending_update","pending_start","pending_stop","pending_apply","deploying","running","stopping","stopped","failed","starting","applying","received","downloading","ready","unreachable","staged"]},"type.WorkloadStatus":{"type":"object","description":"Realtime information about the Workload as seen from the Cloud.","properties":{"last_seen":{"type":"string","format":"date-time","description":"UTC time when the Workload was last seen by the Cloud, formatted in RFC 3339."},"message":{"type":"string","description":"Descriptive, human-readable string for `state`."},"state":{"$ref":"#/components/schemas/enum.WorkloadStatus"},"warnings":{"type":"array","description":"All warnings received for any Workload operations.","items":{"type":"string"}}}},"type.WorkloadCommon":{"type":"object","required":["name","title","app_name","app_version","app_type","cluster_name","status"],"properties":{"name":{"type":"string","description":"Unique workload name."},"title":{"type":"string","description":"Display name of the workload."},"app_name":{"type":"string","description":"App name currently deployed by the workload."},"app_version":{"type":"string","description":"App version currently deployed by the workload."},"app_type":{"$ref":"#/components/schemas/enum.AppType"},"cluster_name":{"type":"string","description":"Cluster where the workload runs."},"node_name":{"type":"string","description":"Node where the workload is scheduled."},"download_status":{"$ref":"#/components/schemas/enum.WorkloadDownloadStatus"},"download_error":{"type":"string","description":"Simple description of the error in case the image download failed."},"status":{"$ref":"#/components/schemas/type.WorkloadStatus"},"enabled":{"type":"boolean","default":true,"description":"Defines whether the workloads should be enabled or disabled. If enabled, the regular flow of deploying the workload to the Edge is executed. If disabled, the workload will only be created in the database and not sent to the Edge.\nOnce enabled, the workload can't be disabled. Enabling a disabled workload is done using `/apps/workloads/enable`.\nIf an App has an undefined image, it may only deploy with enabled set to `false`."}}},"type.WorkloadRuntimeResourceDatastream":{"type":"object","description":"Runtime mapping and transport settings for a resource datastream.","properties":{"map_to":{"type":"string","description":"App input/output (IO) name this datastream maps to."},"configuration":{"type":"object","description":"Datastream-specific configuration values."},"way":{"$ref":"#/components/schemas/enum.Way"},"storage":{"$ref":"#/components/schemas/enum.Storage"},"remote":{"type":"boolean","deprecated":true,"description":"DEPRECATED: This feature is now automatic.\nThis field is only relevant for inputs (`way` `input` or `input+output-cc`). It instructs the workload to get this resource's data either from the local cluster or a remote source."},"dynamic_io_type_name":{"type":"string","description":"Dynamic IO type name used for this datastream mapping."}}},"type.GuardrailValue":{"type":"object","required":["value"],"properties":{"value":{"description":"The limiting value.","type":"number"},"inclusive":{"description":"The defined limiting value is inclusive within the allowable range.","type":"boolean","default":false}}},"enum.GuardrailRelativeType":{"type":"string","description":"Limiting rate of change value is an absolute value or a percentage of the current value before the control change.","enum":["value","percentage"],"x-enum-varnames":["VALUE","PERCENTAGE"]},"type.GuardrailRelativeValue":{"type":"object","description":"Rate of change limit definition","required":["value"],"properties":{"value":{"description":"The limiting rate of change value.","type":"number"},"inclusive":{"description":"The defined limiting rate of change value is inclusive within the allowable range.","type":"boolean","default":false},"type":{"$ref":"#/components/schemas/enum.GuardrailRelativeType"}}},"type.GuardrailRelativeConfig":{"type":"object","properties":{"relative":{"type":"object","description":"Allowable rate of increase/decrease of the Asset / Data Stream pair. ","properties":{"increase":{"type":"object","description":"Allowable rate of increase of the Asset / Data Stream pair. ","properties":{"min":{"$ref":"#/components/schemas/type.GuardrailRelativeValue"},"max":{"$ref":"#/components/schemas/type.GuardrailRelativeValue"}}},"decrease":{"type":"object","description":"Allowable rate of decrease of the Asset / Data Stream pair. ","properties":{"min":{"$ref":"#/components/schemas/type.GuardrailRelativeValue"},"max":{"$ref":"#/components/schemas/type.GuardrailRelativeValue"}}}}}}},"type.GuardrailNumberConfig":{"allOf":[{"type":"object","description":"Optional limits for absolute minimum and maximum values, or for rate of increase/decrease.\nThis is defined using either fixed values or relative percentage changes.","properties":{"min":{"description":"Minimum limiting value allowed for the Asset / Data Stream pair.","allOf":[{"$ref":"#/components/schemas/type.GuardrailValue"}]},"max":{"description":"Maximum limiting value allowed for the Asset / Data Stream pair.","allOf":[{"$ref":"#/components/schemas/type.GuardrailValue"}]}}},{"$ref":"#/components/schemas/type.GuardrailRelativeConfig"}]},"type.WorkloadRuntime":{"type":"object","description":"Runtime configuration applied to the workload.","properties":{"custom_actions":{"type":"array","description":"Custom actions available for this workload runtime.","items":{"$ref":"#/components/schemas/manifest.CustomAction"}},"resources":{"type":"array","description":"Resource runtime configuration entries bound to this workload.","items":{"type":"object","description":"Runtime configuration for one workload resource binding.","properties":{"resource":{"type":"string","format":"krn","description":"Resource KRN bound to the workload runtime. Allowed namespace is `asset`.","x-allowed-krn":["asset"]},"parameters":{"type":"object","description":"Parameter values configured for this resource.","additionalProperties":{"$ref":"#/components/schemas/type.PropertyValue"}},"datastreams":{"type":"object","description":"Datastream runtime configuration keyed by datastream name.","additionalProperties":{"allOf":[{"$ref":"#/components/schemas/type.WorkloadRuntimeResourceDatastream"},{"type":"object","properties":{"guardrail":{"type":"object","description":"Guardrail configuration for this datastream.","properties":{"control_disabled":{"type":"boolean","default":false,"description":"If `true`, disable guardrail control for this datastream."},"number":{"$ref":"#/components/schemas/type.GuardrailNumberConfig"}}}}}]}},"data_quality":{"type":"object","description":"Data quality configuration keyed by datastream name.","additionalProperties":{"$ref":"#/components/schemas/type.AppDataQuality"}},"data_tags":{"type":"object","description":"Data tag configuration keyed by datastream name.","additionalProperties":{"$ref":"#/components/schemas/type.AppDataTags"}},"properties":{"type":"object","description":"Additional runtime properties for this resource.","additionalProperties":{"$ref":"#/components/schemas/type.PropertyValue"}}}}},"configuration":{"type":"object","description":"Runtime configuration values keyed by configuration field name."}}},"enum.WorkloadServiceAccountStatus":{"type":"string","description":"Current state of the workload service account lifecycle.","enum":["pending_create","pending_update","active","deactivated","failed"]},"type.ServiceAccountStatus":{"type":"object","description":"Realtime information about the workload service account state.","properties":{"state":{"$ref":"#/components/schemas/enum.WorkloadServiceAccountStatus"},"retries":{"type":"integer","description":"Number of retries attempted for creating or updating the Service Account."},"last_updated":{"type":"string","format":"date-time","description":"UTC time when the service account was last updated by the Cloud, formatted in RFC 3339."},"error_message":{"type":"string","description":"Simple description of the error when service account creation or update failed."}}},"type.StagedStatus":{"type":"object","description":"Realtime information about the Staged Workload as seen from the Cloud.","properties":{"message":{"type":"string","description":"Descriptive, human-readable string for `state`."},"state":{"$ref":"#/components/schemas/enum.WorkloadStatus"},"warnings":{"type":"array","description":"All warnings received for any Staged Workload operations.","items":{"type":"string"}}}},"type.WorkloadStaged":{"type":"object","description":"Staged workload configuration and status pending apply.","properties":{"ready":{"type":"boolean","description":"Staged workload ready to be applied."},"app_version":{"type":"string","format":"semver","description":"Version Number of the Kelvin App used for the Staged Workload."},"deployment_type":{"$ref":"#/components/schemas/enum.DeploymentType"},"status":{"$ref":"#/components/schemas/type.StagedStatus"},"runtime":{"$ref":"#/components/schemas/type.WorkloadRuntime"},"system":{"$ref":"#/components/schemas/manifest.System"}}},"type.Workload":{"description":"Full workload representation, including runtime configuration, staged updates, and service account state.","allOf":[{"$ref":"#/components/schemas/type.WorkloadCommon"},{"type":"object","properties":{"runtime":{"$ref":"#/components/schemas/type.WorkloadRuntime"},"system":{"$ref":"#/components/schemas/manifest.System"},"api_permissions":{"$ref":"#/components/schemas/manifest.ApiPermissions"},"service_account_status":{"$ref":"#/components/schemas/type.ServiceAccountStatus"},"staged":{"$ref":"#/components/schemas/type.WorkloadStaged"}}}]},"responses.WorkloadCreate":{"allOf":[{"$ref":"#/components/schemas/type.Workload"},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"responses.WorkloadGet":{"description":"Full workload details for the requested workload.","allOf":[{"type":"object","required":["created_at","created_by","updated_at","updated_by"]},{"$ref":"#/components/schemas/type.Workload"},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"requests.WorkloadUpdate":{"allOf":[{"type":"object","properties":{"app_version":{"type":"string"},"cluster_name":{"type":"string"},"node_name":{"type":"string"},"title":{"type":"string"},"deployment_type":{"$ref":"#/components/schemas/enum.DeploymentType"},"runtime":{"$ref":"#/components/schemas/type.AppDeploymentRuntime"},"system":{"$ref":"#/components/schemas/manifest.System"},"api_permissions":{"$ref":"#/components/schemas/manifest.ApiPermissions"}}}]},"responses.WorkloadUpdate":{"allOf":[{"$ref":"#/components/schemas/type.Workload"},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"responses.WorkloadDownload":{"type":"object","properties":{"url":{"type":"string","description":"URL to download the Workload package file."},"expires_in":{"type":"integer","description":"Time in seconds before the URL expires."}}},"type.WorkloadStagedSummary":{"type":"object","description":"Summary of staged workload information.","properties":{"ready":{"type":"boolean","description":"Staged workload ready to be applied."},"app_version":{"type":"string","format":"semver","description":"Version Number of the Kelvin App used for the Staged Workload."},"deployment_type":{"$ref":"#/components/schemas/enum.DeploymentType"},"status":{"$ref":"#/components/schemas/type.StagedStatus"}}},"type.WorkloadSummary":{"allOf":[{"$ref":"#/components/schemas/type.WorkloadCommon"},{"type":"object","required":["created_at","created_by","updated_at","updated_by"],"properties":{"staged":{"$ref":"#/components/schemas/type.WorkloadStagedSummary"}}},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"responses.WorkloadsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"Workloads matching the request filters for the current cursor page.","items":{"$ref":"#/components/schemas/type.WorkloadSummary"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.WorkloadsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"Workloads matching the request filters for the requested page.","items":{"$ref":"#/components/schemas/type.WorkloadSummary"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.WorkloadsListPaginatedResponseStream":{"description":"Single workload object emitted in stream mode.","allOf":[{"$ref":"#/components/schemas/type.WorkloadSummary"}]},"type.WorkloadNamesList":{"type":"object","properties":{"workload_names":{"type":"array","items":{"type":"string"}}}},"requests.WorkloadsApply":{"allOf":[{"$ref":"#/components/schemas/type.WorkloadNamesList"}]},"requests.WorkloadsEnable":{"allOf":[{"$ref":"#/components/schemas/type.WorkloadNamesList"}]},"requests.WorkloadsStart":{"allOf":[{"$ref":"#/components/schemas/type.WorkloadNamesList"}]},"requests.WorkloadsStop":{"allOf":[{"$ref":"#/components/schemas/type.WorkloadNamesList"}]},"requests.WorkloadsDelete":{"allOf":[{"$ref":"#/components/schemas/type.WorkloadNamesList"}]},"responses.WorkloadLogsGet":{"type":"object","properties":{"logs":{"type":"object","additionalProperties":{"type":"array","items":{"type":"string"}}}}},"requests.WorkloadResourcesAdd":{"allOf":[{"$ref":"#/components/schemas/type.AppDeploymentRuntimeResources"}]},"responses.WorkloadResourcesAdd":{"allOf":[{"$ref":"#/components/schemas/type.Workload"},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"requests.WorkloadResourcesRemove":{"type":"object","properties":{"resources":{"type":"array","items":{"type":"string"}}}},"requests.WorkloadsBulkUpdate":{"type":"object","properties":{"workload_names":{"type":"array","items":{"type":"string"}},"app_name":{"type":"string"},"app_version":{"type":"string"},"runtime":{"$ref":"#/components/schemas/type.AppDeploymentRuntime"},"system":{"$ref":"#/components/schemas/manifest.System"},"deployment_type":{"$ref":"#/components/schemas/enum.DeploymentType"},"api_permissions":{"$ref":"#/components/schemas/manifest.ApiPermissions"}}},"enum.AssetState":{"type":"string","enum":["online","offline","unknown"]},"requests.AppExtraField":{"type":"object","description":"Add an extra custom column with App information related to the Assets in the list.","required":["name"],"properties":{"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-optimization","minLength":1,"maxLength":64},"app_versions":{"type":"array","example":["1.2.0","1.2.1"],"items":{"type":"string","format":"Major.Minor.Patch"}},"name":{"type":"string","example":"app-motor-speed-optimization","description":"Unique identifier name for the key in the response; all keys in the `extra_fields` object must be unique."}}},"requests.AssetPropertyExtraField":{"type":"object","required":["name","property_name"],"properties":{"name":{"type":"string","example":"property-area"},"property_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"area","minLength":1,"maxLength":64}}},"enum.ControlChangeState":{"type":"string","enum":["pending","ready","sent","processed","applied","failed","rejected"]},"requests.ControlChangeExtraField":{"type":"object","required":["name"],"properties":{"datastreams":{"type":"array","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"motor-speed","minLength":1,"maxLength":64}},"name":{"type":"string","example":"last-control-change"},"since":{"type":"string","format":"date-time","example":"2025-11-13T12:00:00Z"},"statuses":{"type":"array","items":{"$ref":"#/components/schemas/enum.ControlChangeState"}}}},"enum.CustomActionState":{"type":"string","description":"Current lifecycle state of the Custom Action.","enum":["pending","ready","in_progress","completed","cancelled","failed"]},"requests.CustomActionExtraField":{"type":"object","required":["name"],"properties":{"name":{"type":"string","example":"last-custom-action"},"type":{"type":"string","example":"Email"},"since":{"type":"string","format":"date-time","example":"2025-12-13T12:00:00Z"},"statuses":{"type":"array","items":{"$ref":"#/components/schemas/enum.CustomActionState"}}}},"enum.AssetInsightsAgg":{"type":"string","enum":["count","mean","sum","max","min"],"description":"Perform mathematical calculations on a group of data defined by the `start_time` and `end_time` keys. For text data, the option available is `count`."},"requests.Aggregation":{"type":"object","required":["agg","end_time","start_time"],"properties":{"agg":{"$ref":"#/components/schemas/enum.AssetInsightsAgg"},"end_time":{"type":"string","format":"date-time","example":"2023-11-13T12:00:00Z"},"start_time":{"type":"string","format":"date-time","example":"2023-11-13T12:00:00Z"}}},"requests.DatastreamExtraField":{"type":"object","required":["name","datastream_name"],"properties":{"computation":{"$ref":"#/components/schemas/requests.Aggregation"},"datastream_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"motor-speed","minLength":1,"maxLength":64},"name":{"type":"string","example":"datastream-motor-speed"}}},"requests.DataQualityExtraField":{"type":"object","required":["name","data_quality_name"],"properties":{"computation":{"$ref":"#/components/schemas/requests.Aggregation"},"data_quality_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"kelvin_timestamp_anomaly","minLength":1,"maxLength":64},"name":{"type":"string","example":"data-quality-kelvin-timestamp-anomaly"}}},"requests.DataTagExtraField":{"type":"object","required":["name"],"properties":{"tags":{"type":"array","items":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","example":"High Vibration","minLength":1,"maxLength":64}},"sources":{"type":"array","items":{"type":"string","format":"krn","example":"krn:user:richard.teo@kelvininc.com","minLength":1,"maxLength":256}},"since":{"type":"string","format":"date-time","example":"2025-11-13T12:00:00Z"},"name":{"type":"string","example":"data-tag-high-vibration"}}},"requests.ParameterExtraField":{"type":"object","required":["name","app_name","parameter_name"],"properties":{"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-optimization","minLength":1,"maxLength":32},"name":{"type":"string","example":"motor-speed-set-point-low"},"parameter_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"motor-speed-set-point","minLength":1,"maxLength":64}}},"enum.AssetInsightsParameterScheduleType":{"type":"string","description":"Filter schedules by type.","enum":["permanent","temporary"]},"requests.ParametersScheduleExtraField":{"type":"object","required":["name"],"properties":{"name":{"type":"string","example":"next-schedule"},"schedule_type":{"$ref":"#/components/schemas/enum.AssetInsightsParameterScheduleType"},"max_date":{"type":"string","format":"date-time","example":"2024-04-26T12:00:00Z"}}},"enum.RecommendationState":{"type":"string","enum":["pending","accepted","auto_accepted","rejected","expired"]},"requests.RecommendationExtraField":{"type":"object","required":["name"],"properties":{"name":{"type":"string","example":"motor-speed-recommendations"},"since":{"type":"string","format":"date-time","example":"2023-11-13T12:00:00Z"},"source":{"type":"string","format":"krn","example":"krn:user:richard.teo@kelvininc.com","minLength":1,"maxLength":256},"states":{"type":"array","items":{"$ref":"#/components/schemas/enum.RecommendationState"}},"types":{"type":"array","items":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64}}}},"requests.AssetInsightsExtraFields":{"type":"object","description":"Create extra fields related to the Assets list.","properties":{"apps":{"type":"array","description":"Create new columns based on Apps in the App Registry related to Assets.","items":{"$ref":"#/components/schemas/requests.AppExtraField"}},"asset_properties":{"type":"array","description":"Create new columns based on the `property` field in Assets.","items":{"$ref":"#/components/schemas/requests.AssetPropertyExtraField"}},"control_changes":{"type":"array","description":"Create new columns based on the latest Control Changes associated with the Asset.","items":{"$ref":"#/components/schemas/requests.ControlChangeExtraField"}},"custom_actions":{"type":"array","description":"Create new columns based on the latest Custom Actions associated with the Asset.","items":{"$ref":"#/components/schemas/requests.CustomActionExtraField"}},"datastreams":{"type":"array","description":"Create new columns based on mathematical calculations for a time range of a Data Stream associated with the Assets.","items":{"$ref":"#/components/schemas/requests.DatastreamExtraField"}},"data_qualities":{"type":"array","description":"Create new columns based on Data Qualities associated with the Asset.","items":{"$ref":"#/components/schemas/requests.DataQualityExtraField"}},"data_tags":{"type":"array","description":"Create new columns based on Data Tags associated with the Asset.","items":{"$ref":"#/components/schemas/requests.DataTagExtraField"}},"parameters":{"type":"array","description":"Create new columns based on Application Parameters associated with the Asset.","items":{"$ref":"#/components/schemas/requests.ParameterExtraField"}},"parameters_schedule":{"type":"array","description":"Create new columns based on the Parameters Schedule associated with the Asset.","items":{"$ref":"#/components/schemas/requests.ParametersScheduleExtraField"}},"recommendations":{"type":"array","description":"Create new columns based on Recommendations associated with the Asset.","items":{"$ref":"#/components/schemas/requests.RecommendationExtraField"}}}},"enum.AppFilterField":{"type":"string","example":"status","enum":["workload_name","app_name","status"],"description":"Field name of the App to filter by. The `status` field accepts `disabled`, `running`, `updating`, `stopped`, and `requires_attention`."},"type.Strings":{"description":"Value represented as a string or an array of strings.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"requests.AppFilter":{"type":"object","required":["field","value"],"properties":{"field":{"$ref":"#/components/schemas/enum.AppFilterField"},"value":{"$ref":"#/components/schemas/type.Strings"}}},"requests.AppsFilters":{"type":"object","properties":{"contains":{"type":"boolean","example":true,"default":false},"filters":{"type":"array","items":{"$ref":"#/components/schemas/requests.AppFilter"}}}},"requests.ValueFilter":{"oneOf":[{"type":"object","required":["operator"],"properties":{"operator":{"type":"string","enum":["has","!has"]}}},{"type":"object","required":["operator","value"],"properties":{"operator":{"type":"string","enum":["==","!=","<",">",">=","<=","contains","!contains","starts_with","!starts_with","ends_with","!ends_with"]},"value":{"oneOf":[{"$ref":"#/components/schemas/type.Any"},{"type":"array","items":{"$ref":"#/components/schemas/type.Any"}}],"description":"Value to use in association with the `operator`."}}}]},"requests.AssetPropertiesFilters":{"type":"object","required":["property_name"],"properties":{"property_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"area","minLength":1,"maxLength":64},"filters":{"type":"array","items":{"$ref":"#/components/schemas/requests.ValueFilter"}}}},"enum.ControlChangeFilterField":{"type":"string","example":"timestamp","enum":["timestamp","last_state","datastream_name"],"description":"Field name of the Control Change to filter by."},"requests.ControlChangeFilter":{"type":"object","required":["field","value"],"properties":{"field":{"$ref":"#/components/schemas/enum.ControlChangeFilterField"},"value":{"$ref":"#/components/schemas/type.Strings"}}},"requests.ControlChangesFilters":{"type":"object","properties":{"contains":{"type":"boolean","example":true,"default":false},"filters":{"type":"array","items":{"$ref":"#/components/schemas/requests.ControlChangeFilter"}}}},"requests.DataStreamFilters":{"type":"object","required":["datastream_name"],"properties":{"datastream_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"motor-speed","minLength":1,"maxLength":64},"computation":{"$ref":"#/components/schemas/requests.Aggregation"},"filters":{"type":"array","items":{"$ref":"#/components/schemas/requests.ValueFilter"}}}},"enum.DataTagFilterField":{"type":"string","example":"tag","enum":["tag","source","end_date"],"description":"Field name of the Data Tag to filter by."},"requests.DataTagFilter":{"type":"object","required":["field","value"],"properties":{"field":{"$ref":"#/components/schemas/enum.DataTagFilterField"},"value":{"$ref":"#/components/schemas/type.Strings"}}},"requests.DataTagsFilters":{"type":"object","properties":{"contains":{"type":"boolean","example":true,"default":false},"filters":{"type":"array","items":{"$ref":"#/components/schemas/requests.DataTagFilter"}}}},"requests.DataQualitiesFilters":{"type":"object","properties":{"contains":{"type":"boolean","example":true,"default":false,"description":"If true, only return Assets that have Data Qualities associated with them. If false, only return Assets that do not have Data Qualities associated with them."}}},"enum.RecommendationFilterField":{"type":"string","example":"created","enum":["created","updated","type_name","state"],"description":"Field name of the Recommendation to filter by."},"requests.RecommendationFilter":{"type":"object","required":["field","value"],"properties":{"field":{"$ref":"#/components/schemas/enum.RecommendationFilterField"},"value":{"$ref":"#/components/schemas/type.Strings"}}},"requests.RecommendationsFilters":{"type":"object","properties":{"contains":{"type":"boolean","example":true,"default":false},"filters":{"type":"array","items":{"$ref":"#/components/schemas/requests.RecommendationFilter"}}}},"requests.ParametersFilters":{"type":"object","required":["app_name","parameter_name"],"properties":{"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-optimization","minLength":1,"maxLength":32},"parameter_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"motor-speed-set-point","minLength":1,"maxLength":64},"filters":{"type":"array","items":{"$ref":"#/components/schemas/requests.ValueFilter"}}}},"requests.AssetInsightsFilters":{"type":"object","description":"Create filters related to the Assets list and define specific filtering criteria for each filter.","properties":{"apps":{"type":"array","items":{"$ref":"#/components/schemas/requests.AppsFilters"}},"asset_properties":{"type":"array","items":{"$ref":"#/components/schemas/requests.AssetPropertiesFilters"}},"control_changes":{"type":"array","items":{"$ref":"#/components/schemas/requests.ControlChangesFilters"}},"datastreams":{"type":"array","items":{"$ref":"#/components/schemas/requests.DataStreamFilters"}},"data_tags":{"type":"array","items":{"$ref":"#/components/schemas/requests.DataTagsFilters"}},"data_qualities":{"type":"array","items":{"$ref":"#/components/schemas/requests.DataQualitiesFilters"}},"recommendations":{"type":"array","items":{"$ref":"#/components/schemas/requests.RecommendationsFilters"}},"parameters":{"type":"array","items":{"$ref":"#/components/schemas/requests.ParametersFilters"}}}},"requests.AssetInsightsGet":{"type":"object","properties":{"asset_names":{"type":"array","example":["beam","motor"],"description":"Filter on the Asset parameter `name`. The filter is on the full name only. All strings in the array are treated as `OR`.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"asset_states":{"type":"array","example":["offline","unknown"],"description":"Filter by the asset `state`. The filter is on the full name only. All strings in the array are treated as `OR`.","items":{"allOf":[{"$ref":"#/components/schemas/enum.AssetState"}]}},"asset_types":{"type":"array","example":["decrease_speed","increase_speed"],"description":"Filter on the Asset Type parameter `name`. The filter is on the full name only. All strings in the array are treated as `OR`.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"extra_fields":{"$ref":"#/components/schemas/requests.AssetInsightsExtraFields"},"filters":{"$ref":"#/components/schemas/requests.AssetInsightsFilters"},"pinned_assets":{"type":"array","example":["beam_pump_01","beam_pump_32"],"description":"List of Asset names that should always appear at the top of page 1 of any search results. The filter is on the full name only.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"search":{"type":"array","example":["beam","Motor"],"description":"Search and filter on the list based on the Asset keys `title` (Display Name) or `name`. The search is case insensitive and will find partial matches as well.","items":{"type":"string","minLength":1,"maxLength":64}}}},"enum.AssetInsightsState":{"type":"string","example":"offline","enum":["online","offline","unknown"],"description":"Current status (`state`) of the Asset."},"type.StatusIndicatorValue":{"type":"object","description":"Asset's status indicator configuration value. The value is determined based on the status indicator configuration defined in the Asset Type and the data received for the resource defined in the status indicator configuration.","properties":{"name":{"type":"string","example":"green","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","maxLength":64,"description":"Unique identifier `name` of the Asset's current status indicator. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"label":{"type":"string","example":"Green","maxLength":64,"description":"Display name (`label`) of the Asset's current status indicator."},"resource":{"type":"string","example":"krn:datastream:production_casing_depth","format":"krn","description":"Resource key that is being used for this status indicator value."},"resource_value":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}],"example":87,"description":"Current value of the resource defined in the Asset Type's status indicator configuration that is being used to determine the Asset's current status indicator."},"last_seen":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the status indicator value was last updated based on resource data, formatted in RFC 3339."}}},"enum.StatusIndicatorOperator":{"type":"string","enum":["==","!=","<",">",">=","<=","contains","!contains","starts_with","!starts_with","ends_with","!ends_with"],"x-enum-varnames":["Equal","NotEqual","Lower","Greater","GreaterOrEqual","LowerOrEqual","Contains","NotContains","StartsWith","NotStartsWith","EndsWith","NotEndsWith"],"example":"==","description":"Operator used when evaluating a status-indicator condition. Allowed operators: '==', '!=', '<', '>', '>=', '<=', 'contains', '!contains', 'starts_with', '!starts_with', 'ends_with', '!ends_with'"},"type.StatusIndicatorConfig":{"type":"object","properties":{"name":{"type":"string","example":"green","maxLength":64,"description":"Unique identifier `name` for the Status Indicator. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"label":{"type":"string","example":"Green","maxLength":64,"description":"Display name (`label`) of the Status Indicator."},"resource":{"type":"string","example":"krn:datastream:production_casing_depth","format":"krn","description":"Resource key to use for this Status Indicator."},"operator":{"$ref":"#/components/schemas/enum.StatusIndicatorOperator","description":"Operator to use for this Status Indicator."},"value":{"oneOf":[{"type":"number"},{"type":"string"},{"type":"boolean"}],"example":"1000","description":"Value to compare the resource data for this Status Indicator."}},"required":["name","resource","operator","value"]},"type.StatusIndicatorItem":{"type":"object","description":"Asset's status indicator information.","properties":{"value":{"$ref":"#/components/schemas/type.StatusIndicatorValue","nullable":true},"configs":{"type":"array","description":"Array of status indicator configurations defined in the Asset Type that are being used to determine the Asset's current status indicator.","items":{"$ref":"#/components/schemas/type.StatusIndicatorConfig"}}}},"responses.AssetInsightsItem":{"type":"object","properties":{"asset_type_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"beam_pump"},"asset_type_title":{"type":"string","example":"Well 01","maxLength":64},"extra_fields":{"type":"object","description":"A dictionary of all requested data from the `extra_fields` key in the request body."},"last_seen":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z"},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"well_01","maxLength":64},"pinned":{"type":"boolean","example":true},"state":{"$ref":"#/components/schemas/enum.AssetInsightsState"},"status_indicator":{"$ref":"#/components/schemas/type.StatusIndicatorItem","nullable":true},"title":{"type":"string","example":"Well 01","maxLength":64,"description":"Display name (`title`) of the Asset."}}},"responses.AssetInsightsGetPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Asset objects, starting from the index specified by the pagination parameters, that match the query parameters.","items":{"$ref":"#/components/schemas/responses.AssetInsightsItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.AssetInsightsGetPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Asset objects for the page number specified by the pagination parameters, that match the query parameters.","items":{"$ref":"#/components/schemas/responses.AssetInsightsItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.AssetInsightsGetPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.AssetInsightsItem"}]},"requests.AssetInsightsV1AppExtraField":{"type":"object","description":"Add an extra custom Column (Field) with Application related to the Assets in the list.","properties":{"app_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"motor-speed-optimization","minLength":1,"maxLength":64,"description":"App Name from the App Registry. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"app_versions":{"type":"array","example":["1.2.0","1.2.1"],"description":"Filter Apps by version number of the App. The filter is on the full version name only. Can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"Major.Minor.Patch"}},"name":{"type":"string","example":"app-motor-speed-optimization","description":"Unique identifier name for the key in the response, all keys in extra_fields object must be unique."}}},"enum.AssetInsightsV1Operator":{"type":"string","enum":["==","!=","<",">",">=","<=","has","!has","contains","!contains","starts_with","!starts_with","ends_with","!ends_with"],"x-enum-varnames":["Equal","NotEqual","Lower","Greater","GreaterOrEqual","LowerOrEqual","Has","NotHas","Contains","NotContains","StartsWith","NotStartsWith","EndsWith","NotEndsWith"],"example":"==","description":"Type of operation for the filter, allowed operators: '==', '!=', '<', '>', '>=', '<=', 'has', '!has', 'contains', '!contains', 'starts_with', '!starts_with', 'ends_with', '!ends_with'"},"requests.AssetInsightsV1Filter":{"type":"object","properties":{"operator":{"$ref":"#/components/schemas/enum.AssetInsightsV1Operator"},"value":{"$ref":"#/components/schemas/type.Any","example":500,"description":"Value to use in association with the `operator` for the filter of the field."}}},"enum.PropertyType":{"type":"string","enum":["boolean","number","string","timestamp","list[boolean]","list[number]","list[string]","list[timestamp]"]},"requests.AssetInsightsV1AssetPropertyExtraField":{"type":"object","properties":{"filters":{"type":"array","description":"Optional to filter the returned Asset List based on an array of operator / value criteria relating to the Asset Property. Each filter is treated as `AND`. This will remove Assets from the returned Asset list that do not meet this criteria.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1Filter"}},"name":{"type":"string","example":"property-area","description":"Unique identifier name for the key in the response, all keys in extra_fields object must be unique."},"primitive_type":{"$ref":"#/components/schemas/enum.PropertyType","description":"Property data type of the new filtered Asset Property column."},"property_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"area","minLength":1,"maxLength":64,"description":"Name of the Asset Property to include. This Asset Property column are custom filtered fields that can be created with the Asset listing."}}},"requests.AssetInsightsV1ControlChangeExtraField":{"type":"object","description":"Add an extra custom Column (Field) with Control Change data for the Assets in the list.","properties":{"datastreams":{"type":"array","description":"Filter Control Change Field by Control Change Data Stream key `datastream_name`. The filter is on the full name only. Can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"motor-speed","minLength":1,"maxLength":64}},"name":{"type":"string","example":"last-control-change","description":"Unique identifier name for the key in the response, all keys in extra_fields object must be unique."},"since":{"type":"string","format":"date-time","example":"2025-11-13T12:00:00Z","description":"UTC time for the earliest creation time of Control Changes associated with an Asset, formatted in RFC 3339. Control Changes before this time regardless of `state` will be ignored."},"statuses":{"type":"array","example":["pending","sent"],"description":"Filter Control Change Field by the Control Change current `state`.","items":{"$ref":"#/components/schemas/enum.ControlChangeState"}}}},"requests.AssetInsightsV1CustomActionExtraField":{"type":"object","description":"Add an extra custom Column (Field) with Custom Action data for the Assets in the list.","properties":{"name":{"type":"string","example":"last-custom-action","description":"Unique identifier name for the key in the response, all keys in extra_fields object must be unique."},"type":{"type":"string","example":"Email","description":"Filter Custom Action Field by the Custom Action `type`. The filter is on the full name only."},"since":{"type":"string","format":"date-time","example":"2025-12-13T12:00:00Z","description":"UTC time for the earliest creation time of Custom Actions associated with an Asset, formatted in RFC 3339. Custom Actions before this time regardless of `state` will be ignored."},"statuses":{"type":"array","example":["pending","completed"],"description":"Filter Custom Action Field by the Custom Action current `state`.","items":{"$ref":"#/components/schemas/enum.CustomActionState"}}}},"enum.AssetInsightsV1Agg":{"type":"string","enum":["count","mean","sum","max","min"],"description":"Perform mathematical calculations on a group of data defined by the 'starttime' and 'endtime' keys. For text data, the option available is `count`."},"requests.AssetInsightsV1DatastreamExtraFieldComputation":{"type":"object","description":"Add an extra custom Column (Field) with aggregated Data Stream data for the Assets in the list.","properties":{"agg":{"$ref":"#/components/schemas/enum.AssetInsightsV1Agg"},"end_time":{"type":"string","format":"date-time","example":"2023-11-13T12:00:00Z","description":"UTC time for the latest time in the time range used by `agg` of Data Streams related to an Asset, formatted in RFC 3339."},"start_time":{"type":"string","format":"date-time","example":"2023-11-13T12:00:00Z","description":"UTC time for the earliest time in the time range used by `agg` of Data Streams related to an Asset, formatted in RFC 3339."}}},"requests.AssetInsightsV1DatastreamExtraField":{"type":"object","description":"Add an extra custom Column (Field) with Data Stream data for the Assets in the list.","properties":{"computation":{"$ref":"#/components/schemas/requests.AssetInsightsV1DatastreamExtraFieldComputation"},"datastream_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"motor-speed","minLength":1,"maxLength":64,"description":"Data Stream key `name`. Used in connection with the Asset `name` to retrieve the Asset / Data Stream pair's data"},"name":{"type":"string","example":"datastream-motor-speed","description":"Unique identifier name for the key in the response, all keys in extra_fields object must be unique."},"filters":{"type":"array","description":"Optional to filter the returned Asset List based on an array of operator / value criteria relating to the Datastream. Each filter is treated as `AND`. This will remove Assets from the returned Asset list that do not meet this criteria.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1Filter"}}}},"requests.AssetInsightsV1DataQualityExtraField":{"type":"object","description":"Add an extra custom Column (Field) with Data Quality data for the Assets in the list.","properties":{"computation":{"$ref":"#/components/schemas/requests.AssetInsightsV1DatastreamExtraFieldComputation"},"data_quality_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"kelvin_timestamp_anomaly","minLength":1,"maxLength":64,"description":"Data Quality key `name`. Used in connection with the Asset `name` to retrieve the Asset / Data Quality pair's data"},"name":{"type":"string","example":"data-quality-kelvin-timestamp-anomaly","description":"Unique identifier name for the key in the response, all keys in extra_fields object must be unique."}}},"requests.AssetInsightsV1ParameterExtraField":{"type":"object","properties":{"app_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"motor-speed-optimization","minLength":1,"maxLength":32,"description":"App Registry App key `name` to retrieve the Parameters. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"filters":{"type":"array","description":"Optional to filter the returned Asset List based on an array of operator / value criteria relating to the Parameters. Each filter is treated as `AND`. This will remove Assets from the returned Asset list that do not meet this criteria.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1Filter"}},"name":{"type":"string","example":"motor-speed-set-point-low","description":"Unique identifier name for the key in the response, all keys in extra_fields object must be unique."},"parameter_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"motor-speed-set-point","minLength":1,"maxLength":64,"description":"Parameter key `name` to retrieve the Parameters from the App for the Assets. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"primitive_type":{"$ref":"#/components/schemas/enum.ParameterType"}}},"requests.AssetInsightsV1RecommendationExtraField":{"type":"object","properties":{"name":{"type":"string","example":"motor-speed-recommendations","description":"Unique identifier name for the key in the response, all keys in extra_fields object must be unique."},"since":{"type":"string","format":"date-time","example":"2023-11-13T12:00:00Z","description":"UTC time for the earliest creation time of Recommendations associated with an Asset, formatted in RFC 3339. Recommendations before this time regardless of `state` will be ignored."},"source":{"type":"string","format":"krn","example":"krn:user:richard.teo@kelvininc.com","minLength":1,"maxLength":256,"description":"KRN of the User or Service that created the Recommendation."},"states":{"type":"array","example":["pending","auto_accepted"],"description":"Only return Recommendations associated with one or more `states`. The filter is on the full `state` name only. All strings in the array are treated as `OR`.","items":{"$ref":"#/components/schemas/enum.RecommendationState"}},"types":{"type":"array","example":["Decrease speed","increase_speed"],"description":"Only return Recommendations associated with one or more Recommendation Types. The filter is on the full Recommendation Type `name` only. All strings in the array are treated as `OR`.","items":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64}}}},"enum.AssetInsightsV1ParameterScheduleType":{"type":"string","description":"Filter schedules by type.","enum":["permanent","temporary"]},"requests.AssetInsightsV1ParametersScheduleExtraField":{"type":"object","properties":{"name":{"type":"string","example":"next-schedule","description":"Unique identifier name for the key in the response, all keys in extra_fields object must be unique."},"schedule_type":{"$ref":"#/components/schemas/enum.AssetInsightsV1ParameterScheduleType"},"max_date":{"type":"string","format":"date-time","example":"2024-04-26T12:00:00Z","description":"UTC time for the latest time of a Schedule associated with an Asset, formatted in RFC 3339. Schedules after this time will be ignored."}}},"requests.AssetInsightsV1ExtraFields":{"type":"object","description":"Create unlimited number of extra fields related to the Assets list and define specific filtering or aggregations for each new field.","properties":{"apps":{"type":"array","description":"Create new columns based on Apps in the App Registry related to Assets. Multiple columns can be created, each with different App filter requirements.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1AppExtraField"}},"asset_properties":{"type":"array","description":"Create new columns based on the `property` field in Assets. Multiple columns can be created, each with different `property` requirements. Separately, the `filter` option will remove Assets from the returned Asset list that do not meet the operator and value criteria.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1AssetPropertyExtraField"}},"control_changes":{"type":"array","description":"Create new columns based on the Last Control Changes associated with the Asset. Multiple columns can be created, each with different Control Change filter requirements.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1ControlChangeExtraField"}},"custom_actions":{"type":"array","description":"Create new columns based on the Last Custom Actions associated with the Asset. Multiple columns can be created, each with different Custom Action filter requirements.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1CustomActionExtraField"}},"datastreams":{"type":"array","description":"Create new columns based on mathematical calculations for a time range of a Data Stream associated with the Assets. Multiple columns can be created, each with its own mathematical formula and Asset / Data Stream pair.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1DatastreamExtraField"}},"data_qualities":{"type":"array","description":"Create new columns based on Data Qualities associated with the Asset. Multiple columns can be created, each with different Data Quality filter requirements.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1DataQualityExtraField"}},"parameters":{"type":"array","description":"Create new columns based on Application Parameters associated with the Asset. Multiple columns can be created, each with different Application Parameters requirements. Separately, the `filter` option will remove Assets from the returned Asset list that do not meet the operator and value criteria.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1ParameterExtraField"}},"recommendations":{"type":"array","description":"Create new columns based on Recommendations associated with the Asset. Multiple columns can be created, each with different Recommendation filter requirements.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1RecommendationExtraField"}},"parameters_schedule":{"type":"array","description":"Create new columns based on the Parameters Schedule associated with the Asset. Multiple columns can be created, each with different Schedule filter requirements.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1ParametersScheduleExtraField"}}}},"enum.AssetInsightsV1ControlChangeFilterField":{"type":"string","example":"timestamp","enum":["timestamp","last_state","datastream_name"],"description":"Field name of the Control Change to filter by."},"type.AssetInsightsV1Strings":{"description":"Value represented as a string or an array of strings.","oneOf":[{"type":"string"},{"type":"array","items":{"type":"string"}}]},"requests.AssetInsightsV1ControlChangeFilter":{"type":"object","properties":{"field":{"$ref":"#/components/schemas/enum.AssetInsightsV1ControlChangeFilterField"},"value":{"$ref":"#/components/schemas/type.AssetInsightsV1Strings","example":"2023-11-13T12:00:00Z","description":"Value to use in association with the `field` for the filter of the Control Change."}}},"enum.AssetInsightsV1RecommendationFilterField":{"type":"string","example":"created","enum":["created","updated","type_name","state"],"description":"Field name of the Recommendation to filter by."},"requests.AssetInsightsV1RecommendationFilter":{"type":"object","properties":{"field":{"$ref":"#/components/schemas/enum.AssetInsightsV1RecommendationFilterField"},"value":{"$ref":"#/components/schemas/type.AssetInsightsV1Strings","example":"2023-11-13T12:00:00Z","description":"Value to use in association with the `field` for the filter of the Recommendation."}}},"enum.AssetInsightsV1DataTagFilterField":{"type":"string","example":"tag","enum":["tag","source","end_date"],"description":"Field name of the Data Tag to filter by."},"requests.AssetInsightsV1DataTagFilter":{"type":"object","properties":{"field":{"$ref":"#/components/schemas/enum.AssetInsightsV1DataTagFilterField"},"value":{"$ref":"#/components/schemas/type.AssetInsightsV1Strings","example":"High Vibration","description":"Value to use in association with the `field` for the filter of the Data Tag."}}},"requests.AssetInsightsV1Filters":{"type":"object","description":"Create unlimited number of filters related to the Assets list and define specific filtering criteria for each new filter.","properties":{"control_changes":{"type":"object","description":"Create new filters based on Control Changes associated with the Assets.","properties":{"contains":{"type":"boolean","example":true,"description":"If true, only return Assets that have Control Changes associated with them. If false, only return Assets that do not have Control Changes associated with them."},"filters":{"type":"array","description":"Apply specific filter criteria to the Control Changes associated with the Assets.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1ControlChangeFilter"}}}},"recommendations":{"type":"object","description":"Create new filters based on Recommendations associated with the Assets.","properties":{"contains":{"type":"boolean","example":true,"description":"If true, only return Assets that have Recommendations associated with them. If false, only return Assets that do not have Recommendations associated with them."},"filters":{"type":"array","description":"Apply specific filter criteria to the Recommendations associated with the Assets.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1RecommendationFilter"}}}},"data_tags":{"type":"object","description":"Create new filters based on Data Tags associated with the Assets.","properties":{"contains":{"type":"boolean","example":true,"description":"If true, only return Assets that have Data Tags associated with them. If false, only return Assets that do not have Data Tags associated with them."},"filters":{"type":"array","description":"Apply specific filter criteria to the Data Tags associated with the Assets.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1DataTagFilter"}}}}}},"enum.AssetInsightsV1SortByDirection":{"type":"string","default":"asc","example":"desc","enum":["asc","desc"],"description":"Sorting order for the results returned.","x-enum-inline":true},"requests.AssetInsightsV1SortBy":{"type":"object","properties":{"direction":{"$ref":"#/components/schemas/enum.AssetInsightsV1SortByDirection"},"field":{"type":"string","default":"name","example":"title","description":"Key name of the Asset or `extra_field` field `name` to sort by. Source of field will be determined by the `SortByExtraField` key. If sorting by Asset key, available options are; `name`, `title`, `asset_type_name`, `asset_type_title` and `state`."},"sort_by_extra_field":{"type":"boolean","example":false,"description":"Choose the `sort_by` source of the `field` parameter. If `false`, the source of the `field` name is an Asset key. If `true`, the source is a `extra_field[].name` key."}}},"requests.AssetInsightsV1Get":{"type":"object","properties":{"asset_names":{"type":"array","example":["beam","MOTOR"],"description":"Filter on the Asset parameter `name`. The filter is on the full name only. All strings in the array are treated as `OR`. Can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"asset_states":{"type":"array","example":["offline","unknown"],"description":"Filter by the asset `state`. The filter is on the full name only. All strings in the array are treated as `OR`.","items":{"allOf":[{"$ref":"#/components/schemas/enum.AssetState"}]}},"asset_types":{"type":"array","example":["decrease_speed","increase_speed"],"description":"Filter on the Asset Type parameter `name`. The filter is on the full name only. All strings in the array are treated as `OR`. Can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"extra_fields":{"$ref":"#/components/schemas/requests.AssetInsightsV1ExtraFields"},"filters":{"$ref":"#/components/schemas/requests.AssetInsightsV1Filters"},"filter_assets_with_data_qualities":{"type":"boolean","example":true,"description":"Only return Assets with configured data qualities."},"force_parameters_refresh":{"type":"boolean","example":true,"description":"Force all parameters to be refreshed."},"pinned_assets":{"type":"array","example":["beam_pump_01","beam_pump_32"],"description":"List of Asset names that should always appear at the top of page 1 of any search results. The filter is on the full name only. Can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"search":{"type":"array","example":["beam","Motor"],"description":"Search and filter on the list based on the Asset keys `title` (Display Name) or `name`. The search is case insensitive and will find partial matches as well.","items":{"type":"string","minLength":1,"maxLength":64}},"sort_by":{"type":"array","description":"Options for sorting the returned results.","items":{"$ref":"#/components/schemas/requests.AssetInsightsV1SortBy"}}}},"enum.AssetInsightsV1State":{"type":"string","example":"offline","enum":["online","offline","unknown"],"description":"Current status (`state`) of the Asset."},"responses.AssetInsightsV1Item":{"type":"object","properties":{"asset_type_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"beam_pump","description":"Unique identifier `name` of the Asset Type linked to this Asset."},"asset_type_title":{"type":"string","example":"Well 01","maxLength":64,"description":"Display name (`title`) of the Asset Type."},"extra_fields":{"type":"object","description":"A dictionary of all requested data from the `extra_fields` key in the request body. The key names and values for each column of data are defined in the request body."},"last_seen":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when this the Asset was last seen online, formatted in RFC 3339."},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"well_01","maxLength":64,"description":"Unique identifier `name` of the Asset."},"pinned":{"type":"boolean","example":true,"description":"Pinned status of the Asset. The pinned Assets are defined in an array from the request in the key `PinnedAssets`."},"state":{"$ref":"#/components/schemas/enum.AssetInsightsV1State"},"status_indicator":{"$ref":"#/components/schemas/type.StatusIndicatorItem","nullable":true},"title":{"type":"string","example":"Well 01","maxLength":64,"description":"Display name (`title`) of the Asset."}}},"responses.AssetInsightsV1GetPaginated":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Asset objects starting from `page` number.","items":{"$ref":"#/components/schemas/responses.AssetInsightsV1Item"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"requests.AssetPropertyCreate":{"required":["name","value"],"type":"object","properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"water-line-pressure","minLength":1,"maxLength":64,"description":"Unique identifier `name` for the Asset Property. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"title":{"type":"string","example":"Water Line Pressure","minLength":1,"maxLength":64,"description":"Title for this property. This title is ignored if the property with this `name` already exists."},"value":{"$ref":"#/components/schemas/type.PropertyValue"}}},"requests.AssetCreate":{"required":["asset_type_name","name","title"],"type":"object","properties":{"asset_type_name":{"type":"string","example":"beam_pump","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64,"description":"Asset Type `name`. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"well_01","minLength":1,"maxLength":64,"description":"Unique identifier `name` for the Asset. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"properties":{"type":"array","description":"Array of custom properties. These properties are not used by the Kelvin Platform and are for end-user use only.","items":{"$ref":"#/components/schemas/requests.AssetPropertyCreate"}},"title":{"type":"string","example":"Well 01","minLength":1,"maxLength":64,"description":"Asset display name (`title`)."}}},"type.AssetProperty":{"type":"object","properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"water-line-pressure","maxLength":64,"description":"Unique identifier `name` for the Asset Property. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"title":{"type":"string","example":"Water Line Pressure","maxLength":64,"description":"Display name (title) for the Asset Property. You can use any character, numeric, space and special character in this key."},"value":{"$ref":"#/components/schemas/type.PropertyValue","example":87,"description":"Value for this Asset Property."}}},"type.AssetStatusItem":{"type":"object","description":"Asset's status information.","properties":{"last_seen":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Asset was last seen, formatted in RFC 3339."},"state":{"$ref":"#/components/schemas/enum.AssetState"}}},"type.Asset":{"type":"object","properties":{"asset_type_name":{"type":"string","example":"beam_pump","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","maxLength":64,"description":"Unique identifier `name` of the Asset Type linked to this Asset."},"asset_type_title":{"type":"string","example":"Beam Pump","maxLength":64,"description":"Display name (`title`) of the Asset Type linked to this Asset."},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Asset was created, formatted in RFC 3339."},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"well_01","maxLength":64,"description":"Unique identifier `name` of the Asset."},"properties":{"type":"array","description":"Array of custom properties. These properties are not used by the Kelvin Platform and are for end-user use only.","items":{"$ref":"#/components/schemas/type.AssetProperty"}},"in_use_by":{"type":"array","description":"List of workload or model session sources that are using this Asset.","items":{"type":"string","format":"krn","example":"krn:wlappv:cluster1/workload1/app1/1.2.0"}},"status":{"$ref":"#/components/schemas/type.AssetStatusItem"},"status_indicator":{"$ref":"#/components/schemas/type.StatusIndicatorItem","nullable":true},"title":{"type":"string","example":"Well 01","maxLength":64,"description":"Display name (`title`) of the Asset."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Asset keys were last updated, formatted in RFC 3339."}}},"responses.AssetCreate":{"allOf":[{"$ref":"#/components/schemas/type.Asset"}]},"requests.AssetBulkCreate":{"required":["assets"],"type":"object","properties":{"assets":{"type":"array","minItems":1,"description":"Array of objects, each object in the array represents a new Asset.","items":{"$ref":"#/components/schemas/requests.AssetCreate"}}}},"responses.AssetsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Assets objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.Asset"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.AssetsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Assets objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.Asset"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.AssetsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.Asset"}]},"requests.AssetsAdvancedList":{"type":"object","properties":{"asset_type_name":{"type":"array","description":"A filter on the list based on the key `asset_type_name`. The filter is on the full name only. All strings in the array are treated as `OR`. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$"},"example":["beam_pump","progressive_cavity_pump"]},"names":{"type":"array","description":"A filter on the list based on the key `name`. The filter is on the full name only. All strings in the array are treated as `OR`. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64},"example":["well_1","well_5"]},"search":{"type":"array","example":["well_1","Well 3"],"description":"Search and filter on the list based on the keys `title` (Display Name) or `name`. All strings in the array are treated as `OR`. The search is case insensitive and will find partial matches as well.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"status_state":{"type":"array","example":["online"],"description":"A filter on the list based on the key ['status']['state']. Multiple statuses can be given and will be filtered as `OR`.","items":{"$ref":"#/components/schemas/enum.AssetState"}}}},"responses.AssetsAdvancedListPaginatedResponseCursor":{"allOf":[{"$ref":"#/components/schemas/responses.AssetsListPaginatedResponseCursor"}]},"responses.AssetsAdvancedListPaginatedResponseLimits":{"allOf":[{"$ref":"#/components/schemas/responses.AssetsListPaginatedResponseLimits"}]},"responses.AssetsAdvancedListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.AssetsListPaginatedResponseStream"}]},"responses.AssetStatusCountGet":{"type":"object","properties":{"offline":{"type":"integer","example":592,"description":"Count of all Assets that are inactive and not receiving data."},"online":{"type":"integer","example":2787,"description":"Count of all Assets that are receiving active data."},"total":{"type":"integer","example":3429,"description":"Count of all Assets."},"unknown":{"type":"integer","example":50,"description":"Count of all Assets that has no Data Streams or all Data Streams have never received data."}}},"type.SimpleAsset":{"type":"object","properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"beam_pump","maxLength":64,"description":"Unique identifier `name` for the Asset. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"state":{"$ref":"#/components/schemas/enum.AssetState"}}},"type.AssetStatus":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of all Assets and their corresponding current status (`state`).","items":{"$ref":"#/components/schemas/type.SimpleAsset"}}}},"responses.AssetStatusCurrentGet":{"allOf":[{"$ref":"#/components/schemas/type.AssetStatus"}]},"requests.AssetTypeCreate":{"required":["name","title"],"type":"object","properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"beam_pump","minLength":1,"maxLength":64,"description":"Unique Asset Type name. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"title":{"type":"string","example":"Beam Pump","minLength":1,"maxLength":64,"description":"Asset Type display name (`title`)."},"status_indicator_configs":{"type":"array","description":"Array of status indicators to be associated with the Asset Type. Status indicators are used to determine the status of an Asset based on the data received for a resource. If not provided, the Asset Type will be created with no status indicators.","items":{"$ref":"#/components/schemas/type.StatusIndicatorConfig"}}}},"type.AssetType":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Asset Type was created, formatted in RFC 3339."},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"beam_pump","maxLength":64,"description":"Unique identifier `name` for the Asset Type. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"status_indicator_configs":{"type":"array","description":"Array of status indicator configurations associated with the Asset Type. Status indicators are used to determine the status of an Asset based on the data received for a resource.","items":{"$ref":"#/components/schemas/type.StatusIndicatorConfig"}},"title":{"type":"string","example":"Beam Pump","maxLength":64,"description":"Display name (`title`) of the Asset Type."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Asset Type keys were last updated, formatted in RFC 3339."}}},"responses.AssetTypeCreate":{"allOf":[{"$ref":"#/components/schemas/type.AssetType"}]},"responses.AssetTypesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Asset Types objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.AssetType"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.AssetTypesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Asset Types objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.AssetType"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.AssetTypesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.AssetType"}]},"requests.AssetTypesAdvancedList":{"type":"object","properties":{"names":{"type":"array","description":"A filter on the list based on the key `name`. The filter is on the full name only. All strings in the array are treated as `OR`. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64},"example":["pump","centrifugal_pump"]},"search":{"type":"array","example":["pump","fan"],"description":"Search and filter the Kelvin Asset Type list. Both the Display Name and the Name will be included in the search field criteria. This is given as an array, for example `[pump,fan]`. The search is case insensitive and will find partial matches as well. For example if a Kelvin Asset Type name is `centrifugal_pump`, then a match will be made if the search string is `pum` or `FUGaL`.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}}}},"responses.AssetTypesAdvancedListPaginatedResponseCursor":{"allOf":[{"$ref":"#/components/schemas/responses.AssetTypesListPaginatedResponseCursor"}]},"responses.AssetTypesAdvancedListPaginatedResponseLimits":{"allOf":[{"$ref":"#/components/schemas/responses.AssetTypesListPaginatedResponseLimits"}]},"responses.AssetTypesAdvancedListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.AssetTypesListPaginatedResponseStream"}]},"requests.AssetTypeBulkDelete":{"required":["names"],"type":"object","properties":{"names":{"type":"array","minItems":1,"description":"List of asset type names to be deleted.","items":{"type":"string","example":"pump","minLength":1,"maxLength":64}}}},"responses.AssetTypeGet":{"allOf":[{"$ref":"#/components/schemas/type.AssetType"}]},"requests.AssetTypeUpdate":{"type":"object","properties":{"title":{"type":"string","example":"Beam Pump","minLength":1,"maxLength":64,"description":"New Asset Type display name (`title`)."},"status_indicator_configs":{"type":"array","description":"Array of status indicators to be associated with the Asset Type. Status indicators are used to determine the status of an Asset based on the data received for a resource. If this field is omitted, the existing status indicators remain unchanged. To clear all status indicators, provide an empty array.","items":{"$ref":"#/components/schemas/type.StatusIndicatorConfig"}}}},"responses.AssetTypeUpdate":{"allOf":[{"$ref":"#/components/schemas/type.AssetType"}]},"requests.AssetBulkDelete":{"required":["names"],"type":"object","properties":{"names":{"type":"array","minItems":1,"description":"List of asset names to be deleted.","items":{"type":"string","example":"well_1","minLength":1,"maxLength":64}}}},"responses.AssetGet":{"allOf":[{"$ref":"#/components/schemas/type.Asset"}]},"requests.AssetUpdate":{"required":["title"],"type":"object","properties":{"asset_type_name":{"type":"string","example":"beam_pump","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64,"description":"Asset Type `name`. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"properties":{"type":"array","description":"Array of custom properties. These properties are not used by the Kelvin Platform and are for end-user use only.","items":{"$ref":"#/components/schemas/requests.AssetPropertyCreate"}},"title":{"type":"string","example":"Well 01","minLength":1,"maxLength":64,"description":"Asset display name (`title`)."}}},"responses.AssetUpdate":{"allOf":[{"$ref":"#/components/schemas/type.Asset"}]},"requests.ControlChangeClusteringGet":{"required":["end_date","start_date","time_bucket"],"type":"object","properties":{"end_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"Most recent (end) creation time for counting the number of Control Changes. Time is based on UTC timezone, formatted in RFC 3339."},"resources":{"type":"array","example":["krn:ad:bp_01/motor_speed_set_point","krn:ad:bp_16/motor_speed_set_point"],"description":"Filter Assets / Data Streams (`resources`) linked to Control Changes for inclusion in the count. The filter is on the full name only. All strings in the array are treated as `OR`. Each Asset and Data Stream name can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"krn","minLength":1,"maxLength":256}},"sources":{"type":"array","example":["krn:app:motor-speed-control"],"description":"Filter to only count Control Changes from certain `sources`. The filter is on the full name only. All strings in the array are treated as `OR`. Each KRN name can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"krn","minLength":1,"maxLength":256}},"start_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"Earliest (start) creation time for counting the  number of Control Changes. Time is based on UTC timezone, formatted in RFC 3339."},"states":{"type":"array","example":["sent","applied"],"description":"Filter to only count Control Changes associated with one or more `states`. The filter is on the full `state` name only. All strings in the array are treated as `OR`.","items":{"$ref":"#/components/schemas/enum.ControlChangeState"}},"time_bucket":{"type":"string","example":"5m","description":"Defines the time range to use to group and count the Control Changes."}}},"responses.ControlChangeClustering":{"type":"object","properties":{"control_change_ids":{"type":"array","example":["0002bc79-b42f-461b-95d6-cf0a28ba87aa","518bcb79-ffaa-4d3f-8042-52634c34b71e"],"description":"An array of Control Change `id`'s that have been counted.","items":{"type":"string","format":"uuid"}},"count":{"type":"integer","example":2,"description":"Number of occurrences of Control Changes over the time period of `time_bucket` that meet the request parameters starting from time `time_bucket_start`."},"time_bucket_start":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"Time of the start of the count for the current `time_bucket` period in RFC 3339 UTC date/time format."}}},"type.ControlChangeFrom":{"type":"object","description":"Information about the current `resource` data when the the Control Change `payload` is created.","required":["value","timestamp"],"properties":{"value":{"$ref":"#/components/schemas/type.Any"},"timestamp":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the current `value` is recorded in the Control Change object, formatted in RFC 3339."}}},"enum.ControlChangeQueueingMode":{"description":"Queue interaction mode for incoming Control Changes.","type":"string","enum":["enqueue","next","immediate"]},"type.ControlChangeQueueing":{"type":"object","additionalProperties":false,"description":"Queueing behavior for Control Changes. This object is atomic: when `queueing` is present, `mode` is required.","required":["mode"],"properties":{"mode":{"$ref":"#/components/schemas/enum.ControlChangeQueueingMode"}}},"requests.ControlChangeCreate":{"required":["resource","expiration_date","payload"],"type":"object","properties":{"expiration_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Control Change will expire and the `status` automatically marked as `failed`, formatted in RFC 3339."},"from":{"$ref":"#/components/schemas/type.ControlChangeFrom"},"payload":{"$ref":"#/components/schemas/type.Any","example":2000},"queueing":{"$ref":"#/components/schemas/type.ControlChangeQueueing"},"trace_id":{"type":"string"},"resource":{"type":"string","format":"krn","example":"krn:ad:beam_pump_01/motor_speed_set_point","minLength":1,"maxLength":256,"description":"The asset / data stream pair that this Control Change will be applied to."},"retries":{"type":"integer","example":3,"description":"How many times the Control Change Manager will try and send the same Control Change request to the Bridge before the change is tagged `failed` and no further attempts will be made. If the Bridge sends a `processed` acknowledgment, then the Control Change Manager will stop any further retries and wait for an `applied` response."},"timeout":{"type":"integer","example":150,"description":"How long the Control Change Manager will wait in seconds for the Bridge to send a `processed` acknowledgement before a retry will be attempted. If the total number of retries has reach its `retries` limit, then the change is tagged `failed` and no further attempts will be made."}}},"responses.ControlChangeCreate":{"required":["id","trace_id"],"type":"object","properties":{"created_by":{"type":"string","format":"krn","x-allowed-krn":["recommendation","user","wl","wlappv"],"example":"krn:user:user@example.com","description":"KRN of the process that created the Control Change. Allowed namespaces are `user`, `wl`, `wlappv`, and `recommendation`."},"created_type":{"type":"string","example":"recommendation","description":"Type of process that created the Control Change. This is inferred from `source`."},"id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"A unique randomly generated UUID as the key `id` for the Control Change."},"last_state":{"$ref":"#/components/schemas/enum.ControlChangeState","description":"Current state of the Control Change."},"payload":{"$ref":"#/components/schemas/type.Any","example":2000},"queueing":{"$ref":"#/components/schemas/type.ControlChangeQueueing"},"resource":{"type":"string","format":"krn","x-allowed-krn":["ad"],"example":"krn:ad:beam_pump_01/motor_speed_set_point","description":"Resource KRN that this Control Change targets. Allowed namespace is `ad`."},"source":{"type":"string","format":"krn","x-allowed-krn":["recommendation","user","wl","wlappv"],"example":"krn:recommendation:6ab6c5a7-37d2-4baa-b502-f242113eea97","description":"Source KRN of the process that created the Control Change request. Allowed namespaces are `user`, `wl`, `wlappv`, and `recommendation`."},"timestamp":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the log was created, formatted in RFC 3339."},"trace_id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"This is for internal purposes and is the same as the `id`."}}},"requests.ControlChangeLastGet":{"type":"object","properties":{"resources":{"type":"array","example":["krn:ad:beam_pump_02/motor_speed_set_point","krn:ad:beam_pump_16/motor_speed_set_point"],"description":"Return only Control Changes for the provided resource KRNs. The latest matching Control Change is returned per resource. Allowed namespaces are `ad`, `asset`, and `datastream`.","items":{"type":"string","format":"krn","x-allowed-krn":["ad","asset","datastream"]}},"sources":{"type":"array","example":["krn:user:user@example.com","krn:wlappv:my-cluster/my-workload:motor_speed_control/1.0.0"],"description":"Return only Control Changes created by the provided source KRNs. Allowed namespaces are `user`, `wl`, `wlappv`, and `recommendation`.","items":{"type":"string","format":"krn","x-allowed-krn":["recommendation","user","wl","wlappv"]}},"states":{"type":"array","example":["sent","applied"],"description":"Return only Control Changes whose `last_state` matches one or more values.","items":{"$ref":"#/components/schemas/enum.ControlChangeState"}},"trace_ids":{"type":"array","example":["trace id change 123"],"description":"Return only Control Changes associated with one or more Trace IDs.","items":{"type":"string","minLength":1,"maxLength":256}}}},"enum.ControlChangeSource":{"description":"Indicates who provided the value, the Bridge or the Control Change Manager","type":"string","enum":["bridge","ccm"]},"type.ControlChangeReport":{"type":"object","required":["value","timestamp","source"],"properties":{"value":{"$ref":"#/components/schemas/type.Any"},"timestamp":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z"},"source":{"$ref":"#/components/schemas/enum.ControlChangeSource"}}},"type.ControlChangeReported":{"type":"object","description":"The values reported by either the Bridge or CCM referring to the moments before and after the Control Change was applied.","properties":{"before":{"$ref":"#/components/schemas/type.ControlChangeReport"},"after":{"$ref":"#/components/schemas/type.ControlChangeReport"}}},"responses.ControlChangeGetStatus":{"required":["state"],"type":"object","properties":{"message":{"type":"string","description":"A message about the change in status. This will only appear if there is a message attached."},"reported":{"$ref":"#/components/schemas/type.ControlChangeReported"},"state":{"$ref":"#/components/schemas/enum.ControlChangeState","description":"Control Change state when log was created."},"timestamp":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the log was created, formatted in RFC 3339."}}},"responses.ControlChangeGet":{"required":["id","resource"],"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Control Change was created, formatted in RFC 3339."},"created_by":{"type":"string","format":"krn","x-allowed-krn":["recommendation","user","wl","wlappv"],"example":"krn:user:user@example.com","description":"KRN of the process that created the Control Change. Allowed namespaces are `user`, `wl`, `wlappv`, and `recommendation`."},"created_type":{"type":"string","example":"recommendation","description":"Type of process that created the Control Change. This is inferred from `source`."},"id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"A unique randomly generated UUID as the key `id` for the Control Change."},"trace_id":{"type":"string","example":"app-trace-123","maxLength":256},"last_message":{"type":"string","example":"The Control Change was sent to the Bridge. At this stage, the system is monitoring according to the Acceptance Criteria parameters and the retry logic.","description":"Last message received from the Control Change Manager."},"last_state":{"$ref":"#/components/schemas/enum.ControlChangeState","description":"Current state of the Control Change."},"retries":{"type":"integer","example":3,"description":"How many times the Control Change Manager will try and send the same Control Change request to the Bridge before the change is tagged `failed` and no further attempts will be made. If the Bridge sends a `processed` acknowledgment, then the Control Change Manager will stop any further retries and wait for an `applied` response."},"timeout":{"type":"integer","example":150,"description":"How long the Control Change Manager will wait in seconds for the Bridge to send a `processed` acknowledgement before a retry will be attempted. If the total number of retries has reach its `retries` limit, then the change is tagged `failed` and no further attempts will be made."},"expiration_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Control Change will expire and the `status` is automatically marked as `failed`, formatted in RFC 3339."},"from":{"$ref":"#/components/schemas/type.ControlChangeFrom"},"reported":{"$ref":"#/components/schemas/type.ControlChangeReported"},"payload":{"$ref":"#/components/schemas/type.Any","example":2000},"queueing":{"$ref":"#/components/schemas/type.ControlChangeQueueing"},"resource":{"type":"string","format":"krn","x-allowed-krn":["ad"],"example":"krn:ad:beam_pump_01/motor_speed_set_point","description":"Resource KRN that this Control Change targets. Allowed namespace is `ad`."},"status_log":{"type":"array","description":"Array of dictionary objects with the details of each `status` change.","items":{"$ref":"#/components/schemas/responses.ControlChangeGetStatus"}},"timestamp":{"type":"string","format":"date-time","example":"2023-11-13T12:00:00Z","description":"UTC time when the Control Change was created, formatted in RFC 3339."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Control Change keys were last updated, formatted in RFC 3339."}}},"responses.ControlChangeLastGetPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"Latest Control Changes matching the request filters for the current cursor page.","items":{"$ref":"#/components/schemas/responses.ControlChangeGet"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.ControlChangeLastGetPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"Latest Control Changes matching the request filters for the requested page.","items":{"$ref":"#/components/schemas/responses.ControlChangeGet"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.ControlChangeLastGetPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.ControlChangeGet"}]},"requests.ControlChangesList":{"type":"object","properties":{"ids":{"type":"array","example":["0002bc79-b42f-461b-95d6-cf0a28ba87aa","89df1fa1-72b3-4ffa-aae6-1a3e5324ee2e"],"description":"Return only Control Changes whose `id` matches one or more UUIDs.","items":{"type":"string","format":"uuid"}},"resources":{"type":"array","example":["krn:ad:beam_pump_02/motor_speed_set_point","krn:ad:beam_pump_16/motor_speed_set_point"],"description":"Return only Control Changes for the provided resource KRNs. Allowed namespaces are `ad`, `asset`, and `datastream`.","items":{"type":"string","format":"krn","x-allowed-krn":["ad","asset","datastream"]}},"sources":{"type":"array","example":["krn:user:user@example.com","krn:wlappv:my-cluster/my-workload:motor_speed_control/1.0.0"],"description":"Return only Control Changes created by the provided source KRNs. Allowed namespaces are `user`, `wl`, `wlappv`, and `recommendation`.","items":{"type":"string","format":"krn","x-allowed-krn":["recommendation","user","wl","wlappv"]}},"states":{"type":"array","example":["sent","applied"],"description":"Return only Control Changes whose `last_state` matches one or more values.","items":{"$ref":"#/components/schemas/enum.ControlChangeState"}},"trace_ids":{"type":"array","example":["trace id change 123"],"description":"Return only Control Changes associated with one or more Trace IDs.","items":{"type":"string","minLength":1,"maxLength":256}}}},"responses.ControlChangesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"Control Changes matching the request filters for the current cursor page.","items":{"$ref":"#/components/schemas/responses.ControlChangeGet"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.ControlChangesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"Control Changes matching the request filters for the requested page.","items":{"$ref":"#/components/schemas/responses.ControlChangeGet"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.ControlChangesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.ControlChangeGet"}]},"requests.ControlChangeRangeGet":{"required":["end_date","start_date"],"type":"object","properties":{"end_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"Latest creation timestamp (inclusive) for returned Control Changes, in RFC 3339 UTC format."},"resources":{"type":"array","example":["krn:ad:bp_01/motor_speed_set_point","krn:ad:bp_16/motor_speed_set_point"],"description":"Return only Control Changes for the provided resource KRNs. Allowed namespaces are `ad`, `asset`, and `datastream`.","items":{"type":"string","format":"krn","x-allowed-krn":["ad","asset","datastream"]}},"sources":{"type":"array","example":["krn:user:user@example.com","krn:wlappv:my-cluster/my-workload:motor-speed-control/1.0.0"],"description":"Return only Control Changes created by the provided source KRNs. Allowed namespaces are `user`, `wl`, `wlappv`, and `recommendation`.","items":{"type":"string","format":"krn","x-allowed-krn":["recommendation","user","wl","wlappv"]}},"start_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"Earliest creation timestamp (inclusive) for returned Control Changes, in RFC 3339 UTC format."},"states":{"type":"array","example":["sent","applied"],"description":"Return only Control Changes whose `last_state` matches one or more values.","items":{"$ref":"#/components/schemas/enum.ControlChangeState"}},"trace_ids":{"type":"array","example":["trace id change 123"],"description":"Return only Control Changes associated with one or more Trace IDs.","items":{"type":"string","minLength":1,"maxLength":256}}}},"responses.ControlChangeRangeGetPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"Control Changes in the requested time range for the current cursor page.","items":{"$ref":"#/components/schemas/responses.ControlChangeGet"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.ControlChangeRangeGetPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"Control Changes in the requested time range for the requested page.","items":{"$ref":"#/components/schemas/responses.ControlChangeGet"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.ControlChangeRangeGetPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.ControlChangeGet"}]},"type.ControlChangePolicyResourceValueCheck":{"type":"object","additionalProperties":false,"required":["resource","tolerance"],"properties":{"resource":{"type":"string","format":"krn","maxLength":256,"example":"krn:ad:beam_pump_01/motor_speed_feedback","description":"Asset/Data Stream pair observed to evaluate completion. The policy `resource` and all `resource_value_check[].resource` values must belong to the same asset and datastreams with the same data type."},"tolerance":{"type":"number","minimum":0,"default":0,"example":5,"description":"Allowed deviation (±) from the requested value."}}},"type.ControlChangePolicyDefinition":{"type":"object","additionalProperties":false,"description":"Policy fields used for per-resource Control Change behavior. During execution, each field is resolved with this precedence: explicit Control Change request value, then resource policy value, then platform default. `expiration_date` and guardrails are not part of policy configuration.","properties":{"resource_value_check":{"type":"array","description":"Completion checks that must all pass for a Control Change to be marked as applied. All resources in this list must use the same asset and datastream data type as the policy `resource`.","items":{"$ref":"#/components/schemas/type.ControlChangePolicyResourceValueCheck"}},"retries":{"type":"integer","minimum":0,"example":3,"description":"Number of retry attempts after the initial delivery. This field overrides independently and can be set without `retry_interval`."},"retry_interval":{"type":"integer","minimum":1,"example":150,"description":"Time in seconds between retry attempts. This field overrides independently and can be set without `retries`."},"queueing":{"allOf":[{"$ref":"#/components/schemas/type.ControlChangeQueueing"}],"description":"Queueing behavior used when a new Control Change is submitted for the same resource. If omitted, this field inherits from precedence."}}},"type.ControlChangePolicyConfig":{"type":"object","required":["policy"],"properties":{"policy":{"$ref":"#/components/schemas/type.ControlChangePolicyDefinition"}}},"type.ControlChangePolicyConfigWithResource":{"allOf":[{"type":"object","required":["resource"],"properties":{"resource":{"type":"string","format":"krn","maxLength":256,"example":"krn:ad:beam_pump_01/motor_speed_set_point","description":"Asset/Data Stream pair to which this Control Change Policy applies."}}},{"$ref":"#/components/schemas/type.ControlChangePolicyConfig"}]},"requests.ControlChangePolicyCreate":{"allOf":[{"$ref":"#/components/schemas/type.ControlChangePolicyConfigWithResource"}]},"type.ControlChangePolicy":{"allOf":[{"$ref":"#/components/schemas/type.ControlChangePolicyConfigWithResource"},{"type":"object","properties":{"created":{"type":"string","format":"date-time","description":"UTC time when the policy was created, formatted in RFC 3339."},"created_by":{"type":"string","format":"krn","description":"KRN of the user or process that created the policy."},"updated":{"type":"string","format":"date-time","description":"UTC time when the policy was last updated, formatted in RFC 3339."},"updated_by":{"type":"string","format":"krn","description":"KRN of the user or process that last updated the policy."}}}]},"responses.ControlChangePolicyCreate":{"allOf":[{"$ref":"#/components/schemas/type.ControlChangePolicy"}]},"responses.ControlChangePolicyGet":{"allOf":[{"$ref":"#/components/schemas/type.ControlChangePolicy"}]},"requests.ControlChangePoliciesList":{"type":"object","properties":{"resources":{"type":"array","description":"Array of Asset/Data Stream pairs used to filter the Control Change Policy list before returning.","items":{"type":"string","format":"krn","maxLength":256,"example":"krn:ad:beam_pump_01/motor_speed_set_point"}},"queueing_modes":{"type":"array","description":"Filter to list policies with specific queueing modes.","items":{"$ref":"#/components/schemas/enum.ControlChangeQueueingMode"}}}},"responses.ControlChangePoliciesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.ControlChangePolicy"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.ControlChangePoliciesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.ControlChangePolicy"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.ControlChangePoliciesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.ControlChangePolicy"}]},"requests.ControlChangePolicyUpdate":{"description":"Full replacement policy payload. Fields omitted from `policy` are unset in policy configuration and therefore inherit at runtime, except `resource_value_check`, which is cleared when omitted.","allOf":[{"$ref":"#/components/schemas/type.ControlChangePolicyConfig"}]},"responses.ControlChangePolicyUpdate":{"allOf":[{"$ref":"#/components/schemas/type.ControlChangePolicy"}]},"type.CustomActionCreationFields":{"type":"object","description":"User-defined fields that describe a Custom Action.","required":["resource","type","title","expiration_date"],"properties":{"type":{"type":"string","example":"email","description":"Custom Action type `name`."},"type_title":{"type":"string","example":"Web Hook","description":"Display title of the Custom Action type."},"resource":{"type":"string","format":"krn","x-allowed-krn":["asset"],"example":"krn:asset:my-asset","description":"Resource KRN targeted by this Custom Action. Allowed namespace is `asset`."},"title":{"type":"string","example":"Diagnose Beam Pump GW-B12-037","description":"Short human-readable title of the Custom Action."},"description":{"type":"string","example":"Beam Pump GW-B12-037 needs to be diagnosed.","description":"Detailed context or instructions for the Custom Action."},"expiration_date":{"type":"string","description":"UTC time when the Custom Action expires, formatted in RFC 3339.","format":"date-time"},"payload":{"type":"object","example":{"id":"WO-2025-0412","priority":"high","description":"Diagnose Beam Pump GW-B12-037."},"description":"JSON payload delivered to the executor. The object shape depends on the Custom Action type."},"trace_id":{"type":"string","description":"Correlation identifier used to trace this Custom Action across services."}}},"requests.CustomActionCreate":{"allOf":[{"$ref":"#/components/schemas/type.CustomActionCreationFields"},{"type":"object"}]},"enum.CustomActionFailureReason":{"type":"string","description":"Failure reason reported for the Custom Action.\n\n* `none`: No failure reason.\n* `reported_failed`: The executor reported a failure.\n* `expired`: The action was not delivered before `expiration_date`.\n* `lost`: The action was delivered, but the executor restarted before reporting completion.\n* `executor_gone`: The action was delivered, but the executor became unavailable until `expiration_date`.\n* `other`: Other failure reason.","enum":["none","other","reported_failed","expired","lost","executor_gone"]},"type.CustomActionTransitionData":{"type":"object","description":"State transition payload for a Custom Action.","required":["state"],"properties":{"state":{"$ref":"#/components/schemas/enum.CustomActionState"},"failure_reason":{"$ref":"#/components/schemas/enum.CustomActionFailureReason"},"message":{"type":"string","description":"Optional human-readable message associated with the transition."}}},"type.CustomActionTransitions":{"type":"object","description":"Collection of transition entries for a Custom Action.","properties":{"status_logs":{"type":"array","description":"Chronological transition log for the Custom Action.","items":{"allOf":[{"$ref":"#/components/schemas/type.CustomActionTransitionData"},{"type":"object","required":["timestamp","source"],"properties":{"timestamp":{"type":"string","format":"date-time","description":"UTC time when this state transition was recorded, formatted in RFC 3339."},"source":{"type":"string","format":"krn","x-allowed-krn":["recommendation","user","wl","wlappv"],"description":"KRN of the process that reported this transition entry. Allowed namespaces are `user`, `wl`, `wlappv`, and `recommendation`."}}}]}}}},"type.CustomAction":{"description":"Custom Action with lifecycle metadata and transition history.","allOf":[{"type":"object","required":["id","created","created_by","updated","updated_by"],"properties":{"id":{"type":"string","format":"uuid","description":"Unique identifier of the Custom Action."},"timestamp":{"type":"string","format":"date-time","description":"UTC timestamp associated with this action event, formatted in RFC 3339. It can differ from `created` when the action originates on the edge."},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Custom Action was created, formatted in RFC 3339."},"created_by":{"type":"string","format":"krn","x-allowed-krn":["recommendation","user","wl","wlappv"],"example":"krn:user:user@example.com","description":"KRN of the user or process that created the Custom Action. Allowed namespaces are `user`, `wl`, `wlappv`, and `recommendation`."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Custom Action was last updated, formatted in RFC 3339."},"updated_by":{"type":"string","format":"krn","x-allowed-krn":["recommendation","user","wl","wlappv"],"example":"krn:user:user@example.com","description":"KRN of the user or process that last updated the Custom Action. Allowed namespaces are `user`, `wl`, `wlappv`, and `recommendation`."}}},{"$ref":"#/components/schemas/type.CustomActionCreationFields"},{"$ref":"#/components/schemas/type.CustomActionTransitionData"},{"$ref":"#/components/schemas/type.CustomActionTransitions"}]},"responses.CustomActionCreate":{"allOf":[{"$ref":"#/components/schemas/type.CustomAction"}]},"requests.CustomActionsList":{"type":"object","description":"Filters applied when listing Custom Actions.","properties":{"ids":{"type":"array","example":["0002bc79-b42f-461b-95d6-cf0a28ba87aa","00080f9e-d086-452d-b41d-c8aa8fb27c92"],"description":"Return only Custom Actions whose `id` matches one or more UUIDs.","items":{"type":"string","format":"uuid"}},"resources":{"type":"array","example":["krn:asset:bp_16","krn:asset:bp_21"],"description":"Return only Custom Actions associated with one or more resource KRNs. Allowed namespace is `asset`.","items":{"type":"string","format":"krn","x-allowed-krn":["asset"]}},"created_by":{"type":"array","example":["krn:wlappv:my-cluster/my-workload:my-app/1.2.0","krn:user:user@example.com"],"description":"Return only Custom Actions created by one or more creator KRNs. Allowed namespaces are `user`, `wl`, `wlappv`, `recommendation`, `app`, and `appversion`.","items":{"type":"string","format":"krn","x-allowed-krn":["app","appversion","recommendation","user","wl","wlappv"]}},"states":{"type":"array","example":["ready","pending"],"description":"Return only Custom Actions whose `state` matches one or more values.","items":{"$ref":"#/components/schemas/enum.CustomActionState"}},"types":{"type":"array","example":["Email"],"description":"Return only Custom Actions whose Custom Action type `name` matches one or more values.","items":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64}},"trace_ids":{"type":"array","example":["trace id change 123"],"description":"Return only Custom Actions associated with one or more trace IDs.","items":{"type":"string","minLength":1,"maxLength":256}}}},"responses.CustomActionsListPaginatedResponseCursor":{"type":"object","description":"Cursor-based paginated Custom Action list response.","properties":{"data":{"type":"array","description":"Custom Actions matching the request filters for the current cursor page.","items":{"$ref":"#/components/schemas/type.CustomAction"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.CustomActionsListPaginatedResponseLimits":{"type":"object","description":"Page-based paginated Custom Action list response.","properties":{"data":{"type":"array","description":"Custom Actions matching the request filters for the requested page.","items":{"$ref":"#/components/schemas/type.CustomAction"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.CustomActionsListPaginatedResponseStream":{"description":"Single Custom Action object emitted in stream mode.","allOf":[{"$ref":"#/components/schemas/type.CustomAction"}]},"responses.CustomActionGet":{"description":"Full Custom Action details for the requested `action_id`.","allOf":[{"$ref":"#/components/schemas/type.CustomAction"}]},"requests.CustomActionsTypeCreate":{"required":["name","title"],"type":"object","properties":{"name":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","example":"Email","maxLength":64,"description":"Unique identifier `name` for the Custom Action Type."},"title":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","example":"Email","maxLength":64,"description":"Unique identifier `title` for the Custom Action Type."}}},"type.CustomActionType":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Custom Action Type was created, formatted in RFC 3339."},"created_by":{"type":"string","format":"krn","example":"krn:user:user@example.com","description":"The user or process that initiated the creation of this custom action type."},"name":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","example":"Email","maxLength":64,"description":"Unique identifier `name` for the Custom Action Type."},"title":{"type":"string","example":"Email","maxLength":64,"description":"Display title of the Custom Action type."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Custom Action Type keys were last updated, formatted in RFC 3339."},"updated_by":{"type":"string","format":"krn","example":"krn:user:user@example.com","description":"The user or process that updated this custom action type."}}},"responses.CustomActionsTypeCreate":{"allOf":[{"$ref":"#/components/schemas/type.CustomActionType"}]},"responses.CustomActionsTypesListPaginatedCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Recommendation Types and associated context objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.CustomActionType"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.CustomActionsTypesListPaginatedLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Recommendation Types and associated context objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.CustomActionType"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.CustomActionsTypesListPaginatedStream":{"allOf":[{"$ref":"#/components/schemas/type.CustomActionType"}]},"responses.CustomActionsTypeGet":{"allOf":[{"$ref":"#/components/schemas/type.CustomActionType"}]},"requests.CustomActionsTypeUpdate":{"type":"object","properties":{"title":{"type":"string","example":"Email","minLength":1,"maxLength":64,"description":"New display title for the Custom Action type."}}},"responses.CustomActionsTypeUpdate":{"allOf":[{"$ref":"#/components/schemas/type.CustomActionType"}]},"type.KelvinTimestampAnomaly":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Define if the timestamp anomaly algorithm is enabled."}}},"enum.WindowIntervalUnit":{"type":"string","enum":["sec","min","hour","day"],"description":"The unit of time for the window interval. This is used in data availability and stale detection checks to define the time period over which data is expected."},"type.KelvinStaleDetection":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Define if the stale detection algorithm is enabled."},"configuration":{"type":"object","description":"The configuration for the stale detection algorithm.","properties":{"window_interval":{"type":"integer","description":"The size of the window to check for stale data."},"window_interval_unit":{"$ref":"#/components/schemas/enum.WindowIntervalUnit","example":"min","description":"The unit of time for the window interval."}}}}},"type.KelvinOutOfRangeDetection":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Define if the out of range detection algorithm is enabled."},"configuration":{"type":"object","description":"The configuration for the out of range detection algorithm.","properties":{"min_threshold":{"type":"number","description":"The minimum threshold for the out of range detection."},"max_threshold":{"type":"number","description":"The maximum threshold for the out of range detection."}}}}},"enum.OutlierDetectionModel":{"type":"string","enum":["z_score"],"description":"The model to use for outlier detection. This is used in the outlier detection algorithm to determine how to identify outliers in the data."},"type.KelvinOutlierDetection":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Define if the outlier detection algorithm is enabled."},"configuration":{"type":"object","description":"The configuration for the outlier detection algorithm.","properties":{"model":{"$ref":"#/components/schemas/enum.OutlierDetectionModel"},"z_score":{"type":"object","description":"The configuration for the z-score outlier detection model.","properties":{"threshold":{"type":"number","description":"The threshold for outlier detection."},"window_size":{"type":"integer","description":"The size of the window to check for outliers."}}}}}}},"type.KelvinDataAvailability":{"type":"object","required":["enabled"],"properties":{"enabled":{"type":"boolean","description":"Define if the data availability algorithm is enabled."},"configuration":{"type":"object","description":"The configuration for the data availability algorithm.","properties":{"window_expected_number_msgs":{"type":"integer","description":"The expected number of messages."},"window_interval_unit":{"$ref":"#/components/schemas/enum.WindowIntervalUnit","example":"sec","description":"The window interval unit for the data availability check."}}}}},"type.DataQualityConfigurations":{"type":"object","description":"The Data Quality configurations applied to the Asset Data Stream pair.","properties":{"kelvin_timestamp_anomaly":{"$ref":"#/components/schemas/type.KelvinTimestampAnomaly"},"kelvin_stale_detection":{"$ref":"#/components/schemas/type.KelvinStaleDetection"},"kelvin_out_of_range_detection":{"$ref":"#/components/schemas/type.KelvinOutOfRangeDetection"},"kelvin_outlier_detection":{"$ref":"#/components/schemas/type.KelvinOutlierDetection"},"kelvin_data_availability":{"$ref":"#/components/schemas/type.KelvinDataAvailability"}}},"type.DataQualityCreationFields":{"type":"object","required":["resource","configurations"],"properties":{"resource":{"type":"string","description":"The Asset Data Stream pair to which the DataQuality is applied. (example: `krn:ad:asset1/setpoint`).","format":"krn","example":"krn:ad:asset1/setpoint","maxLength":256},"configurations":{"$ref":"#/components/schemas/type.DataQualityConfigurations"}}},"requests.DataQualityCreate":{"allOf":[{"$ref":"#/components/schemas/type.DataQualityCreationFields"}]},"type.DataQuality":{"type":"object","required":["resource","configurations"],"properties":{"resource":{"type":"string","description":"The Asset Data Stream pair to which the DataQuality is applied. (example: `krn:ad:asset1/setpoint`).","format":"krn","example":"krn:ad:asset1/setpoint","maxLength":256},"configurations":{"type":"object","description":"The Data Quality configurations applied to the Asset Data Stream pair.","properties":{"kelvin_timestamp_anomaly":{"$ref":"#/components/schemas/type.KelvinTimestampAnomaly"},"kelvin_stale_detection":{"$ref":"#/components/schemas/type.KelvinStaleDetection"},"kelvin_out_of_range_detection":{"$ref":"#/components/schemas/type.KelvinOutOfRangeDetection"},"kelvin_outlier_detection":{"$ref":"#/components/schemas/type.KelvinOutlierDetection"},"kelvin_data_availability":{"$ref":"#/components/schemas/type.KelvinDataAvailability"}}},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the data quality was created, formatted in RFC 3339."},"created_by":{"type":"string","format":"krn","example":"krn:user:john@kelvininc.com","maxLength":256,"description":"The process that created this data quality. This can be a user or an automated process like a workload, application, etc."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any data quality keys were last updated, formatted in RFC 3339."},"updated_by":{"type":"string","format":"krn","example":"krn:user:john@kelvininc.com","maxLength":256,"description":"The process that last updated this data quality. This can be a user or an automated process like a workload, application, etc."}}},"responses.DataQualityCreate":{"allOf":[{"$ref":"#/components/schemas/type.DataQuality"}]},"responses.DataQualityGet":{"allOf":[{"$ref":"#/components/schemas/type.DataQuality"}]},"requests.DataQualityUpdate":{"type":"object","properties":{"configurations":{"$ref":"#/components/schemas/type.DataQualityConfigurations"}}},"responses.DataQualityUpdate":{"allOf":[{"$ref":"#/components/schemas/type.DataQuality"}]},"requests.DataQualityList":{"type":"object","properties":{"resources":{"type":"array","description":"Array of Asset, Data stream and or Asset Data Stream KRNs to filter the Data Qualities list on server before returning. (example: `krn:ad:asset1/setpoint`).","items":{"type":"string","format":"krn","example":"krn:ad:asset1/setpoint"}}}},"responses.DataQualityListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.DataQuality"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.DataQualityListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.DataQuality"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.DataQualityListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.DataQuality"}]},"requests.BulkDataQualityUpsert":{"type":"object","properties":{"data_qualities":{"type":"array","description":"An array of Data Quality configurations to create or update.","items":{"$ref":"#/components/schemas/type.DataQualityCreationFields"}}}},"requests.BulkDataQualityDelete":{"type":"object","properties":{"resources":{"type":"array","description":"An array of Asset/Data Stream pairs or Asset for deleting the associated Data Qualities configurations. (example: `krn:ad:asset1/setpoint`).","items":{"type":"string","format":"krn"}}}},"enum.DataType":{"type":"string","enum":["boolean","number","object","string"]},"requests.DataQualityMetricCreate":{"type":"object","required":["name","title","data_type_name"],"properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"custom_availability_metric","maxLength":64,"description":"Unique identifier `name` of the Data Quality Metric."},"title":{"type":"string","example":"Custom Availability Metric","maxLength":64,"description":"Display name (`title`) of the Data Quality Metric."},"data_type_name":{"$ref":"#/components/schemas/enum.DataType","description":"The data type of the Data Quality Metric."},"description":{"type":"string","nullable":true,"example":"Custom metric for high-priority assets requiring 99.9% uptime","maxLength":200,"description":"Optional description of the Data Quality Metric."}}},"type.DataQualityMetric":{"type":"object","properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"custom_availability_metric","maxLength":64,"description":"Unique identifier `name` of the Data Quality Metric."},"title":{"type":"string","example":"Custom Availability Metric","maxLength":64,"description":"Display name (`title`) of the Data Quality Metric."},"data_type_name":{"$ref":"#/components/schemas/enum.DataType","description":"The data type of the Data Quality Metric."},"description":{"type":"string","nullable":true,"example":"Custom metric for high-priority assets requiring 99.9% uptime","maxLength":200,"description":"Optional description of the Data Quality Metric."},"is_protected":{"type":"boolean","example":false,"description":"Indicates whether this metric is system-protected and cannot be modified or deleted."},"in_use_by":{"type":"array","description":"List of workload sources that are using this Data Quality Metric.","items":{"type":"string","format":"krn","example":"krn:wlappv:cluster1/workload1/app1/1.2.0","maxLength":256}},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Data Quality Metric was first created, formatted in RFC 3339."},"created_by":{"type":"string","format":"krn","example":"krn:user:john@kelvininc.com","maxLength":256,"description":"The user or process that created this Data Quality Metric."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Data Quality Metric keys were last updated, formatted in RFC 3339."},"updated_by":{"type":"string","format":"krn","example":"krn:user:john@kelvininc.com","maxLength":256,"description":"The user or process that last updated this Data Quality Metric."}}},"responses.DataQualityMetricCreate":{"allOf":[{"$ref":"#/components/schemas/type.DataQualityMetric"}]},"responses.DataQualityMetricGet":{"allOf":[{"$ref":"#/components/schemas/type.DataQualityMetric"}]},"requests.DataQualityMetricUpdate":{"type":"object","properties":{"title":{"type":"string","example":"Updated Custom Availability Metric","maxLength":64,"description":"Display name (`title`) of the Data Quality Metric."},"description":{"type":"string","nullable":true,"example":"Updated description for custom availability metric","maxLength":200,"description":"Optional description of the Data Quality Metric."}}},"responses.DataQualityMetricUpdate":{"allOf":[{"$ref":"#/components/schemas/type.DataQualityMetric"}]},"requests.DataQualityMetricsList":{"type":"object","properties":{"names":{"type":"array","description":"Filter metrics by specific names.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"custom_availability_metric"}},"data_type_names":{"type":"array","description":"Filter metrics by data type names.","items":{"type":"string","example":"number"}},"search":{"type":"array","description":"Search for metrics with `name` or `title` matching the search term.","items":{"type":"string"}}}},"responses.DataQualityMetricsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.DataQualityMetric"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.DataQualityMetricsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.DataQualityMetric"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.DataQualityMetricsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.DataQualityMetric"}]},"requests.UpsertDataQualityMetricsBulk":{"type":"object","properties":{"data_quality_metrics":{"type":"array","description":"An array of Data Quality Metrics to create or update.","items":{"type":"object","required":["name"],"properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"custom_availability_metric","maxLength":64},"title":{"type":"string","example":"Custom Availability Metric","maxLength":64},"data_type_name":{"$ref":"#/components/schemas/enum.DataType","description":"The data type of the Data Quality Metric."},"description":{"type":"string","nullable":true,"example":"Custom metric description","maxLength":200}}}}}},"requests.DeleteDataQualityMetricsBulk":{"type":"object","properties":{"metric_names":{"type":"array","description":"An array of Data Quality Metric names to delete.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"custom_availability_metric"}}}},"requests.DataQualitySimulate":{"type":"object","properties":{"resource":{"type":"string","format":"krn","maxLength":256,"description":"The Asset/Data Stream pair to simulate the Data Quality configurations on. (example: `krn:ad:asset1/setpoint`)."},"configurations":{"type":"object","description":"The Data Quality configurations.","properties":{"kelvin_stale_detection":{"$ref":"#/components/schemas/type.KelvinStaleDetection"},"kelvin_out_of_range_detection":{"$ref":"#/components/schemas/type.KelvinOutOfRangeDetection"},"kelvin_outlier_detection":{"$ref":"#/components/schemas/type.KelvinOutlierDetection"},"kelvin_data_availability":{"$ref":"#/components/schemas/type.KelvinDataAvailability"}}},"start_time":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"The start timestamp for the simulation, formatted in RFC 3339."},"end_time":{"type":"string","format":"date-time","example":"2024-12-19T18:22:18.582724Z","description":"The end timestamp for the simulation, formatted in RFC 3339."}}},"type.SimulationData":{"type":"object","properties":{"payload":{"$ref":"#/components/schemas/type.Any","description":"Raw value for `resource` at the specified `timestamp`."},"resource":{"type":"string","nullable":true,"format":"krn","example":"krn:ad:asset1/data_stream1","maxLength":256,"description":"The `resource` (Asset / Data Stream pair) associated with the `payload`."},"timestamp":{"type":"string","format":"date-time","example":"2023-11-13T12:00:00Z","description":"UTC time when the `payload` values were saved, formatted in RFC 3339."}}},"responses.DataQualitySimulate":{"type":"object","properties":{"timeseries_data":{"type":"array","description":"The simulated timeseries data for the specified resource.","items":{"$ref":"#/components/schemas/type.SimulationData"}},"data_quality_data":{"type":"object","description":"The simulated Data Quality data for the specified resource.","properties":{"kelvin_stale_detection":{"type":"array","items":{"$ref":"#/components/schemas/type.SimulationData"}},"kelvin_out_of_range_detection":{"type":"array","items":{"$ref":"#/components/schemas/type.SimulationData"}},"kelvin_outlier_detection":{"type":"array","items":{"$ref":"#/components/schemas/type.SimulationData"}},"kelvin_data_availability":{"type":"array","items":{"$ref":"#/components/schemas/type.SimulationData"}}}}}},"requests.DataQualityStatistics":{"type":"object","required":["start_time","end_time","threshold"],"properties":{"asset_names":{"type":"array","description":"An array of Asset names to filter the statistics on. If not empty, 'asset_type_names' content will be ignored.","items":{"type":"string"}},"asset_type_names":{"type":"array","description":"An array of Asset Type names to filter the statistics.","items":{"type":"string"}},"start_time":{"type":"string","format":"date-time","example":"2024-12-01T00:00:00Z","description":"The start timestamp for the statistics, formatted in RFC 3339."},"end_time":{"type":"string","format":"date-time","example":"2024-12-31T23:59:59Z","description":"The end timestamp for the statistics, formatted in RFC 3339."},"threshold":{"type":"number","description":"The threshold for the `kelvin_data_quality_score` metric to consider a data point as good quality."}}},"type.StatisticsData":{"type":"object","properties":{"payload":{"$ref":"#/components/schemas/type.Any","description":"Raw value specified `timestamp`."},"timestamp":{"type":"string","format":"date-time","example":"2023-11-13T12:00:00Z","description":"UTC time when the `payload` values were saved, formatted in RFC 3339."}}},"responses.DataQualityStatistics":{"type":"object","properties":{"good_data_percentage":{"type":"number","format":"float","description":"The percentage of assets that have a `kelvin_data_quality_score` greater than or equal to the specified threshold on the last inserted timestamp.","example":92.5},"good_data_count":{"type":"integer","description":"The count of assets that have a `kelvin_data_quality_score` greater than or equal to the specified threshold on the last inserted timestamp.","example":185},"good_data_over_time":{"type":"array","description":"The time series data showing the percentage of assets with good data quality over time.","items":{"$ref":"#/components/schemas/type.StatisticsData"}},"bad_data_percentage":{"type":"number","format":"float","description":"The percentage of assets that have a `kelvin_data_quality_score` less than the specified threshold on the last inserted timestamp.","example":7.5},"bad_data_count":{"type":"integer","description":"The count of assets that have a `kelvin_data_quality_score` less than the specified threshold on the last inserted timestamp.","example":15},"bad_data_over_time":{"type":"array","description":"The time series data showing the percentage of assets with bad data quality over time.","items":{"$ref":"#/components/schemas/type.StatisticsData"}}}},"type.DataStreamDataType":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Data Type was first created, formatted in RFC 3339."},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"number","maxLength":64,"description":"Unique identifier `name` of the Data Type."},"title":{"type":"string","example":"Number","maxLength":64,"description":"Display name (`title`) of the Data Type."},"updated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when any Data Type keys were last updated, formatted in RFC 3339."}}},"responses.DataStreamsDataTypesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Data Type objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.DataStreamDataType"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.DataStreamsDataTypesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Data Type objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.DataStreamDataType"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.DataStreamsDataTypesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.DataStreamDataType"}]},"requests.DataStreamSemanticTypeCreate":{"required":["name","title"],"type":"object","properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"mass_flow_rate","minLength":1,"maxLength":64,"description":"Unique identifier `name` of the new Semantic Type."},"title":{"type":"string","example":"Mass Flow Rate","minLength":1,"maxLength":64,"description":"Display name (`title`) of the new Semantic Type."}}},"type.DataStreamSemanticType":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Semantic Type was first created, formatted in RFC 3339."},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"mass_flow_rate","description":"Unique identifier `name` of the Semantic Type."},"title":{"type":"string","example":"Mass Flow Rate","maxLength":64,"description":"Display name (`title`) of the Semantic Type."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Semantic Type keys were last updated, formatted in RFC 3339."}}},"responses.DataStreamSemanticTypeCreate":{"allOf":[{"$ref":"#/components/schemas/type.DataStreamSemanticType"}]},"requests.DataStreamSemanticTypeUpdate":{"type":"object","properties":{"title":{"type":"string","minLength":1,"maxLength":64,"example":"Mass Flow Rate","description":"Display name (`title`) of the Semantic Type."}}},"responses.DataStreamSemanticTypeUpdate":{"allOf":[{"$ref":"#/components/schemas/type.DataStreamSemanticType"}]},"responses.DataStreamSemanticTypeGet":{"allOf":[{"$ref":"#/components/schemas/type.DataStreamSemanticType"}]},"responses.DataStreamsSemanticTypesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Semantic Type objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.DataStreamSemanticType"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.DataStreamsSemanticTypesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Semantic Type objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.DataStreamSemanticType"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.DataStreamsSemanticTypesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.DataStreamSemanticType"}]},"requests.DataStreamUnitCreate":{"required":["name","symbol","title"],"type":"object","properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"degree_fahrenheit","minLength":1,"maxLength":64,"description":"Unique identifier `name` of the new Unit."},"symbol":{"type":"string","example":"°F","minLength":1,"maxLength":16,"description":"A brief and precise character or set of characters that symbolize a specific measurement of the new Unit."},"title":{"type":"string","example":"Degree Fahrenheit","minLength":1,"maxLength":64,"description":"Display name (`title`) of the new Unit."}}},"type.Unit":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Unit was first created, formatted in RFC 3339."},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"degree_fahrenheit","maxLength":64,"description":"Unique identifier `name` of the Unit."},"symbol":{"type":"string","example":"°F","maxLength":16,"description":"A brief and precise character or set of characters that symbolize a specific measurement of the Unit."},"title":{"type":"string","example":"Degree Fahrenheit","maxLength":64,"description":"Display name (`title`) of the Unit."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Unit keys were last updated, formatted in RFC 3339."}}},"responses.DataStreamUnitCreate":{"allOf":[{"$ref":"#/components/schemas/type.Unit"}]},"requests.BulkDataStreamUnitCreate":{"required":["units"],"type":"object","properties":{"units":{"type":"array","minItems":1,"description":"Array of objects, each object in the array represents a new Unit.","items":{"$ref":"#/components/schemas/requests.DataStreamUnitCreate"}}}},"requests.DataStreamUnitUpdate":{"type":"object","properties":{"symbol":{"type":"string","example":"°F","minLength":1,"maxLength":16,"description":"A brief and precise character or set of characters that symbolize a specific measurement of the Unit."},"title":{"type":"string","example":"Degree Fahrenheit","minLength":1,"maxLength":64,"description":"Display name (`title`) of the Unit."}}},"responses.DataStreamUnitUpdate":{"allOf":[{"$ref":"#/components/schemas/type.Unit"}]},"responses.DataStreamUnitGet":{"allOf":[{"$ref":"#/components/schemas/type.Unit"}]},"responses.DataStreamsUnitsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Unit objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.Unit"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.DataStreamsUnitsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Unit objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.Unit"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.DataStreamsUnitsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.Unit"}]},"enum.DataStreamType":{"type":"string","enum":["computed","measurement","set_point"],"description":"Specifies the technique used for generating data in the Data Stream."},"requests.DataStreamCreate":{"required":["name","data_type_name","title","type"],"type":"object","properties":{"description":{"type":"string","example":"The rate at which gas flows from the reservoir to the surface.","minLength":1,"maxLength":200,"description":"Detailed description of the new Data Stream."},"name":{"type":"string","minLength":1,"maxLength":64,"format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"gas_flow_rate","description":"Unique identifier `name` for the new Data Stream. Can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"data_type_name":{"$ref":"#/components/schemas/enum.DataType","description":"Data type of the new Data Stream."},"semantic_type_name":{"type":"string","example":"volume_flow_rate","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64,"description":"Unique identifier `name` of the Semantic Type that describes the nature, purpose or origin of the data."},"title":{"type":"string","example":"Gas Flow Rate","minLength":1,"maxLength":64,"description":"Display name (`title`) of the Data Stream."},"type":{"$ref":"#/components/schemas/enum.DataStreamType"},"unit_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"litre_per_second","minLength":1,"maxLength":64,"description":"Unique identifier `name` of the Units that describes the type or category of data represented by each unit."}}},"responses.DataStream":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Data Stream was first created, formatted in RFC 3339."},"description":{"type":"string","example":"The rate at which gas flows from the reservoir to the surface.","maxLength":200,"description":"Detailed description of the Data Stream."},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"gas_flow_rate","description":"Unique identifier `name` of the Data Stream."},"data_type_name":{"$ref":"#/components/schemas/enum.DataType","description":"Data type of the Data Stream."},"semantic_type_name":{"type":"string","example":"volume_flow_rate","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","description":"Unique identifier `name` of the Semantic Type that describes the nature, purpose or origin of the data."},"title":{"type":"string","example":"Gas Flow Rate","maxLength":64,"description":"Display name (`title`) of the Data Stream."},"type":{"$ref":"#/components/schemas/enum.DataStreamType"},"unit_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"litre_per_second","description":"Unique identifier `name` of the Units that describes the type or category of data represented by each unit. Only available if the Primitive Type is `number`."},"is_protected":{"type":"boolean","example":false,"description":"Indicates whether the Data Stream is protected or not. If `true`, the Data Stream is protected and cannot be deleted or modified."},"in_use_by":{"type":"array","description":"List of workload or model session sources that are using this Data Stream.","items":{"type":"string","format":"krn","example":"krn:wlappv:cluster1/workload1/app1/1.2.0","maxLength":256}},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Data Stream keys were last updated, formatted in RFC 3339."}}},"responses.DataStreamCreate":{"allOf":[{"$ref":"#/components/schemas/responses.DataStream"}]},"requests.BulkDataStreamCreate":{"required":["datastreams"],"type":"object","properties":{"datastreams":{"type":"array","minItems":1,"description":"Array of objects, each object in the array represents a new Datastream.","items":{"$ref":"#/components/schemas/requests.DataStreamCreate"}}}},"requests.DataStreamUpdate":{"type":"object","properties":{"description":{"type":"string","example":"The rate at which gas flows from the reservoir to the surface.","minLength":0,"maxLength":200,"description":"Detailed description of the Data Stream."},"title":{"type":"string","example":"Gas Flow Rate","minLength":1,"maxLength":64,"description":"Display name (`title`) of the Data Stream."},"type":{"$ref":"#/components/schemas/enum.DataStreamType"},"semantic_type_name":{"type":"string","example":"volume_flow_rate","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":0,"maxLength":64,"description":"Unique identifier `name` of the Semantic Type that describes the nature, purpose or origin of the data."},"unit_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"litre_per_second","minLength":0,"maxLength":64,"description":"Unique identifier `name` of the Units that describes the type or category of data represented by each unit."}}},"responses.DataStreamUpdate":{"allOf":[{"$ref":"#/components/schemas/responses.DataStream"}]},"responses.DataStreamGet":{"allOf":[{"$ref":"#/components/schemas/responses.DataStream"}]},"requests.DataStreamsList":{"type":"object","properties":{"data_type_names":{"type":"array","example":["number","string"],"description":"A filter on the list based on the key `data_type_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"names":{"type":"array","example":["motor_temperature","water_flow_rate"],"description":"A filter on the list based on the  Data Stream key `name`. The filter is on the full name only. All strings in the array are treated as `OR`. Each string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"types":{"type":"array","example":["computed","measurement"],"description":"A filter on the list based on the Data Stream key `type`. The filter is on the full name only. All strings in the array are treated as `OR`.","items":{"$ref":"#/components/schemas/enum.DataStreamType"}},"search":{"type":"array","example":["motor","water"],"description":"Search and filter on the list based on the keys `title` (Display Name) or `name`. The search is case insensitive and will find partial matches as well. All strings in the array are treated as `OR`.","items":{"type":"string","minLength":1,"maxLength":64}},"semantic_type_names":{"type":"array","example":["sound_pressure","volume"],"description":"A filter on the list based on the key `semantic_type_name`. The filter is on the full name only. All strings in the array are treated as `OR`. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"unit_names":{"type":"array","example":["kilogram","litre_per_second"],"description":"A filter on the list based on the key `unit_name`. The filter is on the full name only. All strings in the array are treated as `OR`. Each string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}}}},"responses.DataStreamsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Data Streams objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.DataStream"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.DataStreamsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Data Streams objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.DataStream"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.DataStreamsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.DataStream"}]},"requests.BulkDataStreamDelete":{"required":["datastream_names"],"type":"object","properties":{"datastream_names":{"type":"array","minItems":1,"description":"Array of Data Stream key `name` to delete. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"gas_flow_rate","minLength":1,"maxLength":64}}}},"responses.Context":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Asset / Data Stream pair was first created, formatted in RFC 3339."},"resource":{"type":"string","format":"krn","example":"krn:asset:bp_16","maxLength":256,"description":"Asset `name` that is associated with the Data Stream."},"source":{"type":"string","format":"krn","example":"krn:wlappv:cluster1/app1/1.2.0","maxLength":256,"description":"Workload `name` that is sending data to the Asset / Data Stream pair."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Asset / Data Stream pair keys were last updated, formatted in RFC 3339."},"writable":{"type":"boolean","example":true,"description":"Indicates whether the Asset / Data Stream pair `write` key is read/write (`true`) or read only (`false`)."}}},"responses.DataStreamContext":{"type":"object","properties":{"context":{"type":"array","description":"An array of objects associated with the Data Stream. Each object contains keys for the Asset `name` of the Asset / Data Stream pair and and the Source for the pair.","items":{"$ref":"#/components/schemas/responses.Context"}},"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Data Stream was first created, formatted in RFC 3339."},"datastream_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"gas_flow_rate","maxLength":64,"description":"Unique identifier `name` of the Data Stream."},"updated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when any Data Stream keys were last updated, formatted in RFC 3339."}}},"responses.DataStreamContextGet":{"allOf":[{"$ref":"#/components/schemas/responses.DataStreamContext"}]},"requests.DataStreamContextsList":{"type":"object","properties":{"datastream_names":{"type":"array","example":["motor_temperature","water_flow_rate"],"description":"A filter on the list based on the Data Stream key `name`. The filter is on the full name only. All strings in the array are treated as `OR`. Each string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"resources":{"type":"array","example":["krn:asset:bp_16","krn:asset:bp_21"],"description":"A filter on the list showing only Data Streams associated with any Assets in the array. The filter is on the full name only. All strings in the array are treated as `OR`. Each Asset name can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"krn","minLength":1,"maxLength":256}},"sources":{"type":"array","example":["krn:wlappv:cluster1/app1/1.2.0"],"description":"A filter on the list showing only Data Streams associated with any workloads in the array. The filter is on the full name only. All strings in the array are treated as `OR`. Each Workload name can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"krn","minLength":1,"maxLength":256}},"writable":{"type":"boolean","example":true,"description":"A filter on the list showing only Data Streams that are writable or not. The filter is on the full name only. The value can be `true` or `false`."}}},"responses.DataStreamContextsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Data Streams and associated context objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.DataStreamContext"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.DataStreamContextsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Data Streams and associated context objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.DataStreamContext"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.DataStreamContextsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.DataStreamContext"}]},"requests.DataTagCreate":{"required":["start_date","end_date","tag_name","resource"],"type":"object","properties":{"start_date":{"type":"string","format":"date-time","example":"2024-02-06T18:22:18.582724Z","description":"Start date for the Data Tag. Time is based on UTC timezone, formatted in RFC 3339. Must be less than or equal to `end_date`. If equal to `end_date`, the Data Tag represents a single point in time."},"end_date":{"type":"string","format":"date-time","example":"2024-02-06T19:22:18.582724Z","description":"End date for the Data Tag. Time is based on UTC timezone, formatted in RFC 3339. Must be greater than or equal to `start_date`."},"tag_name":{"type":"string","example":"Valve Change","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64,"description":"Tag name to categorize the Data Tag"},"resource":{"type":"string","format":"krn","example":"krn:asset:well_01","minLength":1,"maxLength":256,"description":"The Asset that this Data Tag is related to."},"source":{"type":"string","format":"krn","x-allowed-krn":["event","user","wl","wlappv"],"example":"krn:wlappv:my-cluster/my-workload:my-app/1.2.0","description":"Source KRN that created the Data Tag. Allowed namespaces are `event`, `user`, `wl`, and `wlappv`."},"description":{"type":"string","example":"A Valve was changed today.","minLength":1,"maxLength":256,"description":"Detailed description of the Data Tag."},"contexts":{"type":"array","example":["krn:datastream:temperature","krn:datastream:pressure"],"description":"Datastream context KRNs associated with this Data Tag. Allowed namespace is `datastream`.","items":{"type":"string","format":"krn","x-allowed-krn":["datastream"]}}}},"type.DataTag":{"type":"object","description":"Data Tag event with time range, source, and related context resources. `start_date` and `end_date` are both required. `end_date` must be greater than or equal to `start_date`. If both are equal, the Data Tag represents a single point in time.","required":["id","start_date","end_date","tag_name","resource","source","created","updated"],"properties":{"id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"Unique identifier of the Data Tag."},"start_date":{"type":"string","format":"date-time","example":"2024-02-06T18:22:18.582724Z","description":"UTC timestamp when the Data Tag interval starts, formatted in RFC 3339. Must be less than or equal to `end_date`. If equal to `end_date`, the Data Tag represents a single point in time."},"end_date":{"type":"string","format":"date-time","example":"2024-02-06T19:22:18.582724Z","description":"UTC timestamp when the Data Tag interval ends, formatted in RFC 3339. Must be greater than or equal to `start_date`."},"tag_name":{"type":"string","example":"Valve Change","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","maxLength":64,"description":"Tag name used to categorize the Data Tag."},"resource":{"type":"string","format":"krn","x-allowed-krn":["asset"],"example":"krn:asset:well_01","description":"Resource KRN associated with the Data Tag. Allowed namespace is `asset`."},"source":{"type":"string","format":"krn","x-allowed-krn":["event","user","wl","wlappv"],"example":"krn:wlappv:my-cluster/my-workload:my-app/1.2.0","description":"Source KRN that created the Data Tag. Allowed namespaces are `event`, `user`, `wl`, and `wlappv`."},"description":{"type":"string","example":"A Valve was changed today.","maxLength":256,"description":"Human-readable details about the Data Tag event."},"contexts":{"type":"array","example":["krn:datastream:temperature","krn:datastream:pressure"],"description":"Context datastream KRNs associated with the Data Tag. Allowed namespace is `datastream`.","items":{"type":"string","format":"krn","x-allowed-krn":["datastream"]}},"created":{"type":"string","format":"date-time","example":"2024-02-06T19:22:18.582724Z","description":"UTC time when the Data Tag was created, formatted in RFC 3339."},"updated":{"type":"string","format":"date-time","example":"2024-02-06T19:22:18.582724Z","description":"UTC time when any Data Tag keys were last updated, formatted in RFC 3339."}}},"responses.DataTagCreate":{"allOf":[{"$ref":"#/components/schemas/type.DataTag"}]},"requests.DataTagUpdate":{"type":"object","properties":{"start_date":{"type":"string","format":"date-time","example":"2024-02-06T18:22:18.582724Z","description":"Start date for the Data Tag. Time is based on UTC timezone, formatted in RFC 3339. Must be less than or equal to `end_date`. If equal to `end_date`, the Data Tag represents a single point in time."},"end_date":{"type":"string","format":"date-time","example":"2024-02-06T19:22:18.582724Z","description":"End date for the Data Tag. Time is based on UTC timezone, formatted in RFC 3339. Must be greater than or equal to `start_date`."},"tag_name":{"type":"string","example":"Valve Change","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64,"description":"Tag name to categorize the Data Tag"},"resource":{"type":"string","format":"krn","example":"krn:asset:well_01","minLength":1,"maxLength":256,"description":"The Asset that this Data Tag is related to."},"description":{"type":"string","example":"A Valve was changed today.","minLength":1,"maxLength":256,"description":"Detailed description of the Data Tag."},"contexts":{"type":"array","example":["krn:datastream:temperature","krn:datastream:pressure"],"description":"Datastream context KRNs associated with this Data Tag. Allowed namespace is `datastream`.","items":{"type":"string","format":"krn","x-allowed-krn":["datastream"]}}}},"responses.DataTagUpdate":{"allOf":[{"$ref":"#/components/schemas/type.DataTag"}]},"responses.DataTagGet":{"description":"Full Data Tag details for the requested `datatag_id`.","allOf":[{"$ref":"#/components/schemas/type.DataTag"}]},"requests.DataTagList":{"type":"object","description":"Filters applied when listing Data Tags.","properties":{"ids":{"type":"array","example":["0002bc79-b42f-461b-95d6-cf0a28ba87aa","00080f9e-d086-452d-b41d-c8aa8fb27c92"],"description":"Return only Data Tags whose `id` matches one or more UUIDs.","items":{"type":"string","format":"uuid"}},"search":{"type":"array","example":["break","change"],"description":"Return only Data Tags whose `tag_name` partially matches one or more case-insensitive search terms.","items":{"type":"string","minLength":1,"maxLength":64}},"tag_names":{"type":"array","example":["Breakdown","Valve Change"],"description":"Return only Data Tags whose `tag_name` matches one or more exact tag names.","items":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64}},"resources":{"type":"array","example":["krn:asset:bp_16","krn:asset:bp_21"],"description":"Return only Data Tags associated with one or more resource KRNs. Allowed namespace is `asset`.","items":{"type":"string","format":"krn","x-allowed-krn":["asset"]}},"sources":{"type":"array","example":["krn:wlappv:my-cluster/my-workload:my-app/1.2.0","krn:user:user@example.com"],"description":"Return only Data Tags created by one or more source KRNs. Allowed namespaces are `event`, `user`, `wl`, `wlappv`, `app`, and `appversion`.","items":{"type":"string","format":"krn","x-allowed-krn":["app","appversion","event","user","wl","wlappv"]}},"contexts":{"type":"array","example":["krn:datastream:temperature","krn:datastream:pressure"],"description":"Return only Data Tags associated with one or more context datastream KRNs. Allowed namespace is `datastream`.","items":{"type":"string","format":"krn","x-allowed-krn":["datastream"]}},"start_date":{"type":"string","format":"date-time","example":"2024-02-06T00:00:00.000000Z","description":"Return only Data Tags whose `end_date` is on or after this UTC timestamp, formatted in RFC 3339."},"end_date":{"type":"string","format":"date-time","example":"2024-02-07T00:00:00.000000Z","description":"Return only Data Tags whose `start_date` is on or before this UTC timestamp, formatted in RFC 3339."},"created_since":{"type":"string","format":"date-time","example":"2024-02-06T00:00:00.000000Z","description":"Return only Data Tags created strictly after this UTC timestamp, formatted in RFC 3339."}}},"responses.DataTagListPaginatedResponseCursor":{"type":"object","description":"Cursor-based paginated Data Tag list response.","properties":{"data":{"type":"array","description":"Data Tags matching the request filters for the current cursor page.","items":{"$ref":"#/components/schemas/type.DataTag"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.DataTagListPaginatedResponseLimits":{"type":"object","description":"Page-based paginated Data Tag list response.","properties":{"data":{"type":"array","description":"Data Tags matching the request filters for the requested page.","items":{"$ref":"#/components/schemas/type.DataTag"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.DataTagListPaginatedResponseStream":{"description":"Single Data Tag object emitted in stream mode.","allOf":[{"$ref":"#/components/schemas/type.DataTag"}]},"requests.TagCreate":{"required":["name"],"type":"object","properties":{"name":{"type":"string","example":"Valve Change","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64,"description":"Case insensitive Tag name."},"metadata":{"type":"object","description":"Detailed Attributes of the Tag. The structure of the `metadata` object can have any key/value structure and will depend on the required properties of the Tag."}}},"type.Tag":{"type":"object","properties":{"name":{"type":"string","example":"Valve Change","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","maxLength":64,"description":"Tag name"},"metadata":{"type":"object","description":"Detailed Attributes of the Tag. The structure of the `metadata` object can have any key/value structure and will depend on the required properties of the Tag."},"created":{"type":"string","format":"date-time","example":"2024-02-06T19:22:18.582724Z","description":"UTC time when the Data Tag was created, formatted in RFC 3339."},"updated":{"type":"string","format":"date-time","example":"2024-02-06T19:22:18.582724Z","description":"UTC time when any Data Tag keys were last updated, formatted in RFC 3339."}}},"responses.TagCreate":{"allOf":[{"$ref":"#/components/schemas/type.Tag"}]},"requests.TagUpdate":{"type":"object","properties":{"metadata":{"type":"object","description":"Detailed Attributes of the Tag. The structure of the `metadata` object can have any key/value structure and will depend on the required properties of the Tag."}}},"responses.TagUpdate":{"allOf":[{"$ref":"#/components/schemas/type.Tag"}]},"responses.TagGet":{"allOf":[{"$ref":"#/components/schemas/type.Tag"}]},"responses.TagListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Tag objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.Tag"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.TagListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Tag objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.Tag"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.TagListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.Tag"}]},"type.FileStorage":{"type":"object","properties":{"file_id":{"type":"string","example":"50FDD765-DBD7-4C7C-844D-E6211C9CD9E7","description":"Generated UUID for a file"},"file_name":{"type":"string","example":"test.csv","maxLength":128,"description":"Actual file name"},"file_size":{"type":"integer","example":300,"description":"File size in bytes"},"checksum":{"type":"string","example":"e07de9b7a1788fe439bd1d9a114d1a3ee4eb5b29f8a9e11057f7c31d718c5614","description":"File SHA256 checksum"},"source":{"type":"string","example":"krn:user:user1","description":"Resource that uploaded the file"},"created":{"type":"string","format":"date-time","example":"2024-02-20T22:22:18.582724Z","description":"UTC time representing when the file was uploaded, formatted in RFC 3339."},"metadata":{"type":"object","additionalProperties":true,"example":{"property1":true,"property2":2},"description":"A free-form JSON object representing the files metadata"}}},"responses.FileUpload":{"allOf":[{"$ref":"#/components/schemas/type.FileStorage"}]},"requests.FilesList":{"type":"object","properties":{"file_names":{"type":"array","description":"Array of file names to filter. This filter only returns exact matches with the passed values.","items":{"type":"string"},"example":["test.csv","test.tar.gz"]},"sources":{"type":"array","description":"Array of sources to filter. This filter only returns exact matches with the passed values. (Note that all sources are in the KRN format)","items":{"type":"string"},"example":["krn:user:user1","krn:user:user2"]},"search":{"type":"array","description":"Search and filter based of file name. All values in array will be filtered as `OR`. The search is case insensitive and will find partial matches as well.","items":{"type":"string"},"example":["test.csv","test.tar.gz"]}}},"responses.FilesListPaginatedCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` file objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.FileStorage"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.FilesListPaginatedLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` file objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.FileStorage"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.FilesListPaginatedStream":{"allOf":[{"$ref":"#/components/schemas/type.FileStorage"}]},"responses.FileGet":{"allOf":[{"$ref":"#/components/schemas/type.FileStorage"}]},"type.GuardrailValueUpdater":{"type":"object","required":["source"],"description":"Limiting value definitions.","properties":{"source":{"description":"Asset / Data Stream pair used to determine the values for the minimum and maximum guardrail values.","type":"string","format":"krn"},"inclusive":{"description":"The Asset / Data Stream pair value is inclusive within the allowable range.","type":"boolean","default":false}}},"type.GuardrailUpdater":{"type":"object","description":"Optional limits for absolute minimum and maximum values.\nThis is defined using the value of another Asset / Data Stream pair.\nTip : This is useful if the guardrail values should be customizable by Operations.","properties":{"number":{"type":"object","description":"Limits for absolute minimum and maximum values.","properties":{"min":{"$ref":"#/components/schemas/type.GuardrailValueUpdater"},"max":{"$ref":"#/components/schemas/type.GuardrailValueUpdater"}}}}},"type.GuardrailConfig":{"type":"object","properties":{"control_disabled":{"description":"Set the current status indicating whether this Guardrail is active or disabled.","type":"boolean","default":false},"number":{"$ref":"#/components/schemas/type.GuardrailNumberConfig"},"updater":{"allOf":[{"$ref":"#/components/schemas/type.GuardrailUpdater"}]}}},"type.GuardrailConfigWithResource":{"allOf":[{"type":"object","required":["resource"],"properties":{"resource":{"description":"The Asset/Data Stream pair to which the Guardrail will be applied.","example":"krn:ad:asset1/setpoint","type":"string","format":"krn"}}},{"$ref":"#/components/schemas/type.GuardrailConfig"}]},"requests.GuardrailCreate":{"allOf":[{"$ref":"#/components/schemas/type.GuardrailConfigWithResource"}]},"type.GuardrailNumber":{"description":"Limits for absolute minimum and maximum values, or for rate of increase/decrease. This is defined with either fixed values or relative percentage changes.","allOf":[{"type":"object","properties":{"min":{"description":"Minimum limiting value allowed for the Asset / Data Stream pair.","allOf":[{"$ref":"#/components/schemas/type.GuardrailValue"},{"$ref":"#/components/schemas/type.Updated"}]},"max":{"description":"Maximum limiting value allowed for the Asset / Data Stream pair.","allOf":[{"$ref":"#/components/schemas/type.GuardrailValue"},{"$ref":"#/components/schemas/type.Updated"}]}}},{"$ref":"#/components/schemas/type.GuardrailRelativeConfig"}]},"type.Guardrail":{"allOf":[{"type":"object","required":["resource"],"properties":{"resource":{"type":"string","description":"The Asset/Data Stream pair to which the Guardrail is applied. (example: `krn:ad:asset1/setpoint`).","format":"krn","example":"krn:ad:asset1/setpoint"},"control_disabled":{"type":"boolean","description":"Current status indicating whether this Guardrail is active or disabled.","default":false}}},{"type":"object","properties":{"number":{"$ref":"#/components/schemas/type.GuardrailNumber"},"updater":{"allOf":[{"$ref":"#/components/schemas/type.GuardrailUpdater"}]}}},{"$ref":"#/components/schemas/type.Created"},{"$ref":"#/components/schemas/type.Updated"}]},"responses.GuardrailCreate":{"allOf":[{"$ref":"#/components/schemas/type.Guardrail"}]},"responses.GuardrailGet":{"allOf":[{"$ref":"#/components/schemas/type.Guardrail"}]},"requests.GuardrailUpdate":{"allOf":[{"$ref":"#/components/schemas/type.GuardrailConfig"}]},"responses.GuardrailUpdate":{"allOf":[{"$ref":"#/components/schemas/type.Guardrail"}]},"requests.GuardrailsList":{"type":"object","properties":{"resources":{"type":"array","description":"Array of Asset/Data Stream pairs to filter the Guardrail list on server before returning. (example: `krn:ad:asset1/setpoint`).","items":{"type":"string","format":"krn","example":"krn:ad:asset1/setpoint"}},"control_disabled":{"type":"boolean","description":"Filter current status indicating whether this Guardrail is active or disabled.","nullable":true,"default":null}}},"responses.GuardrailsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.Guardrail"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.GuardrailsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/type.Guardrail"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.GuardrailsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.Guardrail"}]},"requests.BulkGuardrailsCreate":{"type":"object","properties":{"guardrails":{"type":"array","description":"An array of Guardrail configurations to create.","items":{"$ref":"#/components/schemas/type.GuardrailConfigWithResource"}}}},"responses.BulkGuardrailsCreate":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of all Guardrail objects created.","items":{"$ref":"#/components/schemas/type.Guardrail"}}}},"requests.BulkGuardrailsDelete":{"type":"object","properties":{"resources":{"type":"array","description":"An array of Asset/Data Stream pairs for deleting the associated Guardrail configurations. (example: `krn:ad:asset1/setpoint`).","items":{"type":"string","format":"krn"}}}},"type.InstanceAuditLogItem":{"type":"object","properties":{"action":{"type":"string","example":"BATCH-UPDATE-NODE","minLength":1,"maxLength":64,"description":"Type of action performed over the platform resource."},"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Audit Log was first created, formatted in RFC 3339."},"id":{"type":"integer","example":4739892,"description":"Unique ID of the Audit Log entry."},"identifier":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"application_name","minLength":1,"maxLength":64,"description":"The platform resource that generated the audit log."},"meta":{"type":"object","properties":{},"description":"Contextual information about the action. For example, updating a resource you probably see information about the previous state (FROM key) and the current state (TO key) of the resource."},"namespace":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"api-workload","minLength":1,"maxLength":64,"description":"In which service the audit log was created."},"request_id":{"type":"string","description":"Deprecated. Not being used."},"user_id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"User ID that initiated the action."},"username":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"service-account-node-client-aws-cluster","minLength":1,"maxLength":64,"description":"Username used to create the action."}}},"responses.InstanceAuditLogGetItem":{"allOf":[{"$ref":"#/components/schemas/type.InstanceAuditLogItem"}]},"responses.InstanceAuditLogsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Audit Log objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.InstanceAuditLogGetItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.InstanceAuditLogsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Audit Log objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.InstanceAuditLogGetItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.InstanceAuditLogsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.InstanceAuditLogGetItem"}]},"responses.InstanceAuditLogGet":{"type":"object","properties":{"action":{"type":"string","example":"BATCH-UPDATE-NODE","minLength":1,"maxLength":64,"description":"Type of action performed over the platform resource."},"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Audit Log was first created, formatted in RFC 3339."},"id":{"type":"integer","example":4739892,"description":"Unique ID of the Audit Log entry."},"identifier":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"application_name","minLength":1,"maxLength":64,"description":"The platform resource that generated the audit log."},"meta":{"type":"object","properties":{},"description":"Contextual information about the action. For example, updating a resource you probably see information about the previous state (FROM key) and the current state (TO key) of the resource."},"namespace":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"api-workload","minLength":1,"maxLength":64,"description":"In which service the audit log was created."},"request_id":{"type":"string","description":"Deprecated. Not being used."},"user_id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"User ID that initiated the action."},"username":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"service-account-node-client-aws-cluster","minLength":1,"maxLength":64,"description":"Username used to create the action."}}},"type.InstanceSettings":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Instance Setting was first created, formatted in RFC 3339."},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"core.ui.datastreams.asset-type.groups","maxLength":64,"description":"Unique identifier `name` of the Instance Setting."},"payload":{"type":"object","properties":{},"description":"The Instance Settings. The structure of this `payload` object depends on the type of Instance Setting being defined."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Instance Settings keys were last updated, formatted in RFC 3339."}}},"responses.InstanceSettingsKelvinClusterGet":{"allOf":[{"$ref":"#/components/schemas/type.InstanceSettings"}]},"requests.ClusterSettingAutoUpdate":{"type":"object","description":"Auto update setting and frequency of checks.","properties":{"enabled":{"type":"boolean","example":true,"description":"If the auto update is enabled."},"interval":{"type":"integer","description":"If the auto update is enabled."}}},"requests.ClusterSettingDeployOptions":{"type":"object","description":"Methodology of deployment of updates. There are options to download all upgrades before applying or applying individually. Applying can also be on auto/manual initiated.","properties":{"instantly_apply":{"type":"boolean","example":true,"description":"Option if upgrades should be applied automatically and instantly as soon as they are available in the Cluster."},"pre_download":{"type":"boolean","example":true,"description":"Option for pre-downloading Cluster Instance. Actual upgrade initiation requires manual action or having `instantly_apply` set to true."}}},"requests.ClusterSettingForwardLogs":{"type":"object","description":"Offline settings for log retention.","properties":{"buffer_size":{"type":"integer","default":5,"example":10,"description":"Size in gigabytes of the log storage in the Instance Cluster when Cluster is offline. Any setting changes will delete all logs not yet transferred from the Cluster to Cloud."},"enabled":{"type":"boolean","default":true,"example":true,"description":"Enable offline storage in the Instance Cluster for log retention; transfers logs when Cluster is next online."}}},"requests.ClusterSettingSync":{"type":"object","description":"Cluster Instance sync settings.","properties":{"interval":{"type":"integer","default":30,"example":60,"minimum":1,"maximum":1440,"description":"Frequency in minutes that the Instance Cluster checks for new changes to apply to Workloads or Applications (deploy, start, stop, etc.)"}}},"requests.ClusterSettingTelemetry":{"type":"object","description":"Offline settings for telemetry retention.","properties":{"buffer_size":{"type":"integer","default":5,"example":10,"minimum":1,"maximum":20,"description":"Size in gigabytes of telemetry data storage in the Cluster Instance when the Cluster is offline. Any setting changes will delete all logs not yet transferred from the Cluster to Cloud."},"enabled":{"type":"boolean","default":true,"description":"Enable offline storage in the Cluster Instance for telemetry data retention; transfers data when the Cluster is next online."},"node_alerts_enabled":{"type":"boolean","default":true,"example":true,"description":"Enable or disable alerts for Node telemetry data."}}},"requests.ClusterSettingEdgeApps":{"type":"object","properties":{"edge_ui":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge UI service."}}},"edge_ccm":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge CCM service."}}},"edge_k8s":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge K8S service."}}},"edge_info":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Info service."}}},"edge_mqtt":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge MQTT service."},"expose":{"type":"boolean","default":false,"description":"Expose the Edge MQTT service."},"anonymous":{"type":"boolean","default":false,"description":"Allow anonymous access to the Edge MQTT service."}}},"edge_nats":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge NATS service."}}},"edge_sync":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Sync service."}}},"edge_leader_api":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Leader API service."}}},"edge_custom_action_manager":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Custom Action Manager service."}}}}},"requests.ClusterSetting":{"type":"object","description":"The Cluster Instance Settings that can be updated.","properties":{"auto_update":{"$ref":"#/components/schemas/requests.ClusterSettingAutoUpdate"},"cluster_upgrade":{"$ref":"#/components/schemas/requests.ClusterSettingDeployOptions"},"forward_logs":{"$ref":"#/components/schemas/requests.ClusterSettingForwardLogs"},"sync":{"$ref":"#/components/schemas/requests.ClusterSettingSync"},"telemetry":{"$ref":"#/components/schemas/requests.ClusterSettingTelemetry"},"workload_deploy":{"$ref":"#/components/schemas/requests.ClusterSettingDeployOptions"},"edge_apps":{"$ref":"#/components/schemas/requests.ClusterSettingEdgeApps"}}},"requests.InstanceSettingsKelvinClusterUpdate":{"type":"object","properties":{"payload":{"$ref":"#/components/schemas/requests.ClusterSetting"}}},"responses.InstanceSettingsKelvinClusterUpdate":{"allOf":[{"$ref":"#/components/schemas/type.InstanceSettings"}]},"responses.InstanceSettingsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Instance Setting objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.InstanceSettings"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.InstanceSettingsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Instance Setting objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.InstanceSettings"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.InstanceSettingsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.InstanceSettings"}]},"responses.InstanceSettingsGet":{"allOf":[{"$ref":"#/components/schemas/type.InstanceSettings"}]},"requests.InstanceSettingsUpdate":{"type":"object","properties":{"payload":{"type":"object","properties":{},"description":"The Instance Settings. The structure of this `payload` object depends on the type of Instance Setting being defined."}}},"responses.InstanceSettingsUpdate":{"allOf":[{"$ref":"#/components/schemas/type.InstanceSettings"}]},"responses.ComponentStatus":{"type":"object","properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"api-workload","minLength":1,"maxLength":64,"description":"Name of service on the Instance."},"status":{"type":"boolean","example":true,"description":"Current status of the service on the Instance."}}},"responses.InstanceStatusGet":{"type":"object","properties":{"components":{"type":"array","items":{"$ref":"#/components/schemas/responses.ComponentStatus"}},"status":{"type":"boolean","example":true,"description":"Overall status of the Instance."}}},"enum.ClusterType":{"type":"string","enum":["k3s","kubernetes","docker"]},"requests.OrchestrationClustersCreate":{"type":"object","properties":{"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"aws-cluster","minLength":1,"maxLength":64,"description":"Unique identifier key `name` of the Cluster."},"title":{"type":"string","example":"AWS Cluster","minLength":1,"maxLength":64,"description":"Display name (`title`) of the Cluster."},"type":{"$ref":"#/components/schemas/enum.ClusterType","description":"Type of Cluster to deploy.."}}},"enum.OrchestrationClusterStatus":{"type":"string","description":"Current status of the Cluster.","enum":["pending_provision","pending","online","unreachable","requires_attention"]},"enum.UpgradeStatusState":{"type":"string","enum":["idle","downloading","ready"],"example":"downloading","description":"Current state of the upgrade process."},"type.ClusterEdgeApps":{"type":"object","properties":{"edge_ui":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge UI service."}}},"edge_ccm":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge CCM service."}}},"edge_k8s":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge K8S service."}}},"edge_info":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Info service."}}},"edge_mqtt":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge MQTT service."},"expose":{"type":"boolean","default":false,"description":"Expose the Edge MQTT service."},"anonymous":{"type":"boolean","default":false,"description":"Allow anonymous access to the Edge MQTT service."}}},"edge_nats":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge NATS service."}}},"edge_sync":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Sync service."}}},"edge_leader_api":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Leader API service."}}},"edge_custom_action_manager":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Custom Action Manager service."}}}}},"type.ClusterEdgeOptions":{"type":"object","properties":{"image_pull_policy":{"type":"string","example":"IfNotPresent","description":"Image pull policy to be used when deploying workloads. Options are `Always`, and `IfNotPresent`. Default: `IfNotPresent`"},"auto_scale":{"type":"boolean","default":false,"description":"Enable auto-scaling of Kelvin services on the Cluster when there are enough nodes."}}},"type.OrchestrationCluster":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Cluster was created, formatted in RFC 3339."},"forward_logs_buffer_size":{"type":"integer","default":5,"example":10,"minimum":1,"maximum":20,"description":"Size in gigabytes of the log storage in the Cluster when Cluster is offline. Any setting changes will delete all logs not yet transferred from the Cluster to Cloud."},"forward_logs_enabled":{"type":"boolean","default":true,"example":true,"description":"Enable offline storage in the Cluster for log retention; transfers logs when Cluster is next online."},"join_script":{"type":"string"},"download_provision_script":{"type":"string","example":"bash <(curl -sfS https://{URL}/provision) --download","description":"Command to download the provision script required to install the Kelvin Software at the edge."},"ha_mode":{"type":"boolean","example":false,"description":"High Availability mode enabled for the Cluster."},"ha_mode_warning":{"type":"string","example":"","description":"Warning message if High Availability mode is enabled but not all requirements are met."},"last_seen":{"type":"string","nullable":true,"format":"date-time","example":"2023-12-18T18:22:18.582724Z","description":"UTC time when the Cluster was last seen by the Cloud, formatted in RFC 3339."},"manifests_scrape_enabled":{"type":"boolean","default":true,"example":true,"description":"Enable auto update Kelvin Software running on the Cluster."},"manifests_scrape_interval":{"type":"integer","default":86400,"minimum":30,"maximum":86400,"example":3600,"description":"Frequency in seconds for checking updates in the Cloud for Kelvin Software running on the Cluster."},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"aws-cluster","maxLength":64,"description":"Unique identifier key `name` of the Cluster."},"provision_script":{"type":"string","example":"bash <(curl -sfS https://{URL}/provision) --service-account bm9kZS1jbGllbnQt...","description":"Provision script required to install the Kelvin Software at the edge."},"ready":{"type":"boolean","example":true,"description":"Setting to inform Kelvin UI if the Cluster is ready."},"service_account_token":{"type":"string","format":"^[A-Za-z0-9+/]{4,}(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$","description":"Service account token for automated processes to authenticate with when performing actions in the Cluster."},"status":{"$ref":"#/components/schemas/enum.OrchestrationClusterStatus"},"sync_scrape_interval":{"type":"integer","default":30,"example":3600,"minimum":10,"maximum":86400,"description":"Frequency in seconds that the Cluster checks for new changes to apply to Workloads or Applications (deploy, start, stop, etc.)"},"telemetry_buffer_size":{"type":"integer","default":5,"example":10,"minimum":1,"maximum":20,"description":"Size in gigabytes of telemetry data storage in the Cluster when the Cluster is offline. Any setting changes will delete all logs not yet transferred from the Cluster to Cloud."},"telemetry_enabled":{"type":"boolean","default":true,"description":"Enable offline storage in the Cluster for telemetry data retention; transfers data when the Cluster is next online."},"telemetry_scrape_interval":{"type":"integer","default":60,"example":60,"minimum":1,"maximum":3600,"description":"Time interval in seconds to save each telemetry data. Any setting changes will delete all data not yet transferred from the Cluster to Cloud."},"telemetry_alerts_enabled":{"type":"boolean","default":true,"example":false,"description":"Enables or disables the alerts on the cluster nodes."},"title":{"type":"string","example":"AWS Cluster","maxLength":64,"description":"Display name (`title`) of the Cluster."},"type":{"$ref":"#/components/schemas/enum.ClusterType","description":"Type of Cluster deployed."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Cluster keys were last updated, formatted in RFC 3339."},"upgrade_instantly_apply":{"type":"boolean","example":true,"description":"Option if upgrades should be applied automatically and instantly as soon as they are available in the Cluster."},"upgrade_pre_download":{"type":"boolean","example":true,"description":"Option for pre-downloading new Workloads or Application upgrades to the Cluster. Actual upgrade initiation requires manual action or having `instantly_apply` set to true."},"upgrade_status":{"type":"object","description":"Current status and messages for any ongoing updates to the Cluster.","properties":{"message":{"type":"string","example":"","description":"Any feedback messages about the current upgrade process."},"state":{"$ref":"#/components/schemas/enum.UpgradeStatusState"}}},"version":{"type":"object","description":"Current versions of the different core component software installed on the Cluster.","properties":{"k8s_version":{"type":"string","example":"v1.24.10+k3s1","description":"Current version of k8s installed on the Cluster."},"kelvin_version":{"type":"string","example":"4.0.0-rc2024.519","description":"Current version of Kelvin Software installed on the Cluster."}}},"edge_apps":{"$ref":"#/components/schemas/type.ClusterEdgeApps"},"edge_options":{"$ref":"#/components/schemas/type.ClusterEdgeOptions"}}},"responses.OrchestrationClustersCreate":{"allOf":[{"$ref":"#/components/schemas/type.OrchestrationCluster"}]},"responses.OrchestrationClustersCreateItem":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Cluster was created, formatted in RFC 3339."},"last_seen":{"type":"string","format":"date-time","example":"2023-12-18T18:22:18.582724Z","description":"UTC time when the Cluster was last seen by the Cloud, formatted in RFC 3339."},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"aws-cluster","maxLength":64,"description":"Unique identifier key `name` of the Cluster."},"ready":{"type":"boolean","example":true,"description":"Setting to inform Kelvin UI if the Cluster is ready."},"kelvin_version":{"type":"string","example":"9.0.0","description":"Current version of Kelvin Software installed on the Cluster."},"container_version":{"type":"string","example":"v1.24.10+k3s1","description":"Current version of the runtime container installed on the Cluster."},"ha_mode":{"type":"boolean","example":false,"description":"Whether the Cluster is deployed in High Availability mode."},"ha_mode_warning":{"type":"string","example":"Cluster is running in HA mode but has less than 3 nodes.","description":"Warning message if the Cluster is deployed in High Availability mode but does not meet the minimum requirements."},"status":{"$ref":"#/components/schemas/enum.OrchestrationClusterStatus"},"title":{"type":"string","example":"AWS Cluster","maxLength":64,"description":"Display name (`title`) of the Cluster."},"type":{"$ref":"#/components/schemas/enum.ClusterType","description":"Type of Cluster deployed. `k3s` is managed by Kelvin, `kubernetes` is managed by client."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Cluster keys were last updated, formatted in RFC 3339."}}},"responses.OrchestrationClustersListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Clusters and associated context objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.OrchestrationClustersCreateItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.OrchestrationClustersListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Clusters and associated context objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.OrchestrationClustersCreateItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.OrchestrationClustersListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.OrchestrationClustersCreateItem"}]},"responses.OrchestrationClustersGet":{"allOf":[{"$ref":"#/components/schemas/type.OrchestrationCluster"}]},"responses.OrchestrationClustersCreateManifestImageItem":{"type":"object","properties":{"args":{"type":"string","example":"--help","description":"Additional arguments for the image, if any."},"path":{"type":"string","example":"<URL>/analysis-frame/<app-name>:{app-}","description":"The path or location of the image."}}},"responses.OrchestrationClustersCreateManifestItem":{"type":"object","properties":{"content":{"type":"string","example":"YXBpVmVyc2lvbj...","description":"Base64 encoded content of the manifest file."},"file_name":{"type":"string","example":"certificate.yaml","description":"Name of the manifest file."}}},"responses.OrchestrationClustersCreateManifestUpgrade":{"type":"object","description":"Upgrade settings for the Cluster.","properties":{"download_type":{"type":"string","example":"instantly","description":"Type of download process for the upgrade."},"upgrade_type":{"type":"string","example":"instantly","description":"Type of upgrade process."}}},"responses.OrchestrationClustersManifestsGet":{"type":"object","properties":{"images":{"type":"array","description":"List of images on the Cluster.","items":{"$ref":"#/components/schemas/responses.OrchestrationClustersCreateManifestImageItem"}},"manifests":{"type":"array","description":"List of Manifest files on the Cluster.","items":{"$ref":"#/components/schemas/responses.OrchestrationClustersCreateManifestItem"}},"revision":{"type":"string","example":"4.0.0-rc2024.521","description":"Current Kelvin Software version installed on the Cluster."},"upgrade":{"$ref":"#/components/schemas/responses.OrchestrationClustersCreateManifestUpgrade"}}},"enum.OrchestrationNodeStatus":{"type":"string","description":"Current status of the Node.","enum":["online","unreachable","not_ready"]},"responses.OrchestrationClustersNodesGetItem":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Node was created, formatted in RFC 3339."},"last_seen":{"type":"string","format":"date-time","example":"2023-12-18T18:22:18.582724Z","description":"UTC time when the Node was last seen by the Cloud, formatted in RFC 3339."},"main":{"type":"boolean","example":true,"description":"Whether the Node is the Master Node in the Cluster."},"name":{"type":"string","format":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$","example":"internal-node-01","maxLength":64,"description":"Unique identifier key `name` of the Node."},"status":{"$ref":"#/components/schemas/enum.OrchestrationNodeStatus"},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Node keys were last updated, formatted in RFC 3339."},"warnings":{"$ref":"#/components/schemas/type.Any","example":"container runtime network not ready: NetworkReady=false reason:NetworkPluginNotReady message:Network plugin returns error: cni plugin not initialized","description":"Any warning messages received from Kubernetes."}}},"responses.OrchestrationClustersNodeListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Nodes and associated context objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.OrchestrationClustersNodesGetItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.OrchestrationClustersNodeListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Nodes and associated context objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.OrchestrationClustersNodesGetItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.OrchestrationClustersNodeListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.OrchestrationClustersNodesGetItem"}]},"type.NodeCapacity":{"type":"object","properties":{"cpu":{"type":"string","example":"2","description":"Number of CPU cores available on the Node."},"ephemeral-storage":{"type":"string","example":"30417472Ki","x-needs-quotes":true,"description":"Amount of ephemeral storage available on the Node."},"memory":{"type":"string","example":"3944492Ki","description":"Amount of memory available on the Node."},"pods":{"type":"string","example":"110","description":"Maximum number of Pods that can be scheduled on the Node."}},"example":{"cpu":"2","ephemeral-storage":"30417472Ki","memory":"3944492Ki","pods":"110"},"description":"Set of information about the Node's capacity."},"responses.OrchestrationClustersNodesGetConditionItem":{"type":"object","properties":{"lastHeartbeatTime":{"type":"string","format":"date-time","example":"2024-01-20T12:34:56Z","description":"Timestamp of the last heartbeat received."},"lastTransitionTime":{"type":"string","format":"date-time","example":"2024-01-19T11:30:00Z","description":"Timestamp of the last status transition."},"message":{"type":"string","example":"kubelet has no disk pressure","description":"Human-readable message indicating details about the transition."},"name":{"type":"string","example":"Disk Pressure","description":"Unique name identifying the resource."},"reason":{"type":"string","example":"KubeletHasNoDiskPressure","description":"Short, machine-understandable string that gives the reason for the condition's last transition."},"status":{"type":"string","example":"False","description":"Status of the condition, typically True, False, or Unknown."},"status_message":{"type":"string","example":"ready","description":"Detailed status message."},"type":{"type":"string","example":"DiskPressure","description":"Type of the condition."}}},"type.KeyValue":{"type":"object","additionalProperties":{"type":"string"}},"responses.OrchestrationClustersNodesGetSystemInfo":{"type":"object","description":"Detailed information about the Node's system.","properties":{"architecture":{"type":"string","example":"amd64","description":"Architecture of the node's system (e.g., x86_64, arm)."},"boot_id":{"type":"string","example":"c24e67a8-067f-462d-b569-12d06f700117","description":"Unique identifier for the current boot session."},"container_runtime_version":{"type":"string","example":"containerd://1.6.15-k3s1","description":"Version of the container runtime."},"host_name":{"type":"string","example":"node01","description":"Hostname of the node."},"kernel_version":{"type":"string","example":"5.15.0-1050-aws","description":"Version of the node's kernel."},"kube_proxy_version":{"type":"string","example":"v1.24.10+k3s1","description":"Version of kube-proxy running on the node."},"kubelet_version":{"type":"string","example":"v1.24.10+k3s1","description":"Version of kubelet running on the node."},"machine_id":{"type":"string","example":"ec22bcece3288e3a08d7b7ce4b0742c1","description":"Unique identifier of the node's machine."},"operating_system":{"type":"string","example":"linux","description":"Operating system running on the node."},"os_image":{"type":"string","example":"Ubuntu 22.04.3 LTS","description":"Operating system image used on the node."},"system_uuid":{"type":"string","example":"ec22bcec-e328-8e3a-08d7-b7ce4b0742c1","description":"Universal unique identifier of the system."}}},"responses.OrchestrationClustersNodesGet":{"type":"object","properties":{"capacity":{"$ref":"#/components/schemas/type.NodeCapacity"},"conditions":{"type":"array","description":"Detailed information about the Node's telemetry.","items":{"$ref":"#/components/schemas/responses.OrchestrationClustersNodesGetConditionItem"}},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Node was created, formatted in RFC 3339."},"hostname":{"type":"string","format":"^[a-zA-Z0-9-]{1,63}(\\.[a-zA-Z0-9-]{1,63})*$","example":"node01","description":"Name of a computer hosting Node. This name identifies the computer on the network."},"internal_ip":{"type":"string","format":"^(?:[0-9]{1,3}\\.){3}[0-9]{1,3}$","example":"192.168.1.10","description":"Internal IP address of the computer. It's a unique address within the local network, typically starting with 192.168, 10, or 172.16 to 172.31."},"k8s_version":{"type":"string","example":"v1.24.10+k3s1","maxLength":64,"description":"Current version of k8s installed on the Cluster."},"labels":{"$ref":"#/components/schemas/type.KeyValue","example":{"kubernetes.io/os":"linux","node-role.kubernetes.io/control-plane":"true","node-role.kubernetes.io/master":"true","node.kubernetes.io/role":"acp"},"description":"Labels assigned to the Node."},"last_seen":{"type":"string","format":"date-time","example":"2023-12-18T18:22:18.582724Z","description":"UTC time when the Node was last seen by the Cloud, formatted in RFC 3339."},"main":{"type":"boolean","example":true,"description":"Whether the Node is the Master Node in the Cluster."},"name":{"type":"string","format":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$","example":"aws-cluster-node-01","maxLength":64,"description":"Unique identifier key `name` of the Node."},"network_info":{"type":"array","items":{"type":"object","properties":{"interface":{"type":"string"},"ipv4":{"type":"array","items":{"type":"string"}},"ipv6":{"type":"array","items":{"type":"string"}},"dns":{"type":"array","items":{"type":"string"}}}},"example":[{"dns":[""],"interface":"ens5","ipv4":["172.31.40.200"],"ipv6":["fe80::10d3:f3ff:fe1b:bea1"]}],"description":"Details about the Node's current network settings."},"status":{"$ref":"#/components/schemas/enum.OrchestrationNodeStatus"},"system_info":{"$ref":"#/components/schemas/responses.OrchestrationClustersNodesGetSystemInfo"},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Node keys were last updated, formatted in RFC 3339."},"warnings":{"type":"object","properties":{},"description":"Any warning messages received from Kubernetes."}}},"enum.ServiceType":{"type":"string","example":"cluster_ip","enum":["cluster_ip","node_port","host_port"],"description":"Type of Service. `cluster_ip` restricts communication to within the cluster, not accessible externally. `node_port` makes the Service available on a static port across all Nodes. `host_port` exposes the Service on a designated port of the host Node only."},"responses.ServiceItem":{"type":"object","properties":{"address":{"type":"string","example":"opcua-se-0298b03c3fdbbe0.app:4842","description":"Address and port to connect to the Service."},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Service was created, formatted in RFC 3339."},"name":{"type":"string","example":"opcua-se-0298b03c3fdbbe0","maxLength":32,"description":"Unique identifier key `name` of the Service."},"network_interface":{"type":"string","example":"kelvin","description":"Physical network interface name of the Node hosting the Service."},"service_type":{"$ref":"#/components/schemas/enum.ServiceType"},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Service keys were last updated, formatted in RFC 3339."},"workload_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"opcua-se-0298b03c3fdbbe0","maxLength":32,"description":"Unique identifier key `name` of the Node."}}},"responses.OrchestrationClustersServiceListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Nodes and associated context objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.ServiceItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.OrchestrationClustersServiceListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Nodes and associated context objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.ServiceItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.OrchestrationClustersServiceListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.ServiceItem"}]},"requests.ClusterUpgrade":{"type":"object","description":"Settings used by On Demand Deployment to determine Workload or Application upgrade process; upgrade each separately, upgrade controlled by Kubernetes or download all updates before upgrade.","properties":{"instantly_apply":{"type":"boolean","description":"Setting to immediately apply upgrades to Workloads or Applications as soon as they are available in the Cluster."},"pre_download":{"type":"boolean","description":"Setting to immediately download new Workloads or Application upgrades to the Cluster; requires manual initiation or `instantly_apply` set to true to initiate upgrade."}}},"requests.ClusterEdgeAPICredentials":{"type":"object","properties":{"username":{"type":"string","example":"username","minLength":2,"description":"Username for the Edge API."},"password":{"type":"string","example":"password","minLength":8,"description":"Password for the Edge API. At least one uppercase letter, one lowercase letter, and one number."}}},"requests.ClusterEdgeApps":{"type":"object","properties":{"edge_ui":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge UI service."}}},"edge_ccm":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge CCM service."}}},"edge_k8s":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge K8S service."}}},"edge_info":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Info service."}}},"edge_mqtt":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge MQTT service."},"expose":{"type":"boolean","default":false,"description":"Expose the Edge MQTT service."},"anonymous":{"type":"boolean","default":false,"description":"Allow anonymous access to the Edge MQTT service."}}},"edge_nats":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge NATS service."}}},"edge_sync":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Sync service."}}},"edge_leader_api":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Leader API service."}}},"edge_custom_action_manager":{"type":"object","properties":{"disabled":{"type":"boolean","default":false,"description":"Disable the Edge Custom Action Manager service."}}}}},"requests.ClusterEdgeOptions":{"type":"object","properties":{"image_pull_policy":{"type":"string","example":"IfNotPresent","description":"Image pull policy to be used when deploying workloads. Options are `Always`, and `IfNotPresent`. Default: `IfNotPresent`"},"auto_scale":{"type":"boolean","default":false,"description":"Enable auto-scaling of Kelvin services on the Cluster when there are enough nodes."}}},"requests.OrchestrationClustersUpdate":{"type":"object","properties":{"forward_logs_buffer_size":{"type":"integer","default":5,"example":10,"minimum":1,"maximum":20,"description":"Size in gigabytes of the log storage in the Cluster when Cluster is offline. Any setting changes will delete all logs not yet transferred from the Cluster to Cloud."},"forward_logs_enabled":{"type":"boolean","default":true,"description":"Enable offline storage in the Cluster for log retention; transfers logs when the Cluster is next online."},"manifests_scrape_enabled":{"type":"boolean","default":true,"description":"Enable auto update Kelvin Software running on the Cluster."},"manifests_scrape_interval":{"type":"integer","default":86400,"minimum":30,"maximum":86400,"example":3600,"description":"Frequency in seconds for checking updates in the Cloud for Kelvin Software running on the Cluster."},"ready":{"type":"boolean","description":"Setting to inform Kelvin UI if the Cluster is ready."},"sync_scrape_interval":{"type":"integer","default":30,"example":3600,"minimum":10,"maximum":86400,"description":"Frequency in seconds that the Cluster checks for new changes to apply in Workloads or Applications (deploy, start, stop, etc.)"},"telemetry_buffer_size":{"type":"integer","default":5,"example":10,"minimum":1,"maximum":20,"description":"Size in gigabytes of telemetry data storage in the Cluster when the Cluster is offline. Any setting changes will delete all logs not yet transferred from the Cluster to Cloud."},"telemetry_enabled":{"type":"boolean","default":true,"description":"Enable offline storage in the Cluster for telemetry data retention; transfers data when the Cluster is next online."},"telemetry_alerts_enabled":{"type":"boolean","default":true,"example":false,"description":"Enables or disables the alerts on the cluster nodes."},"title":{"type":"string","example":"AWS Cluster 01","minLength":1,"maxLength":64,"description":"New display name (`title`) for Cluster."},"upgrade":{"$ref":"#/components/schemas/requests.ClusterUpgrade"},"api_credentials":{"$ref":"#/components/schemas/requests.ClusterEdgeAPICredentials"},"edge_apps":{"$ref":"#/components/schemas/requests.ClusterEdgeApps"},"edge_options":{"$ref":"#/components/schemas/requests.ClusterEdgeOptions"}}},"responses.OrchestrationClustersUpdate":{"allOf":[{"$ref":"#/components/schemas/type.OrchestrationCluster"}]},"requests.PropertyCreate":{"type":"object","required":["name","title","primitive_type"],"properties":{"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"water-line-pressure","minLength":1,"maxLength":64,"description":"Unique identifier `name` for the Property. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"title":{"type":"string","example":"Water Line Pressure","minLength":1,"maxLength":64,"description":"Unique `title` for the Property. Unlike Titles in Assets, Data Streams and other areas of the Kelvin Platform, Titles in Property must be unique and repeated title will cause the request to fail."},"primitive_type":{"$ref":"#/components/schemas/enum.PropertyType","description":"Data type for the Property `name`."}}},"type.PropertyDefinition":{"type":"object","properties":{"name":{"type":"string","example":"region","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","maxLength":64,"description":"Unique identifier `name` of the Property Definition."},"title":{"type":"string","example":"Region","minLength":1,"maxLength":64,"description":"Unique identifier `title` of the Property Definition."},"primitive_type":{"$ref":"#/components/schemas/enum.PropertyType"},"created":{"type":"string","format":"date-time","example":"2024-11-11T18:22:18.582724Z","description":"UTC time when the Property was created, formatted in RFC 3339."},"updated":{"type":"string","format":"date-time","example":"2024-11-11T18:22:18.582724Z","description":"UTC time when any Property keys were last updated, formatted in RFC 3339."}}},"responses.PropertyCreate":{"allOf":[{"$ref":"#/components/schemas/type.PropertyDefinition"}]},"responses.PropertyGet":{"allOf":[{"$ref":"#/components/schemas/type.PropertyDefinition"}]},"responses.PropertiesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Property objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.PropertyDefinition"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.PropertiesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Property objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.PropertyDefinition"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.PropertiesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.PropertyDefinition"}]},"requests.PropertyUniqueValuesGet":{"type":"object","properties":{"property_names":{"type":"array","description":"List of property `name` for which the values are to be fetched. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"area"}},"resource_types":{"type":"array","description":"List of resource types to filter the list of Property values returned.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"asset"}},"primitive_types":{"type":"array","description":"List of primitive types to filter the list of Property values returned.","items":{"$ref":"#/components/schemas/enum.PropertyType"}}}},"responses.PropertyUniqueValuesGet":{"type":"object","properties":{"properties":{"type":"object","example":{"area":["North","South","Central","Easy","West"],"fluid-level-high":[200]},"description":"Dictionary containing the `name` of the Asset Property and an array of the associated values.","additionalProperties":{"type":"array","items":{"$ref":"#/components/schemas/type.PropertyValue"}}}}},"requests.PropertyValuesUpdate":{"type":"object","properties":{"resource_values":{"type":"object","example":{"krn:asset:asset1":1,"krn:asset:asset2":2},"description":"List of resources and their corresponding updated values for the defined `property_name`.","additionalProperties":{"$ref":"#/components/schemas/type.PropertyValue"}}}},"responses.PropertyValuesGet":{"type":"object","properties":{"resource_values":{"type":"object","example":{"krn:asset:asset1":1,"krn:asset:asset2":2},"additionalProperties":{"$ref":"#/components/schemas/type.PropertyValue"},"description":"List of resources and their current corresponding values for the `property_name`."}}},"requests.PropertyValuesDelete":{"type":"object","properties":{"resources":{"type":"array","description":"List of resources where the associated `property_name` values will be deleted.","items":{"type":"string","example":"krn:asset:asset1"}}}},"requests.RangeGetPropertyValues":{"type":"object","required":["start_date","end_date"],"properties":{"resources":{"type":"array","description":"List of resources for which to fetch `property_name`.","items":{"type":"string","example":"krn:asset:asset1"}},"start_date":{"type":"string","format":"date-time","example":"2025-01-29T12:00:00Z","description":"UTC time for when to begin the time range, formatted in RFC 3339."},"end_date":{"type":"string","format":"date-time","example":"2025-01-29T12:00:00Z","description":"UTC time for when to end the time range, formatted in RFC 3339."}}},"type.PropertyValueHistory":{"type":"object","properties":{"property_name":{"type":"string","example":"region","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","maxLength":64,"description":"Unique identifier `name` of the Property."},"resource":{"type":"string","example":"krn:asset:asset1","description":"Resource to which the value belongs."},"timestamp":{"type":"string","format":"date-time","example":"2025-01-29T12:00:00.582724Z","description":"UTC time for when the value was updated, formatted in RFC 3339."},"source":{"type":"string","example":"krn:user:user1","description":"Represents who triggered the value change."},"value":{"type":"object","description":"Historical value at the given timestamp."}}},"responses.RangeGetPropertyPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` historical value objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.PropertyValueHistory"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.RangeGetPropertyPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Property objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.PropertyValueHistory"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.RangeGetPropertyPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.PropertyValueHistory"}]},"requests.RecommendationClusteringGet":{"required":["end_date","start_date","time_bucket"],"type":"object","properties":{"end_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"Most recent (end) creation time for counting the number of Recommendations. Time is based on UTC timezone, formatted in RFC 3339."},"resource_names":{"type":"array","example":["krn:asset:bp_02","krn:asset:bp_16"],"description":"Filter Assets (`resources`) linked to Recommendations for inclusion in the count. The filter is on the full name only. All strings in the array are treated as `OR`. Each Asset name can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"krn","minLength":1,"maxLength":256}},"sources":{"type":"array","example":["krn:app:motor-speed-control"],"description":"A filter to only count Recommendations from certain `source`. The filter is on the full name only. All strings in the array are treated as `OR`. Each KRN name can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"krn","minLength":1,"maxLength":256}},"trace_ids":{"type":"array","example":["trace id change 123"],"description":"A filter on the list showing only Custom Actions associated with one or more Trace IDs.","items":{"type":"string","minLength":1,"maxLength":256}},"start_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"Earliest (start) creation time for counting the  number of Recommendations. Time is based on UTC timezone, formatted in RFC 3339."},"states":{"type":"array","example":["accepted","auto_accepted"],"description":"A filter to only count Recommendations associated with one or more `states`. The filter is on the full `state` name only. All strings in the array are treated as `OR`.","items":{"$ref":"#/components/schemas/enum.RecommendationState"}},"time_bucket":{"type":"string","example":"5m","description":"Defines the time range to use to count the number of Recommendations. Valid time units are \"ns\", \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\"."},"types":{"type":"array","example":["Decrease speed","increase_speed"],"description":"A filter to only count Recommendations associated with one or more `types`. The filter is on the full `state` name only. All strings in the array are treated as `OR`.","items":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64}}}},"responses.RecommendationClustering":{"type":"object","properties":{"count":{"type":"integer","example":2,"description":"Number of occurrences of Recommendations over the time period of `time_bucket` that meet the request parameters starting from time `time_bucket_start`."},"recommendations_ids":{"type":"array","example":["0002bc79-b42f-461b-95d6-cf0a28ba87aa","518bcb79-ffaa-4d3f-8042-52634c34b71e"],"description":"An array of Recommendation `id`'s that have been counted.","items":{"type":"string","format":"uuid"}},"time_bucket_start":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"Time of the start of the count for the current `time_bucket` period in RFC 3339 UTC date/time format."}}},"enum.RecommendationEvidenceType":{"type":"string","example":"image","enum":["markdown","image","iframe","chart","line-chart","bar-chart","dynacard","data-explorer"],"description":"Type of evidence that is being used to create the Recommendation."},"type.RecommendationEvidence":{"type":"object","properties":{"type":{"$ref":"#/components/schemas/enum.RecommendationEvidenceType"},"payload":{"type":"object","description":"The payload of the evidence that is being used to create the Recommendation."}}},"type.RecommendationBase":{"type":"object","required":["resource","type"],"properties":{"confidence":{"type":"integer","minimum":-2147483648,"maximum":2147483647,"example":7,"description":"Confidence level of the Recommendation. This is usually, but not mandatory, related to any machine learning model confidence results."},"custom_identifier":{"deprecated":true,"type":"string","example":"model-aws-ltsm-anomaly","description":"An optional custom identifier for any purpose."},"description":{"type":"string","example":"Beam pump speed AI optimizer application recommends a new value for the speed setpoint of the controller.","description":"Detailed description of the Recommendation."},"expiration_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Recommendation expires and `state` is automatically set to `expired`, formatted in RFC 3339. After expiration, no further operator actions are allowed. If omitted, the Recommendation does not expire. This value is also used as the fallback expiration for `actions.control_changes` when neither `expiration_date` nor `expiration_delta` is provided on the control change."},"metadata":{"type":"object","description":"Custom dictionary keys/values for use by clients for anything useful and related to the Recommendation."},"resource":{"type":"string","format":"krn","x-allowed-krn":["asset"],"example":"krn:asset:bp_16","description":"Asset KRN that this Recommendation is related to. Allowed namespace is `asset`."},"resource_parameters":{"type":"object","description":"Optional resource-scoped parameters associated with the Recommendation."},"trace_id":{"type":"string","example":"app-trace-123","maxLength":256,"description":"The Trace ID associated with the Recommendation used for tracing and debugging."},"type":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","maxLength":64,"example":"Decrease Speed","description":"The Recommendation Type `name` associated with the Recommendation."},"evidences":{"type":"array","description":"A list of evidence that is being used to create the Recommendation.","items":{"$ref":"#/components/schemas/type.RecommendationEvidence"}}}},"type.RecommendationControlChangeCreate":{"type":"object","description":"Control Change payload for Recommendation creation. Each Control Change must have an expiration source through one of: `expiration_date`, `expiration_delta`, or the parent Recommendation `expiration_date`. `expiration_date` and `expiration_delta` cannot be used together.","required":["resource","payload"],"properties":{"control_change_id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"Unique identifier id for the Control Change request. This will only be returned when the Recommendation state is `accepted` or `auto_accepted` where the actions have been created and an id registered on the Server."},"expiration_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any the Control Change initiated will expire and the `status` automatically marked as `failed`, formatted in RFC 3339. This cannot be used together with `expiration_delta`."},"expiration_delta":{"type":"integer","minimum":1,"example":600,"description":"Relative expiration timeout in seconds for the Control Change. This cannot be used together with `expiration_date`."},"trace_id":{"type":"string","example":"app-trace-123","maxLength":256},"payload":{"$ref":"#/components/schemas/type.Any"},"resource":{"type":"string","format":"krn","x-allowed-krn":["ad"],"example":"krn:ad:bp_16/motor_speed_setpoint","description":"Resource KRN targeted by the generated Control Change. Allowed namespace is `ad`."},"retries":{"type":"integer","default":0,"example":3,"description":"Number of retry attempts to write the Control Change to the Bridge until a `processed` acknowledgment is received from the Bridge. If number of attempts exceeds `retries` then the Control Change Manager updates the Control Change key `state` with the value `failed`."},"timeout":{"type":"integer","default":300,"example":600,"description":"Time in seconds the Control Change Manager will wait after sending the Control Change for the Bridge to send a `processed` acknowledgement reply before retry sending the Control Change."},"queueing":{"$ref":"#/components/schemas/type.ControlChangeQueueing"},"from":{"$ref":"#/components/schemas/type.ControlChangeFrom"}}},"type.RecommendationActionsCreate":{"type":"object","description":"A list of all actions to be performed if the Recommendation is accepted.","properties":{"control_changes":{"type":"array","description":"An array of objects with Control Change information. If the Recommendation is `pending`, it will display creation information or if the Recommendation is `accepted` or `auto_accepted` it will show the Control Change status. Each Control Change does not need to be related to the `resource` of the Recommendation.","items":{"$ref":"#/components/schemas/type.RecommendationControlChangeCreate"}},"custom_actions":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/type.CustomActionCreationFields"},{"type":"object"}]}}}},"requests.RecommendationCreate":{"allOf":[{"$ref":"#/components/schemas/type.RecommendationBase"},{"type":"object","properties":{"actions":{"$ref":"#/components/schemas/type.RecommendationActionsCreate"}}}]},"enum.RecommendationStateCreate":{"type":"string","enum":["pending","auto_accepted"]},"responses.RecommendationCreate":{"allOf":[{"$ref":"#/components/schemas/type.RecommendationBase"},{"type":"object","properties":{"actions":{"$ref":"#/components/schemas/type.RecommendationActionsCreate"},"state":{"$ref":"#/components/schemas/enum.RecommendationStateCreate","description":"Current `state` of the Recommendation."},"id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"A unique randomly generated UUID as the key `id` for the Recommendation."},"type_title":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","maxLength":64,"example":"Decrease Speed","description":"The Recommendation Type `title` associated with the Recommendation."},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Recommendation was created, formatted in RFC 3339."},"source":{"type":"string","format":"krn","example":"krn:wlappv:my-cluster/my-workload:my-app/1.0.0","maxLength":256,"description":"The process that created this Recommendation. This can be a user or an automated process like a workload, application, etc."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Recommendation keys were last updated, formatted in RFC 3339."},"updated_by":{"type":"string","format":"krn","example":"krn:wlappv:my-cluster/my-workload:my-app/1.0.0","maxLength":256,"description":"The process that last updated this Recommendation. This can be a user or an automated process like a workload, application, etc."}}}]},"requests.RecommendationLastGet":{"required":["resources"],"type":"object","properties":{"resources":{"type":"array","example":["krn:asset:bp_02","krn:asset:bp_16"],"description":"Return only the latest Recommendation for the provided asset KRNs. Allowed namespace is `asset`.","items":{"type":"string","format":"krn","x-allowed-krn":["asset"]}},"sources":{"type":"array","example":["krn:wlappv:my-cluster/my-workload:my-app/1.0.0","krn:user:user@example.com"],"description":"Return only Recommendations created by the provided source KRNs. Allowed namespaces are `user`, `wl`, `wlappv`, `recommendation`, `job`, `app`, and `appversion`.","items":{"type":"string","format":"krn","x-allowed-krn":["app","appversion","job","recommendation","user","wl","wlappv"]}},"states":{"type":"array","example":["accepted","auto_accepted"],"description":"Return only Recommendations whose `state` matches one or more values.","items":{"$ref":"#/components/schemas/enum.RecommendationState"}},"trace_ids":{"type":"array","example":["trace id change 123"],"description":"Return only Recommendations associated with one or more Trace IDs.","items":{"type":"string","minLength":1,"maxLength":256}},"types":{"type":"array","example":["Decrease speed","increase_speed"],"description":"Return only Recommendations whose type matches one or more Recommendation Type names.","items":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64}}}},"enum.RecommendationActionStatus":{"type":"string","enum":["none","dispatched","dispatch_error"]},"type.RecommendationControlChange":{"type":"object","required":["resource","payload"],"properties":{"control_change_id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"Unique identifier id for the Control Change request. This will only be returned when the Recommendation state is `accepted` or `auto_accepted` where the actions have been created and an id registered on the Server."},"trace_id":{"type":"string","example":"app-trace-123","maxLength":256},"expiration_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any the Control Change initiated will expire and the `status` automatically marked as `failed`, formatted in RFC 3339."},"expiration_delta":{"type":"integer","minimum":1,"example":600,"description":"Relative expiration timeout in seconds for the Control Change. This is calculated from the moment the Recommendation is accepted."},"payload":{"$ref":"#/components/schemas/type.Any"},"resource":{"type":"string","format":"krn","x-allowed-krn":["ad"],"example":"krn:ad:bp_16/motor_speed_setpoint","description":"Resource KRN targeted by the generated Control Change. Allowed namespace is `ad`."},"retries":{"type":"integer","default":0,"example":3,"description":"Number of retry attempts to write the Control Change to the Bridge until a `processed` acknowledgment is received from the Bridge. If number of attempts exceeds `retries` then the Control Change Manager updates the Control Change key `state` with the value `failed`."},"timeout":{"type":"integer","default":300,"example":600,"description":"Time in seconds the Control Change Manager will wait after sending the Control Change for the Bridge to send a `processed` acknowledgement reply before retry sending the Control Change."},"queueing":{"$ref":"#/components/schemas/type.ControlChangeQueueing"},"from":{"$ref":"#/components/schemas/type.ControlChangeFrom"},"status":{"$ref":"#/components/schemas/enum.RecommendationActionStatus","description":"Current `status` of the Recommendation action."},"status_message":{"type":"string","description":"If something goes wrong while applying the action, this field will contain the error message."}}},"type.RecommendationActions":{"type":"object","description":"A list of all actions to be performed if the Recommendation is accepted.","properties":{"control_changes":{"type":"array","description":"An array of objects with Control Change information. If the Recommendation is `pending`, it will display creation information or if the Recommendation is `accepted` or `auto_accepted` it will show the Control Change status. Each Control Change does not need to be related to the `resource` of the Recommendation.","items":{"$ref":"#/components/schemas/type.RecommendationControlChange"}},"custom_actions":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/type.CustomActionCreationFields"},{"type":"object","properties":{"custom_action_id":{"type":"string","format":"uuid"},"status":{"$ref":"#/components/schemas/enum.RecommendationActionStatus","description":"Current `status` of the Recommendation action."},"status_message":{"type":"string","description":"If something goes wrong while applying the action, this field will contain the error message."}}}]}}}},"type.Recommendation":{"allOf":[{"$ref":"#/components/schemas/type.RecommendationBase"},{"type":"object","properties":{"actions":{"$ref":"#/components/schemas/type.RecommendationActions"},"id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"A unique randomly generated UUID as the key `id` for the Recommendation."},"type_title":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","maxLength":64,"example":"Decrease Speed","description":"The Recommendation Type `title` associated with the Recommendation."},"message":{"type":"string","example":"Recommendation is accurate based on the current performance.","description":"Optional user message associated with the `accepted` or `rejected` state."},"state":{"$ref":"#/components/schemas/enum.RecommendationState","description":"Current `state` of the Recommendation."},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Recommendation was created, formatted in RFC 3339."},"source":{"type":"string","format":"krn","x-allowed-krn":["job","recommendation","user","wl","wlappv"],"example":"krn:wlappv:my-cluster/my-workload:my-app/1.0.0","description":"Source KRN of the process that created this Recommendation. Allowed namespaces are `user`, `wl`, `wlappv`, `recommendation`, and `job`."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Recommendation was last updated, formatted in RFC 3339."},"updated_by":{"type":"string","format":"krn","x-allowed-krn":["job","recommendation","user","wl","wlappv"],"example":"krn:wlappv:my-cluster/my-workload:my-app/1.0.0","description":"KRN of the process that last updated this Recommendation. Allowed namespaces are `user`, `wl`, `wlappv`, `recommendation`, and `job`."}}}]},"responses.RecommendationLastGetPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"Latest Recommendations matching the request filters for the current cursor page.","items":{"$ref":"#/components/schemas/type.Recommendation"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.RecommendationLastGetPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"Latest Recommendations matching the request filters for the requested page.","items":{"$ref":"#/components/schemas/type.Recommendation"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.RecommendationLastGetPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.Recommendation"}]},"requests.RecommendationsList":{"type":"object","properties":{"ids":{"type":"array","example":["0002bc79-b42f-461b-95d6-cf0a28ba87aa","00080f9e-d086-452d-b41d-c8aa8fb27c92"],"description":"Return only Recommendations whose `id` matches one or more UUIDs.","items":{"type":"string","format":"uuid"}},"resources":{"type":"array","example":["krn:asset:bp_16","krn:asset:bp_21"],"description":"Return only Recommendations associated with the provided asset KRNs. Allowed namespace is `asset`.","items":{"type":"string","format":"krn","x-allowed-krn":["asset"]}},"sources":{"type":"array","example":["krn:wlappv:my-cluster/my-workload:my-app/1.0.0","krn:user:user@example.com"],"description":"Return only Recommendations created by the provided source KRNs. Allowed namespaces are `user`, `wl`, `wlappv`, `recommendation`, `job`, `app`, and `appversion`.","items":{"type":"string","format":"krn","x-allowed-krn":["app","appversion","job","recommendation","user","wl","wlappv"]}},"states":{"type":"array","example":["accepted","auto_accepted"],"description":"Return only Recommendations whose `state` matches one or more values.","items":{"$ref":"#/components/schemas/enum.RecommendationState"}},"trace_ids":{"type":"array","example":["trace id change 123"],"description":"Return only Recommendations associated with one or more Trace IDs.","items":{"type":"string","minLength":1,"maxLength":256}},"types":{"type":"array","example":["Decrease speed","increase_speed"],"description":"Return only Recommendations whose type matches one or more Recommendation Type names.","items":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64}}}},"responses.RecommendationsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"Recommendations matching the request filters for the current cursor page.","items":{"$ref":"#/components/schemas/type.Recommendation"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.RecommendationsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"Recommendations matching the request filters for the requested page.","items":{"$ref":"#/components/schemas/type.Recommendation"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.RecommendationsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.Recommendation"}]},"requests.RecommendationRangeGet":{"required":["end_date","resources","start_date"],"type":"object","properties":{"end_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"Latest creation timestamp (inclusive) for returned Recommendations, in RFC 3339 UTC format."},"resources":{"type":"array","example":["krn:asset:bp_02","krn:asset:bp_16"],"description":"Return only Recommendations associated with the provided asset KRNs. Allowed namespace is `asset`.","items":{"type":"string","format":"krn","x-allowed-krn":["asset"]}},"sources":{"type":"array","example":["krn:wlappv:my-cluster/my-workload:my-app/1.0.0","krn:user:user@example.com"],"description":"Return only Recommendations created by the provided source KRNs. Allowed namespaces are `user`, `wl`, `wlappv`, `recommendation`, `job`, `app`, and `appversion`.","items":{"type":"string","format":"krn","x-allowed-krn":["app","appversion","job","recommendation","user","wl","wlappv"]}},"trace_ids":{"type":"array","example":["trace id change 123"],"description":"Return only Recommendations associated with one or more Trace IDs.","items":{"type":"string","minLength":1,"maxLength":256}},"start_date":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"Earliest creation timestamp (inclusive) for returned Recommendations, in RFC 3339 UTC format."},"states":{"type":"array","example":["accepted","auto_accepted"],"description":"Return only Recommendations whose `state` matches one or more values.","items":{"$ref":"#/components/schemas/enum.RecommendationState"}},"types":{"type":"array","example":["Decrease speed","increase_speed"],"description":"Return only Recommendations whose type matches one or more Recommendation Type names.","items":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","minLength":1,"maxLength":64}}}},"responses.RecommendationRangeGetPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"Recommendations in the requested time range for the current cursor page.","items":{"$ref":"#/components/schemas/type.Recommendation"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.RecommendationRangeGetPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"Recommendations in the requested time range for the requested page.","items":{"$ref":"#/components/schemas/type.Recommendation"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.RecommendationRangeGetPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.Recommendation"}]},"requests.RecommendationTypeCreate":{"required":["name","title"],"type":"object","properties":{"name":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","example":"Decrease_speed","maxLength":64,"description":"Unique identifier `name` for the Recommendation Type."},"title":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","example":"Decrease speed","maxLength":64,"description":"Unique identifier `title` for the Recommendation Type."},"metadata":{"type":"object","description":"Detailed Attributes of the Recommendation Type. The structure of the `metadata` object can have any key/value structure."}}},"type.RecommendationType":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Recommendation Type was created, formatted in RFC 3339."},"created_by":{"type":"string","format":"krn","example":"krn:user:user@example.com","description":"The user or process that initiated the creation of this recommendation type."},"name":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","example":"Decrease speed","maxLength":64,"description":"Unique identifier `name` for the Recommendation Type."},"title":{"type":"string","example":"Decrease Speed","maxLength":64},"metadata":{"type":"object","description":"Detailed Attributes of the Recommendation Type. The structure of the `metadata` object can have any key/value structure."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Recommendation Type keys were last updated, formatted in RFC 3339."},"updated_by":{"type":"string","format":"krn","example":"krn:user:user@example.com","description":"The user or process that updated this recommendation type."}}},"responses.RecommendationTypeCreate":{"allOf":[{"$ref":"#/components/schemas/type.RecommendationType"}]},"responses.RecommendationTypesListPaginatedCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Recommendation Types and associated context objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.RecommendationType"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.RecommendationTypesListPaginatedLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Recommendation Types and associated context objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.RecommendationType"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.RecommendationTypesListPaginatedStream":{"allOf":[{"$ref":"#/components/schemas/type.RecommendationType"}]},"responses.RecommendationTypeGet":{"allOf":[{"$ref":"#/components/schemas/type.RecommendationType"}]},"requests.RecommendationTypeUpdate":{"type":"object","properties":{"title":{"type":"string","example":"Decrease Speed","minLength":1,"maxLength":64},"metadata":{"type":"object","description":"Detailed Attributes of the Recommendation Type. The structure of the `metadata` object can have any key/value structure."}}},"responses.RecommendationTypeUpdate":{"allOf":[{"$ref":"#/components/schemas/type.RecommendationType"}]},"requests.RecommendationAcceptUpdate":{"type":"object","properties":{"confidence":{"type":"integer","minimum":-2147483648,"maximum":2147483647,"example":7,"description":"Confidence level of the decision to accept the Recommendation. This is usually, but not mandatory, related to any machine learning model confidence results."},"message":{"type":"string","example":"Recommendation is accurate based on the current performance.","description":"Contains a message with any descriptions useful to be associated with the `accepted` state."}}},"responses.RecommendationGet":{"description":"Recommendation identified by `recommendation_id`.","allOf":[{"$ref":"#/components/schemas/type.Recommendation"}]},"requests.RecommendationRejectUpdate":{"type":"object","properties":{"confidence":{"type":"integer","minimum":-2147483648,"maximum":2147483647,"example":7,"description":"Confidence level of the decision to reject the Recommendation. This is usually, but not mandatory, related to any machine learning model confidence results."},"message":{"type":"string","example":"Recommendation is not accurate based on the current performance.","description":"Contains a message with any descriptions useful to be associated with the `reject` state."}}},"requests.SecretCreate":{"required":["name","value"],"type":"object","properties":{"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"my-secret-password","minLength":1,"maxLength":64,"description":"Unique identifier `name` for the Secret. The string can only contain lowercase alphanumeric characters and `-` characters."},"value":{"type":"string","example":"Nh9Noq%QWNaJim%uAe9r","minLength":1,"maxLength":64000,"description":"The actual secret. Once this is set you can not change or see it from Kelvin API. Retrieval of the value can only be done through an App."}}},"responses.SecretCreate":{"type":"object","properties":{"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"secret-password","maxLength":64,"description":"Unique identifier `name` for the Secret. The string can only contain lowercase alphanumeric characters and `-` characters."},"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Secret was first created, formatted in RFC 3339."},"created_by":{"type":"string","example":"krn:user:person@kelvin.ai","maxLength":256,"description":"Name of the user that created the Secret."},"updated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Secret was first updated, formatted in RFC 3339."},"updated_by":{"type":"string","example":"krn:user:person@kelvin.ai","maxLength":256,"description":"Name of the user that updated the Secret."}}},"responses.SecretItem":{"type":"object","properties":{"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"secret-password","maxLength":64,"description":"Unique identifier `name` for the Secret. The string can only contain lowercase alphanumeric characters and `-` characters."},"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Secret was first created, formatted in RFC 3339."},"created_by":{"type":"string","example":"krn:user:person@kelvin.ai","maxLength":256,"description":"Name of the user that created the Secret."},"updated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Secret was first updated, formatted in RFC 3339."},"updated_by":{"type":"string","example":"krn:user:person@kelvin.ai","maxLength":256,"description":"Name of the user that updated the Secret."}}},"responses.SecretsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Secret objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.SecretItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.SecretsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Secret objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.SecretItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.SecretsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.SecretItem"}]},"requests.SecretUpdate":{"type":"object","properties":{"value":{"type":"string","example":"Nh9Noq%QWNaJim%uAe9r","minLength":1,"maxLength":64000,"description":"The actual secret. Once this is set you can not change or see it from Kelvin API. Retrieval of the value can only be done through an App."}}},"responses.SecretUpdate":{"type":"object","properties":{"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"secret-password","maxLength":64,"description":"Unique identifier `name` for the Secret. The string can only contain lowercase alphanumeric characters and `-` characters."},"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Secret was first created, formatted in RFC 3339."},"created_by":{"type":"string","example":"krn:user:person@kelvin.ai","maxLength":256,"description":"Name of the user that created the Secret."},"updated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Secret was first updated, formatted in RFC 3339."},"updated_by":{"type":"string","example":"krn:user:person@kelvin.ai","maxLength":256,"description":"Name of the user that updated the Secret."}}},"requests.ThreadCreate":{"required":["body"],"type":"object","properties":{"body":{"type":"string","description":"requests.ThreadCreate schema"},"file":{"type":"string","description":"Attachment","format":"binary"}}},"type.ThreadAttachment":{"type":"object","properties":{"extension":{"type":"string"},"filename":{"type":"string"},"size":{"type":"integer"},"url":{"type":"string"}}},"type.ThreadContent":{"type":"object","properties":{"attachments":{"type":"array","items":{"$ref":"#/components/schemas/type.ThreadAttachment"}},"mentions":{"type":"array","items":{"type":"string"}},"replies":{"type":"array","items":{"$ref":"#/components/schemas/type.ThreadReply"}},"text":{"type":"string"}}},"type.ThreadReply":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/type.ThreadContent"},"created":{"type":"string","format":"date-time"},"id":{"type":"string"},"updated":{"type":"string","format":"date-time"},"user_id":{"type":"string"}}},"type.ThreadUserFollow":{"type":"object","properties":{"mute":{"type":"boolean"},"seen":{"type":"boolean"}}},"type.Thread":{"type":"object","properties":{"content":{"$ref":"#/components/schemas/type.ThreadContent"},"created":{"type":"string","format":"date-time"},"follows":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/type.ThreadUserFollow"}},"id":{"type":"string"},"related_to":{"type":"string"},"type":{"type":"string"},"updated":{"type":"string","format":"date-time"},"user_id":{"type":"string"}}},"responses.ThreadCreate":{"allOf":[{"$ref":"#/components/schemas/type.Thread"}]},"responses.ThreadsList":{"allOf":[{"$ref":"#/components/schemas/type.Thread"}]},"responses.ThreadFollowUpdate":{"allOf":[{"$ref":"#/components/schemas/type.Thread"}]},"responses.ThreadGet":{"allOf":[{"$ref":"#/components/schemas/type.Thread"}]},"requests.ThreadReplyCreate":{"required":["body"],"type":"object","properties":{"body":{"type":"string","description":"requests.ThreadReplyCreate schema"},"file":{"type":"string","description":"Attachment","format":"binary"}}},"responses.ThreadReplyCreate":{"allOf":[{"$ref":"#/components/schemas/type.Thread"}]},"requests.ThreadReplyUpdate":{"required":["body"],"type":"object","properties":{"body":{"type":"string","description":"requests.ThreadReplyUpdate schema"},"file":{"type":"string","description":"Attachment","format":"binary"}}},"responses.ThreadReplyUpdate":{"allOf":[{"$ref":"#/components/schemas/type.Thread"}]},"responses.ThreadSeenUpdate":{"allOf":[{"$ref":"#/components/schemas/type.Thread"}]},"requests.ThreadUpdate":{"required":["body"],"type":"object","properties":{"body":{"type":"string","description":"requests.ThreadUpdate schema"},"file":{"type":"string","description":"Attachment","format":"binary"}}},"responses.ThreadUpdate":{"allOf":[{"$ref":"#/components/schemas/type.Thread"}]},"type.KelvinMessage":{"type":"object","required":["id","type","resource","timestamp","payload","source"],"properties":{"id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"A unique randomly generated UUID as the key `id`. Duplicate keys are not allowed."},"type":{"type":"string","format":"data;pt={primitive-type}","description":"Kelvin Message Type representing the message type. If you do not know what Kelvin Message Type to put, most likely you can use `data;pt={primitive-type}`.","example":"data;pt=number"},"resource":{"type":"string","format":"krn","example":"krn:ad:bp_01/motor_speed_setpoint","description":"The resource that this message's data is linked with, expressed as a KRN. This can be an Asset, Data Stream, Asset / Data Stream pair, etc."},"source":{"type":"string","format":"krn","example":"krn:wlappv:cluster-01/beam-pump-optimization/3.4.7","description":"The resource that has initiated the writing of this message, expressed as a KRN. This can be an Application, Workload, Version specific Workload, etc."},"timestamp":{"type":"string","format":"date-time","description":"UTC time representing the time of this message's data, formatted in RFC 3339. This is usually the current time of creation of the message, but can also be back dated to any time in the past."},"payload":{"$ref":"#/components/schemas/type.Any","description":"The value of the measurement."}}},"requests.TimeseriesCreate":{"type":"object","required":["data"],"properties":{"data":{"type":"array","description":"Array of new time series data objects to create.","items":{"$ref":"#/components/schemas/type.KelvinMessage"}}}},"requests.Selector":{"type":"object","required":["resource"],"properties":{"fields":{"type":"array","description":"Optional list of payload field names to return for each selector. If omitted or empty, the API returns the raw payload. For object payloads (for example `pt=object;icd=kelvin.dynacard`), set `fields` to one or more property names such as `stroke_number` to return only those values in `last_value`. For primitive payloads (`pt=number`, `pt=string`, `pt=boolean`), omit `fields` or use the special field name `value`. The `value` field name also works for object payloads that include a `value` property.","items":{"type":"string","format":"^[a-z]+([A-Z][a-z0-9]+)*$","example":"value"}},"resource":{"type":"string","format":"krn","x-allowed-krn":["ad","dqad","dqasset"],"example":"krn:ad:asset1/data_stream1","description":"Resource KRN from which values are returned. Allowed namespaces are `ad`, `dqad`, and `dqasset`."}}},"requests.TimeseriesLastGet":{"type":"object","properties":{"selectors":{"type":"array","description":"Selectors defining which resources are returned and, optionally, which payload fields are projected.","items":{"$ref":"#/components/schemas/requests.Selector"}}}},"type.TimeseriesData":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when this timeseries record was created, formatted in RFC 3339."},"data_type":{"type":"string","example":"data;pt=number","description":"Data type descriptor of `last_value`, for example `data;pt=number` or `data;pt=object;icd=kelvin.dynacard`."},"fields":{"type":"array","example":["value"],"description":"Field names included in `last_value`.","items":{"type":"string","format":"^[a-z]+([A-Z][a-z0-9]+)*$","example":"value"}},"last_timestamp":{"type":"string","format":"date-time","example":"2023-11-10T09:55:08.627924Z","description":"UTC timestamp of the latest sample represented by `last_value`, formatted in RFC 3339."},"last_value":{"$ref":"#/components/schemas/type.Any","example":1945.2321735985631},"resource":{"type":"string","format":"krn","x-allowed-krn":["ad","dqad","dqasset"],"example":"krn:ad:asset/data_stream","description":"Resource KRN associated with `last_value`. Allowed namespaces are `ad`, `dqad`, and `dqasset`."},"source":{"type":"string","format":"krn","x-allowed-krn":["user","wl","wlappv"],"example":"krn:wlappv:my-cluster/my-workload:my-app/1.0.0","description":"Source KRN for `last_value`. Allowed namespaces are `user`, `wl`, and `wlappv`."},"updated":{"type":"string","format":"date-time","example":"2023-11-10T09:55:09.31857Z","description":"UTC time when the time series data was last updated, formatted in RFC 3339."}}},"responses.TimeseriesLastGet":{"allOf":[{"$ref":"#/components/schemas/type.TimeseriesData"}]},"requests.TimeseriesList":{"type":"object","properties":{"resource":{"type":"array","example":["krn:ad:asset1/data_stream1","krn:ad:asset1/data_stream2"],"description":"Only return data from the Asset / DataStream pairs specified. Blank array will return all pairs. Resources are written in the krn format.","items":{"type":"string","format":"krn"}},"source":{"type":"array","example":["krn:user:user@example.com","krn:wl:my-node/temp-adjuster-1","krn:wlappv:my-node/pvc-r312:pvc/1.0.0"],"description":"Only return data from the user and/or workloads specified. Blank array will return from all sources. Sources are written in the krn format.","items":{"type":"string","format":"krn"}}}},"responses.TimeseriesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Time Series objects, starting from the index specified by the pagination parameters. Each object is a separate last value that matches the query parameters.","items":{"$ref":"#/components/schemas/type.TimeseriesData"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.TimeseriesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Time Series objects for the page number specified by the pagination parameters. Each object is a separate last value that matches the query parameters.","items":{"$ref":"#/components/schemas/type.TimeseriesData"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.TimeseriesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.TimeseriesData"}]},"enum.TimeseriesAgg":{"type":"string","example":"mean","default":"none","enum":["none","count","distinct","integral","mean","median","mode","spread","stddev","sum","max","min","first","last"],"description":"Performs mathematical calculations on the Time Series values and returns the calculated results only. Depending on enumerator used `time_bucket` may also be required."},"enum.TimeseriesOrder":{"type":"string","example":"ASC","default":"ASC","enum":["ASC","DESC"],"description":"Sort order of the `timestamp` key for the returned data. This string is case sensitive."},"requests.TimeseriesRangeGet":{"required":["end_time","selectors","start_time"],"type":"object","properties":{"agg":{"$ref":"#/components/schemas/enum.TimeseriesAgg"},"end_time":{"type":"string","format":"date-time","example":"2023-06-01T12:00:00Z","description":"End of the queried time range in RFC 3339 UTC format with microsecond precision."},"fill":{"type":"string","example":"25","default":"none","description":"How to fill empty aggregation buckets when there is no data. This applies when `agg` is set and `time_bucket` is used. Valid options are:\n  - `none`: Doesn't fill empty values\n  - `null`: Fills empty values with a null value\n  - `linear`: Fills using [linear interpolation](https://en.wikipedia.org/wiki/Linear_interpolation)\n  - `previous`: Fills using the previous non-null value\n  - `<value>`: Provide a value to be used to fill"},"group_by_selector":{"type":"boolean","example":true,"default":true,"description":"If true, results will be separated per `selector` element `resource` (Asset / Data Stream pair)."},"order":{"$ref":"#/components/schemas/enum.TimeseriesOrder"},"selectors":{"type":"array","description":"Selectors defining which resources are returned and, optionally, which payload fields are projected for each resource.","items":{"$ref":"#/components/schemas/requests.Selector"}},"start_time":{"type":"string","format":"date-time","example":"2023-06-01T12:00:00Z","description":"Start of the queried time range in RFC 3339 UTC format with microsecond precision."},"time_bucket":{"type":"string","example":"5m","description":"Defines the time range to use to aggregate the data values when using the `agg` key. Valid time units are \"us\" (or \"µs\"), \"ms\", \"s\", \"m\", \"h\"."}}},"requests.TimeseriesRangeDownload":{"allOf":[{"$ref":"#/components/schemas/requests.TimeseriesRangeGet"}]},"responses.TimeseriesRangeGet":{"type":"object","properties":{"payload":{"$ref":"#/components/schemas/type.Any"},"resource":{"type":"string","nullable":true,"format":"krn","x-allowed-krn":["ad","dqad","dqasset"],"example":"krn:ad:asset1/data_stream1","description":"Resource KRN associated with the `payload`. Allowed namespaces are `ad`, `dqad`, and `dqasset`."},"timestamp":{"type":"string","format":"date-time","example":"2023-11-13T12:00:00Z","description":"UTC timestamp for the returned `payload`, formatted in RFC 3339."}}},"responses.UserItem":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the User was created, formatted in RFC 3339."},"email":{"type":"string","format":"email","example":"john.doe@kelvin.ai","description":"Email of the user."},"first_name":{"type":"string","maxLength":64,"example":"John","description":"First name of the User."},"id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"A unique randomly generated UUID as the key `id` for the User."},"last_name":{"type":"string","maxLength":64,"example":"Doe","description":"Last name of the User."},"username":{"type":"string","maxLength":64,"example":"johndoe","description":"Username of the User."}}},"responses.UsersListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` User objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.UserItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.UsersListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` User objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.UserItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.UsersListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.UserItem"}]},"responses.UserMeGet":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the current User was created, formatted in RFC 3339."},"email":{"type":"string","format":"email","example":"john.doe@kelvin.ai","description":"Email of the current user."},"first_name":{"type":"string","maxLength":64,"example":"John","description":"First name of the current User."},"id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"A unique randomly generated UUID as the key `id` for the current User."},"last_name":{"type":"string","maxLength":64,"example":"Doe","description":"Last name of the current User."},"permissions":{"type":"array","example":["kelvin.permission.bridge.update","kelvin.permission.asset.delete"],"description":"Lists all Instance permissions accessible to the current User.","items":{"type":"string","minLength":1,"maxLength":64}},"groups":{"type":"array","example":["my_group"],"description":"Lists of all groups the current User belongs to.","items":{"type":"string"}},"username":{"type":"string","maxLength":64,"example":"johndoe","description":"Username of the current User."}}},"type.UserSetting":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the User Setting was created, formatted in RFC 3339."},"payload":{"type":"object","description":"The User Settings. The structure of this `payload` object depends on the type of User Setting being defined."},"setting_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"kelvin-notifications","maxLength":64,"description":"Unique identifier User Setting key `setting_name`."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any User Setting keys were last updated, formatted in RFC 3339."}}},"responses.UserSettingsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` User Setting objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.UserSetting"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.UserSettingsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` User Setting objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.UserSetting"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.UserSettingsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.UserSetting"}]},"responses.UserSettingsGet":{"allOf":[{"$ref":"#/components/schemas/type.UserSetting"}]},"requests.UserSettingsUpdate":{"type":"object","properties":{"payload":{"type":"object","description":"The new payload for the User Setting. The structure of this `payload` object depends on the type of User Setting being updated."}}},"responses.UserSettingsUpdate":{"allOf":[{"$ref":"#/components/schemas/type.UserSetting"}]},"responses.UserGet":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the User was created, formatted in RFC 3339."},"email":{"type":"string","format":"email","example":"john.doe@kelvin.ai","description":"Email of the user."},"first_name":{"type":"string","minLength":1,"maxLength":64,"example":"John","description":"First name of the User."},"id":{"type":"string","format":"uuid","example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"A unique randomly generated UUID as the key `id` for the User."},"last_name":{"type":"string","minLength":1,"maxLength":64,"example":"Doe","description":"Last name of the User."},"username":{"type":"string","minLength":1,"maxLength":64,"example":"johndoe","description":"Username of the User."}}},"requests.SharedSettingsUpdate":{"type":"object","properties":{"payload":{"type":"object","description":"The new payload for the Shared Setting. The structure of this `payload` object depends on the type of Shared Setting being updated."}}},"type.SharedSetting":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Shared Setting was created, formatted in RFC 3339."},"created_by":{"type":"string","example":"krn:user:email@kelvin.ai","description":"The User who created the Shared Setting, represented by a KRN."},"payload":{"type":"object","description":"The Shared Settings. The structure of this `payload` object depends on the type of Shared Setting being defined."},"setting_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"kelvin-notifications","maxLength":64,"description":"Unique identifier Shared Setting key `setting_name`."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when any Shared Setting keys were last updated, formatted in RFC 3339."},"updated_by":{"type":"string","example":"krn:user:email@kelvin.ai","description":"The User who updated the Shared Setting, represented by a KRN."}}},"responses.SharedSettingsUpdate":{"allOf":[{"$ref":"#/components/schemas/type.SharedSetting"}]},"responses.SharedSettingsGet":{"allOf":[{"$ref":"#/components/schemas/type.SharedSetting"}]},"responses.SharedSettingsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Shared Setting objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.SharedSetting"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.SharedSettingsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Shared Setting objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/type.SharedSetting"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.SharedSettingsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/type.SharedSetting"}]},"requests.GroupCreate":{"type":"object","properties":{"name":{"type":"string","maxLength":64,"example":"my_group","description":"The name of the group."},"title":{"type":"string","maxLength":64,"example":"My Group","description":"The title of the group."},"description":{"type":"string","maxLength":256,"example":"This is my group","description":"The description of the group."},"role_names":{"type":"array","items":{"type":"string","maxLength":64,"example":"my_role","description":"The name of the role."}}},"required":["name","title"]},"responses.Group":{"type":"object","properties":{"name":{"type":"string","maxLength":64,"example":"my_group","description":"The name of the Group."},"title":{"type":"string","maxLength":64,"example":"My Group","description":"The title of the Group."},"description":{"type":"string","maxLength":256,"example":"This is my group","description":"The description of the Group.          "},"roles":{"type":"array","description":"A list of role objects that the group belongs to.","items":{"type":"object","properties":{"name":{"type":"string","maxLength":64,"example":"my_role","description":"The name of the Role."},"title":{"type":"string","maxLength":64,"example":"My Role","description":"The title of the Role."}}}},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Group was created, formatted in RFC 3339."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Group was last updated, formatted in RFC 3339."}}},"responses.GroupCreate":{"allOf":[{"$ref":"#/components/schemas/responses.Group"}]},"responses.GroupItem":{"type":"object","properties":{"name":{"type":"string","maxLength":64,"example":"my_group","description":"The name of the Group."},"title":{"type":"string","maxLength":64,"example":"My Group","description":"The title of the Group."},"description":{"type":"string","maxLength":256,"example":"This is my group","description":"The description of the Group.          "},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Group was created, formatted in RFC 3339.          "},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Group was last updated, formatted in RFC 3339."}}},"responses.GroupsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Group objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.GroupItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.GroupsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Group objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.GroupItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.GroupsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.GroupItem"}]},"responses.GroupGet":{"allOf":[{"$ref":"#/components/schemas/responses.Group"}]},"requests.GroupUpdate":{"type":"object","properties":{"title":{"type":"string","maxLength":64,"example":"My Group","description":"The title of the group."},"description":{"type":"string","maxLength":256,"example":"This is my group","description":"The description of the group."},"role_names":{"type":"array","items":{"type":"string","maxLength":64,"example":"my_role","description":"The name of the role."}}}},"responses.GroupUpdate":{"allOf":[{"$ref":"#/components/schemas/responses.Group"}]},"requests.RoleCreate":{"type":"object","properties":{"name":{"type":"string","maxLength":64,"example":"my_role","description":"The name of the Role."},"title":{"type":"string","maxLength":64,"example":"My Role","description":"The title of the Role."},"description":{"type":"string","maxLength":256,"example":"This is my role","description":"The description of the Role."},"group_names":{"type":"array","items":{"type":"string","maxLength":64,"example":"my_group","description":"The name of the Group."}}},"required":["name","title"]},"responses.Role":{"type":"object","properties":{"name":{"type":"string","maxLength":64,"example":"my_role","description":"The name of the Role."},"title":{"type":"string","maxLength":64,"example":"My Role","description":"The title of the Role."},"description":{"type":"string","maxLength":256,"example":"This is my role","description":"The description of the Role."},"groups":{"type":"array","description":"A list of group objects that the role belongs to.","items":{"type":"object","properties":{"name":{"type":"string","maxLength":64,"example":"my_group","description":"The name of the Group."},"title":{"type":"string","maxLength":64,"example":"My Group","description":"The title of the Group."}}}},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Role was last updated, formatted in RFC 3339."},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Role was created, formatted in RFC 3339."}}},"responses.RoleCreate":{"allOf":[{"$ref":"#/components/schemas/responses.Role"}]},"responses.RoleItem":{"type":"object","properties":{"name":{"type":"string","maxLength":64,"example":"my_role","description":"The name of the Role."},"title":{"type":"string","maxLength":64,"example":"My Role","description":"The title of the Role."},"description":{"type":"string","maxLength":256,"example":"This is my role","description":"The description of the Role."},"policy_names":{"type":"array","items":{"type":"string","maxLength":64,"example":"my_policy","description":"The name of the Policy."}},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Role was created, formatted in RFC 3339."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Role was last updated, formatted in RFC 3339."}}},"responses.RolesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Role objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.RoleItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.RolesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Role objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.RoleItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.RolesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.RoleItem"}]},"responses.RoleGet":{"allOf":[{"$ref":"#/components/schemas/responses.Role"}]},"requests.RoleUpdate":{"type":"object","properties":{"title":{"type":"string","maxLength":64,"example":"My Role","description":"The title of the Role."},"description":{"type":"string","maxLength":256,"example":"This is my role","description":"The description of the Role."},"group_names":{"type":"array","items":{"type":"string","maxLength":64,"example":"my_group","description":"The name of the Group."}}}},"responses.RoleUpdate":{"allOf":[{"$ref":"#/components/schemas/responses.Role"}]},"enum.ResourceType":{"type":"string","enum":["asset","datastream","app","app-parameter"]},"enum.RolePolicyAction":{"type":"string","enum":["*","create","read","update","delete"],"example":"read","description":"The actions that are allowed on the resource."},"type.RolePolicyActions":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/enum.RolePolicyAction"}]}},"type.RoleConditionExpr":{"type":"object","properties":{"expr":{"type":"string","minLength":1}},"required":["expr"]},"type.RoleConditionExprList":{"type":"object","properties":{"of":{"type":"array","minItems":1,"items":{"$ref":"#/components/schemas/type.RoleConditionExpr"}}},"required":["of"]},"type.RolePolicyCondition":{"type":"object","required":["match"],"properties":{"match":{"type":"object","oneOf":[{"$ref":"#/components/schemas/type.RoleConditionExpr"},{"type":"object","properties":{"all":{"$ref":"#/components/schemas/type.RoleConditionExprList"}},"required":["all"],"additionalProperties":false},{"type":"object","properties":{"any":{"$ref":"#/components/schemas/type.RoleConditionExprList"}},"required":["any"],"additionalProperties":false}]}}},"requests.RolePolicyCreate":{"type":"object","properties":{"name":{"type":"string","maxLength":64,"example":"my_policy","description":"The name of the Policy."},"resource_type":{"$ref":"#/components/schemas/enum.ResourceType","example":"asset","description":"The resource_type to which the rule applies."},"title":{"type":"string","maxLength":64,"example":"My Policy","description":"The title of the Policy."},"description":{"type":"string","maxLength":256,"example":"This is my policy","description":"The description of the Policy."},"rule":{"type":"object","required":["actions"],"properties":{"actions":{"$ref":"#/components/schemas/type.RolePolicyActions"},"condition":{"$ref":"#/components/schemas/type.RolePolicyCondition"}}}},"required":["name","title","resource_type","rule"]},"responses.RolePolicy":{"type":"object","properties":{"name":{"type":"string","maxLength":64,"example":"my_policy","description":"The name of the Policy."},"resource_type":{"$ref":"#/components/schemas/enum.ResourceType","example":"asset","description":"The resource_type to which the policy applies."},"title":{"type":"string","maxLength":64,"example":"My Policy","description":"The title of the Policy."},"description":{"type":"string","maxLength":256,"example":"This is my policy","description":"The description of the Policy."},"rule":{"type":"object","properties":{"actions":{"$ref":"#/components/schemas/type.RolePolicyActions"},"condition":{"$ref":"#/components/schemas/type.RolePolicyCondition"}}},"created":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Policy was created, formatted in RFC 3339."},"updated":{"type":"string","format":"date-time","example":"2024-12-18T18:22:18.582724Z","description":"UTC time when the Policy was last updated, formatted in RFC 3339."}}},"responses.RolePolicyCreate":{"allOf":[{"$ref":"#/components/schemas/responses.RolePolicy"}]},"responses.RolePoliciesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Role Policy objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.RolePolicy"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.RolePoliciesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Role Policy objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.RolePolicy"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.RolePoliciesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.RolePolicy"}]},"responses.RolePolicyGet":{"allOf":[{"$ref":"#/components/schemas/responses.RolePolicy"}]},"requests.RolePolicyUpdate":{"type":"object","properties":{"title":{"type":"string","maxLength":64,"example":"My Policy","description":"The title of the Policy."},"description":{"type":"string","maxLength":256,"example":"This is my policy","description":"The description of the Policy."},"rule":{"type":"object","required":["actions"],"properties":{"actions":{"$ref":"#/components/schemas/type.RolePolicyActions"},"condition":{"$ref":"#/components/schemas/type.RolePolicyCondition"}}}}},"responses.RolePolicyUpdate":{"allOf":[{"$ref":"#/components/schemas/responses.RolePolicy"}]},"requests.LegacyAppCreate":{"type":"object","properties":{"payload":{"type":"object"}}},"enum.LegacyAppType":{"type":"string","enum":["kelvin","docker","bridge"]},"type.LegacyAppVersion":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when this App version was first uploaded to the App Registry, formatted in RFC 3339."},"id":{"type":"string","format":"^[a-z]+([A-Z][a-z0-9]+)*$","example":"58ba052085dfd66545bf24a4957f6c8fd4af3c27","description":"Unique identifier for this version of the App in the App Registry."},"payload":{"type":"object","description":"Dictionary with keys for app inputs/outputs, info, spec version and system packages. Each key represents specific settings and parameters for the App."},"updated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when any App keys for this App version in the App Registry were last updated, formatted in RFC 3339."},"version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"Version number of this App in the App Registry."}}},"type.LegacyApp":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the App was first uploaded to the App Registry, formatted in RFC 3339."},"description":{"type":"string","example":"This application controls the speed of the beam pump motor in order to increase production for this type of artificial lift well. It uses values available from the control system such as Downhole Pressure, Motor Speed, Motor Torque and Choke position.\n","maxLength":256,"description":"Description of the App in the App Registry."},"latest_version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"Latest version number of the App in the App Registry."},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control","maxLength":64,"description":"Unique identifier `name` of the App in the App Registry."},"title":{"type":"string","example":"Motor Speed Control","maxLength":64,"description":"Display name (`title`) of the App in the App Registry."},"type":{"$ref":"#/components/schemas/enum.LegacyAppType","description":"Type of development used for the App. `kelvin` is Kelvin App using Python and `docker` is using the generic Dockerfile format."},"updated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when any App keys in the App Registry were last updated, formatted in RFC 3339."},"versions":{"type":"array","description":"Array of all App versions available in the App Registry.","items":{"$ref":"#/components/schemas/type.LegacyAppVersion"}}}},"responses.LegacyAppCreate":{"allOf":[{"$ref":"#/components/schemas/type.LegacyApp"}]},"enum.ErrorLegacyType":{"type":"string","description":"The type of error that has occurred, e.g. `system`.","enum":["system"]},"responses.ErrorMessage":{"type":"object","properties":{"error_code":{"type":"integer","example":32,"description":"Internal Kelvin error code (used for internal purposes)."},"http_status_code":{"type":"integer","example":400,"description":"HTTP status error code."},"message":{"type":"array","example":["Detailed information about the error."],"description":"Detailed description of the error.","items":{"type":"string"}},"type":{"$ref":"#/components/schemas/enum.ErrorLegacyType"}}},"responses.LegacyAppItem":{"type":"object","properties":{"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the App was first uploaded to the App Registry, formatted in RFC 3339."},"description":{"type":"string","example":"This application controls the speed of the beam pump motor in order to increase production for this type of artificial lift well. It uses values available from the control system such as Downhole Pressure, Motor Speed, Motor Torque and Choke position.\n","maxLength":256,"description":"Description of the App in the App Registry."},"latest_version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"Latest version number of the App in the App Registry."},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control","maxLength":64,"description":"Unique identifier `name` of the App in the App Registry."},"title":{"type":"string","example":"Motor Speed Control","maxLength":64,"description":"Display name (`title`) of the App in the App Registry."},"type":{"$ref":"#/components/schemas/enum.LegacyAppType","description":"Type of development used for the App. `kelvin` is Kelvin App using Python and `docker` is using the generic Dockerfile format."},"updated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when any App keys in the App Registry were last updated, formatted in RFC 3339."}}},"responses.LegacyAppRegistryAppsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Data Type objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.LegacyAppItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.LegacyAppRegistryAppsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Data Type objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.LegacyAppItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.LegacyAppRegistryAppsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.LegacyAppItem"}]},"responses.LegacyAppRegistryAppGet":{"allOf":[{"$ref":"#/components/schemas/type.LegacyApp"}]},"requests.LegacyAppUpdate":{"type":"object","properties":{"description":{"type":"string","example":"This application controls the speed of the beam pump motor in order to increase production for this type of artificial lift well. It uses values available from the control system such as Downhole Pressure, Motor Speed, Motor Torque and Choke position.\n","minLength":1,"maxLength":256,"description":"New description of the App in the App Registry."},"title":{"type":"string","example":"Motor Speed Control","minLength":1,"maxLength":64,"description":"New display name (`title`) of the App in the App Registry."}}},"responses.LegacyAppUpdate":{"allOf":[{"$ref":"#/components/schemas/type.LegacyApp"}]},"responses.LegacyAppVersionGet":{"allOf":[{"$ref":"#/components/schemas/type.LegacyAppVersion"}]},"type.AppYaml":{"type":"object"},"requests.BridgeDeploy":{"required":["cluster_name","name","payload","app_name"],"type":"object","properties":{"app_version":{"maxLength":64,"type":"string"},"cluster_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"docs-demo-cluster-k3s","minLength":1,"maxLength":64,"description":"Unique identifier `name` of the Cluster. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"node_name":{"type":"string","format":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$","example":"my-node","maxLength":64,"description":"Target Node Name for Workload deployment. If not provided, the Cluster will select the Node."},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-plc-opcua-connection","minLength":1,"maxLength":32,"description":"Unique identifier `name` of the Bridge (Connection). The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"payload":{"$ref":"#/components/schemas/type.AppYaml","description":"Dictionary with keys for configuration, language, logging level, metrics mapping, protocol, and system packages. Each key represents specific settings and parameters for the Bridge (Connection)."},"title":{"type":"string","example":"Motor PLC OPCUA Connection","description":"Display name (`title`) of the Bridge (Connection)."},"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"test-app","minLength":1,"maxLength":64,"description":"Unique identifier `name` of the App. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."}}},"type.Bridge":{"type":"object","properties":{"cluster_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"docs-demo-cluster-k3s","maxLength":64,"description":"Unique identifier `name` of the Cluster."},"created":{"type":"string","format":"date-time","example":"2023-12-26T18:22:18.582724Z","description":"UTC time when the Bridge (Connection) was first created, formatted in RFC 3339."},"enabled":{"type":"boolean","example":true,"description":"If true, Bridge (Connection) `status` is set to `running` and will process I/O's. If false, Bridge (Connection) `status` is set to `stopped` but remains in Node on the Edge System."},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-plc-opcua-connection","maxLength":32,"description":"Unique identifier `name` of the Bridge (Connection)."},"node_name":{"type":"string","format":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$","example":"docs-demo-node-01","maxLength":64,"description":"Unique identifier `name` of the Node in the Cluster hosting the Bridge (Connection)."},"payload":{"$ref":"#/components/schemas/type.AppYaml","description":"Dictionary with keys for configuration, language, logging level, metrics mapping, protocol, and system packages. Each key represents specific settings and parameters for the Bridge (Connection)."},"status":{"$ref":"#/components/schemas/type.WorkloadStatus"},"title":{"type":"string","example":"Motor PLC OPCUA Connection","description":"Display name (`title`) of the Bridge (Connection)."},"updated":{"type":"string","format":"date-time","example":"2023-12-18T18:22:18.582724Z","description":"UTC time when any Bridge (Connection) keys were last updated, formatted in RFC 3339."},"workload_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-plc-opcua-connection","maxLength":32,"description":"Unique identifier `name` of the Workload that the Bridge (Connection) App is deployed as to the Cluster."},"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"test-app","maxLength":64,"description":"Unique identifier `name` of the App. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"app_version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"App version"}}},"responses.BridgeDeploy":{"allOf":[{"$ref":"#/components/schemas/type.Bridge"}]},"responses.BridgeItem":{"type":"object","properties":{"cluster_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"docs-demo-cluster-k3s","maxLength":64,"description":"Unique identifier `name` of the Cluster."},"created":{"type":"string","format":"date-time","example":"2023-12-26T18:22:18.582724Z","description":"UTC time when the Bridge (Connection) was first created, formatted in RFC 3339."},"enabled":{"type":"boolean","example":true,"description":"If true, Bridge (Connection) `status` is set to `running` and will process I/O's. If false, Bridge (Connection) `status` is set to `stopped` but remains in Node on the Edge System."},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-plc-opcua-connection","maxLength":32,"description":"Unique identifier `name` of the Bridge (Connection)."},"node_name":{"type":"string","format":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$","example":"docs-demo-node-01","maxLength":64,"description":"Unique identifier `name` of the Node in the Cluster hosting the Bridge (Connection)."},"status":{"$ref":"#/components/schemas/type.WorkloadStatus"},"title":{"type":"string","example":"Motor PLC OPCUA Connection","description":"Display name (`title`) of the Bridge (Connection)."},"updated":{"type":"string","format":"date-time","example":"2023-12-18T18:22:18.582724Z","description":"UTC time when any Bridge (Connection) keys were last updated, formatted in RFC 3339."},"workload_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-plc-opcua-connection","maxLength":32,"description":"Unique identifier `name` of the Workload that the Bridge (Connection) App is deployed as to the Cluster."},"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"test-app","maxLength":64,"description":"Unique identifier `name` of the App. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"app_version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"App version"}}},"responses.BridgesListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Bridge (Connection) objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.BridgeItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.BridgesListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Bridge (Connection) objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.BridgeItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.BridgesListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.BridgeItem"}]},"responses.BridgeGet":{"allOf":[{"$ref":"#/components/schemas/type.Bridge"}]},"type.ResourceParameters":{"type":"object","required":["resource","parameters"],"properties":{"resource":{"type":"string","format":"krn","minLength":1,"maxLength":256,"description":"The target Asset to which the parameters are to be applied."},"parameters":{"type":"array","items":{"$ref":"#/components/schemas/type.ParameterItem"}}}},"requests.ParametersAppVersionUpdate":{"type":"object","required":["resource_parameters"],"properties":{"source":{"type":"string","format":"krn","minLength":1,"maxLength":256,"description":"The User or Service that initiates the bulk updates. Only Service Accounts can write to this parameter."},"resource_parameters":{"type":"array","description":"Array of parameters to update for an Asset.","items":{"$ref":"#/components/schemas/type.ResourceParameters"}}}},"response.ErrorLegacy":{"type":"object","properties":{"errors":{"type":"array","description":"An array of all errors detected during the validation.","items":{"type":"object","properties":{"name":{"type":"string","description":"Unique identifier name of the error."},"title":{"type":"string","description":"The Display name (title) of the error."},"description":{"type":"string","description":"Description of what the error is about."},"solution":{"type":"string","description":"Possible solutions to resolve the error."},"payload":{"type":"array","description":"A dictionary of all the individual error names, error titles, descriptions and solutions within the submitted information.","items":{"type":"object"}},"type":{"$ref":"#/components/schemas/enum.ErrorLegacyType"}}}}}},"requests.ParametersDefinitionsList":{"type":"object","properties":{"app_names":{"type":"array","description":"A filter on the list based on the key `app_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control","minLength":1,"maxLength":64}},"names":{"type":"array","description":"Unique identifier name for this Parameter.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"gas_flow_rate_max_threshold","minLength":1,"maxLength":64}},"primitive_types":{"type":"array","description":"Filter on the list based on the Primitive data type key `primitive_type` of the Parameter.","example":["number","boolean"],"items":{"$ref":"#/components/schemas/enum.ParameterType"}},"search":{"type":"array","description":"Search and filter on the list based on the keys `parameter_name`. The search is case insensitive and will find partial matches as well. All strings in the array are treated as `OR`.","example":["motor","water"],"items":{"type":"string","minLength":1,"maxLength":64}}}},"responses.ParameterDefinitionItem":{"type":"object","properties":{"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control","maxLength":64,"description":"Unique identifier `name` of the App in the App Registry linked to this Paramete Definition."},"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Parameter Definition was first created, formatted in RFC 3339."},"last_title":{"type":"string","example":"Gas Flow Max Threshold","maxLength":64,"description":"Latest Display name (`title`) of the Parameter in the App."},"name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"gas_flow_rate_max_threshold","maxLength":64,"description":"The name of the Parameter."},"primitive_type":{"$ref":"#/components/schemas/enum.ParameterType"},"updated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when any Parameter Definition keys were last updated, formatted in RFC 3339."}}},"responses.ParametersDefinitionsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Parameter Definition objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.ParameterDefinitionItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.ParametersDefinitionsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Parameter Definition objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.ParameterDefinitionItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.ParametersDefinitionsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.ParameterDefinitionItem"}]},"requests.ParameterAppVersion":{"required":["name"],"type":"object","properties":{"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control","minLength":1,"maxLength":64,"description":"A filter on the list based on the key `app_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"version":{"maxLength":64,"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"A filter on the list based on the key `app_version`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."}}},"requests.ResourceParametersList":{"type":"object","properties":{"apps":{"type":"array","description":"A filter on the list for Apps and its Versions. Multiple Apps and Versions can be given. All App Versions in the array are treated as `OR`.","items":{"$ref":"#/components/schemas/requests.ParameterAppVersion"}},"resources":{"type":"array","example":["krn:asset:bp_16","krn:asset:bp_21"],"description":"A filter on the list showing only current Parameter values associated with any Assets in the array. The filter is on the full name only. All strings in the array are treated as `OR`. Each Asset name can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"krn","minLength":1,"maxLength":256}},"parameter_names":{"type":"array","example":["motor-speed-control","gas_flow_rate_max_threshold"],"description":"A filter on the list for Parameters. The filter is on the full name only. All strings in the array are treated as `OR`. Each Parameter name can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}},"start_date":{"type":"string","format":"date-time","example":"2024-02-06T00:00:00.000000Z","description":"Earliest `created` time for the list of Parameters. Time is based on UTC timezone, formatted in RFC 3339."},"end_date":{"type":"string","format":"date-time","example":"2024-02-07T00:00:00.000000Z","description":"Most recent `created` time for the list of Parameters. Time is based on UTC timezone, formatted in RFC 3339."}}},"responses.ParameterValueHistorianItem":{"type":"object","properties":{"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control","maxLength":64,"description":"Unique identifier `name` of the App in the App Registry linked to this Parameter."},"app_version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"Version number of the App in the App Registry linked to this Parameter."},"comment":{"type":"string","example":"updating parameter for well operational optimization.","maxLength":200,"description":"Latest information from user when creating or updating this Parameter."},"created":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when the Parameter was first created, formatted in RFC 3339."},"parameter_name":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","example":"gas_flow_rate_max_threshold","maxLength":64,"description":"The name of the Parameter."},"resource":{"type":"string","format":"krn","example":"krn:asset:well_01","minLength":1,"maxLength":256,"description":"The target Asset to which the parameters are to be applied."},"source":{"type":"string","format":"krn","example":"krn:user:richard.teo@kelvininc.com","minLength":1,"maxLength":256,"description":"KRN of the User or Service that last created or updated the Parameter."},"updated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when any Parameter keys were last updated, formatted in RFC 3339."},"value":{"$ref":"#/components/schemas/type.Any","example":100,"description":"The current value of the Parameter. The format returned will depend on the Primitive Type of the Parameter."},"invalidated":{"type":"string","format":"date-time","example":"2023-06-26T18:22:18.582724Z","description":"UTC time when any Parameter value were invalidated, formatted in RFC 3339."}}},"responses.ResourceParametersListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Parameter objects and its current value for the related Resource, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.ParameterValueHistorianItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.ResourceParametersListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Parameter objects and its current value for the related Resource for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.ParameterValueHistorianItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.ResourceParametersListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.ParameterValueHistorianItem"}]},"requests.AppParameter":{"required":["app_name"],"type":"object","properties":{"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control","minLength":1,"maxLength":64,"description":"A filter on the list based on the key `app_name`. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"parameters":{"type":"array","example":["gas_flow_rate_min_threshold","gas_flow_rate_max_threshold"],"description":"Array of Parameter `names` to fetch associated values for Apps.","items":{"type":"string","format":"^[a-z0-9]([-_.a-z0-9]*[a-z0-9])?$","minLength":1,"maxLength":64}}}},"requests.ParametersValuesGet":{"type":"object","properties":{"app_parameters":{"type":"array","description":"Filter on the list based on the key `app_name` and wanted Parameter `name` per App. The filter is on the full name only. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters.","items":{"$ref":"#/components/schemas/requests.AppParameter"}},"primitive_types":{"type":"array","description":"Filter on the list based on the Parameter data type key `primitive_type` of the Parameter.","example":["number","boolean"],"items":{"$ref":"#/components/schemas/enum.ParameterType"}}}},"responses.ParametersValuesGet":{"type":"object","properties":{"app_parameter_values":{"type":"object","description":"Collection of objects where each object is an App containing an array of values for each Parameter that meets the request filter definitions. Only unique Parameter Values are shown, default values will not be shown.","additionalProperties":{"type":"object","description":"Names of the Apps using Parameters.","additionalProperties":{"type":"array","description":"All Parameter values saved which are not the default value.","items":{"$ref":"#/components/schemas/type.Any"}}},"example":{"cp-temperature-producer":{"temperature_max_in_celsius":[111],"temperature_min_in_celsius":[69]},"demo-model":{"recommended_speed_setpoint":[120,150,90]}}}}},"requests.LegacyWorkloadDeploy":{"required":["app_name"],"type":"object","properties":{"acp_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"docs-demo-cluster-k3s","minLength":1,"maxLength":64,"description":"[`Deprecated`] Target Cluster Name (`acp_name`) for Workload deployment. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control","minLength":1,"maxLength":64,"description":"App Name from App Registry to use for Workload deployment. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters."},"app_version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","minLength":1,"maxLength":64,"description":"Version of the App to use."},"cluster_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"docs-demo-cluster-k3s","minLength":1,"maxLength":64,"description":"Target Cluster Name for Workload deployment. The string can only contain lowercase alphanumeric characters and `.`, `_` or `-` characters. If set, it will override acp_name"},"node_name":{"type":"string","format":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$","example":"my-node","maxLength":64,"description":"Target Node Name for Workload deployment. If not provided, the Cluster will select the Node."},"instantly_apply":{"type":"boolean","example":true,"description":"If true, applies deploy/upgrade immediately. If false, user will need to send an additional API request `/workloads/{workload_name}/apply` to initate the deploy/upgrade."},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control-ubdhwnshdy67","minLength":1,"maxLength":32,"description":"Unique identifier `name` of the Workload."},"payload":{"type":"object","description":"All parameters associated with the Kelvin App like Inputs, Outputs, Info, Spec Version and System."},"staged":{"type":"boolean","example":true,"description":"If true, deploy process is handled by Kelvin and all Workloads wil be downloaded to Edge System before deploy. If false, deploy process is handled by Kubernetes through default settings."},"source":{"type":"string","format":"krn","example":"krn:user:richard.teo@kelvininc.com","minLength":1,"maxLength":256,"description":"Who or which process initiated the Workload deploy."},"title":{"type":"string","example":"Motor Speed Control","description":"Display name (`title`) of the Workload."}}},"type.NetworkingAddressItem":{"type":"object","properties":{"address":{"type":"string","example":"172.0.0.2","description":"IPV4 address to reach the Service."},"interface":{"type":"string","example":"eth0","description":"Interface responsible for hosting the Service."},"port":{"type":"integer","example":8080,"minimum":1,"maximum":65535,"description":"Port designated for accessing the Service."}}},"enum.Protocol":{"type":"string","enum":["TCP","UDP"],"example":"TCP","description":"Protocol used by the Service."},"type.NetworkingItem":{"type":"object","properties":{"addresses":{"type":"array","description":"Array of ports exposed by the Service.","items":{"$ref":"#/components/schemas/type.NetworkingAddressItem"}},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"http-service","description":"Unique identifier `name` of the Service."},"protocol":{"$ref":"#/components/schemas/enum.Protocol"}}},"type.LegacyWorkloadStatus":{"type":"object","description":"Realtime information about the Workload as seen from the Cloud.","properties":{"last_seen":{"type":"string","format":"date-time","example":"2023-12-18T18:22:18.582724Z","description":"UTC time when the Workload was last seen by the Cloud, formatted in RFC 3339."},"message":{"type":"string","example":"Pending for deploy","description":"Descriptive, human-readable string for `state`."},"state":{"$ref":"#/components/schemas/enum.WorkloadStatus","example":"pending_deploy","description":"Current status of the Workload."},"warnings":{"type":"array","example":["back-off 5m0s restarting failed container=motor-speed-control-sjfhksdfhks67","back-off 5m0s restarting failed container=gateway"],"description":"All warnings received for any Workload operations.","items":{"type":"string"}}}},"type.LegacyWorkloadStaged":{"type":"object","properties":{"ready":{"type":"boolean","example":true,"description":"Staged workload ready to be applied."},"app_version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"Version Number of the Kelvin App used for the Staged Workload."},"payload":{"type":"object","properties":{},"description":"Internal Kelvin configuration information for deployment of the Staged Workload."},"instantly_apply":{"type":"boolean","example":true,"description":"Whether the staged workload should be instantly applied or not."},"status":{"$ref":"#/components/schemas/type.StagedStatus"}}},"type.LegacyWorkload":{"type":"object","properties":{"acp_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"docs-demo-cluster-k3s","minLength":1,"maxLength":64,"description":"[`Deprecated`] Unique identifier `name` of the Cluster."},"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control","minLength":1,"maxLength":64,"description":"Unique identifier `name` of the Kelvin App in the App Registry."},"app_version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"Version Number of the Kelvin App used for this Workload."},"cluster_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"docs-demo-cluster-k3s","minLength":1,"maxLength":64,"description":"Unique identifier `name` of the Cluster."},"created":{"type":"string","format":"date-time","example":"2023-12-26T18:22:18.582724Z","description":"UTC time when the Workload was first created, formatted in RFC 3339."},"download_status":{"$ref":"#/components/schemas/enum.WorkloadDownloadStatus"},"download_error":{"type":"string","example":"an error occurred while saving the image","description":"Simple description of the error in case the image download failed."},"enabled":{"type":"boolean","example":true,"description":"If true, Workload `status` is set to `running` and will process I/O's. If false, Workload `status` is set to `stopped` but remains in Node on the Edge System."},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control-ubdhwnshdy67","minLength":1,"maxLength":32,"description":"Unique identifier `name` of the Workload."},"networking":{"type":"array","description":"Array of services exposed by the workload.","items":{"$ref":"#/components/schemas/type.NetworkingItem"}},"node_name":{"type":"string","format":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$","example":"docs-demo-node-01","minLength":1,"maxLength":64,"description":"Unique identifier `name` of the Node in the Cluster hosting the Workload."},"payload":{"type":"object","properties":{},"description":"Internal Kelvin configuration information for deployment of the Workload."},"pre_download":{"type":"boolean","example":true,"description":"If true, deploy process is handled by Kelvin and all Workloads wil be downloaded to Edge System before deploy. If false, deploy process is handled by Kubernetes through default settings."},"status":{"$ref":"#/components/schemas/type.LegacyWorkloadStatus"},"title":{"type":"string","example":"Motor Speed Control","minLength":1,"description":"Display name (`title`) of the Workload."},"updated":{"type":"string","format":"date-time","example":"2023-12-18T18:22:18.582724Z","description":"UTC time when any Workload keys were last updated, formatted in RFC 3339."},"staged":{"nullable":true,"$ref":"#/components/schemas/type.LegacyWorkloadStaged"}}},"responses.LegacyWorkloadDeploy":{"allOf":[{"$ref":"#/components/schemas/type.LegacyWorkload"}]},"responses.LegacyWorkloadItem":{"type":"object","properties":{"acp_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"docs-demo-cluster-k3s","maxLength":64,"description":"[`Deprecated`] Unique identifier `name` of the Cluster."},"app_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control","maxLength":64,"description":"Unique identifier `name` of the Kelvin App in the App Registry."},"app_version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"Version Number of the Kelvin App used for this Workload."},"cluster_name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"docs-demo-cluster-k3s","maxLength":64,"description":"Unique identifier `name` of the Cluster."},"created":{"type":"string","format":"date-time","example":"2023-12-26T18:22:18.582724Z","description":"UTC time when the Workload was first created, formatted in RFC 3339."},"download_status":{"$ref":"#/components/schemas/enum.WorkloadDownloadStatus"},"download_error":{"type":"string","example":"an error occurred while saving the image","description":"Simple description of the error in case the image download failed."},"enabled":{"type":"boolean","example":true,"description":"If true, Workload `status` is set to `running` and will process I/O's. If false, Workload `status` is set to `stopped` but remains in Node on the Edge System."},"instantly_apply":{"type":"boolean","example":true,"description":"If true, applies deploy/upgrade immediately. If false, user will need to send an additional API request `/workloads/{workload_name}/apply` to initate the deploy/upgrade."},"name":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$","example":"motor-speed-control-ubdhwnshdy67","maxLength":32,"description":"Unique identifier `name` of the Workload."},"node_name":{"type":"string","format":"^[a-z0-9]([-a-z0-9]*[a-z0-9])?(\\.[a-z0-9]([-a-z0-9]*[a-z0-9])?)*$","example":"docs-demo-node-01","maxLength":64,"description":"Unique identifier `name` of the Node in the Cluster hosting the Workload."},"pre_download":{"type":"boolean","example":true,"description":"If true, deploy process is handled by Kelvin and all Workloads wil be downloaded to Edge System before deploy. If false, deploy process is handled by Kubernetes through default settings."},"status":{"$ref":"#/components/schemas/type.LegacyWorkloadStatus"},"title":{"type":"string","example":"Motor Speed Control","description":"Display name (`title`) of the Workload."},"updated":{"type":"string","format":"date-time","example":"2023-12-18T18:22:18.582724Z","description":"UTC time when any Workload keys were last updated, formatted in RFC 3339."},"staged":{"type":"object","nullable":true,"properties":{"ready":{"type":"boolean","example":true,"description":"Staged workload ready to be applied."},"app_version":{"type":"string","format":"Major.Minor.Patch","example":"1.2.0","description":"Version Number of the Kelvin App used for the Staged Workload."},"status":{"$ref":"#/components/schemas/type.StagedStatus"}}}}},"responses.LegacyWorkloadsListPaginatedResponseCursor":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Workload objects, starting from the index specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.LegacyWorkloadItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationCursor"}}},"responses.LegacyWorkloadsListPaginatedResponseLimits":{"type":"object","properties":{"data":{"type":"array","description":"A dictionary with a data property that contains an array of up to `page_size` Workload objects for the page number specified by the pagination parameters, that matches the query parameters.","items":{"$ref":"#/components/schemas/responses.LegacyWorkloadItem"}},"pagination":{"$ref":"#/components/schemas/pagination.PaginationLimits"}}},"responses.LegacyWorkloadsListPaginatedResponseStream":{"allOf":[{"$ref":"#/components/schemas/responses.LegacyWorkloadItem"}]},"requests.LegacyWorkloadApply":{"type":"object","properties":{"workload_names":{"type":"array","items":{"type":"string","format":"^[a-z]([-a-z0-9]*[a-z0-9])?$"},"description":"List of staged workload names that will be immediately applied."}}},"responses.LegacyWorkloadConfigurationGet":{"type":"object","properties":{"configuration":{"type":"object"}}},"requests.LegacyWorkloadConfigurationUpdate":{"type":"object","properties":{"configuration":{"type":"object"}}},"responses.LegacyWorkloadConfigurationUpdate":{"type":"object","properties":{"configuration":{"type":"object"}}},"responses.LegacyWorkloadDownload":{"type":"object","properties":{"url":{"type":"string","description":"URL to download the Workload package file."},"expires_in":{"type":"integer","description":"Time in seconds before the URL expires."}}},"responses.LegacyWorkloadGet":{"allOf":[{"$ref":"#/components/schemas/type.LegacyWorkload"}]},"responses.LegacyWorkloadLogsGet":{"type":"object","properties":{"logs":{"type":"object","example":{"bp-opcua-bridge-0":["2023-12-20T13:57:38.466076008Z {\"asset\":\"bp_33\",\"event\":\"Casted message from Float64 variant\"}","2023-12-20T13:57:38.466198095Z {\"event\":\"[Runtime.cpp: 626:D] - publishing:  choke_position_set_point\"}"]},"additionalProperties":{"type":"array","items":{"type":"string"}}}}}},"examples":{"AC":{"summary":"A/C Controller Smart App","value":{"name":"ac-controller","title":"A/C Controller","description":"The A/C Controller Smart App is a simple application that allows you to control the temperature of an air conditioning unit.","category":"Smart App","type":"app","version":"1.0.0","flags":{"enable_runtime_update":{"configuration":true,"resource_parameters":true,"resource_properties":true},"deployment":{"allowed_resources":["krn:asset-type:beam-pump"]}},"io":[{"name":"temperature","data_type":"number","way":"input","unit":"celsius"},{"name":"temperature-setpoint","data_type":"number","way":"input+output-cc","unit":"celsius","storage":"node-and-cloud"}],"parameters":[{"name":"min-temperature","title":"Minimum Temperature","data_type":"number","default":20},{"name":"max-temperature","title":"Maximum Temperature","data_type":"number","default":22},{"name":"device_id","title":"Device ID","data_type":"string"}],"defaults":{"deployment":{"max_resources":20,"deployment_type":"staged+instant-apply","target":{"type":"cluster","cluster":{"name":"example-cluster"}}},"app":{"io_datastream_mapping":[{"io":"temperature","datastream":"temp"},{"io":"temperature-setpoint","datastream":"temp-sp"}],"configuration":{"connection":"mqtt://example.com:1883","preffix":"example/{device_id}"}},"system":{"resources":{"requests":{"cpu":"100m","memory":"128Mi"},"limits":{"cpu":"500m","memory":"256Mi"}},"environment_vars":[{"name":"KELVIN_GW_SUB_DELIVER","value":"last"}],"health_check":{"liveness_probe":{"type":"http_get","http_get":{"port":8080,"path":"/health"}}}}},"schemas":{"parameters":{"type":"object","properties":{"min-temperature":{"type":"number"},"max-temperature":{"type":"number"},"device_id":{"type":"string"}}},"configuration":{"type":"object","properties":{"connection":{"type":"object","properties":{"address":{"type":"string","format":"uri"},"topic_preffix":{"type":"string"}}}}}}}},"Sigcon":{"summary":"SmartLift Smart App","value":{"name":"sigcon","version":"4.6.2","title":"SmartLift","description":"SmartLift leverages advanced technology to optimise and in some cases automate the decision-making process for wellsite network optimisation.","category":"Smart App","type":"app","flags":{"spec_version":"4.12.0","legacy_extras":{"language":{"type":"python","python":{"entry_point":"kelvin_python_sdk"}}}},"io":[{"name":"static_data_comp_data","data_type":"string","way":"input","storage":"node-and-cloud"},{"name":"discharge_water","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"water_rate","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"discharge_water_processed","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"recommended_speed","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"water_rate_processed","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"action","data_type":"string","way":"output","storage":"node-and-cloud"},{"name":"constraints_flag","data_type":"string","way":"output","storage":"node-and-cloud"},{"name":"dhg_override_check","data_type":"string","way":"output","storage":"node-and-cloud"},{"name":"gas_up_tubing_flag","data_type":"string","way":"output","storage":"node-and-cloud"},{"name":"gathering_insight","data_type":"string","way":"output","storage":"node-and-cloud"},{"name":"reason","data_type":"string","way":"output","storage":"node-and-cloud"},{"name":"pump_torque_insight","data_type":"string","way":"output","storage":"node-and-cloud"},{"name":"action_tier","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"ebs_priority","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"out_of_range","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"post_shutdown_flag","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"processed_signal_lt","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"processed_signal_rt","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"rod_load","data_type":"number","way":"output","storage":"node-and-cloud"},{"name":"rod_load_insight","data_type":"string","way":"output","storage":"node-and-cloud"},{"name":"smartpcp-speed-sp","data_type":"number","way":"output-cc","storage":"node-and-cloud"},{"name":"smartpcp-ctrl-mode","data_type":"number","way":"output-cc","storage":"node-and-cloud"},{"name":"scada-mode","data_type":"boolean","way":"output-cc","storage":"node-and-cloud"},{"name":"post_shutdown_check","data_type":"boolean","way":"output","storage":"node-and-cloud"},{"name":"post_shutdown_mode_start","data_type":"string","way":"output","storage":"node-and-cloud"}],"defaults":{"system":{"resources":{"requests":{"cpu":"700m","memory":"400Mi"},"limits":{"memory":"1000Mi"}},"privileged":false},"app":{"configuration":{"cache":{"hf_lookback_hours":24,"hf_time_bucket":"30s"},"recommendation":{"confidence":3,"description":"Recommended Speed: {recommended_speed} rpm\nCurrent Speed: {current_speed} rpm\nAction: {action}\nReason: {reason}\n(Beta):\n  Restart: {restart_recommend_daily}.\n  Constraints: {constraints_flag}.\n  State: {optimised_flag}.","retry":1,"speed_setpoint_name":"smartpcp-speed-sp","timeout":3600},"schedule":[{"function":"f3","repeat_in":86400,"start_time":"01:00:00"},{"function":"f1","repeat_in":3600,"start_time":"00:00:00"},{"function":"f2","repeat_in":86400,"start_time":"04:00:00"}],"smart_lift":{"bounds":{"pcp":{"casing_pressure":[0,200],"discharge_gas":[0,125],"discharge_water":[0,200],"gas_rate":[0,2500],"pump_speed":[0,510],"pump_torque":[0,2000],"water_rate":[0,2000]}},"ops":"b1","predictor_config":{"pcp":{"bounds_model":{"casing_pressure":[0,800],"discharge_gas":[0,800],"discharge_water":[0,800],"gas_rate":[0,4000],"pump_size":[5,400],"pump_speed":[20,500],"pump_top_mrt":[130,2200],"pump_torque":[0,3000],"tubing_pressure":[0,800],"water_rate":[0,3000]},"ops":"b1"}},"resamp_flush":"10min","resamp_hf":"5min","resamp_int":"60min","resamp_startstop":"15min","resamp_std":"60min","start_time":"05:00:00","timezone":"Australia/Brisbane"},"timezone":"Australia/Brisbane"}}}}},"OPCUA":{"summary":"OPC-UA Importer","value":{"name":"kelvin-bridge-opcua-client","version":"3.4.7","title":"OPC UA","description":"OPC UA (Unified Architecture) is a machine-to-machine communication protocol for industrial automation.","type":"importer","flags":{"spec_version":"4.11.0","legacy_data_types":true,"legacy_extras":{"language":{"type":"cpp","cpp":{"dso":"kelvin_bridge_opcua_client/kelvin_bridge_opcua_client.so"}}}},"dynamic_io":[{"type_name":"node","ownership":"owned","type":"both"}],"defaults":{"app":{"configuration":{"authentication":{"credentials":{"password":"<password>","username":"<username>"},"type":"credentials"},"connection":{"client_cert":"<base64 encoded client certificate>","client_key":"<base64 encoded client key>","endpoint_url":"opc.tcp://10.185.16.109:49320","message_security":"SignAndEncrypt","security_policy":"Basic256Sha256","verify_ssl":false},"force_read_after_write":true,"read_timeout":30,"subscription_monitoring_interval":5,"write_timeout":30}}}}},"InfluxDB":{"summary":"InfluxDB External App","value":{"name":"influxdb","version":"1.11.8","title":"InfluxDB","description":"The leading platform for time series data.","category":"Database","type":"importer"}},"S3":{"summary":"S3 Object Storage Exporter","value":{"name":"kelvin-s3-exporter","version":"1.0.0","title":"S3 Object Storage Exporter","description":"The S3 Object Storage Exporter is a simple application that allows you to export data to an S3 bucket.","type":"exporter","dynamic_io":[{"type_name":"metric","ownership":"remote","type":"data"}]}},"CCTask":{"summary":"Gas Interference Failure Mitigation Task","value":{"name":"task-gifm","title":"Gas Interference Failure Mitigation Task","version":"1.0.0","image":{"mode":"undefined"},"description":"If a Severe Gas Interference is detected, reduce the speed_sp of the pump to 50% of operation, and monitor speed.\nIf Severe Gas Interference goes away, slowly increase the pump speed_sp in increments of 10 RPM every 6 hours, until there is no increase in production.","type":"task","io":[{"name":"speed_sp","data_type":"number","way":"input+output-cc"},{"name":"speed","data_type":"number","way":"input"}],"data_tags":[{"tag_name":"Severe Gas Interference","way":"input"}]}},"response.Error.BadRequest":{"summary":"Bad request","value":{"errors":[{"name":"bad_request","title":"Bad request","description":"There was a problem processing the request. This may be a temporary or a permanent problem.","solution":"Please try clearing your browser's cache and refreshing the page. If the problem persists, please contact your system administrator."}]}},"response.Error.Unauthorized":{"summary":"Unauthorized","value":{"errors":[{"name":"unauthorized","title":"Unauthorized","description":"Access denied due to invalid authentication credentials for Kelvin.","solution":"Verify and update your authentication credentials or contact the system administrator for valid access credentials."}]}},"response.Error.NotFound":{"summary":"Not found","value":{"errors":[{"name":"not_found","title":"Not found","description":"Resource not found.","solution":"Please check if the resource you're requesting exists."}]}},"responses.AppVersionGet.SmartApp":{"summary":"Smart App","value":{"name":"my-app","version":"1.0.0","title":"My Smart App","description":"Lorem ipsum dolor sit amet, consectetur adipiscing elit","type":"app","flags":{"spec_version":"5.0.0","enable_runtime_update":{"configuration":false,"resource_parameters":true,"resource_properties":true},"deployment":{"allowed_resources":["krn:asset-type:beam_pump"]}},"io":[{"name":"temperature","data_type":"number","way":"input"},{"name":"temperature-setpoint","data_type":"number","way":"input-cc+output"}],"defaults":{"deployment":{"max_resources":10}},"created_at":"2023-06-26T18:22:18.582724Z","created_by":"krn:user:user@example.com","updated_at":"2023-11-10T09:55:09.31857Z","updated_by":"krn:user:user@example.com"}},"requests.AppVersionPatch.AllFields":{"summary":"All Fields","value":{"defaults":{"system":{"resources":{"requests":{"cpu":"250m","memory":"128Mi"}}},"app":{"configuration":{"<custom>":"<configuration>"},"io_datastream_mapping":[{"io":"<io-name>","datastream":"<datastream-name>"}]},"deployment":{"max_resources":20,"deployment_type":"standard","target":{"cluster":{"name":"<cluster-name>"}}}},"schemas":{"parameters":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"<parameter-name>":{"type":"<string|number|boolean>"}}},"configuration":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"<custom>":{"type":"<type>"}}},"io_configurations":[{"type_name":"<dynamic-io-type-name>","schema":{"$schema":"https://json-schema.org/draft/2020-12/schema","type":"object","properties":{"<custom>":{"type":"<type>"}}}}]}}},"requests.AppVersionPatch.Image":{"summary":"Image only","value":{"image":{"mode":"manual","uri":"example.com/my-app:1.0.0"}}},"requests.AppVersionPatch.System":{"summary":"System only","value":{"defaults":{"system":{"resources":{"requests":{"cpu":"250m","memory":"128Mi"}}}}}},"requests.AppVersionPatch.ClearConfigurationEmpty":{"summary":"Clear Configuration w/ empty object","value":{"defaults":{"app":{"configuration":{}}}}},"requests.AppVersionDeploy.SmartApp":{"summary":"Smart App","value":{"deployment":{"max_resources":20,"deployment_type":"standard","target":{"cluster":{"name":"<cluster-name>"}}},"runtime":{"resources":[{"resource":"krn:asset:<asset-name>","parameters":{"<parameter-name>":"<parameter-value>"},"datastreams":{"<datastream-name-1>":{"map_to":"<io-name-1>","way":"output","storage":"node-and-cloud"},"<datastream-name-2>":{"map_to":"<io-name-2>","way":"input+output-cc"}}}],"configuration":{"<custom>":"<configuration>"}},"system":{"resources":{"requests":{"cpu":"250m","memory":"128Mi"}}}}},"responses.AppVersionDeploy.AllFields":{"summary":"Deployment result","value":{"workload_names":["<workload-name>","<workload-name>","<workload-name>"]}},"requests.AppResourcesEnable.AllFields":{"summary":"Enable AppResources","value":{"resources":["krn:asset:<asset-name>","krn:asset:<asset-name>","krn:asset:<asset-name>"]}},"requests.AppResourcesDisable.AllFields":{"summary":"Disable AppResources","value":{"resources":["krn:asset:<asset-name>","krn:asset:<asset-name>","krn:asset:<asset-name>"]}},"responses.AppResourcesList.Running":{"summary":"Running","value":{"data":[{"resource":"krn:asset:well_01","app_name":"motor-speed-control","enabled":true,"workloads":[{"app_version":"1.0.8","workload_name":"motor-speed-control-cwgzmh08k21w","cluster_name":"cluster_north_01"}],"created_at":"2023-11-18T18:22:18.582724Z","created_by":"krn:user:user@exapmle.com","updated_at":"2023-11-18T18:22:18.582724Z","updated_by":"krn:user:user@exapmle.com"}],"pagination":{"next_page":"<page-token>","previous_page":"<page-token>"}}},"responses.AppResourcesList.RequiresAttention":{"summary":"Requires Attention","description":"This endpoint no longer returns information regarding the state of the\nresources, apart from being enabled or not.\n","value":{"data":[{"resource":"krn:asset:well_01","app_name":"motor-speed-control","enabled":true,"workloads":[{"app_version":"1.0.8","workload_name":"motor-speed-control-cwgzmh08k21w","cluster_name":"cluster_north_01"}],"created_at":"2023-11-18T18:22:18.582724Z","created_by":"krn:user:user@exapmle.com","updated_at":"2023-11-18T18:22:18.582724Z","updated_by":"krn:user:user@exapmle.com"}],"pagination":{"next_page":"<page-token>","previous_page":"<page-token>"}}},"responses.AppGet.SmartApp":{"summary":"Smart App","value":{"name":"motor-speed-control","title":"Motor Speed Control","description":"This model predicts the optimal settings for the compressor's operating parameters. For example monitor its temperature and speed in order to maximize its efficiency and minimize energy consumption.","category":"Smart App","type":"app","dashboard_uid":"123e4567-e89b-12d3-a456-426614174000","latest_version":"1.0.8","created_at":"2023-06-26T18:22:18.582724Z","created_by":"krn:user:user@example.com","updated_at":"2023-11-10T09:55:09.31857Z","updated_by":"krn:user:user@example.com","versions":[{"version":"1.0.8","created_at":"2023-06-26T18:22:18.582724Z","created_by":"krn:user:user@example.com","updated_at":"2023-11-10T09:55:09.31857Z","updated_by":"krn:user:user@example.com"}],"deployment":{"status":"running","resource_count":{"running":8,"total":10}}}},"requests.AppPatch.AllFields":{"summary":"All Fields","value":{"title":"Motor Speed Control","description":"This model predicts the optimal settings for the compressor's operating parameters. For example monitor its temperature and speed in order to maximize its efficiency and minimize energy consumption.","category":"Smart App"}},"requests.AppPatch.Title":{"summary":"Title","value":{"title":"Motor Speed Control"}},"requests.AppsContextList.Basic":{"summary":"Filter App contexts","description":"Request App contexts for selected resources and sources.","value":{"resources":["krn:asset:pcp_01","krn:datastream:casing_pressure","krn:ad:pcp_03/casing_pressure"],"sources":["krn:app:my-app","krn:appversion:my-app/1.0.0","krn:wlappv:my-cluster/my-workload:my-app/1.0.0","krn:wl:my-cluster/my-workload"]}},"responses.AppsContextList.Basic":{"summary":"App contexts response","description":"One cursor page of App context objects.","value":{"data":[{"resource":"krn:ad:pcp_01/casing_pressure","source":"krn:wlappv:my-cluster/my-workload:my-app/1.0.0"},{"resource":"krn:dqad:pcp_03/casing_pressure","source":"krn:wlappv:my-cluster/my-workload:my-app/1.0.1"},{"resource":"krn:action:send_slack_alert","source":"krn:wlappv:my-cluster/my-workload:my-app/1.0.2"}],"pagination":{"next_page":"<page-token>","previous_page":"<page-token>"}}},"requests.AppParametersList.Basic":{"summary":"Filter App parameters","description":"Request App parameters filtered by App name, parameter name, and data type.","value":{"app_names":["compressor-monitor","esp-optimization"],"names":["kelvin_closed_loop","target_pressure"],"data_types":["boolean","number"]}},"responses.AppParametersList.Basic":{"summary":"App parameters response","description":"One cursor page of App parameter definitions.","value":{"data":[{"app_name":"compressor-monitor","title":"Kelvin Closed Loop","name":"kelvin_closed_loop","data_type":"boolean","created_at":"2026-02-05T04:58:54.133504Z","created_by":"krn:user:user@example.com","updated_at":"2026-02-05T04:58:54.133504Z","updated_by":"krn:user:user@example.com"},{"app_name":"esp-optimization","title":"Target Pressure","name":"target_pressure","data_type":"number","created_at":"2026-02-05T05:11:11.000000Z","created_by":"krn:user:user@example.com","updated_at":"2026-02-07T11:13:21.000000Z","updated_by":"krn:user:user@example.com"}],"pagination":{"next_page":"<page-token>","previous_page":"<page-token>"}}},"requests.AppVersionParametersFallbackValuesGet":{"summary":"Resources list","value":{"resources":["krn:asset:well_01","krn:asset:well_02","krn:asset:well_03"]}},"responses.AppVersionParametersFallbackValuesGet":{"summary":"Fallback Values List","value":{"resource_parameters":{"krn:asset:well_01":{"temperature":25,"pressure":100},"krn:asset:well_02":{"temperature":25,"pressure":100},"krn:asset:well_03":{"temperature":25,"pressure":100}}}},"request.ParametersScheduleCreate.Complex":{"summary":"Multi-asset / multi-parameter / different initial value","value":{"app_name":"my-app","app_version":"1.0.0","scheduled_for":"2024-04-09T08:00:00Z","comment":"Save energy when no one is home","resources":["krn:asset:ac-living-room","krn:asset:ac-bedroom"],"parameters":{"min_temperature":10,"max_temperature":20},"revert":{"scheduled_for":"2024-04-09T18:00:00Z","resource_parameters":[{"resource":"krn:asset:ac-living-room","parameters":{"min_temperature":15,"max_temperature":23}},{"resource":"krn:asset:ac-bedroom","parameters":{"min_temperature":18,"max_temperature":25}}]}}},"request.ParametersScheduleCreate.Revert":{"summary":"Open loop during maintenance","value":{"app_name":"my-app","app_version":"1.0.0","scheduled_for":"2024-04-09T10:00:00Z","resources":["krn:asset:asset-1"],"comment":"Set to open loop during maintenance","parameters":{"closed_loop":false},"revert":{"scheduled_for":"2024-04-09T12:00:00Z","resource_parameters":[{"resource":"krn:asset:asset-1","parameters":{"closed_loop":false}}]}}},"request.ParametersScheduleCreate.Simple":{"summary":"Simple scheduled change","value":{"app_name":"my-app","app_version":"1.0.0","scheduled_for":"2024-04-10T18:00:00Z","resources":["krn:asset:asset-1"],"parameters":{"max_temperature":25}}},"response.ParametersScheduleCreate.Simple":{"summary":"Simple scheduled change created","value":{"app_name":"my-app","app_version":"1.0.0","scheduled_for":"2024-04-10T18:00:00Z","resources":["krn:asset:asset-1"],"parameters":{"max_temperature":25},"original_resource_parameters":[{"resource":"krn:asset:asset-1","parameters":{"max_temperature":23}}],"id":"8e8caae7-c6b7-4456-b47a-03565ce51437","state":"scheduled","created_at":"2024-04-09T00:00:00Z","created_by":"krn:user:user@example.com"}},"response.ParametersScheduleGet.AC":{"summary":"Multi-asset / multi-parameter / different initial value","value":{"app_name":"my-app","app_version":"1.0.0","scheduled_for":"2024-04-09T08:00:00Z","comment":"Save energy when no one is home","resources":["krn:asset:ac-living-room","krn:asset:ac-bedroom"],"parameters":{"min_temperature":10,"max_temperature":20},"original_resource_parameters":[{"resource":"krn:asset:ac-living-room","parameters":{"min_temperature":15,"max_temperature":23}},{"resource":"krn:asset:ac-bedroom","parameters":{"min_temperature":18,"max_temperature":25}}],"revert":{"scheduled_for":"2024-04-09T18:00:00Z","resource_parameters":[{"resource":"krn:asset:ac-living-room","parameters":{"min_temperature":15,"max_temperature":23}},{"resource":"krn:asset:ac-bedroom","parameters":{"min_temperature":18,"max_temperature":25}}]},"id":"9259690c-a62d-4cf2-b242-49cdc37b99b2","state":"completed","created_at":"2024-04-09T00:00:00Z","created_by":"krn:user:user@example.com","applied_at":"2024-04-09T08:00:00Z","applied_by":"krn:user:user@example.com","reverted_at":"2024-04-09T18:00:00Z","reverted_by":"krn:service:schedule-worker"}},"request.ParametersScheduleList.All":{"summary":"Example with all fields","value":{"apps":[{"name":"my-app","version":"1.0.0"}],"states":["scheduled","scheduled-revert"],"resources":["krn:asset:ac-living-room","krn:asset:ac-bedroom"],"parameter_names":["min_temperature","max_temperature"]}},"request.ParametersScheduleList.AppManagerUI":{"summary":"Example of a request from the App Manager UI","value":{"apps":[{"name":"my-app","version":"1.0.0"}],"states":["scheduled","scheduled-revert"]}},"requests.WorkloadCreate.AllFields":{"summary":"Smart App","value":{"app_name":"<app-name>","app_version":"1.0.0","cluster_name":"<cluster-name>","name":"<workload-name>","title":"<workload-title>","runtime":{"resources":[{"resource":"krn:asset:<asset-name>","parameters":{"<parameter-name>":"<parameter-value>"},"datastreams":{"<datastream-name-1>":{"map_to":"<io-name-1>","way":"output","storage":"node-and-cloud","configuration":{"<resource-datastream>":"<specific-configuration-1>"}},"<datastream-name-2>":{"map_to":"<io-name-2>","way":"input-cc+output","storage":"node-and-cloud","configuration":{"<resource-datastream>":"<specific-configuration-2>"}}},"data_tags":{"<tag-name-1>":{"way":"input"},"<tag-name-2>":{"way":"output"}}}],"configuration":{"<custom>":"<configuration>"}},"system":{"resources":{"requests":{"cpu":"250m","memory":"128Mi"}}}}},"requests.WorkloadCreate.CCTask":{"summary":"Gas Interference Failure Mitigation Task","value":{"app_name":"task-gifm","app_version":"1.0.0","cluster_name":"<cluster-name>","name":"task-gifm-wl","title":"Task: GIFM","runtime":{"resources":[{"resource":"krn:asset:beam_pump_01","datastreams":{"speed_sp":{"way":"input+output-cc"},"speed":{"way":"input"}},"data_tags":{"Severe Gas Interference":{"way":"input"}}}]}}},"requests.WorkloadUpdate.AllFields":{"summary":"Update Configuration","value":{"runtime":{"configuration":{"<custom>":"<new-configuration>"}}}},"response.Error.Conflict":{"summary":"Conflict","value":{"errors":[{"name":"conflict","title":"Conflict","description":"There was a problem processing the request due to a conflict with some of your parameters.","solution":"Check all your parameters and ensure they don't already exist on the Kelvin Platform."}]}},"response.Error.PreconditionFailed":{"summary":"Precondition Failed","value":{"errors":[{"name":"precondition_failed","title":"Precondition Failed","description":"Precondition Failed.","solution":"Check preconditions."}]}},"Error.Multi":{"summary":"Multiple Response Statuses","value":{"errors":[{"name":"internal_server_error","title":"Internal Server Error","description":"A problem occurred on the server while processing this request.","solution":"Please wait before retrying or report this issue to your administrator."},{"name":"bad_request","title":"Bad request","description":"There was a problem processing the request. This may be a temporary or a permanent problem.","solution":"Please try clearing your browser's cache and refreshing the page. If the problem persists, please contact your system administrator."}]}},"response.Error.Forbidden":{"summary":"Forbidden","value":{"errors":[{"name":"forbidden","title":"Forbidden","description":"Your credentials or token does not have the required permissions to perform this request.","solution":"Contact your administrator to add the required permissions for this request to your account."}]}},"response.Error.InternalServerError":{"summary":"Internal Server Error","value":{"errors":[{"name":"internal_server_error","title":"Internal Server Error","description":"A problem occurred on the server while processing this request.","solution":"Please wait before retrying or report this issue to your administrator."}]}},"requests.WorkloadsDelete.AllFields":{"summary":"Delete Workload","value":{"workload_names":["<workload-name>","<workload-name>","<workload-name>"]}},"response.Error.FailedDependency":{"summary":"FailedDependency","value":{"errors":[{"name":"failed_dependency","title":"Failed Dependency","description":"There was a problem processing the request.","solution":"Check dependencies."}]}},"requests.ControlChangeLastGet.Basic":{"summary":"Latest Control Change per resource","description":"Request latest Control Changes for selected resources and states.","value":{"resources":["krn:ad:pcp_01/speed_sp","krn:ad:pcp_03/speed_sp"],"states":["sent","applied"],"sources":["krn:user:user@example.com"]}},"requests.ControlChangesList.Basic":{"summary":"List filtered Control Changes","description":"Request Control Changes filtered by resource, state, and source.","value":{"resources":["krn:ad:pcp_01/speed_sp","krn:ad:pcp_03/speed_sp"],"states":["sent","applied"],"sources":["krn:user:user@example.com"]}},"requests.ControlChangeRangeGet.Basic":{"summary":"Control Changes in a date range","description":"Request Control Changes created in a date range for selected resources, states, and sources.","value":{"start_date":"2026-01-01T00:00:00Z","end_date":"2026-01-31T00:00:00Z","resources":["krn:ad:pcp_01/speed_sp"],"states":["sent","applied"],"sources":["krn:user:user@example.com"]}},"requests.ControlChangePolicyCreate.AllFields":{"summary":"All fields defined","description":"A Control Change Policy with all fields defined.","value":{"resource":"krn:ad:beam_pump_01/motor_speed_set_point","policy":{"resource_value_check":[{"resource":"krn:ad:beam_pump_01/motor_speed_feedback","tolerance":5},{"resource":"krn:ad:beam_pump_01/motor_speed_set_point","tolerance":2}],"retries":3,"retry_interval":150,"queueing":{"mode":"enqueue"}}}},"requests.ControlChangePolicyCreate.Minimal":{"summary":"Minimal policy","description":"A policy with only queueing behavior defined.","value":{"resource":"krn:ad:beam_pump_01/motor_speed_set_point","policy":{"queueing":{"mode":"immediate"}}}},"responses.ControlChangePolicyX.AllFields":{"summary":"All fields defined","description":"A Control Change Policy with all fields defined.","value":{"resource":"krn:ad:beam_pump_01/motor_speed_set_point","policy":{"resource_value_check":[{"resource":"krn:ad:beam_pump_01/motor_speed_feedback","tolerance":5},{"resource":"krn:ad:beam_pump_01/motor_speed_set_point","tolerance":2}],"retries":3,"retry_interval":150,"queueing":{"mode":"enqueue"}},"created":"2026-01-01T00:00:00Z","created_by":"krn:user:user@example.com","updated":"2026-01-01T00:00:00Z","updated_by":"krn:user:user@example.com"}},"responses.ControlChangePolicyX.Minimal":{"summary":"Minimal policy","description":"A minimal Control Change Policy.","value":{"resource":"krn:ad:beam_pump_01/motor_speed_set_point","policy":{"queueing":{"mode":"immediate"}},"created":"2026-01-01T00:00:00Z","created_by":"krn:user:user@example.com","updated":"2026-01-01T00:00:00Z","updated_by":"krn:user:user@example.com"}},"requests.ControlChangePoliciesList.AllFields":{"summary":"All fields defined","description":"Search for control change policies on specific resources and queueing modes.","value":{"resources":["krn:ad:beam_pump_01/motor_speed_set_point","krn:ad:beam_pump_02/motor_speed_set_point"],"queueing_modes":["enqueue","immediate"]}},"requests.ControlChangePolicyX.AllFields":{"summary":"All fields defined","description":"A complete Control Change Policy update payload.","value":{"policy":{"resource_value_check":[{"resource":"krn:ad:beam_pump_01/motor_speed_feedback","tolerance":5},{"resource":"krn:ad:beam_pump_01/motor_speed_set_point","tolerance":2}],"retries":3,"retry_interval":150,"queueing":{"mode":"next"}}}},"requests.ControlChangePolicyX.NoChecks":{"summary":"Explicit no checks","description":"Full replacement update with explicit no completion checks by setting `resource_value_check` to an empty array.","value":{"policy":{"resource_value_check":[],"retries":2}}},"requests.ControlChangePolicyX.Minimal":{"summary":"Minimal policy update","description":"Full replacement update with only `retries` configured. Omitted policy fields are unset in policy configuration; omitting `resource_value_check` clears configured checks.","value":{"policy":{"retries":1}}},"responses.ControlChangePolicyX.NoChecks":{"summary":"Explicit no checks","description":"A Control Change Policy with explicit no completion checks.","value":{"resource":"krn:ad:beam_pump_01/motor_speed_set_point","policy":{"resource_value_check":[],"retries":2},"created":"2026-01-01T00:00:00Z","created_by":"krn:user:user@example.com","updated":"2026-01-01T00:00:00Z","updated_by":"krn:user:user@example.com"}},"requests.CustomActionCreate.Email":{"summary":"Email recommendation","description":"Example of an action that is created by accepting a recommendation. The example Executor of this action just needs to know the ID of the recommendation, hence the payload. It will get the recommendation from the API and send an email to the user set in the Executor's configuration.","value":{"resource":"krn:asset:my-asset1","type":"email","title":"Notification email","description":"Email to notify the operations team about a recommendation.","expiration_date":"2021-12-31T23:59:59Z","payload":{"to":"operations@example.com","body":"Check recommendation ID 6ab6c5a7-37d2-4baa-b502-f242113eea97"},"trace_id":"ac081417-8ac3-42c7-8043-141fa5a41d01"}},"responses.CustomActionCreate.Email":{"summary":"Email recommendation","description":"Action created by the \"Email recommendation\" request example.","value":{"id":"7548b17f-1f20-4ada-8769-6aa274e2a595","resource":"krn:asset:my-asset1","type":"email","title":"Notification email","description":"Email to notify the operations team about a recommendation.","expiration_date":"2021-12-31T23:59:59Z","payload":{"to":"operations@example.com","body":"Check recommendation ID 6ab6c5a7-37d2-4baa-b502-f242113eea97"},"trace_id":"ac081417-8ac3-42c7-8043-141fa5a41d01","timestamp":"2021-06-01T12:00:00Z","state":"pending","failure_reason":"none","created":"2021-06-01T12:00:00Z","created_by":"krn:recommendation:6ab6c5a7-37d2-4baa-b502-f242113eea97","updated":"2021-06-01T12:00:00Z","updated_by":"krn:recommendation:6ab6c5a7-37d2-4baa-b502-f242113eea97"}},"requests.CustomActionsList.ByResourceAndState":{"summary":"Filter by resource and state","description":"Return actions for a specific asset resource and state.","value":{"resources":["krn:asset:my-asset1"],"created_by":["krn:user:user@example.com"],"states":["ready","in_progress"],"types":["email"],"trace_ids":["ac081417-8ac3-42c7-8043-141fa5a41d01"]}},"responses.CustomActionsList.Cursor":{"summary":"Filtered custom actions","description":"Cursor response with Custom Actions matching the request filters.","value":{"data":[{"id":"7548b17f-1f20-4ada-8769-6aa274e2a595","resource":"krn:asset:my-asset1","type":"email","type_title":"Email","title":"Notification email","description":"Email to notify the operations team about a recommendation.","expiration_date":"2021-12-31T23:59:59Z","payload":{"to":"operations@example.com","body":"Check recommendation ID 6ab6c5a7-37d2-4baa-b502-f242113eea97"},"trace_id":"ac081417-8ac3-42c7-8043-141fa5a41d01","timestamp":"2021-06-01T12:00:00Z","state":"in_progress","failure_reason":"none","created":"2021-06-01T12:00:00Z","created_by":"krn:recommendation:6ab6c5a7-37d2-4baa-b502-f242113eea97","updated":"2021-06-01T12:02:00Z","updated_by":"krn:wlappv:my-cluster/my-workload:emailer/1.0.0"}],"pagination":{"next_page":"W3siS2V5IjoiaWQiLCJWYWx1ZSI6Ijc1NDhiMTdmLTFmMjAtNGFkYS04NzY5LTZhYTI3NGUyYTU5NSJ9XQ==","previous_page":"W3siS2V5IjoiaWQiLCJWYWx1ZSI6IjUwMDAwMDAwLTFmMjAtNGFkYS04NzY5LTZhYTI3NGUyYTU5NSJ9XQ=="}}},"responses.CustomActionGet.EmailOK":{"summary":"Email recommendation - Success","description":"Action created by the \"Email recommendation\" request example and executed successfully.","value":{"id":"7548b17f-1f20-4ada-8769-6aa274e2a595","resource":"krn:asset:my-asset1","type":"email","title":"Notification email","description":"Email to notify the operations team about a recommendation.","expiration_date":"2021-12-31T23:59:59Z","payload":{"to":"operations@example.com","body":"Check recommendation ID 6ab6c5a7-37d2-4baa-b502-f242113eea97"},"trace_id":"ac081417-8ac3-42c7-8043-141fa5a41d01","timestamp":"2021-06-01T12:00:00Z","state":"completed","failure_reason":"none","status_logs":[{"state":"ready","timestamp":"2021-06-01T12:01:00Z","source":"krn:wlappv:my-cluster/my-workload:emailer/1.0.0","failure_reason":"none"},{"state":"in_progress","timestamp":"2021-06-01T12:02:00Z","source":"krn:wlappv:my-cluster/my-workload:emailer/1.0.0","failure_reason":"none"},{"state":"completed","timestamp":"2021-06-01T12:03:00Z","source":"krn:wlappv:my-cluster/my-workload:emailer/1.0.0","failure_reason":"none"}],"created":"2021-06-01T12:00:00Z","created_by":"krn:recommendation:6ab6c5a7-37d2-4baa-b502-f242113eea97","updated":"2021-06-01T12:03:00Z","updated_by":"krn:wlappv:my-cluster/my-workload:emailer/1.0.0"}},"responses.CustomActionGet.EmailFail":{"summary":"Email recommendation - Failure","description":"Action created by the \"Email recommendation\" request example but executed unsuccessfully.","value":{"id":"7548b17f-1f20-4ada-8769-6aa274e2a595","resource":"krn:asset:my-asset1","type":"email","title":"Notification email","description":"Email to notify the operations team about a recommendation.","expiration_date":"2021-12-31T23:59:59Z","payload":{"to":"operations@example.com","body":"Check recommendation ID 6ab6c5a7-37d2-4baa-b502-f242113eea97"},"trace_id":"ac081417-8ac3-42c7-8043-141fa5a41d01","timestamp":"2021-06-01T12:00:00Z","state":"failed","failure_reason":"reported_failed","status_logs":[{"state":"ready","timestamp":"2021-06-01T12:01:00Z","source":"krn:wlappv:my-cluster/my-workload:emailer/1.0.0","failure_reason":"none"},{"state":"in_progress","timestamp":"2021-06-01T12:02:00Z","source":"krn:wlappv:my-cluster/my-workload:emailer/1.0.0","failure_reason":"none"},{"state":"failed","failure_reason":"reported_failed","message":"Failed to connect to SMTP server.","metadata":{"internal_error":"Error connection to smtp.example.com. Connection refused."},"timestamp":"2021-06-01T12:03:00Z","source":"krn:wlappv:my-cluster/my-workload:emailer/1.0.0"}],"created":"2021-06-01T12:00:00Z","created_by":"krn:recommendation:6ab6c5a7-37d2-4baa-b502-f242113eea97","updated":"2021-06-01T12:03:00Z","updated_by":"krn:wlappv:my-cluster/my-workload:emailer/1.0.0"}},"requests.DataQualityCreate.AllFields":{"summary":"All fields defined","description":"A data quality with all fields defined.","value":{"resource":"krn:ad:asset1/setpoint","configurations":{"kelvin_timestamp_anomaly":{"enabled":true},"kelvin_stale_detection":{"enabled":true,"configuration":{"window_interval":5,"window_interval_unit":"min"}},"kelvin_out_of_range_detection":{"enabled":true,"configuration":{"min_threshold":0,"max_threshold":100}},"kelvin_outlier_detection":{"enabled":true,"configuration":{"model":"z_score","z_score":{"threshold":3,"window_size":10}}},"kelvin_data_availability":{"enabled":true,"configuration":{"window_expected_number_msgs":5,"window_interval_unit":"sec"}}}}},"responses.DataQuality.AllFields":{"summary":"All fields defined","description":"A data quality with all fields defined.","value":{"resource":"krn:ad:asset1/setpoint","configurations":{"kelvin_timestamp_anomaly":{"enabled":true},"kelvin_stale_detection":{"enabled":true,"configuration":{"window_interval":5,"window_interval_unit":"min"}},"kelvin_out_of_range_detection":{"enabled":true,"configuration":{"min_threshold":0,"max_threshold":100}},"kelvin_outlier_detection":{"enabled":true,"configuration":{"model":"z_score","z_score":{"threshold":3,"window_size":10}}},"kelvin_data_availability":{"enabled":true,"configuration":{"window_expected_number_msgs":5,"window_interval_unit":"sec"}}},"created_by":"krn:user:user@example.com","created":"2020-01-01T00:00:00Z","updated_by":"krn:user:user@example.com","updated":"2020-01-01T00:00:00Z"}},"requests.DataQualityUpdate.AllFields":{"summary":"All fields defined","description":"A data quality with all fields defined.","value":{"configurations":{"kelvin_timestamp_anomaly":{"enabled":true},"kelvin_stale_detection":{"enabled":true,"configuration":{"window_interval":5,"window_interval_unit":"min"}},"kelvin_out_of_range_detection":{"enabled":true,"configuration":{"min_threshold":0,"max_threshold":100}},"kelvin_outlier_detection":{"enabled":true,"configuration":{"model":"z_score","z_score":{"threshold":3,"window_size":10}}},"kelvin_data_availability":{"enabled":true,"configuration":{"window_expected_number_msgs":5,"window_interval_unit":"sec"}}}}},"requests.DataQualityList.AllFields":{"summary":"All fields defined","description":"Search for (asset1 OR asset2) AND (setpoint1 OR setpoint2) data qualities.","value":{"resources":["krn:asset:asset1","krn:asset:asset2","krn:datastream:setpoint1","krn:datastream:setpoint2"]}},"requests.BulkDataQualityUpsert.AllFields":{"summary":"Bulk data qualities create or update","value":{"data_qualities":[{"resource":"krn:ad:asset1/setpoint1","configurations":{"kelvin_timestamp_anomaly":{"enabled":true},"kelvin_stale_detection":{"enabled":true,"configuration":{"window_interval":5,"window_interval_unit":"min"}},"kelvin_out_of_range_detection":{"enabled":true,"configuration":{"min_threshold":0,"max_threshold":100}},"kelvin_outlier_detection":{"enabled":true,"configuration":{"model":"z_score","z_score":{"threshold":3,"window_size":10}}},"kelvin_data_availability":{"enabled":true,"configuration":{"window_expected_number_msgs":5,"window_interval_unit":"sec"}}}},{"resource":"krn:ad:asset1/setpoint2","configurations":{"kelvin_timestamp_anomaly":{"enabled":true},"kelvin_stale_detection":{"enabled":true,"configuration":{"window_interval":5,"window_interval_unit":"min"}},"kelvin_out_of_range_detection":{"enabled":true,"configuration":{"min_threshold":0,"max_threshold":100}},"kelvin_outlier_detection":{"enabled":true,"configuration":{"model":"z_score","z_score":{"threshold":3,"window_size":10}}},"kelvin_data_availability":{"enabled":true,"configuration":{"window_expected_number_msgs":5,"window_interval_unit":"sec"}}}}]}},"requests.BulkDataQualityDelete.AllFields":{"summary":"List of data qualities to delete","value":{"resources":["krn:asset:asset3","krn:ad:asset1/setpoint1","krn:ad:asset1/setpoint2"]}},"requests.DataQualityMetricCreate.AllFields":{"summary":"All fields defined","description":"A data quality metric with all fields defined.","value":{"name":"custom_availability_metric","title":"Custom Availability Metric","data_type_name":"number","description":"Custom metric for high-priority assets requiring 99.9% uptime"}},"requests.DataQualityMetricCreate.RequiredOnly":{"summary":"Required fields only","description":"A data quality metric with only required fields.","value":{"name":"basic_metric","title":"Basic Metric","data_type_name":"number"}},"responses.DataQualityMetric.AllFields":{"summary":"All fields defined","description":"A data quality metric with all fields defined.","value":{"name":"custom_availability_metric","title":"Custom Availability Metric","data_type_name":"number","description":"Custom metric for high-priority assets requiring 99.9% uptime","is_protected":false,"in_use_by":["krn:wlappv:cluster1/workload1/app1/1.2.0"],"created":"2024-12-18T18:22:18.582724Z","created_by":"krn:user:john@kelvininc.com","updated":"2024-12-18T18:22:18.582724Z","updated_by":"krn:user:john@kelvininc.com"}},"requests.DataQualityMetricUpdate.AllFields":{"summary":"All fields defined","description":"Update all modifiable fields of a data quality metric.","value":{"title":"Updated Custom Availability Metric","description":"Updated description for custom availability metric"}},"requests.DataQualityMetricUpdate.TitleOnly":{"summary":"Update title only","description":"Update only the title of a data quality metric.","value":{"title":"New Metric Title"}},"requests.DataQualityMetricBulkUpsert.AllFields":{"summary":"Upsert multiple metrics","description":"Create or update multiple data quality metrics in one request.","value":{"data_quality_metrics":[{"name":"metric_one","title":"First Metric","data_type_name":"number","description":"Description for first metric"},{"name":"metric_two","title":"Second Metric","data_type_name":"string"},{"name":"existing_metric","title":"Updated Existing Metric","description":"This will update if the metric already exists"}]}},"requests.DataQualityMetricBulkDelete.AllFields":{"summary":"Delete multiple metrics","description":"Delete multiple data quality metrics by their names.","value":{"metric_names":["metric_one","metric_two","old_metric"]}},"requests.DataQualitySimulate.AllFields":{"summary":"Simulation with all fields defined","description":"A simulation request with all fields defined.","value":{"resource":"krn:ad:asset1/setpoint","configurations":{"kelvin_stale_detection":{"enabled":true,"configuration":{"window_interval":5,"window_interval_unit":"min"}},"kelvin_out_of_range_detection":{"enabled":true,"configuration":{"min_threshold":0,"max_threshold":100}},"kelvin_outlier_detection":{"enabled":true,"configuration":{"model":"z_score","z_score":{"threshold":3,"window_size":10}}},"kelvin_data_availability":{"enabled":true,"configuration":{"window_expected_number_msgs":5,"window_interval_unit":"sec"}}},"start_time":"2020-01-01T00:00:00Z","end_time":"2020-01-01T00:00:00Z"}},"responses.DataQualitySimulate.AllFields":{"summary":"Simulation result with all fields defined","description":"A simulation response with all fields defined.","value":{"timeseries_data":[{"timestamp":"2020-01-01T00:00:00Z","payload":42,"resource":"krn:ad:asset1/setpoint"},{"timestamp":"2020-01-01T00:00:01Z","payload":43,"resource":"krn:ad:asset1/setpoint"}],"data_quality_data":{"kelvin_stale_detection":[{"timestamp":"2020-01-01T00:00:00Z","payload":1,"resource":"krn:ad:asset1/setpoint"},{"timestamp":"2020-01-01T00:02:01Z","payload":1,"resource":"krn:ad:asset1/setpoint"}],"kelvin_out_of_range_detection":[{"timestamp":"2020-01-01T00:00:00Z","payload":1,"resource":"krn:ad:asset1/setpoint"},{"timestamp":"2020-01-01T00:02:01Z","payload":1,"resource":"krn:ad:asset1/setpoint"}],"kelvin_outlier_detection":[{"timestamp":"2020-01-01T00:00:00Z","payload":1,"resource":"krn:ad:asset1/setpoint"},{"timestamp":"2020-01-01T00:02:01Z","payload":1,"resource":"krn:ad:asset1/setpoint"}],"kelvin_data_availability":[{"timestamp":"2020-01-01T00:00:00Z","payload":78,"resource":"krn:ad:asset1/setpoint"},{"timestamp":"2020-01-01T00:02:01Z","payload":79,"resource":"krn:ad:asset1/setpoint"}]}}},"requests.DataQualityStatistics.AllFields":{"summary":"Statistics request with all fields defined","description":"A statistics request with all fields defined.","value":{"start_time":"2020-01-01T00:00:00Z","end_time":"2020-01-01T00:00:00Z","threshold":85,"asset_names":["pcp_01","pcp_02"]}},"responses.DataQualityStatistics.AllFields":{"summary":"Statistics with all fields defined","description":"A statistics response with all fields defined.","value":{"good_data_percentage":84.5,"good_data_count":85,"good_data_over_time":[{"timestamp":"2025-09-01T10:00:00Z","payload":42},{"timestamp":"2025-09-01T10:05:00Z","payload":43}],"bad_data_percentage":15.5,"bad_data_count":15,"bad_data_over_time":[{"timestamp":"2025-09-01T10:00:00Z","payload":42},{"timestamp":"2025-09-01T10:05:00Z","payload":43}]}},"requests.DataTagList.ByResourceAndDate":{"summary":"Filter by resource and date","description":"Return Data Tags for a specific asset and date range.","value":{"resources":["krn:asset:well_01"],"sources":["krn:user:user@example.com","krn:wlappv:my-cluster/my-workload:my-app/1.2.0","krn:event:maintenance/valve-change"],"tag_names":["Valve Change"],"contexts":["krn:datastream:temperature","krn:datastream:pressure"],"start_date":"2024-02-06T00:00:00.000000Z","end_date":"2024-02-07T00:00:00.000000Z"}},"responses.DataTagList.Cursor":{"summary":"Filtered data tags","description":"Cursor response with Data Tags matching the request filters.","value":{"data":[{"id":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","start_date":"2024-02-06T18:22:18.582724Z","end_date":"2024-02-06T19:22:18.582724Z","tag_name":"Valve Change","resource":"krn:asset:well_01","source":"krn:user:user@example.com","description":"A valve was changed during scheduled maintenance.","contexts":["krn:datastream:temperature","krn:datastream:pressure"],"created":"2024-02-06T19:22:18.582724Z","updated":"2024-02-06T19:22:18.582724Z"}],"pagination":{"next_page":"W3siS2V5IjoiaWQiLCJWYWx1ZSI6IjAwMDJiYzc5LWI0MmYtNDYxYi05NWQ2LWNmMGEyOGJhODdhYSJ9XQ==","previous_page":"W3siS2V5IjoiaWQiLCJWYWx1ZSI6IjAwMDAwMDAwLWI0MmYtNDYxYi05NWQ2LWNmMGEyOGJhODdhYSJ9XQ=="}}},"requests.GuardrailCreate.AllFields":{"summary":"All fields defined","description":"A guardrail with all fields defined.","value":{"resource":"krn:ad:asset1/setpoint","control_disabled":false,"number":{"min":{"value":100,"inclusive":true},"max":{"value":500,"inclusive":true},"relative":{"increase":{"min":{"value":0.5,"inclusive":true,"type":"value"},"max":{"value":10,"inclusive":false,"type":"percentage"}},"decrease":{"min":{"value":0.5,"inclusive":true,"type":"value"},"max":{"value":50,"inclusive":true,"type":"percentage"}}}},"updater":{"number":{"min":{"source":"krn:ad:asset1/setpoint-min","inclusive":true},"max":{"source":"krn:ad:asset1/setpoint-max","inclusive":true}}}}},"requests.GuardrailCreate.SimpleStatic":{"summary":"Simple static guardrail","description":"A guardrail with static values and without the advanced options defined.","value":{"resource":"krn:ad:asset1/setpoint","number":{"min":{"value":100},"max":{"value":500}}}},"requests.GuardrailCreate.SimpleDynamic":{"summary":"Simple dynamic guardrail","description":"A guardrail with dynamic values and without the advanced options defined.","value":{"resource":"krn:ad:asset1/setpoint","updater":{"number":{"min":{"source":"krn:ad:asset1/setpoint-min"},"max":{"source":"krn:ad:asset1/setpoint-max"}}}}},"requests.GuardrailCreate.SingleComponent":{"summary":"Guardrail with single component","description":"A guardrail with a single component specified","value":{"resource":"krn:ad:asset1/setpoint","number":{"min":{"value":100}}}},"requests.GuardrailCreate.NonNumeric":{"summary":"Non-number data stream guardrail","description":"A non-number data stream guardrail can only enable/disable control.","value":{"resource":"krn:ad:asset1/setpoint","control_disabled":true}},"responses.GuardrailX.AllFields":{"summary":"All fields defined","description":"A guardrail with all fields defined.","value":{"resource":"krn:ad:asset1/setpoint","control_disabled":false,"number":{"min":{"value":100,"inclusive":true,"updated_by":"krn:job:guardrails-worker/1235432","updated_at":"2020-01-01T00:00:00Z"},"max":{"value":500,"inclusive":true,"updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"},"relative":{"increase":{"min":{"value":0.5,"inclusive":true,"type":"value"},"max":{"value":10,"inclusive":false,"type":"percentage"}},"decrease":{"min":{"value":0.5,"inclusive":true,"type":"value"},"max":{"value":50,"inclusive":true,"type":"percentage"}}}},"updater":{"number":{"min":{"source":"krn:ad:asset1/setpoint-min","inclusive":true},"max":{"source":"krn:ad:asset1/setpoint-max","inclusive":true}}},"created_by":"krn:user:user@example.com","created_at":"2020-01-01T00:00:00Z","updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"}},"responses.GuardrailX.NonNumeric":{"summary":"Non-number data stream guardrail","description":"A non-number data stream guardrail can only enable/disable control.","value":{"resource":"krn:ad:asset1/setpoint","control_disabled":true,"created_by":"krn:user:user@example.com","created_at":"2020-01-01T00:00:00Z","updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"}},"responses.GuardrailX.SimpleStatic":{"summary":"Simple static guardrail","description":"A guardrail with static values and without the advanced options defined.","value":{"resource":"krn:ad:asset1/setpoint","control_disabled":false,"number":{"min":{"value":100,"inclusive":false,"updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"},"max":{"value":500,"inclusive":false,"updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"}},"created_by":"krn:user:user@example.com","created_at":"2020-01-01T00:00:00Z","updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"}},"responses.GuardrailX.SimpleMixed":{"summary":"Mixed static and dynamic guardrail","description":"A guardrail with dynamic and static values and without the advanced options defined.","value":{"resource":"krn:ad:asset1/setpoint","control_disabled":false,"number":{"min":{"value":100,"inclusive":false,"updated_by":"krn:job:guardrails-worker/1235432","updated_at":"2020-01-01T00:00:00Z"},"max":{"value":500,"inclusive":false,"updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"}},"updater":{"number":{"min":{"source":"krn:ad:asset1/setpoint-min"}}},"created_by":"krn:user:user@example.com","created_at":"2020-01-01T00:00:00Z","updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"}},"requests.GuardrailX.AllFields":{"summary":"All fields defined","description":"A guardrail with all fields defined.","value":{"control_disabled":false,"number":{"min":{"value":100,"inclusive":true},"max":{"value":500,"inclusive":true},"relative":{"increase":{"min":{"value":0.5,"inclusive":true,"type":"value"},"max":{"value":10,"inclusive":false,"type":"percentage"}},"decrease":{"min":{"value":0.5,"inclusive":true,"type":"value"},"max":{"value":50,"inclusive":true,"type":"percentage"}}}}}},"requests.GuardrailX.NonNumeric":{"summary":"Non-number data stream guardrail","description":"A non-number data stream guardrail can only enable/disable control.","value":{"control_disabled":true}},"requests.GuardrailsList.AllFields":{"summary":"All fields defined","description":"Search for (asset1 OR asset2) AND (setpoint1 OR setpoint2) guardrails with control disabled.","value":{"resources":["krn:asset:asset1","krn:asset:asset2","krn:datastream:setpoint1","krn:datastream:setpoint2"],"control_disabled":true}},"requests.BulkGuardrailsCreate.AllFields":{"summary":"Bulk guardrails create","value":{"guardrails":[{"resource":"krn:ad:asset1/setpoint1","control_disabled":true,"number":{"min":{"value":100,"inclusive":true},"max":{"value":500,"inclusive":true},"relative":{"increase":{"min":{"value":0.5,"inclusive":true,"type":"value"},"max":{"value":10,"inclusive":false,"type":"percentage"}},"decrease":{"min":{"value":0.5,"inclusive":true,"type":"value"},"max":{"value":50,"inclusive":true,"type":"percentage"}}}}},{"resource":"krn:ad:asset1/setpoint2","control_disabled":true},{"resource":"krn:ad:asset2/setpoint2","control_disabled":true}]}},"responses.BulkGuardrailsCreate.AllFields":{"summary":"Bulk guardrails create","value":{"data":[{"resource":"krn:ad:asset1/setpoint1","control_disabled":true,"number":{"min":{"value":100,"inclusive":true,"updated_by":"krn:job:guardrails-worker/1235432","updated_at":"2020-01-01T00:00:00Z"},"max":{"value":500,"inclusive":true,"updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"},"relative":{"increase":{"min":{"value":0.5,"inclusive":true,"type":"value"},"max":{"value":10,"inclusive":false,"type":"percentage"}},"decrease":{"min":{"value":0.5,"inclusive":true,"type":"value"},"max":{"value":50,"inclusive":true,"type":"percentage"}}}},"created_by":"krn:user:user@example.com","created_at":"2020-01-01T00:00:00Z","updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"},{"resource":"krn:ad:asset1/setpoint2","control_disabled":true,"created_by":"krn:user:user@example.com","created_at":"2020-01-01T00:00:00Z","updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"},{"resource":"krn:ad:asset2/setpoint2","control_disabled":true,"created_by":"krn:user:user@example.com","created_at":"2020-01-01T00:00:00Z","updated_by":"krn:user:user@example.com","updated_at":"2020-01-01T00:00:00Z"}]}},"requests.BulkGuardrailsDelete.AllFields":{"summary":"List of guardrails to delete","value":{"resources":["krn:ad:asset1/setpoint1","krn:ad:asset1/setpoint2"]}},"responses.OrchestrationClustersCreate.Default":{"value":{"name":"my-cluster","title":"My Cluster","type":"k3s","ready":false,"status":"pending_provision","last_seen":null,"sync_scrape_interval":30,"manifests_scrape_interval":86400,"manifests_scrape_enabled":true,"version":{"k8s_version":"","kelvin_version":""},"created":"2024-04-12T10:51:54.087467Z","updated":"2024-04-12T10:51:54.087467Z","service_account_token":"aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQo=","provision_script":"bash <(curl -sfS https://{URL}/provision) --service-account aHR0cHM6Ly93d3cueW91dHViZS5jb20vd2F0Y2g/dj1kUXc0dzlXZ1hjUQo=","join_script":"bash <(curl -sfS https://{URL}/provision) --join --ip <main_cluster_node_ip_address> --token","download_provision_script":"bash <(curl -sfS https://{URL}/provision) --download","ha_mode":false,"ha_mode_warning":"","telemetry_scrape_interval":30,"telemetry_enabled":true,"telemetry_buffer_size":5,"forward_logs_enabled":true,"forward_logs_buffer_size":5,"upgrade_status":{"state":"idle","message":""},"upgrade_pre_download":true,"upgrade_instantly_apply":true,"edge_apps":{"edge_ui":{"disabled":false},"edge_ccm":{"disabled":false},"edge_k8s":{"disabled":false},"edge_info":{"disabled":false},"edge_mqtt":{"disabled":false,"expose":false,"anonymous":false},"edge_nats":{"disabled":false},"edge_sync":{"disabled":false},"edge_leader_api":{"disabled":false},"edge_custom_action_manager":{"disabled":false}},"edge_options":{"image_pull_policy":"IfNotPresent","auto_scale":false}}},"response.Error.NotAcceptable":{"summary":"Not acceptable","value":{"errors":[{"name":"not_acceptable","title":"Not acceptable","description":"Request is not acceptable under current circumstances.","solution":"Please check if the request is valid for your current conditions."}]}},"requests.RecommendationLastGet.Basic":{"summary":"Latest Recommendations by asset","description":"Request the latest Recommendation for selected assets using optional filters for source, state, and type.","value":{"resources":["krn:asset:pcp_01","krn:asset:pcp_03"],"states":["pending","accepted"],"sources":["krn:wlappv:my-cluster/my-workload:my-app/1.0.0"],"types":["no_action"]}},"requests.RecommendationsList.Basic":{"summary":"List filtered Recommendations","description":"Request Recommendations filtered by resource, source, state, and type.","value":{"resources":["krn:asset:pcp_01","krn:asset:pcp_03"],"sources":["krn:wlappv:my-cluster/my-workload:my-app/1.0.0","krn:user:user@example.com"],"states":["pending","accepted"],"types":["no_action"]}},"requests.RecommendationRangeGet.Basic":{"summary":"Recommendations in a date range","description":"Request Recommendations created in a date range for selected resources, sources, states, and types.","value":{"start_date":"2026-01-01T00:00:00Z","end_date":"2026-01-31T00:00:00Z","resources":["krn:asset:pcp_01","krn:asset:pcp_03"],"sources":["krn:wlappv:my-cluster/my-workload:my-app/1.0.0","krn:user:user@example.com"],"states":["pending","accepted"],"types":["no_action"]}},"requests.TimeseriesLastGet.AllCases":{"summary":"Latest values with field selection cases","description":"Demonstrates field projection for object payloads, use of `value` for primitive payloads, and omitted `fields` returning the raw payload.","value":{"selectors":[{"resource":"krn:ad:pcp_03/gas_flow"},{"resource":"krn:ad:bp_02/motor_speed","fields":["value"]},{"resource":"krn:ad:pcp_03/dynacard","fields":["stroke_number"]}]}},"responses.TimeseriesLastGet.AllCases":{"summary":"Latest values response covering key field behaviors","description":"Includes projected object fields, primitive payload retrieval with `value`, and raw payload retrieval when `fields` is omitted.","value":[{"resource":"krn:ad:pcp_03/dynacard","source":"krn:wlappv:my-cluster/dynacard-decoder:dynacard-worker/2.1.0","data_type":"data;pt=object;icd=kelvin.dynacard","fields":["stroke_number"],"last_value":1287,"last_timestamp":"2026-03-02T11:05:47.482840Z","created":"2026-03-02T11:05:47.482840Z","updated":"2026-03-02T11:05:58.380615Z"},{"resource":"krn:ad:bp_02/motor_speed","source":"krn:wlappv:my-cluster/bp-opcua-bridge:kelvin-bridge-opcua-client/3.3.3","data_type":"data;pt=number","fields":["value"],"last_value":1945.2321735985631,"last_timestamp":"2026-03-02T11:06:00.000000Z","created":"2026-03-02T11:06:00.000000Z","updated":"2026-03-02T11:06:01.000000Z"},{"resource":"krn:ad:pcp_03/dynacard_raw","source":"krn:wlappv:my-cluster/dynacard-decoder:dynacard-worker/2.1.0","data_type":"data;pt=object;icd=kelvin.dynacard","last_value":{"stroke_number":1287,"load":88.12,"value":56.42},"last_timestamp":"2026-03-02T11:06:03.000000Z","created":"2026-03-02T11:06:03.000000Z","updated":"2026-03-02T11:06:04.000000Z"}]},"requests.TimeseriesRangeGet.RawBasic":{"summary":"Raw points for primitive streams","description":"Basic range query returning raw payload values for regular primitive datastreams. No field projection or aggregation is used.","value":{"start_time":"2026-01-01T00:00:00Z","end_time":"2026-01-01T02:00:00Z","selectors":[{"resource":"krn:ad:bp_02/motor_speed"},{"resource":"krn:ad:pcp_01/casing_pressure"}],"order":"ASC"}},"requests.TimeseriesRangeGet.AggregatedMean1h":{"summary":"Hourly mean aggregation","description":"Aggregates values using hourly buckets with mean aggregation.","value":{"start_time":"2026-01-01T00:00:00Z","end_time":"2026-01-02T00:00:00Z","selectors":[{"resource":"krn:ad:bp_02/motor_speed"}],"agg":"mean","time_bucket":"1h","fill":"none","order":"ASC","group_by_selector":true}},"requests.TimeseriesRangeGet.AggregatedProjectedMax15m":{"summary":"Field projection with max aggregation","description":"Projects `stroke_number` from a dynacard payload and aggregates it using 15-minute max buckets.","value":{"start_time":"2026-01-01T00:00:00Z","end_time":"2026-01-01T06:00:00Z","selectors":[{"resource":"krn:ad:pcp_03/dynacard","fields":["stroke_number"]}],"agg":"max","time_bucket":"15m","fill":"previous","order":"DESC","group_by_selector":true}},"responses.TimeseriesRangeGet.RawBasic":{"summary":"Raw point from streamed response","description":"One streamed point containing the raw primitive payload.","value":{"resource":"krn:ad:bp_02/motor_speed","timestamp":"2026-01-01T00:00:30Z","payload":1945.2321735985631}},"responses.TimeseriesRangeGet.AggregatedMean1h":{"summary":"Aggregated mean point","description":"One streamed point representing an hourly mean bucket.","value":{"resource":"krn:ad:bp_02/motor_speed","timestamp":"2026-01-01T00:00:00Z","payload":1938.7421}},"responses.TimeseriesRangeGet.AggregatedProjectedMax15m":{"summary":"Projected and aggregated point","description":"One streamed point for the selected projected dynacard field.","value":{"resource":"krn:ad:pcp_03/dynacard","timestamp":"2026-01-01T05:45:00Z","payload":1293}},"requests.ParametersAppVersionUpdate.SingleRes":{"summary":"Single resource","value":{"resource_parameters":[{"resource":"krn:asset:my-asset","parameters":[{"name":"password","value":"hunter2"},{"name":"id","value":1337,"comment":"Pro user"},{"name":"enabled","value":true}]}]}},"requests.ParametersAppVersionUpdate.MultiRes":{"summary":"Multiple resources","value":{"resource_parameters":[{"resource":"krn:asset:my-asset1","parameters":[{"name":"password","value":"hunter2","comment":"Safest password"},{"name":"id","value":1337}]},{"resource":"krn:asset:my-asset2","parameters":[{"name":"enabled","value":true}]}]}},"requests.ParametersAppVersionUpdate.SingleParam":{"summary":"Single parameter","value":{"resource_parameters":[{"resource":"krn:asset:my-asset","parameters":[{"name":"key","value":"value"}]}]}},"requests.ParametersAppVersionUpdate.Source":{"summary":"With source specified","value":{"source":"krn:wlappv:my-cluster/my-workload:my-app/1.0.0","resource_parameters":[{"resource":"krn:asset:my-asset1","parameters":[{"name":"password","value":"hunter2"},{"name":"id","value":1337}]},{"resource":"krn:asset:my-asset2","parameters":[{"name":"enabled","value":true,"comment":"Auto enabled by AI"}]}]}},"response.Error.CommonLegacy":{"summary":"Error","value":{"errors":[{"name":"name_of_error_description","title":"Title of Error Description","description":"Full description of the error.","solution":"Some possible solutions to resolve the error.","type":"system","payload":[{"key1":"Additional info here","key2":"Additional info here"},{"key1":"Additional info here","key2":"Additional info here"}]}]}}},"responses":{"error.BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"bad-request":{"$ref":"#/components/examples/response.Error.BadRequest"}}}}},"error.Unauthorized":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"unauthorized":{"$ref":"#/components/examples/response.Error.Unauthorized"}}}}},"error.NotFound":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"not-found":{"$ref":"#/components/examples/response.Error.NotFound"}}}}},"responses-error.BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_schedule_must_be_in_future":{"summary":"Schedule Date must be in the future","value":{"errors":[{"name":"err_schedule_must_be_in_future","title":"Schedule Must Be In Future","description":"The schedule must be in the future","solution":"Please make sure the schedule date is after current time","payload":{"schedule_for":"2021-01-01T00:00:00Z"}}]}},"err_schedule_revert_must_be_after":{"summary":"Reverse Schedule Date must be after Schedule Date","value":{"errors":[{"name":"err_schedule_revert_must_be_after","title":"Reverse Schedule Date Must Be After Schedule Date","description":"The reverse schedule date must be after the initial schedule date","solution":"Please make sure the reverse schedule date is after the initial schedule date","payload":{"revert.scheduled_for":"2025-01-17T10:30:00Z","schedule_for":"2025-01-18T22:30:00Z"}}]}},"err_schedule_revert_resource_not_present":{"summary":"Revert Schedule Resource Not Present","value":{"errors":[{"name":"err_schedule_revert_resource_not_present","title":"Revert Schedule Resource Not Present","description":"Revert schedule resource is not present in the schedule","solution":"Please make sure the revert schedule resource is present in the schedule resources list","payload":{"resource":"krn:asset:asset-1"}}]}},"err_schedule_revert_parameter_not_present":{"summary":"Revert Schedule Parameter Not Present","value":{"errors":[{"name":"err_schedule_revert_parameter_not_present","title":"Revert Schedule Parameter Not Present","description":"Revert schedule parameter is not present in the schedule","solution":"Please make sure the revert schedule parameter is present in the schedule parameters list","payload":{"parameter":"param"}}]}},"err_schedule_resource_missing_in_revert":{"summary":"Schedule Resource Missing in Revert Schedule","value":{"errors":[{"name":"err_schedule_resource_missing_in_revert","title":"Schedule Resource Missing in Revert Schedule","description":"Schedule resource is missing in the revert schedule resource parameters","solution":"Please make sure the resource is present in the revert schedule resource parameters","payload":{"resource":"krn:asset:asset-1"}}]}},"err_schedule_parameter_missing_in_revert":{"summary":"Schedule Parameter Missing in Revert Schedule","value":{"errors":[{"name":"err_schedule_parameter_missing_in_revert","title":"Schedule Parameter Missing in Revert Schedule","description":"Schedule parameter is missing in the revert schedule resource parameters","solution":"Please make sure the parameter is present in the revert schedule resource parameters","payload":{"parameter":"parameter","resource":"krn:asset:asset-1"}}]}},"err_invalid_parameter_data_type":{"summary":"Invalid Parameter Data Type","value":{"errors":[{"name":"err_invalid_parameter_data_type","title":"Invalid Parameter Data Type","description":"The parameter value provided has not a valid data type","solution":"Please make sure the parameter value has a valid data type","payload":{"parameter_name":"param","parameter_data_type":"number","value_data_type":"string","value":"test"}}]}},"err_schedule_revert_duplicated_resource":{"summary":"Revert Schedule Duplicated Resource","value":{"errors":[{"name":"err_schedule_revert_duplicated_resource","title":"Revert Schedule Duplicated Resource","description":"Revert schedule resource is duplicated","solution":"Please make sure the revert schedule resource is not duplicated in the schedule resources list","payload":{"resource":"krn:asset:asset-1"}}]}}}}}},"error.Conflict":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_schedule_conflict_found":{"summary":"Schedule already exists","value":{"errors":[{"name":"err_schedule_conflict_found","title":"Schedule Conflict Found","description":"Ongoing Schedule already exists for the app name and version and respective resources","solution":"Please make sure the schedule does not conflict with existing schedules","payload":{"reason":"Conflicting schedules found: [01946f0d-ea38-7290-9ef8-bb9d37610a4d]"}}]}}}}}},"responses-error.Conflict":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"not-found":{"$ref":"#/components/examples/response.Error.Conflict"}}}}},"error.PreconditionFailed":{"description":"Precondition Failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"not-found":{"$ref":"#/components/examples/response.Error.PreconditionFailed"}}}}},"error.Multi":{"description":"Returned when a bulk operation results in multiple statuses.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"errorMultiExample":{"$ref":"#/components/examples/Error.Multi"}}}}},"error.Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"unauthorized":{"$ref":"#/components/examples/response.Error.Forbidden"}}}}},"error.InternalServerError":{"description":"Internal Server Error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"not-found":{"$ref":"#/components/examples/response.Error.InternalServerError"}}}}},"error.FailedDependency":{"description":"Failed Dependency","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"not-found":{"$ref":"#/components/examples/response.Error.FailedDependency"}}}}},"errors_asset_responses-error.Conflict":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_asset_in_use_by_workloads":{"summary":"Asset In Use By Workload","value":{"errors":[{"name":"err_asset_in_use_by_workloads","title":"Asset In Use By Workload","description":"The asset is currently in use by one or more workloads and cannot be deleted","solution":"Please make sure the asset is not in use by any workload before attempting to delete it","payload":{"name":"pcp-01","in_use_by":["krn:wlappv:cluster-1/pcp-optimization-dcjj1avvpva89:pcp-optimization/1.0.0"]}}]}},"err_asset_in_use_by_sessions":{"summary":"Asset In Use By Session","value":{"errors":[{"name":"err_asset_in_use_by_sessions","title":"Asset In Use By Session","description":"The asset is currently in use by one or more sessions and cannot be deleted","solution":"Please make sure the asset is not in use by any session before attempting to delete it","payload":{"name":"pcp-01","in_use_by":["krn:model-session:b46a5717-d53e-4f16-95c4-7c3d9c2b6d74"]}}]}}}}}},"errors_action_type_responses-error.BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_validation_match":{"summary":"Validation Match","value":{"errors":[{"name":"err_validation_match","title":"Invalid Value","description":"Please make sure the value matches the regex","solution":"Please make sure the value matches the regex","payload":{"field":"name","regex":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","value":"Custom Action type !"}}]}},"err_validation_length":{"summary":"Validation Length","value":{"errors":[{"name":"err_validation_length","title":"Unexpected length","description":"Field has unexpected length","solution":"Please make sure the field's length is within the stipulated bounds","payload":{"field":"name","maximum":64,"minimum":1,"value":"Custom Action type name Custom Action type name Custom Action type name Custom Action type name Custom Action type name Custom Action type name Custom Action type name "}}]}}}}}},"responses-error.NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_action_type_not_found":{"summary":"Custom Action Type Not Found","value":{"errors":[{"name":"err_action_type_not_found","title":"Custom Action Type not found","description":"The custom action type does not exist","solution":"Please make sure the Custom Action type name corresponds to an existing Custom Action type","payload":{"name":"name"}}]}}}}}},"errors_metric_responses-error.Conflict":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_data_quality_metric_in_use_by_workloads":{"summary":"Data Quality Metric In Use By Workload","value":{"errors":[{"name":"err_data_quality_metric_in_use_by_workloads","title":"Data Quality Metric In Use By Workload","description":"The data quality metric is currently in use by one or more workloads and cannot be deleted","solution":"Please make sure the data quality metric is not in use by any workload before attempting to delete it","payload":{"name":"data-quality-metric-1","in_use_by":["krn:wlappv:cluster-1/pcp-optimization-dcjj1avvpva89:pcp-optimization/1.0.0"]}}]}}}}}},"errors_datastreams_responses-error.Conflict":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_data_stream_in_use_by_workloads":{"summary":"Datastream In Use By Workload","value":{"errors":[{"name":"err_data_stream_in_use_by_workloads","title":"Datastream In Use By Workload","description":"The datastream is currently in use by one or more workloads and cannot be deleted","solution":"Please make sure the datastream is not in use by any workload before attempting to delete it","payload":{"name":"casing-pressure","in_use_by":["krn:wlappv:cluster-1/pcp-optimization-dcjj1avvpva89:pcp-optimization/1.0.0"]}}]}},"err_data_stream_in_use_by_sessions":{"summary":"Datastream In Use By Session","value":{"errors":[{"name":"err_data_stream_in_use_by_sessions","title":"Datastream In Use By Session","description":"The datastream is currently in use by one or more sessions and cannot be deleted","solution":"Please make sure the datastream is not in use by any session before attempting to delete it","payload":{"name":"casing-pressure","in_use_by":["krn:model-session:8431718a-e928-4589-87cd-f571f9c52c5d"]}}]}}}}}},"error.NotAcceptable":{"description":"Not Acceptable","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"not-found":{"$ref":"#/components/examples/response.Error.NotAcceptable"}}}}},"errors_recommendation_responses-error.BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_cc_expiration_date_missing":{"summary":"Missing control change expiration","value":{"errors":[{"name":"err_cc_expiration_date_missing","title":"Control change expiration configuration missing","description":"A control change expiration source is required (expiration date, expiration delta, or recommendation expiration date)","solution":"Please provide a control change expiration date or expiration delta, or set the recommendation expiration date to a future date"}]}},"err_cc_duplicate_expiration_setting":{"summary":"Conflicting control change expiration settings","value":{"errors":[{"name":"err_cc_duplicate_expiration_setting","title":"Duplicate control change expiration setting","description":"Control change expiration date and control change expiration delta date cannot be used together","solution":"Please provide only one expiration setting for the control change."}]}},"err_cc_invalid_expiration_delta":{"summary":"Invalid control change expiration delta","value":{"errors":[{"name":"err_cc_invalid_expiration_delta","title":"Invalid control change expiration delta","description":"The control change expiration delta must be a positive value","solution":"Please provide a positive value for the control change expiration delta"}]}}}}}},"responses-error.Forbidden":{"description":"Forbidden","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_service_account_required":{"summary":"Service account required for privileged fields","value":{"errors":[{"name":"err_service_account_required","title":"Service account required","description":"Only service accounts can set privileged fields","solution":"Use a service account to perform this action, or remove the privileged field from your request","payload":{"field":"id","value":"custom-uuid-123"}}]}},"err_service_account_required_state":{"summary":"Service account required for non-pending state","value":{"errors":[{"name":"err_service_account_required","title":"Service account required","description":"Only service accounts can set privileged fields","solution":"Use a service account to perform this action, or remove the privileged field from your request","payload":{"field":"state","value":"accepted"}}]}},"err_service_account_required_source":{"summary":"Service account required for source override","value":{"errors":[{"name":"err_service_account_required","title":"Service account required","description":"Only service accounts can set privileged fields","solution":"Use a service account to perform this action, or remove the privileged field from your request","payload":{"field":"source","value":"krn:user:user@example.com"}}]}}}}}},"errors_recommendation_type_responses-error.BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_validation_match":{"summary":"Validation Match","value":{"errors":[{"name":"err_validation_match","title":"Invalid Value","description":"Please make sure the value matches the regex","solution":"Please make sure the value matches the regex","payload":{"field":"name","regex":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","value":"Recommendation type !"}}]}},"err_validation_length":{"summary":"Validation Length","value":{"errors":[{"name":"err_validation_length","title":"Unexpected length","description":"Field has unexpected length","solution":"Please make sure the field's length is within the stipulated bounds","payload":{"field":"name","maximum":64,"minimum":1,"value":"Recommendation type name Recommendation type name Recommendation type name Recommendation type name Recommendation type name Recommendation type name Recommendation type name "}}]}}}}}},"errors_recommendation_type_responses-error.NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_recommendation_type_not_found":{"summary":"Recommendation Type Not Found","value":{"errors":[{"name":"err_recommendation_type_not_found","title":"Recommendation Type not found","description":"The recommendation type does not exist","solution":"Please make sure the recommendation type name corresponds to an existing recommendation type","payload":{"name":"name"}}]}}}}}},"errors_recommendation_responses-error.NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_recommendation_not_found":{"summary":"Recommendation Not Found","value":{"errors":[{"name":"err_recommendation_not_found","title":"Recommendation not found","description":"The recommendation does not exist","solution":"Please make sure the recommendation exists","payload":{"recommendation_id":"0002bc79-b42f-461b-95d6-cf0a28ba87aa"}}]}}}}}},"errors_responses-error.BadRequest":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_validation_match":{"summary":"Validation Match","value":{"errors":[{"name":"err_validation_match","title":"Invalid Value","description":"Please make sure the value matches the regex","solution":"Please make sure the value matches the regex","payload":{"field":"name","regex":"^[a-z]([-a-z0-9]*[a-z0-9])?$","value":"my_secret"}}]}},"err_validation_length":{"summary":"Validation Length","value":{"errors":[{"name":"err_validation_length","title":"Unexpected length","description":"Field has unexpected length","solution":"Please make sure the field's length is within the stipulated bounds","payload":{"field":"name","maximum":64,"minimum":1,"value":"my-secret-passwordmy-secret-passwordmy-secret-passwordmy-secret-passwordmy-secret-passwordmy-secret-passwordmy-secret-passwordmy-secret-passwordmy-secret-passwordmy-secret-password"}}]}}}}}},"errors_responses-error.Conflict":{"description":"Conflict","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_secret_already_exists":{"summary":"Secret Already Exists","value":{"errors":[{"name":"err_secret_already_exists","title":"Secret already exists","description":"Secret conflicts with an already existing secret name","solution":"Please use a different secret name","payload":{"name":"name"}}]}}}}}},"errors_responses-error.NotFound":{"description":"Not Found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.Error"},"examples":{"err_secret_not_found":{"summary":"Secret Not Found","value":{"errors":[{"name":"err_secret_not_found","title":"Secret not found","description":"Secret not found","solution":"Please make sure the secret name corresponds to an existing secret","payload":{"secret_name":"name"}}]}}}}}},"error.BadRequestLegacy2":{"description":"Bad Request","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","description":"Array of dictionary objects detailing all errors that were found in the request data.","items":{"$ref":"#/components/schemas/responses.ErrorMessage"}}}}}}},"error.UnauthorizedLegacy2":{"description":"Unauthorized","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","description":"Array of dictionary objects detailing all errors that were found in the request data.","items":{"$ref":"#/components/schemas/responses.ErrorMessage"}}}}}}},"error.NotFoundLegacy2":{"description":"Not found","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","description":"Array of dictionary objects detailing all errors that were found in the request data.","items":{"$ref":"#/components/schemas/responses.ErrorMessage"}}}}}}},"error.ConflictLegacy2":{"description":"Conflict","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","description":"Array of dictionary objects detailing all errors that were found in the request data.","items":{"$ref":"#/components/schemas/responses.ErrorMessage"}}}}}}},"error.FailedDependencyLegacy2":{"description":"Failed Dependency","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","description":"Array of dictionary objects detailing all errors that were found in the request data.","items":{"$ref":"#/components/schemas/responses.ErrorMessage"}}}}}}},"error.InternalServerErrorLegacy2":{"description":"Internal Server Error","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","description":"Array of dictionary objects detailing all errors that were found in the request data.","items":{"$ref":"#/components/schemas/responses.ErrorMessage"}}}}}}},"error.BadRequestLegacy":{"description":"Bad Request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.ErrorLegacy"},"examples":{"bad-request":{"$ref":"#/components/examples/response.Error.CommonLegacy"}}}}},"error.UnauthorizedLegacy":{"description":"Unauthorized","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.ErrorLegacy"},"examples":{"unauthorized":{"$ref":"#/components/examples/response.Error.CommonLegacy"}}}}},"error.NotFoundLegacy":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/response.ErrorLegacy"},"examples":{"not-found":{"$ref":"#/components/examples/response.Error.CommonLegacy"}}}}},"error.NotAcceptableLegacy2":{"description":"Not Acceptable","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","description":"Array of dictionary objects detailing all errors that were found in the request data.","items":{"$ref":"#/components/schemas/responses.ErrorMessage"}}}}}}},"error.PreconditionFailedLegacy2":{"description":"Precondition Failed","content":{"application/json":{"schema":{"type":"object","properties":{"errors":{"type":"array","description":"Array of dictionary objects detailing all errors that were found in the request data.","items":{"$ref":"#/components/schemas/responses.ErrorMessage"}}}}}}}},"parameters":{"paginator.paginationType":{"name":"pagination_type","in":"query","description":"Method of pagination to use for return results where `total_items` is greater than `page_size`. `cursor` and `limits` will return one `page` of results, `stream` will return all results.","schema":{"type":"string","default":"cursor","enum":["limits","cursor","stream"]}},"paginator.pageSize":{"name":"page_size","in":"query","description":"Number of objects to be returned in each page. Page size can range between 1 and 10000 objects.","schema":{"type":"integer","default":20}},"paginator.page":{"name":"page","in":"query","description":"An integer for the wanted page of results. Used only with `pagination_type` set as `limits`.","schema":{"type":"integer"}},"paginator.next":{"name":"next","in":"query","description":"An alphanumeric string bookmark to indicate where to start for the next page. Used only with `pagination_type` set as `cursor`.","schema":{"type":"string"}},"paginator.previous":{"name":"previous","in":"query","description":"An alphanumeric string bookmark to indicate where to end for the previous page. Used only with `pagination_type` set as `cursor`.","schema":{"type":"string"}},"paginator.direction":{"name":"direction","in":"query","description":"Sorting order according to the `sort_by` parameter.","schema":{"type":"string","default":"asc","enum":["asc","desc"]}},"paginator.nulls":{"name":"nulls","in":"query","description":"Null ordering according to the `sort_by` parameter. Defaults to `first` for ascending order and `last` for descending order.","schema":{"type":"string","enum":["first","last"]}},"type.DataTagID":{"name":"datatag_id","in":"path","required":true,"example":"0002bc79-b42f-461b-95d6-cf0a28ba87aa","description":"UUID of the Data Tag.","schema":{"type":"string","format":"uuid"}},"type.TagName":{"name":"tag_name","in":"path","required":true,"example":"Valve Change","description":"Tag key `name`.","schema":{"type":"string","format":"^[a-zA-Z0-9]([-_ .a-zA-Z0-9]*[a-zA-Z0-9])?$","maxLength":64}}}}}
