Device Service API 1.0

Content type
OpenAPI specifications
Product line
Clearance
Version
1.0
Language
English
Applies to
Genetec Clearance

Device Service API 1.0

API to manage the configuration for various device.

{
  "openapi": "3.0.1",
  "info": {
    "title": "Device Service Internal API",
    "description": "API to manage the configuration for various device.",
    "termsOfService": "https://www.genetec.com/legal/cloudtos",
    "contact": {
      "url": "https://developer.clearance.network/",
      "email": "support@genetec.com"
    },
    "license": {
      "name": "Source Code License Agreement",
      "url": "https://www.genetec.com/legal/eula"
    },
    "version": "v1"
  },
  "servers": [
    {
      "url": "/api/v1"
    }
  ],
  "paths": {
    "/tenant/{tenantId}/configuration/negociate": {
      "post": {
        "tags": [
          "Configuration"
        ],
        "summary": "Negociate configuration for the specified device.",
        "operationId": "NegociateConfiguration",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/NegociateConfigurationRequestModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/NegociateConfigurationRequestModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/NegociateConfigurationRequestModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/NegociateConfigurationRequestModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/NegociateConfigurationResponseModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/NegociateConfigurationResponseModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/NegociateConfigurationResponseModel"
                }
              }
            }
          },
          "304": {
            "description": "Not Modified",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/configuration/commit": {
      "post": {
        "tags": [
          "Configuration"
        ],
        "summary": "Notify that the configuration was applied with success.",
        "operationId": "CommitConfiguration",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CommitConfigurationModel"
                  }
                ],
                "description": "The model to notify a configuration was correctly applied."
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CommitConfigurationModel"
                  }
                ],
                "description": "The model to notify a configuration was correctly applied."
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CommitConfigurationModel"
                  }
                ],
                "description": "The model to notify a configuration was correctly applied."
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CommitConfigurationModel"
                  }
                ],
                "description": "The model to notify a configuration was correctly applied."
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/configuration/reject": {
      "post": {
        "tags": [
          "Configuration"
        ],
        "summary": "Notify that the configuration couldnt be applied and indicate the reason.",
        "operationId": "RejectConfiguration",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RejectConfigurationModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RejectConfigurationModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RejectConfigurationModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/RejectConfigurationModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/credential": {
      "post": {
        "tags": [
          "Credential"
        ],
        "summary": "Retrieve the latest credentials for the specified device.",
        "operationId": "GetCredential",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/GetCredentialRequestModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/GetCredentialRequestModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/GetCredentialRequestModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/GetCredentialRequestModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/GetCredentialResponseModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetCredentialResponseModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetCredentialResponseModel"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/credential/failed": {
      "post": {
        "tags": [
          "Credential"
        ],
        "summary": "Notify that the credential were incorrect for the specified device.",
        "operationId": "NotifyCredentialFailure",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CredentialFailedNotificationModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CredentialFailedNotificationModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CredentialFailedNotificationModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CredentialFailedNotificationModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/credential/{manufacturer}/{model}/{serialnumber}/authorize": {
      "post": {
        "tags": [
          "Credential"
        ],
        "summary": "Called to validate if credentials are valid for the device.",
        "operationId": "Authorize",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "manufacturer",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "model",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serialnumber",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            },
            "application/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            },
            "text/json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            },
            "application/*+json": {
              "schema": {
                "type": "object",
                "additionalProperties": {
                  "type": "string"
                }
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/device": {
      "post": {
        "tags": [
          "Device"
        ],
        "summary": "Create a device.",
        "operationId": "CreateDevice",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateDeviceModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateDeviceModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateDeviceModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateDeviceModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/device/{deviceId}": {
      "get": {
        "tags": [
          "Device"
        ],
        "summary": "Retrieve a device by unique ID.",
        "operationId": "GetByDeviceId",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "description": "Device internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      },
      "patch": {
        "tags": [
          "Device"
        ],
        "summary": "Patch a device.",
        "operationId": "PatchDevice",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "description": "Device internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PatchDeviceModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PatchDeviceModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PatchDeviceModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/PatchDeviceModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "Device"
        ],
        "summary": "Update a device.",
        "operationId": "UpdateDevice",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "description": "Device internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateDeviceModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateDeviceModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateDeviceModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateDeviceModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/device/manufacturer/{manufacturer}/serialnumber/{serialNumber}/managementsettings": {
      "get": {
        "tags": [
          "Device"
        ],
        "summary": "Retrieve device management settings.",
        "operationId": "GetManagementSettingsByDeviceInformation",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "manufacturer",
            "in": "path",
            "description": "Manufacturer of the device",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serialNumber",
            "in": "path",
            "description": "Serial number of the device",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceManagementSettingsModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceManagementSettingsModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceManagementSettingsModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/device/manufacturer/{manufacturer}/serialnumber/{serialNumber}": {
      "get": {
        "tags": [
          "Device"
        ],
        "summary": "Retrieve a device by its identification information.",
        "operationId": "GetByDeviceInformation",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "manufacturer",
            "in": "path",
            "description": "Device manufacturer",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serialNumber",
            "in": "path",
            "description": "Device serial number",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/device/canmanage": {
      "get": {
        "tags": [
          "Device"
        ],
        "summary": "Check whether the current user can manage devices.",
        "operationId": "CanManageDevices",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/CanManageDevicesModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CanManageDevicesModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/CanManageDevicesModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/device/{deviceId}/activate": {
      "post": {
        "tags": [
          "Device"
        ],
        "summary": "Activate a device.",
        "operationId": "ActivateDevice",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "description": "Device internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/StatusCodeResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusCodeResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusCodeResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/device/{deviceId}/deactivate": {
      "post": {
        "tags": [
          "Device"
        ],
        "summary": "Deactivate a device.",
        "operationId": "DeactivateDevice",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "description": "Device internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/StatusCodeResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusCodeResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/StatusCodeResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/device/{deviceId}/delete": {
      "delete": {
        "tags": [
          "Device"
        ],
        "summary": "Delete a device.",
        "operationId": "DeleteDevice",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "description": "Device internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OkResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OkResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OkResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/device/{deviceId}/group/{deviceGroupId}": {
      "delete": {
        "tags": [
          "Device"
        ],
        "summary": "Remove the Device from its Device Group",
        "operationId": "DeleteGroupFromDevice",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "description": "Device internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceGroupId",
            "in": "path",
            "description": "Device group internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteDeviceFromGroupModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteDeviceFromGroupModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteDeviceFromGroupModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      },
      "post": {
        "tags": [
          "Device"
        ],
        "summary": "Add the Device to a Device Group",
        "operationId": "AddDeviceToGroup",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceId",
            "in": "path",
            "description": "Device internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "deviceGroupId",
            "in": "path",
            "description": "Device group internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OkResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OkResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OkResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/device/manufacturer/{manufacturer}/serialnumber/{serialNumber}/limitedinfo": {
      "get": {
        "tags": [
          "Device"
        ],
        "summary": "Get the limited device infos",
        "operationId": "GetLimitedDeviceInfo",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "manufacturer",
            "in": "path",
            "description": "Device manufacturer",
            "required": true,
            "schema": {
              "type": "string"
            }
          },
          {
            "name": "serialNumber",
            "in": "path",
            "description": "Device serial number",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/LimitedDeviceInfoModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LimitedDeviceInfoModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/LimitedDeviceInfoModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/devicegroups": {
      "post": {
        "tags": [
          "DeviceGroup"
        ],
        "summary": "Create a device group.",
        "operationId": "CreateDeviceGroup",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateDeviceGroupModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateDeviceGroupModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateDeviceGroupModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateDeviceGroupModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupModel"
                }
              }
            }
          },
          "201": {
            "description": "Created",
            "content": {
              "text/plain": {
                "schema": {
                  "type": "string"
                }
              },
              "application/json": {
                "schema": {
                  "type": "string"
                }
              },
              "text/json": {
                "schema": {
                  "type": "string"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "DeviceGroup"
        ],
        "summary": "List device groups for tenant.",
        "operationId": "GetDeviceGroups",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "model",
            "in": "query",
            "description": "",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupListModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupListModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupListModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant/{tenantId}/devicegroups/{deviceGroupId}": {
      "get": {
        "tags": [
          "DeviceGroup"
        ],
        "summary": "Retrieve a device group by unique ID.",
        "operationId": "GetByDeviceGroupId",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceGroupId",
            "in": "path",
            "description": "Device group internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      },
      "put": {
        "tags": [
          "DeviceGroup"
        ],
        "summary": "Update a device group.",
        "operationId": "UpdateDeviceGroup",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceGroupId",
            "in": "path",
            "description": "Device group internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateDeviceGroupModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateDeviceGroupModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateDeviceGroupModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateDeviceGroupModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeviceGroupModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      },
      "delete": {
        "tags": [
          "DeviceGroup"
        ],
        "summary": "Delete a device group.",
        "operationId": "DeleteDeviceGroup",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "deviceGroupId",
            "in": "path",
            "description": "Device group internal id",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/OkResult"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OkResult"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/OkResult"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/discovery": {
      "post": {
        "tags": [
          "Provisioning"
        ],
        "summary": "Dispatch a ServiceDiscovery event to TenantManager",
        "operationId": "DispatchDiscoveryRequest",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceDiscoveryEvent"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceDiscoveryEvent"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ServiceDiscoveryEvent"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        }
      }
    },
    "/tenant/{tenantId}/securitypolicies": {
      "put": {
        "tags": [
          "SecurityPolicies"
        ],
        "summary": "Update security policies.",
        "operationId": "UpdateSecurityPolicies",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "description": "Update security policies",
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/SecurityPoliciesModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/SecurityPoliciesModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/SecurityPoliciesModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/SecurityPoliciesModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityPoliciesModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityPoliciesModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityPoliciesModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      },
      "get": {
        "tags": [
          "SecurityPolicies"
        ],
        "summary": "Retrieve security policies.",
        "operationId": "GetSecurityPolicies",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          },
          {
            "name": "concurrencyId",
            "in": "query",
            "description": "Concurrency id corresponding to a specific security policies version to retrieve",
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityPoliciesModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityPoliciesModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/SecurityPoliciesModel"
                }
              }
            }
          },
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    },
    "/tenant": {
      "post": {
        "tags": [
          "Tenant"
        ],
        "summary": "Create a new tenant.",
        "operationId": "CreateTenant",
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateTenantModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateTenantModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateTenantModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/CreateTenantModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TenantModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        }
      }
    },
    "/tenant/{tenantId}": {
      "put": {
        "tags": [
          "Tenant"
        ],
        "summary": "Update a tenant.",
        "operationId": "UpdateTenant",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "requestBody": {
          "content": {
            "application/json-patch+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateTenantModel"
                  }
                ]
              }
            },
            "application/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateTenantModel"
                  }
                ]
              }
            },
            "text/json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateTenantModel"
                  }
                ]
              }
            },
            "application/*+json": {
              "schema": {
                "allOf": [
                  {
                    "$ref": "#/components/schemas/UpdateTenantModel"
                  }
                ]
              }
            }
          }
        },
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TenantModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        }
      },
      "get": {
        "tags": [
          "Tenant"
        ],
        "summary": "Get an existing tenant.",
        "operationId": "GetTenant",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "schema": {
              "type": "string"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/TenantModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/TenantModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        }
      }
    },
    "/tenant/{tenantId}/licensinginfo": {
      "get": {
        "tags": [
          "TenantInfo"
        ],
        "summary": "Gets the licensing info.",
        "operationId": "GetLicensingInfo",
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "description": "Tenant internal id.",
            "required": true,
            "schema": {
              "pattern": "^[a-z0-9]{1,20}$",
              "type": "string"
            }
          }
        ],
        "responses": {
          "400": {
            "description": "Bad Request",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/ExceptionModel"
                }
              }
            }
          },
          "200": {
            "description": "Success",
            "content": {
              "text/plain": {
                "schema": {
                  "$ref": "#/components/schemas/LicensingInfoModel"
                }
              },
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LicensingInfoModel"
                }
              },
              "text/json": {
                "schema": {
                  "$ref": "#/components/schemas/LicensingInfoModel"
                }
              }
            }
          },
          "401": {
            "description": "Unauthorized"
          },
          "403": {
            "description": "Forbidden"
          }
        },
        "security": [
          {
            "clearance-oauth2": [ ]
          }
        ]
      }
    }
  },
  "components": {
    "schemas": {
      "CanManageDevicesModel": {
        "type": "object",
        "properties": {
          "CanManageDevices": {
            "type": "boolean"
          }
        },
        "additionalProperties": false
      },
      "CommitConfigurationModel": {
        "required": [
          "DeviceId",
          "TransactionId"
        ],
        "type": "object",
        "properties": {
          "DeviceId": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceIdentificationModel"
              }
            ],
            "description": "The device identification."
          },
          "TransactionId": {
            "minLength": 1,
            "type": "string",
            "description": "The transaction Id of the configuration that was applied."
          }
        },
        "additionalProperties": false,
        "description": "The model to notify a configuration was correctly applied."
      },
      "CreateDeviceGroupModel": {
        "required": [
          "DeviceGroupName",
          "DeviceType",
          "Manufacturer",
          "Model"
        ],
        "type": "object",
        "properties": {
          "DeviceGroupName": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "The device group name."
          },
          "DeviceType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceType"
              }
            ],
            "description": "Type of assigned devices"
          },
          "Manufacturer": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "The manufacturer of assigned devices."
          },
          "Model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceModelType"
              }
            ],
            "description": "The model of assigned devices."
          }
        },
        "additionalProperties": false
      },
      "CreateDeviceModel": {
        "required": [
          "DeviceIdentification",
          "DeviceType"
        ],
        "type": "object",
        "properties": {
          "DeviceIdentification": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceIdentificationModel"
              }
            ],
            "description": "The device identification."
          },
          "DeviceType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceType"
              }
            ],
            "description": "Type of device."
          },
          "AuthenticationInfo": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Authentication information used to validate a device's indentity.\r\nValid for I-Pro: \r\n    <c>\r\n    {\r\n        \"username\": \"required\",\r\n        \"password\": \"required\"\r\n    }\r\n    </c>",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "CreateTenantModel": {
        "required": [
          "JsonWebKeys",
          "MainStorageConnectionString",
          "SubscriptionQuotas",
          "TenantId"
        ],
        "type": "object",
        "properties": {
          "TenantId": {
            "minLength": 1,
            "type": "string"
          },
          "MainStorageConnectionString": {
            "minLength": 1,
            "type": "string",
            "description": "Storage connection string to use for this tenant on this service."
          },
          "JsonWebKeys": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/JsonWebKey"
            },
            "description": "JSON Web Key used to encrypt entities"
          },
          "ManageDevicesSecurityPolicy": {
            "maxItems": 256,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrincipalModel"
            },
            "nullable": true
          },
          "SubscriptionQuotas": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SubscriptionQuotasModel"
              }
            ],
            "description": "Limit usage resource of a tenant"
          }
        },
        "additionalProperties": false
      },
      "CredentialFailedNotificationModel": {
        "required": [
          "Credentials",
          "DeviceId"
        ],
        "type": "object",
        "properties": {
          "DeviceId": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceIdentificationModel"
              }
            ],
            "description": "The device identification."
          },
          "Credentials": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/CredentialModel"
            },
            "description": "The crendial list that was tried."
          }
        },
        "additionalProperties": false
      },
      "CredentialModel": {
        "required": [
          "DeviceCredential"
        ],
        "type": "object",
        "properties": {
          "DeviceCredential": {
            "type": "string",
            "description": "The credential used to unlock the device for communication."
          }
        },
        "additionalProperties": false
      },
      "DeleteDeviceFromGroupModel": {
        "type": "object",
        "properties": {
          "ConcurrencyId": {
            "type": "string",
            "description": "The most recent concurrencyId after the removing the device from the group",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeviceConnectionStatus": {
        "enum": [
          "None",
          "Connected",
          "Disconnected",
          "Uploading"
        ],
        "type": "string"
      },
      "DeviceGroupListModel": {
        "type": "object",
        "properties": {
          "NumResults": {
            "type": "integer",
            "description": "Number of found device groups",
            "format": "int32"
          },
          "Results": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DeviceGroupModel"
            },
            "description": "List of the device groups",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeviceGroupModel": {
        "required": [
          "ConcurrencyId",
          "DeviceGroupId",
          "DeviceGroupName",
          "DeviceIds",
          "DeviceType",
          "Manufacturer",
          "Model"
        ],
        "type": "object",
        "properties": {
          "DeviceGroupId": {
            "minLength": 1,
            "type": "string",
            "description": "The device group identifier."
          },
          "DeviceGroupName": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "The device group name."
          },
          "DeviceIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The list of assigned devices."
          },
          "DeviceType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceType"
              }
            ],
            "description": "Type of assigned devices"
          },
          "Manufacturer": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "The manufacturer of assigned devices."
          },
          "Model": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceModelType"
              }
            ],
            "description": "The model of assigned devices."
          },
          "LastChangedUtc": {
            "type": "string",
            "description": "Last time the group was changed",
            "format": "date-time",
            "nullable": true
          },
          "FirmwareSettings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FirmwareGroupSettingsModel"
            },
            "description": "Firmware information about the device.",
            "nullable": true
          },
          "Settings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SettingsModel"
              }
            ],
            "description": "Settings information about the device",
            "nullable": true
          },
          "ConcurrencyId": {
            "minLength": 1,
            "type": "string",
            "description": "Used for version control. Needed to update an entity or to retrieve one of its a previous versions"
          }
        },
        "additionalProperties": false
      },
      "DeviceIdentificationModel": {
        "required": [
          "Manufacturer",
          "Model",
          "SerialNumber"
        ],
        "type": "object",
        "properties": {
          "SerialNumber": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string",
            "description": "The device serial number."
          },
          "Manufacturer": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "The name of the device manufacturer."
          },
          "Model": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "The device model name."
          },
          "CommonName": {
            "maxLength": 256,
            "type": "string",
            "description": "The device common name in the application.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeviceManagementSettingsModel": {
        "type": "object",
        "properties": {
          "DeviceId": {
            "type": "string",
            "description": "The device identifier.",
            "nullable": true
          },
          "FirmwareSettings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FirmwareInfoModel"
            },
            "description": "Firmware information about the device.",
            "nullable": true
          },
          "DeviceSettings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceSettingsInfoModel"
              }
            ],
            "description": "Device settings information",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeviceModel": {
        "required": [
          "ConcurrencyId"
        ],
        "type": "object",
        "properties": {
          "DeviceId": {
            "type": "string",
            "description": "The device identifier.",
            "nullable": true
          },
          "DeviceIdentification": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceIdentificationModel"
              }
            ],
            "description": "The device identification.",
            "nullable": true
          },
          "State": {
            "allOf": [
              {
                "$ref": "#/components/schemas/State"
              }
            ],
            "description": "Device activity status."
          },
          "DeviceType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceType"
              }
            ],
            "description": "Type of device."
          },
          "ConnectionStatus": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceConnectionStatus"
              }
            ],
            "description": "Connection status of device."
          },
          "LastConnectionStatusDateTime": {
            "type": "string",
            "description": "Last modified date of device.",
            "format": "date-time",
            "nullable": true
          },
          "AuthenticationInfo": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Authentication information used to validate a device's indentity.",
            "nullable": true
          },
          "DeviceGroupId": {
            "type": "string",
            "description": "Id of the device group the device belongs to if any",
            "nullable": true
          },
          "FirmwareSettings": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FirmwareDeviceSettingsModel"
            },
            "description": "Firmware information about the device.",
            "nullable": true
          },
          "DeviceSettings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceSettingsModel"
              }
            ],
            "description": "Device settings info",
            "nullable": true
          },
          "ConcurrencyId": {
            "minLength": 1,
            "type": "string",
            "description": "Used for version control. Needed to update an entity or to retrieve one of its a previous versions"
          }
        },
        "additionalProperties": false
      },
      "DeviceModelType": {
        "enum": [
          "None",
          "BWCmk3",
          "BWCmk4",
          "LegacyIF",
          "VPUmk3",
          "VPUmk4"
        ],
        "type": "string"
      },
      "DeviceSettingsInfoModel": {
        "type": "object",
        "properties": {
          "TargetVersion": {
            "type": "string",
            "description": "Device settings version that need to be updated.",
            "nullable": true
          },
          "LastTargetSettingsUpdateUtc": {
            "type": "string",
            "description": "Last time target settings was changed.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeviceSettingsModel": {
        "type": "object",
        "properties": {
          "LastUpdateUtc": {
            "type": "string",
            "description": "Last time status was changed.",
            "format": "date-time",
            "nullable": true
          },
          "LastSuccessfulUpdateUtc": {
            "type": "string",
            "description": "Last time current settings was changed successfully.",
            "format": "date-time",
            "nullable": true
          },
          "Status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UpdateStatus"
              }
            ],
            "description": "Status of the settings update."
          },
          "TargetVersion": {
            "type": "string",
            "description": "Device settings version that need to be updated.",
            "nullable": true
          },
          "LastTargetSettingsUpdateUtc": {
            "type": "string",
            "description": "Last time target settings was changed.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "DeviceType": {
        "enum": [
          "None",
          "BodyWornCamera",
          "LegacyGateway",
          "InCarSystem"
        ],
        "type": "string"
      },
      "ExceptionModel": {
        "type": "object",
        "properties": {
          "Type": {
            "allOf": [
              {
                "$ref": "#/components/schemas/ExceptionType"
              }
            ],
            "description": "Provides the type of exception"
          },
          "Code": {
            "type": "string",
            "nullable": true
          },
          "Data": {
            "nullable": true
          },
          "Message": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false,
        "description": "Data class for the Exception model"
      },
      "ExceptionType": {
        "enum": [
          "BusinessException",
          "ModelValidatorException"
        ],
        "type": "string",
        "description": "Provides the type of exception"
      },
      "FirmwareDeviceSettingsModel": {
        "type": "object",
        "properties": {
          "CurrentVersion": {
            "type": "string",
            "description": "Actual firmware version.",
            "nullable": true
          },
          "LastSuccessfulUpdateUtc": {
            "type": "string",
            "description": "Last time current firmware was changed successfully.",
            "format": "date-time",
            "nullable": true
          },
          "Status": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UpdateStatus"
              }
            ],
            "description": "Status of the firmware update."
          },
          "LastUpdateUtc": {
            "type": "string",
            "description": "Last time status was changed.",
            "format": "date-time",
            "nullable": true
          },
          "TargetVersion": {
            "type": "string",
            "description": "Firmware version that need to be updated.",
            "nullable": true
          },
          "LastTargetFirmwareUpdateUtc": {
            "type": "string",
            "description": "Last time target firmware was changed.",
            "format": "date-time",
            "nullable": true
          },
          "Model": {
            "type": "string",
            "description": "Device Model.",
            "nullable": true
          },
          "DeviceType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FirmwareDeviceType"
              }
            ],
            "description": "Device Type."
          },
          "FirmwareType": {
            "type": "string",
            "description": "Firmware Type.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "FirmwareDeviceType": {
        "enum": [
          "None",
          "BodyWornCamera",
          "InCarSystem",
          "InCarCamera"
        ],
        "type": "string"
      },
      "FirmwareGroupSettingsModel": {
        "type": "object",
        "properties": {
          "TargetVersion": {
            "type": "string",
            "description": "Firmware version that need to be updated.",
            "nullable": true
          },
          "LastTargetFirmwareUpdateUtc": {
            "type": "string",
            "description": "Last time target firmware was changed.",
            "format": "date-time",
            "nullable": true
          },
          "Model": {
            "type": "string",
            "description": "Device Model.",
            "nullable": true
          },
          "DeviceType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FirmwareDeviceType"
              }
            ],
            "description": "Device Type."
          },
          "FirmwareType": {
            "type": "string",
            "description": "Firmware Type.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "FirmwareInfoModel": {
        "type": "object",
        "properties": {
          "TargetVersion": {
            "type": "string",
            "description": "Firmware version that need to be updated.",
            "nullable": true
          },
          "LastTargetFirmwareUpdateUtc": {
            "type": "string",
            "description": "Last time target firmware was changed.",
            "format": "date-time",
            "nullable": true
          },
          "Model": {
            "type": "string",
            "description": "Camera Model.",
            "nullable": true
          },
          "DeviceType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FirmwareDeviceType"
              }
            ],
            "description": "Device Type."
          },
          "FirmwareType": {
            "type": "string",
            "description": "Firmware Type.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "GetCredentialRequestModel": {
        "required": [
          "DeviceId"
        ],
        "type": "object",
        "properties": {
          "DeviceId": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceIdentificationModel"
              }
            ],
            "description": "The device identification."
          },
          "DeviceType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceType"
              }
            ],
            "description": "Type of device."
          }
        },
        "additionalProperties": false
      },
      "GetCredentialResponseModel": {
        "required": [
          "Credentials"
        ],
        "type": "object",
        "properties": {
          "Credentials": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OrderedCredentialModel"
            },
            "description": "The list of credential that should be tried on the device. Multiple item will be provided in this list when pending configuration transaction exist."
          }
        },
        "additionalProperties": false
      },
      "JsonWebKey": {
        "type": "object",
        "properties": {
          "k": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "kid": {
            "type": "string",
            "nullable": true
          },
          "kty": {
            "allOf": [
              {
                "$ref": "#/components/schemas/JsonWebKeyType"
              }
            ],
            "nullable": true
          },
          "use": {
            "allOf": [
              {
                "$ref": "#/components/schemas/JsonWebKeyUse"
              }
            ],
            "nullable": true
          },
          "n": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "e": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "x5t": {
            "type": "string",
            "nullable": true
          },
          "d": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "p": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "q": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "dp": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "dq": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "qi": {
            "type": "string",
            "format": "byte",
            "nullable": true
          },
          "nbf": {
            "type": "string",
            "format": "date-time"
          },
          "exp": {
            "type": "string",
            "format": "date-time"
          }
        },
        "additionalProperties": false
      },
      "JsonWebKeyType": {
        "enum": [
          "None",
          "OctetSequence",
          "EllipticCurve",
          "RSA"
        ],
        "type": "string"
      },
      "JsonWebKeyUse": {
        "enum": [
          "None",
          "Signature",
          "Encryption"
        ],
        "type": "string"
      },
      "LicensingInfoModel": {
        "type": "object",
        "properties": {
          "TenantId": {
            "type": "string",
            "nullable": true
          },
          "NumberOfActiveDevices": {
            "type": "integer",
            "format": "int32"
          },
          "SubscriptionQuotas": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SubscriptionQuotasModel"
              }
            ],
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "LimitedDeviceInfoModel": {
        "type": "object",
        "properties": {
          "DeviceId": {
            "type": "string",
            "nullable": true
          },
          "Manufacturer": {
            "type": "string",
            "nullable": true
          },
          "SerialNumber": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "NegociateConfigurationRequestModel": {
        "required": [
          "Credential",
          "DeviceId"
        ],
        "type": "object",
        "properties": {
          "DeviceId": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceIdentificationModel"
              }
            ],
            "description": "The device identification."
          },
          "DeviceType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceType"
              }
            ],
            "description": "Type of device."
          },
          "Capabilities": {
            "description": "A complex object used as a key value for each capability.",
            "nullable": true
          },
          "Configuration": {
            "description": "A complex object used as a key value for each configuration currently on the device.",
            "nullable": true
          },
          "Credential": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CredentialModel"
              }
            ],
            "description": "The device credential information currently used on the device."
          }
        },
        "additionalProperties": false
      },
      "NegociateConfigurationResponseModel": {
        "required": [
          "TransactionId"
        ],
        "type": "object",
        "properties": {
          "TransactionId": {
            "minLength": 1,
            "type": "string",
            "description": "The transaction Id for the configuration to be commited."
          },
          "Configuration": {
            "description": "A complex object used as a key value for each configuration that should be commited to the device.",
            "nullable": true
          },
          "Credential": {
            "allOf": [
              {
                "$ref": "#/components/schemas/CredentialModel"
              }
            ],
            "description": "The device credential information that should be commited to the device.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "OkResult": {
        "type": "object",
        "properties": {
          "StatusCode": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "OrderedCredentialModel": {
        "required": [
          "DeviceCredential",
          "Order"
        ],
        "type": "object",
        "properties": {
          "Order": {
            "type": "integer",
            "description": "The order in which the credential should be tried.",
            "format": "int32"
          },
          "DeviceCredential": {
            "type": "string",
            "description": "The credential used to unlock the device for communication."
          }
        },
        "additionalProperties": false
      },
      "PatchDeviceModel": {
        "required": [
          "ConcurrencyId"
        ],
        "type": "object",
        "properties": {
          "CommonName": {
            "maxLength": 256,
            "type": "string",
            "description": "The device common name in the application.",
            "nullable": true
          },
          "AuthenticationInfo": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Authentication information used to validate a device's identity.\r\nValid for I-Pro: \r\n    <c>\r\n    {\r\n        \"username\": \"required\",\r\n        \"password\": \"required\"\r\n    }\r\n    </c>",
            "nullable": true
          },
          "DeviceGroupId": {
            "type": "string",
            "description": "",
            "nullable": true
          },
          "TargetFirmwareUpdate": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UpdateFirmwareSettingsModel"
            },
            "description": "Firmware information to be updated",
            "nullable": true
          },
          "TargetDeviceSettings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/UpdateDeviceSettingsModel"
              }
            ],
            "description": "Device Settings info to be updated",
            "nullable": true
          },
          "ConcurrencyId": {
            "minLength": 1,
            "type": "string",
            "description": "Used for version control. Needed to update an entity or to retrieve one of its a previous versions"
          }
        },
        "additionalProperties": false
      },
      "PrincipalModel": {
        "required": [
          "KId",
          "PrincipalId",
          "PrincipalType"
        ],
        "type": "object",
        "properties": {
          "KId": {
            "maxLength": 1024,
            "minLength": 1,
            "type": "string",
            "description": "Principal's KId"
          },
          "Username": {
            "maxLength": 512,
            "type": "string",
            "description": "Principal's username, if applicable",
            "nullable": true
          },
          "PrincipalId": {
            "minLength": 1,
            "type": "string",
            "description": "Principal's internal id"
          },
          "PrincipalType": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "Principal's internal type"
          }
        },
        "additionalProperties": false
      },
      "RejectConfigurationModel": {
        "required": [
          "DeviceId",
          "ReasonCode",
          "TransactionId"
        ],
        "type": "object",
        "properties": {
          "DeviceId": {
            "allOf": [
              {
                "$ref": "#/components/schemas/DeviceIdentificationModel"
              }
            ],
            "description": "The device identification."
          },
          "TransactionId": {
            "minLength": 1,
            "type": "string",
            "description": "The transaction Id of the configuration that was not applied. Obtained during the configuration negociation."
          },
          "ReasonCode": {
            "maxLength": 50,
            "minLength": 1,
            "type": "string",
            "description": "A code to identify the source of the error while applying the configuration transaction."
          },
          "ReasonMessage": {
            "maxLength": 512,
            "type": "string",
            "description": "A message that describe in english the source of the error while applying the configuration transaction. This is optional.",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SecurityPoliciesModel": {
        "required": [
          "ConcurrencyId"
        ],
        "type": "object",
        "properties": {
          "ManageDevicesSecurityPolicy": {
            "maxItems": 256,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PrincipalModel"
            },
            "nullable": true
          },
          "ConcurrencyId": {
            "minLength": 1,
            "type": "string",
            "description": "Used for version control. Needed to update an entity or to retrieve one of its a previous versions"
          }
        },
        "additionalProperties": false
      },
      "ServiceDiscoveryEvent": {
        "type": "object",
        "properties": {
          "ServiceFeatures": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceFeatureObject"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ServiceFeatureDependencyObject": {
        "type": "object",
        "properties": {
          "ServiceId": {
            "type": "string",
            "nullable": true
          },
          "FeatureId": {
            "type": "string",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "ServiceFeatureObject": {
        "type": "object",
        "properties": {
          "ServiceId": {
            "type": "string",
            "nullable": true
          },
          "FeatureId": {
            "type": "string",
            "nullable": true
          },
          "Dependencies": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ServiceFeatureDependencyObject"
            },
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "SettingsModel": {
        "type": "object",
        "properties": {
          "TargetVersion": {
            "type": "string",
            "description": "Device settings version that need to be updated.",
            "nullable": true
          },
          "LastTargetSettingsUpdateUtc": {
            "type": "string",
            "description": "Last time target settings was changed.",
            "format": "date-time",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "State": {
        "enum": [
          "None",
          "New",
          "Active",
          "Inactive",
          "Available"
        ],
        "type": "string"
      },
      "StatusCodeResult": {
        "type": "object",
        "properties": {
          "StatusCode": {
            "type": "integer",
            "format": "int32"
          }
        },
        "additionalProperties": false
      },
      "SubscriptionQuotasModel": {
        "required": [
          "AllowOverageCamera",
          "NumberOfCameras"
        ],
        "type": "object",
        "properties": {
          "NumberOfCameras": {
            "maximum": 2147483647,
            "minimum": 0,
            "type": "integer",
            "description": "Maximum number of cameras that a tenant can have on his system. Minimum is 0 and Maximum is int.MaxValue.",
            "format": "int32"
          },
          "AllowOverageCamera": {
            "type": "boolean",
            "description": "Allow to exceed the limit of cameras."
          }
        },
        "additionalProperties": false
      },
      "TenantModel": {
        "required": [
          "ConcurrencyId"
        ],
        "type": "object",
        "properties": {
          "TenantId": {
            "type": "string",
            "nullable": true
          },
          "NumberOfActiveDevices": {
            "type": "integer",
            "format": "int32"
          },
          "SubscriptionQuotas": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SubscriptionQuotasModel"
              }
            ],
            "nullable": true
          },
          "ConcurrencyId": {
            "minLength": 1,
            "type": "string",
            "description": "Used for version control. Needed to update an entity or to retrieve one of its a previous versions"
          }
        },
        "additionalProperties": false
      },
      "UpdateDeviceGroupModel": {
        "required": [
          "ConcurrencyId"
        ],
        "type": "object",
        "properties": {
          "DeviceIds": {
            "type": "array",
            "items": {
              "type": "string"
            },
            "description": "The list of assigned devices.",
            "nullable": true
          },
          "DeviceGroupName": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "Name of device group",
            "nullable": true
          },
          "FirmwareSettings": {
            "minItems": 1,
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FirmwareGroupSettingsModel"
            },
            "description": "firmware for the assigned devices",
            "nullable": true
          },
          "Settings": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SettingsModel"
              }
            ],
            "description": "Settings for the assigned devices",
            "nullable": true
          },
          "ConcurrencyId": {
            "minLength": 1,
            "type": "string",
            "description": "Used for version control. Needed to update an entity or to retrieve one of its a previous versions"
          }
        },
        "additionalProperties": false
      },
      "UpdateDeviceModel": {
        "required": [
          "ConcurrencyId"
        ],
        "type": "object",
        "properties": {
          "CommonName": {
            "maxLength": 256,
            "type": "string",
            "description": "The device common name in the application.",
            "nullable": true
          },
          "AuthenticationInfo": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            },
            "description": "Authentication information used to validate a device's indentity.\r\nValid for I-Pro: \r\n    <c>\r\n    {\r\n        \"username\": \"required\",\r\n        \"password\": \"required\"\r\n    }\r\n    </c>",
            "nullable": true
          },
          "ConcurrencyId": {
            "minLength": 1,
            "type": "string",
            "description": "Used for version control. Needed to update an entity or to retrieve one of its a previous versions"
          }
        },
        "additionalProperties": false
      },
      "UpdateDeviceSettingsModel": {
        "type": "object",
        "properties": {
          "TargetVersion": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "Device settings version that needs to be updated",
            "nullable": true
          }
        },
        "additionalProperties": false
      },
      "UpdateFirmwareSettingsModel": {
        "required": [
          "DeviceType",
          "Model"
        ],
        "type": "object",
        "properties": {
          "TargetVersion": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "Firmware version that need to be updated.",
            "nullable": true
          },
          "Model": {
            "maxLength": 256,
            "minLength": 1,
            "type": "string",
            "description": "Camera Model."
          },
          "FirmwareType": {
            "type": "string",
            "description": "Firmware Type.",
            "nullable": true
          },
          "DeviceType": {
            "allOf": [
              {
                "$ref": "#/components/schemas/FirmwareDeviceType"
              }
            ],
            "description": "Device Type."
          }
        },
        "additionalProperties": false
      },
      "UpdateStatus": {
        "enum": [
          "None",
          "Pending",
          "Updating",
          "Success",
          "Error",
          "CameraNotFound",
          "Dispatched",
          "Received"
        ],
        "type": "string"
      },
      "UpdateTenantModel": {
        "required": [
          "ConcurrencyId",
          "SubscriptionQuotas"
        ],
        "type": "object",
        "properties": {
          "SubscriptionQuotas": {
            "allOf": [
              {
                "$ref": "#/components/schemas/SubscriptionQuotasModel"
              }
            ],
            "description": "Limit usage resource of a tenant."
          },
          "ConcurrencyId": {
            "minLength": 1,
            "type": "string",
            "description": "Used for version control. Needed to update an entity or to retrieve one of its a previous versions"
          }
        },
        "additionalProperties": false
      }
    },
    "securitySchemes": {
      "clearance-oauth2": {
        "type": "oauth2",
        "flows": {
          "implicit": {
            "authorizationUrl": "https://clearance-a-sts.geneteccloud.com/connect/authorize",
            "scopes": {
              "api": "api"
            }
          }
        }
      }
    }
  },
  "security": [
    {
      "clearance-oauth2": [
        "api"
      ]
    }
  ]
}