{
  "swagger": "2.0",
  "host": "api.analytics.accedian.io",
  "info": {
    "title": "Skylight Analytics API documentation",
    "version": "2021.03.0",
    "contact": {
      "email": "the.team@accedian.com"
    },
    "description": "Here is Skylight Analytics's API documentation.\n# Introduction\nThis API is documented in **Open API format v2**. You can download the full API spec above, and use it with\ncompatible code generators to generate the client stubs.\n# Quick setup\n(Almost) every endpoint require a [valid user authentication](/#tag/AuthService), so this is probably where you should start.\nDepending on the access rights associated with your account, some endpoints may not be authorized. When such restriction exists,\nthe API documentation will outline which acess rights are required to access or modify a given resource.\n## Authenticate to obtain an Authorized Token\nYou must optain an `Authorization Bearer` (for subsequent API calls) or a set-cookie, for browser related calls. Both \nof these can be obtained by the [auth/login](/#tag/AuthService) endpoint.\n```bash\ncurl -X POST \\\n   https://tenant-url.npav.accedian.net/api/v1/auth/login \\\n   -H 'Cache-Control: no-cache' \\\n   -H 'Content-Type: application/x-www-form-urlencoded' \\\n   -d 'username=tenantUsername&password=tenantUserPassword'\n```\n> Pro-tip: Replace \"tenant-url\" by your tenant name\nThe response will contained an authorized header and a set-cookie header\n```bash\nHTTP/2 200\ncontent-type: application/vnd.api+json\ncontent-length: 208\nauthorization: Bearer MTUzNTAyNDg[...]\nset-cookie: skylight-aaa=MTUzNTAyNDg[...]\n{\n  \"data\": {\n    \"attributes\":{\n      \"emailAddress\":\"tenantUsername\",\n      \"isPasswordSet\":true,\n      \"isRegisteredForEmail\":false,\n      \"name\":\"tenantName\",\n      \"roles\":[\"tenant-role\"],\n      \"tenants\":[\"tenantName\"]},\n      \"id\":\"1\",\n      \"type\":\"users\"\n      }\n}\n```\n## Making an authorized API request - (RAW metrics API query)\nOnce you have optained an `Authorization bearer` token, you can make a query to retrieve [RAW metrics](/#operation/GetRawMetrics). \n```bash\ncurl -X POST https://accedian-dh2.npav.accedian.net/api/v2/raw-metrics \\\n  -d \"\\\n    {'tenantId':'tenant12345',\\\n     'interval':'2018-08-08T11%3A12%3A53-04%3A00%2F2018-08-09T11%3A12%3A53-04%3A00',\\\n     'granularity':'PT78.545S',\\\n     'meta':{'colors':['orange']},\\\n     'timeout':30000,\\\n     'metrics':['jitterP95'],\\\n     'directions':['0','1','2'],\\\n     'objectType':'twamp-sf'\\\n    }\" -H 'Cache-Control: no-cache' -H 'Authorization:  MTUzNTAyNDg[...]'\n``` \n"
  },
  "basePath": "/api",
  "schemes": [
    "https"
  ],
  "consumes": [
    "application/json",
    "application/vnd.api+json"
  ],
  "produces": [
    "application/json",
    "application/vnd.api+json"
  ],
  "paths": {
    "/openid-configuration/{clientName}": {
      "get": {
        "operationId": "OpenIDConfiguration",
        "responses": {
          "200": {
            "description": "Returns the proxy configuration for the external OP",
            "schema": {
              "$ref": "#/definitions/OIDConfig"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "clientName",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "The name of the openID provider we're trying to access"
          }
        ],
        "tags": [
          "OpenID"
        ]
      }
    },
    "/openid-token/{clientName}": {
      "post": {
        "operationId": "OpenIDToken",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Returns the oidc token",
            "headers": {
              "Content-Type": {
                "type": "string",
                "default": "application/json"
              }
            },
            "schema": {
              "$ref": "#/definitions/OIDToken"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "grant_type",
            "in": "formData",
            "required": true,
            "default": "authorization_code",
            "type": "string",
            "enum": [
              "authorization_code"
            ]
          },
          {
            "name": "code",
            "in": "formData",
            "required": true,
            "type": "string"
          },
          {
            "name": "client_id",
            "in": "formData",
            "required": true,
            "type": "string"
          },
          {
            "name": "client_secret",
            "in": "formData",
            "required": true,
            "type": "string"
          },
          {
            "name": "clientName",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "The name of the openID provider we're trying to access"
          }
        ],
        "tags": [
          "OpenID"
        ]
      }
    },
    "/openid-auth": {
      "get": {
        "operationId": "OpenIDAuth",
        "responses": {
          "302": {
            "description": "Redirects",
            "headers": {
              "Location": {
                "type": "string"
              }
            }
          }
        },
        "parameters": [
          {
            "name": "client_id",
            "in": "query",
            "description": "Our client ID which is registered in the OP",
            "required": true,
            "type": "string"
          },
          {
            "name": "redirect_uri",
            "in": "query",
            "description": "URI of where the OP will redirect upon successful authentication",
            "required": true,
            "type": "string"
          },
          {
            "name": "response_type",
            "in": "query",
            "description": "What we are requesting from the OP",
            "required": true,
            "type": "string",
            "default": "code"
          },
          {
            "name": "state",
            "in": "query",
            "description": "Value that has to match between OIDC requests",
            "required": true,
            "type": "string"
          },
          {
            "name": "delegatedclientid",
            "in": "query",
            "type": "string"
          },
          {
            "name": "scope",
            "in": "query",
            "description": "scope of the OIDC request",
            "required": true,
            "type": "string",
            "default": "openid"
          }
        ],
        "tags": [
          "OpenID"
        ]
      }
    },
    "/saml-redirect": {
      "get": {
        "operationId": "SamlRedirect",
        "parameters": [
          {
            "name": "clientName",
            "in": "query",
            "required": true,
            "type": "string",
            "description": "The name of the SAML client we'll be delegating auth to"
          }
        ],
        "responses": {
          "302": {
            "description": "Redirects",
            "headers": {
              "Location": {
                "type": "string"
              }
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "SAML"
        ]
      }
    },
    "/saml-callback": {
      "post": {
        "operationId": "SamlCallback",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json"
        ],
        "parameters": [
          {
            "name": "SAMLResponse",
            "in": "formData",
            "required": true,
            "type": "string"
          },
          {
            "name": "RelayState",
            "in": "formData",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "302": {
            "description": "Redirects to login page",
            "headers": {
              "Location": {
                "type": "string"
              }
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "SAML"
        ]
      }
    },
    "/saml-metadata/{clientName}": {
      "get": {
        "operationId": "SamlSpMetadata",
        "produces": [
          "text/plain"
        ],
        "responses": {
          "200": {
            "description": "Returns the SAML service provider metadata ",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "clientName",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "The name of the SAML provider we're trying to access"
          }
        ],
        "tags": [
          "SAML"
        ]
      }
    },
    "/v1/grant": {
      "post": {
        "summary": "Create a Granting Ticket used to obtain Service Tickets",
        "operationId": "CreateGrantingTicket",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "text/plain"
        ],
        "responses": {
          "201": {
            "description": "Returns the Granting Ticket URL",
            "schema": {
              "type": "string"
            }
          },
          "401": {
            "description": "Unauthorized access attempt",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "username",
            "in": "formData",
            "description": "Unique identifier of the User requesting access",
            "required": true,
            "type": "string"
          },
          {
            "name": "password",
            "in": "formData",
            "description": "Password for the username of the User requesting access",
            "required": true,
            "type": "string"
          },
          {
            "name": "service",
            "in": "formData",
            "description": "URL of the granting service.",
            "required": true,
            "type": "string",
            "default": "https://cas.local/aastubs/",
            "enum": [
              "https://cas.local/aastubs/"
            ]
          }
        ],
        "tags": [
          "TicketService"
        ]
      }
    },
    "/v1/service": {
      "post": {
        "summary": "Obtain a Service Ticket used to access a particular resource",
        "operationId": "CreateServiceTicket",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "text/plain"
        ],
        "responses": {
          "200": {
            "description": "Returns the Service Ticket value",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The Granting ticket was not found/is no longer valid",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "grantingTicket",
            "in": "formData",
            "description": "The URL Granting ticket used to obtain the Service Ticket",
            "required": true,
            "type": "string"
          },
          {
            "name": "service",
            "in": "formData",
            "description": "URL of the granting service.",
            "required": true,
            "type": "string",
            "default": "https://cas.local/aastubs/",
            "enum": [
              "https://cas.local/aastubs/"
            ]
          }
        ],
        "tags": [
          "TicketService"
        ]
      }
    },
    "/v1/validate": {
      "post": {
        "summary": "Validate a Service Ticket used to access a particular resource",
        "operationId": "ValidateServiceTicket",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "Returns the result of the Service Ticket validation",
            "schema": {
              "$ref": "#/definitions/ValidationResponse"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "ticket",
            "in": "query",
            "description": "The Service Ticket to be validated.",
            "required": true,
            "type": "string"
          },
          {
            "name": "service",
            "in": "query",
            "description": "URL of the granting service.",
            "required": true,
            "type": "string",
            "default": "https://cas.local/aastubs/",
            "enum": [
              "https://cas.local/aastubs/"
            ]
          },
          {
            "name": "format",
            "in": "query",
            "description": "The format of the validation response body.",
            "required": true,
            "type": "string",
            "default": "JSON",
            "enum": [
              "JSON"
            ]
          }
        ],
        "tags": [
          "TicketService"
        ]
      }
    },
    "/v1/auth/users": {
      "post": {
        "summary": "Create a new User in Skylight AAA",
        "operationId": "CreateUser",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "User was successfully created in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "400": {
            "description": "Bad request",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Tenat, user group or role not found",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Attempt to provision a User that is already provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "get": {
        "summary": "Retrieve a list of Users known to Skylight AAA",
        "operationId": "GetAllUsers",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns a list of known Users to Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUserList"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Users provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/users/{userId}": {
      "put": {
        "summary": "Update an existing User in Skylight AAA. Does not update User email or Password.",
        "operationId": "UpdateUser",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "User was successfully updated in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Attempt to update user but the user does not exist",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the User to be updated."
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "patch": {
        "summary": "Update properties of an existing User in Skylight AAA. Does not update User email or Password.",
        "operationId": "UpdateUserProperties",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "User was successfully updated in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "400": {
            "description": "Attempt to update user but there is something wrong with the request data",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Attempt to update user but the user does not exist",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the User to be updated."
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "get": {
        "summary": "Retrieve a single User by its known Id.",
        "operationId": "GetUser",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns a known User to Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the User to be returned."
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "delete": {
        "summary": "Delete a single User by its known Id.",
        "operationId": "DeleteUser",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns the now deleted User from Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the User to be deleted."
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/users/{userId}/password": {
      "patch": {
        "summary": "Reset a pasword for a User provisioned in Skylight AAA.",
        "operationId": "ResetPassword",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "text/plain"
        ],
        "responses": {
          "200": {
            "description": "Returns the onboarding URL for the user",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the User to reset the password."
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/users/{userId}/email": {
      "patch": {
        "summary": "Change the email address of a User provisioned in Skylight AAA.",
        "operationId": "ChangeEmailAddress",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "text/plain"
        ],
        "responses": {
          "200": {
            "description": "The email address of the user has been changed",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "userId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the User which is changing email address"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/EmailChangeRequest"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/me": {
      "patch": {
        "summary": "Update properties of the currently authenticated User in Skylight AAA. Does not update User email or Password.",
        "operationId": "UpdateAuthenticatedUserProperties",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "User was successfully updated in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "400": {
            "description": "Attempt to update user but there is something wrong with the request data",
            "schema": {
              "type": "string"
            }
          },
          "401": {
            "description": "Attempt to update user but there is something wrong with the authentication parameters",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Attempt to update user but operation is not allowed on resource",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Attempt to update user but the user does not exist",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "get": {
        "summary": "Retrieve the currently Authenticated User.",
        "operationId": "GetAuthenticatedUser",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns the currently Authenticated User",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "401": {
            "description": "Attempt to fetch a user but there is something wrong with the authentication parameters",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AuthService"
        ]
      },
      "delete": {
        "summary": "Delete the currently Authenticated User.",
        "operationId": "DeleteAuthenticatedUser",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns the now deleted User from Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "401": {
            "description": "Attempt to delete a user but there is something wrong with the authentication parameters",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/me/password": {
      "patch": {
        "summary": "Updates the password of the currently Authenticated User.",
        "operationId": "UpdateAuthenticatedUserPassword",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "text/plain"
        ],
        "responses": {
          "200": {
            "description": "Password was successfully updated",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Attempt to update user but there is something wrong with the request data",
            "schema": {
              "type": "string"
            }
          },
          "401": {
            "description": "Attempt to update user password but there is an error evaluating the authentication token",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Attempt to update user but the user does not exist",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PasswordChangeRequest"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/me/email": {
      "patch": {
        "summary": "Change the email address of the currently Authenticated User.",
        "operationId": "ChangeAuthenticatedUserEmailAddress",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "text/plain"
        ],
        "responses": {
          "200": {
            "description": "The email address of the Authenticated User has been changed",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Attempt to update user email address but there is something wrong with the request data",
            "schema": {
              "type": "string"
            }
          },
          "401": {
            "description": "Attempt to update user email address but there is an error evaluating the authentication token",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/EmailChangeRequest"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/onboarding/{onboardingToken}": {
      "get": {
        "summary": "Retrieve the User mapped to the onboarding token.",
        "operationId": "GetUserByToken",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns the User mapped to the onboarding token",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "404": {
            "description": "User not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "onboardingToken",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "The one-time use token provided to access the password set operation"
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/onboarding/password": {
      "post": {
        "summary": "Sets the password of a User that has had their password reset.",
        "operationId": "SetUserPassword",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "text/plain"
        ],
        "responses": {
          "200": {
            "description": "The password has been set",
            "schema": {
              "type": "string"
            }
          },
          "400": {
            "description": "Attempt to update password, but the request has bad data",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Attempt to update password, but the user no longer exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SetPasswordRequest"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/login": {
      "post": {
        "summary": "Login a Skylight User",
        "operationId": "Login",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns the Authenticated User",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "401": {
            "description": "Unauthorized access attempt",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "User not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "username",
            "in": "formData",
            "description": "Unique identifier of the User requesting access",
            "type": "string"
          },
          {
            "name": "password",
            "in": "formData",
            "description": "Password for the username of the User requesting access",
            "type": "string"
          },
          {
            "name": "token",
            "in": "formData",
            "description": "Signed JWT issues by Accedian. Can be used instead of username/password",
            "type": "string"
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/logout": {
      "post": {
        "summary": "Logout a Skylight User",
        "operationId": "Logout",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Successfully logged out a Skylight User",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Session not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/session": {
      "get": {
        "summary": "Validate an active Skylight Session and return User data",
        "operationId": "Validate",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns the Authenticated User",
            "schema": {
              "$ref": "#/definitions/JsonApiAAAUser"
            }
          },
          "401": {
            "description": "Session not Authorized",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Session not Valid",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/validate": {
      "get": {
        "summary": "Validate an active Skylight Session. Sets headers for proxy requests to have access to user data.",
        "operationId": "ValidateSessionForProxy",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "text/plain"
        ],
        "responses": {
          "200": {
            "description": "Sets Headers X-Forwarded-User-Id, X-Forwarded-User-Username, X-Forwarded-Usergroups, and X-Forwarded-User-Roles which contain the Id, Username, and Role respectively of the User for the valid session",
            "schema": {
              "type": "string"
            },
            "headers": {
              "X-Forwarded-User-Id": {
                "type": "string",
                "description": "Unique identifier of the User in Skylight AAA."
              },
              "X-Forwarded-User-Username": {
                "type": "string",
                "description": "The Username of the User in Skylight-AAA."
              },
              "X-Forwarded-User-Roles": {
                "type": "string",
                "description": "The Roles associated with this User in Skylight-AAA."
              },
              "X-Forwarded-Usergroups": {
                "type": "string",
                "description": "The Usergroups associated with this User in Skylight-AAA."
              },
              "X-Forwarded-Tenant-Id": {
                "type": "string",
                "description": "The TenantId associated with this request in Skylight-AAA."
              },
              "X-Forwarded-JWT": {
                "type": "string",
                "description": "The JWT associated with the user session"
              }
            }
          },
          "401": {
            "description": "Session not Authorized",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Session not Valid",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/service": {
      "post": {
        "summary": "Create a new Service in Skylight AAA. This function is only available to Skylight Admin users.",
        "operationId": "CreateService",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "text/plain"
        ],
        "responses": {
          "201": {
            "description": "Service was successfully created in Skylight AAA",
            "schema": {
              "type": "string"
            }
          },
          "401": {
            "description": "User creating the Service is not Authorized to do so",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "User does not have authorization to perform this operation",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Attempt to provision a Service that is already provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "serviceName",
            "in": "formData",
            "description": "Unique identifier of the Service to be added",
            "required": true,
            "type": "string"
          },
          {
            "name": "username",
            "in": "formData",
            "description": "Username",
            "required": true,
            "type": "string"
          },
          {
            "name": "password",
            "in": "formData",
            "description": "Password",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/onboarding/tenant-info": {
      "get": {
        "summary": "Retrieves the generic identifyiong information for a customer.",
        "operationId": "GetTenantInfo",
        "consumes": [
          "application/x-www-form-urlencoded"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Successfully retrieved tenant info",
            "schema": {
              "$ref": "#/definitions/JsonApiTenantInfo"
            }
          },
          "404": {
            "description": "No branding found for this tenant",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/onboarding/tenant-identity": {
      "put": {
        "summary": "Adds tenant identifying information which is retreived in the 'onboarding/tenant-info' call. Operation is only available to Skylight Administrators.",
        "operationId": "SetTenantIdentity",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "Successfully updated tenant identifying information",
            "schema": {
              "$ref": "#/definitions/JsonApiTenantInfo"
            }
          },
          "400": {
            "description": "The request data is not in the proper format",
            "schema": {
              "type": "string"
            }
          },
          "401": {
            "description": "User is not authorized to perform this operation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiTenantInfo"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/onboarding/tenant-identity/{subdomain}": {
      "delete": {
        "summary": "Deletes tenant identifying information. Operation is only available to Skylight Administrators.",
        "operationId": "DeleteTenantIdentity",
        "consumes": [
          "text/plain"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Successfully deleted tenant identifying information",
            "schema": {
              "$ref": "#/definitions/JsonApiTenantInfo"
            }
          },
          "400": {
            "description": "The request data is not in the proper format",
            "schema": {
              "type": "string"
            }
          },
          "401": {
            "description": "User is not authorized to perform this operation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Tenant identity record not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "subdomain",
            "in": "path",
            "description": "Unique identifier of the Subdomain to delete the tenant mapping",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/tokens": {
      "post": {
        "summary": "Create a new web token for authentication/authorization",
        "operationId": "CreateToken",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "text/plain"
        ],
        "responses": {
          "201": {
            "description": "Token was successfully created in Skylight AAA",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiJWT"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "get": {
        "summary": "Retrieve a list of Tokens known to Skylight AAA",
        "operationId": "GetAllTokens",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns a list of tokens known to Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiJWTList"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Tokens provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/tokens/{tokenId}": {
      "get": {
        "summary": "Retrieve a single Token by its known Id.",
        "operationId": "GetToken",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns a known Token to Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiJWT"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Token not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "tokenId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Token to be returned."
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "patch": {
        "summary": "Update an existing Token in Skylight AAA.",
        "operationId": "UpdateToken",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Token was successfully updated in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiJWT"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Attempt to update token but it does not exist",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiJWT"
            }
          },
          {
            "name": "tokenId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Token to be updated."
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "delete": {
        "summary": "Delete a single Token by its known Id.",
        "operationId": "DeleteToken",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns the now deleted Token from Skylight AAA",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Token not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "tokenId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Token to be deleted."
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/method/{emailAddress}": {
      "get": {
        "summary": "Returns a method for authentication given an email address",
        "operationId": "GetAuthenticationMethod",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns authentication method for existing user",
            "schema": {
              "$ref": "#/definitions/AuthMethod"
            }
          },
          "204": {
            "description": "Returns an empty response to indicate that no openID has been provisioned for this tenant"
          },
          "404": {
            "description": "User with provided email does not exist",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "emailAddress",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "Email address of the user trying to authenticate"
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/usergroups": {
      "post": {
        "summary": "Create a new Usergroup in Skylight AAA",
        "operationId": "CreateUsergroup",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "Usergroup was successfully created in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiUsergroup"
            }
          },
          "400": {
            "description": "Attempt to update usergroup but there is something wrong with the request data",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Attempt to provision a Usergroup that is already provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiUsergroup"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "get": {
        "summary": "Retrieve a list of Usergroups known to Skylight AAA",
        "operationId": "GetAllUsergroups",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns a list of known Usergroups to Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiUsergroupList"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Usergroups provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/usergroups/{usergroupId}": {
      "get": {
        "summary": "Retrieve a single Usergroup by its known Id.",
        "operationId": "GetUsergroup",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns a known Usergroup to Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiUsergroup"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Usergroup not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "usergroupId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Usergroup to be returned."
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "patch": {
        "summary": "Update an existing Usergroup in Skylight AAA.",
        "operationId": "UpdateUsergroup",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Usergroup was successfully updated in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiUsergroup"
            }
          },
          "400": {
            "description": "Attempt to update usergroup but there is something wrong with the request data",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Attempt to update usergroup but the user does not exist",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Attempt to update usergroup but there is a conflict",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiUsergroupUpdate"
            }
          },
          {
            "name": "usergroupId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Usergroup to be updated."
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "delete": {
        "summary": "Delete a single Usergroup by its known Id.",
        "operationId": "DeleteUsergroup",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns the now deleted Usergroup from Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiUsergroup"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Usergroup not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "usergroupId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Usergroup to be deleted."
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/roles": {
      "post": {
        "summary": "Create a new Role in Skylight AAA",
        "operationId": "CreateRole",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "Role was successfully created in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiRole"
            }
          },
          "400": {
            "description": "Bad request",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Attempt to provision a Role that is already provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiRole"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "get": {
        "summary": "Retrieve a list of Roles known to Skylight AAA in the context of the active tenant",
        "operationId": "GetAllRoles",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns a list of known Roles to Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiRoleList"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/roles/{roleId}": {
      "get": {
        "summary": "Retrieve a single Role by its known Id",
        "operationId": "GetRole",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns a known Role to Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiRole"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Role not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "roleId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Role to be returned"
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "patch": {
        "summary": "Update an existing Role in Skylight AAA",
        "operationId": "UpdateRole",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Role was successfully updated in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiRole"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Attempt to update Role that does not exist",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Attempt to provision a Role that is already provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiRoleUpdate"
            }
          },
          {
            "name": "roleId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Role to be updated."
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "delete": {
        "summary": "Delete a single Role by its known Id",
        "operationId": "DeleteRole",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns the now deleted Role from Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiRole"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Role not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "roleId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Role to be deleted."
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/permissions": {
      "post": {
        "summary": "Create a new Permission in Skylight AAA",
        "operationId": "CreatePermission",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Permission already exists"
          },
          "201": {
            "description": "Permission was successfully created in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiPermission"
            }
          },
          "400": {
            "description": "Bad request",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Attempt to provision a Permission that is already provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiPermission"
            }
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "get": {
        "summary": "Retrieve a list of Permissions known to Skylight AAA in the context of the active tenant",
        "operationId": "GetAllPermissions",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns a list of known Permissions to Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiPermissionList"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "domains",
            "in": "query",
            "required": false,
            "description": "Filter permissions by comma separated list of domains",
            "type": "string"
          },
          {
            "name": "app",
            "in": "query",
            "required": false,
            "description": "Filter permissions by app",
            "type": "string"
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/auth/permissions/{permissionId}": {
      "get": {
        "summary": "Retrieve a single Permission by its known Id",
        "operationId": "GetPermission",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns a known Permission to Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiPermission"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Permission not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "permissionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Permission to be returned"
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "patch": {
        "summary": "Update an existing Permission in Skylight AAA",
        "operationId": "UpdatePermission",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Role was successfully updated in Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiUpdatePermissionResponse"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Attempt to update Permission that does not exist",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiUpdatePermission"
            }
          },
          {
            "name": "permissionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Permission to be updated."
          }
        ],
        "tags": [
          "AuthService"
        ]
      },
      "delete": {
        "summary": "Delete a single Permission by its known Id",
        "operationId": "DeletePermission",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Returns the now deleted Permission from Skylight AAA",
            "schema": {
              "$ref": "#/definitions/JsonApiPermission"
            }
          },
          "403": {
            "description": "Requestor does not have permission to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Permission not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "permissionId",
            "in": "path",
            "required": true,
            "type": "integer",
            "format": "int64",
            "description": "The unique identifier of the Permission to be deleted."
          }
        ],
        "tags": [
          "AuthService"
        ]
      }
    },
    "/v1/export/configurations": {
      "post": {
        "summary": "Creates an export configuration",
        "operationId": "CreateScheduledExport",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "202": {
            "description": "Report request successfully Created",
            "schema": {
              "$ref": "#/definitions/ExportReportsConfigurationModel"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string",
              "example": "Schedule hour is not realistic"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action"
          },
          "500": {
            "description": "Unexpected error processing request"
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ExportReportsConfigurationModel"
            }
          }
        ],
        "tags": [
          "ExportService"
        ]
      },
      "get": {
        "summary": "Gets a list of export report",
        "operationId": "GetAllExportConfigurations",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Report request successfully queued",
            "schema": {
              "$ref": "#/definitions/GetAllExportConfigurationModel"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string",
              "example": "Bad query parameters"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action"
          },
          "500": {
            "description": "Unexpected error processing request"
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "include_doc",
            "type": "boolean",
            "default": false,
            "description": "If true, then the reports themselves will be returned, otherwise, only the document IDs"
          },
          {
            "name": "raw_metadata_key",
            "in": "query",
            "required": false,
            "default": false,
            "type": "boolean",
            "description": "Metadata are mapped internally for speed and this flag exposes the actual key"
          },
          {
            "name": "enabled",
            "in": "query",
            "required": false,
            "default": true,
            "type": "boolean",
            "description": "Only return enabled configs"
          }
        ],
        "tags": [
          "ExportService"
        ]
      }
    },
    "/v1/export/configurations/{conf_id}": {
      "get": {
        "summary": "Gets an export configuration",
        "operationId": "GetExportConfiguration",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Report request successfully queued",
            "schema": {
              "$ref": "#/definitions/ExportReportsConfigurationModel"
            }
          },
          "400": {
            "description": "Request was invalid",
            "schema": {
              "type": "string",
              "example": "conf id not found"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action"
          },
          "500": {
            "description": "Unexpected error processing request"
          }
        },
        "parameters": [
          {
            "name": "conf_id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "raw_metadata_key",
            "in": "query",
            "required": false,
            "default": false,
            "type": "boolean",
            "description": "Metadata are mapped internally for speed and this flag exposes the actual key"
          }
        ],
        "tags": [
          "ExportService"
        ]
      },
      "patch": {
        "summary": "Patch an export Configuration",
        "operationId": "PatchExportConfiguration",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "202": {
            "description": "Report request successfully queued",
            "schema": {
              "$ref": "#/definitions/ExportReportsConfigurationModel"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string",
              "example": "Schedule hour is not realistic"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action"
          },
          "500": {
            "description": "Unexpected error processing request"
          }
        },
        "parameters": [
          {
            "name": "conf_id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ExportReportsConfigurationModel"
            }
          }
        ],
        "tags": [
          "ExportService"
        ]
      },
      "delete": {
        "summary": "Disables an export Configuration",
        "operationId": "DisableExportConfiguration",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "202": {
            "description": "Report request successfully queued",
            "schema": {
              "$ref": "#/definitions/ExportReportsConfigurationModel"
            }
          },
          "400": {
            "description": "Request data does not pass validation"
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action"
          },
          "500": {
            "description": "Unexpected error processing request"
          }
        },
        "parameters": [
          {
            "name": "conf_id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "ExportService"
        ]
      }
    },
    "/v1/export/{conf_id}/reports": {
      "get": {
        "summary": "Gets a list of export report",
        "operationId": "GetAllExportReport",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Report request successfully queued",
            "schema": {
              "$ref": "#/definitions/GetAllExportReportModel"
            }
          },
          "400": {
            "description": "Request was invalid",
            "schema": {
              "type": "string",
              "example": "Bad Configuration ID"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action"
          },
          "500": {
            "description": "Unexpected error processing request"
          }
        },
        "parameters": [
          {
            "name": "conf_id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "ExportService"
        ]
      }
    },
    "/v1/export/{conf_id}/report/{fileName}": {
      "get": {
        "summary": "Download a report csv",
        "operationId": "GetExportReport",
        "produces": [
          "application/octet-stream"
        ],
        "responses": {
          "200": {
            "description": "download a report csv",
            "schema": {
              "type": "string",
              "format": "binary"
            },
            "headers": {
              "Content-Disposition": {
                "type": "string",
                "default": "attachment; filename=dataset.csv.gz;"
              },
              "Content-Type": {
                "type": "string",
                "default": "application/octet-stream"
              }
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Client does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "conf_id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "fileName",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "ExportService"
        ]
      }
    },
    "/v1/solution-version-manifest": {
      "get": {
        "summary": "Retrieves the Skyligth Analytics release and solution versions as well as the manifest of all services. If the local manifest has been manually modified, the isDirty flag is set to indicate that the currently running version differs from the original version",
        "operationId": "GetSolutionManifest",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "A manifest containing the solution version as well as the version for all running components",
            "schema": {
              "$ref": "#/definitions/JsonApiSolutionManifestResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AdminGetSolutionManifest"
        ]
      }
    },
    "/v3/twe": {
      "post": {
        "summary": "Provisions a time exclusion for the current tenant",
        "operationId": "CreateTimeExclusion",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TimeExclusionRequestSpec"
            }
          }
        ],
        "responses": {
          "201": {
            "description": "Created",
            "schema": {
              "$ref": "#/definitions/TimeExclusionResponseSpec"
            }
          },
          "400": {
            "description": "Bad Request",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Access to resource forbidden for user",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "500": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "tags": [
          "Time Window Exclusions"
        ]
      },
      "get": {
        "summary": "Retrieves all provisioned time exclusion for the current tenant",
        "operationId": "GetAllTimeExclusion",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "$ref": "#/definitions/TimeExclusionResponseArraySpec"
            }
          },
          "403": {
            "description": "Access to resource forbidden for user",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "500": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "tags": [
          "Time Window Exclusions"
        ]
      }
    },
    "/v3/twe/{id}": {
      "patch": {
        "summary": "Updates a provisioned time exclusion of the current tenant",
        "operationId": "UpdateTimeExclusion",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TimeExclusionUpdateRequestSpec"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "Updated",
            "schema": {
              "$ref": "#/definitions/TimeExclusionResponseSpec"
            }
          },
          "403": {
            "description": "Access to resource forbidden for user",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "412": {
            "description": "Precondition failed",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "tags": [
          "Time Window Exclusions"
        ]
      },
      "get": {
        "summary": "Retrieves a provisioned time exclusion for the current tenant by name",
        "operationId": "GetTimeExclusion",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "$ref": "#/definitions/TimeExclusionResponseSpec"
            }
          },
          "403": {
            "description": "Access to resource forbidden for user",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "500": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "tags": [
          "Time Window Exclusions"
        ]
      },
      "delete": {
        "summary": "Removes a provisioned time exclusion for the current tenant by name",
        "operationId": "DeleteTimeExclusion",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "204": {
            "description": "Deleted"
          },
          "403": {
            "description": "Access to resource forbidden for user",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "404": {
            "description": "Not Found",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "500": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "tags": [
          "Time Window Exclusions"
        ]
      }
    },
    "/v3/twe/events": {
      "get": {
        "summary": "Returns all time window exclusions for the tenant that have occurrences between start and end time. If monitoredObjectID is specified, only time window exclusions that affect the monitored object during the specified time window are returned",
        "operationId": "TimeExclusionEvents",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "parameters": [
          {
            "name": "start",
            "in": "query",
            "required": true,
            "type": "integer"
          },
          {
            "name": "end",
            "in": "query",
            "required": true,
            "type": "integer"
          },
          {
            "in": "query",
            "name": "monitoredObjectID",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "Success",
            "schema": {
              "$ref": "#/definitions/TimeWindowExclusionEventArraySpec"
            }
          },
          "400": {
            "description": "Bad request",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "403": {
            "description": "Access to resource forbidden for user",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "404": {
            "description": "Monitored object not found",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          },
          "500": {
            "description": "Unexpected error",
            "schema": {
              "$ref": "#/definitions/Error"
            }
          }
        },
        "tags": [
          "Time Window Exclusions"
        ]
      }
    },
    "/v2/tenants": {
      "post": {
        "summary": "Create a Tenant.",
        "operationId": "CreateTenantV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/TenantResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The Tenant being provisioned already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TenantCreationRequest"
            }
          }
        ],
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all Tenants.",
        "operationId": "GetAllTenantsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/TenantListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "There are no Tenants provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      }
    },
    "/v2/tenants/{tenantId}": {
      "get": {
        "summary": "Retrieve a Tenant by id.",
        "operationId": "GetTenantV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/TenantResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "There requested Tenant is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant",
        "operationId": "DeleteTenantV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/TenantResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "There requested Tenant is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Patch a Tenant",
        "operationId": "PatchTenantV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/TenantResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "There requested Tenant is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision provided for the update request",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TenantUpdateRequest"
            }
          }
        ],
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      }
    },
    "/v2/tenant-by-alias/{value}": {
      "get": {
        "summary": "Returns the Id of a Tenant that matches the provided alias.",
        "operationId": "GetTenantIdByAliasV2",
        "produces": [
          "text/plain"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "There requested Tenant is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "value",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      }
    },
    "/v2/tenant-summary-by-alias/{value}": {
      "get": {
        "summary": "Returns a summary of the Tenant that matches the provided alias.",
        "operationId": "GetTenantSummaryByAliasV2",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/TenantSummaryResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "There requested Tenant is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "value",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      }
    },
    "/v2/ingestion-dictionaries": {
      "get": {
        "summary": "Retrieve an Ingestion Dictionary.",
        "operationId": "GetIngestionDictionaryV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionDictionaryListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      }
    },
    "/v2/valid-types": {
      "get": {
        "summary": "Retrieve a Valid Types object.",
        "operationId": "GetValidTypesV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ValidTypesListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      }
    },
    "/v2/tenant-metadata/{tenantId}": {
      "get": {
        "summary": "Retrieve a Tenant's Metadata. This API is authorized to Datahub Administrators only.",
        "operationId": "GetTenantMetadataV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/TenantMetadataResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified TenantMetadata is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant's Metadata. This API is authorized to Datahub Administrators only.",
        "operationId": "UpdateTenantMetadataV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/TenantMetadataResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified TenantMetadata is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision number passed in to the TenantMetadata being updated",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TenantMetadataUpdateRequest"
            }
          }
        ],
        "tags": [
          "AdminProvisioningServiceV2"
        ]
      }
    },
    "/v2/alerts/monitoredObjectIds/{monitoredObjectId}": {
      "get": {
        "summary": "Retrieve the alerts for a given monitoredObjectId over an interval",
        "operationId": "getAlertsForMonitoredObject",
        "responses": {
          "200": {
            "description": "Retrieved alerts successfully",
            "schema": {
              "$ref": "#/definitions/AlertsPayloadListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "monitoredObjectId",
            "type": "string",
            "description": "The monitored object id",
            "required": true
          },
          {
            "in": "query",
            "name": "interval",
            "type": "string",
            "description": "The interval in ISO 6801 standard but with the '/' replaced with '_'",
            "required": true
          },
          {
            "in": "query",
            "name": "alertState",
            "type": "string",
            "enum": [
              "raised",
              "cleared",
              "activeAndCleared"
            ],
            "description": "Filter on a particular condition. If left empty, both raised and clears will be returned."
          },
          {
            "name": "policyId",
            "in": "query",
            "type": "string",
            "description": "The Policy ID"
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/alerts/active/monitoredObjectIds/{monitoredObjectId}": {
      "get": {
        "summary": "Retrieve active alerts for the provided monitoredObjectId",
        "operationId": "getActiveAlertsForMonitoredObject",
        "responses": {
          "200": {
            "description": "Retrieved active alerts successfully",
            "schema": {
              "$ref": "#/definitions/ActiveAlertsListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "monitoredObjectId",
            "type": "string",
            "description": "The monitored object id",
            "required": true
          },
          {
            "in": "query",
            "name": "policyId",
            "type": "string",
            "description": "The policyId"
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete Active Alerts for the provided monitoredObjectId",
        "operationId": "deleteActiveAlertsForMonitoredObject",
        "responses": {
          "200": {
            "description": "Deleted active alerts successfully",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "monitoredObjectId",
            "type": "string",
            "description": "The monitored object id",
            "required": true
          },
          {
            "in": "query",
            "name": "policyId",
            "type": "string",
            "description": "The policyId"
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/alerts/active/monitoredObjectIds": {
      "post": {
        "summary": "Create active alerts for the provided monitoredObjectId",
        "operationId": "createActiveAlertForMonitoredObject",
        "responses": {
          "200": {
            "description": "Created active alerts successfully",
            "schema": {
              "$ref": "#/definitions/ActiveAlert"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "description": "The Active Alert",
            "schema": {
              "$ref": "#/definitions/ActiveAlert"
            }
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/alerts/active/policies/{policyId}": {
      "get": {
        "summary": "Retrieve active alerts for the provided policyId",
        "operationId": "getActiveAlertsForPolicy",
        "responses": {
          "200": {
            "description": "Delete active alerts successfully",
            "schema": {
              "$ref": "#/definitions/ActiveAlertsListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "policyId",
            "type": "string",
            "description": "The policyId",
            "required": true
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete Active Alerts for the provided policyId",
        "operationId": "deleteActiveAlertsForPolicy",
        "responses": {
          "200": {
            "description": "Deleted active alerts successfully",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "policyId",
            "type": "string",
            "description": "The policyId",
            "required": true
          },
          {
            "in": "query",
            "name": "monitoredObjectId",
            "type": "string",
            "description": "The monitored object id"
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/alerts/active/groupBy": {
      "post": {
        "summary": "Retrieves specified aggregation grouped by the provided fields and filtered by the metadata specification",
        "operationId": "getActiveAlertGroupBy",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Group by successfully processed",
            "schema": {
              "$ref": "#/definitions/JsonApiActiveAlertGroupByResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Missing provisioned data",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiActiveAlertGroupByRequest"
            }
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/alerts/active": {
      "post": {
        "summary": "Retrieve Active Alerts based on the provided filter criterea",
        "operationId": "getActiveAlertsForMetaFilter",
        "responses": {
          "200": {
            "description": "A List of active alerts based on the provided filter criterea",
            "schema": {
              "$ref": "#/definitions/ActiveAlertsListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ActiveAlertsFilteredListRequest"
            }
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/alerts/active/count": {
      "post": {
        "summary": "Retrieve Counts of Active Alerts based on the provided filter criterea",
        "operationId": "getActiveAlertsFilteredCounts",
        "responses": {
          "200": {
            "description": "A count of active alerts based on the provided filter criterea",
            "schema": {
              "$ref": "#/definitions/ActiveAlertsFilteredCountsResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ActiveAlertsFilteredCountsRequest"
            }
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/alerts/active/securityState": {
      "post": {
        "summary": "Update the security state of alerts with provided objectIDs",
        "operationId": "updateActiveAlertsSecurityState",
        "responses": {
          "200": {
            "description": "Security state changed successfully, returns updated alerts",
            "schema": {
              "$ref": "#/definitions/ActiveAlertsListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ActiveAlertsSecurityStateUpdateRequest"
            }
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/analytics": {
      "post": {
        "summary": "Request Analytical analysis from Datahub",
        "operationId": "CreateAnalyticsV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/AnalyticsResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/AnalyticsRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Get all currently stored Analytics Result Objects",
        "operationId": "GetAllAnalyticsV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/AnalyticsListResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Analytics results found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/analytics/{analyticsId}": {
      "get": {
        "summary": "Retrieve an Analytics result by Id.",
        "operationId": "GetAnalyticsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/AnalyticsResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Analytics Result is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "analyticsId",
            "description": "Unique identifier of an Analytics request in Datahub",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete an Analytics result by Id.",
        "operationId": "DeleteAnalyticsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/AnalyticsResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Analytics Result is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "analyticsId",
            "description": "Unique identifier of an Analytics request in Datahub",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/brandings": {
      "post": {
        "summary": "Create a Branding for a Tenant.",
        "operationId": "CreateBrandingV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/BrandingResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The Branding being provisioned already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/BrandingCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all Brandings for the specified Tenant.",
        "operationId": "GetAllBrandingsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/BrandingListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No branding records are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/brandings/{brandingId}": {
      "get": {
        "summary": "Retrieve a Tenant Branding by Id.",
        "operationId": "GetBrandingV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/BrandingResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified branding is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "brandingId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant Branding specified by the provided Branding Id.",
        "operationId": "UpdateBrandingV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/BrandingResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified branding is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision number passed in to the branding being updated",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/BrandingUpdateRequest"
            }
          },
          {
            "name": "brandingId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant Branding specified by the provided Branding Id.",
        "operationId": "DeleteBrandingV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/BrandingResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified branding is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "brandingId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/locales": {
      "post": {
        "summary": "Create a Locale for a Tenant.",
        "operationId": "CreateLocaleV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/LocaleResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The Locale being provisioned already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/LocaleCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all Locales for the specified Tenant.",
        "operationId": "GetAllLocalesV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/LocaleListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Locales are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/locales/{localeId}": {
      "get": {
        "summary": "Retrieve a Tenant Locale by Id.",
        "operationId": "GetLocaleV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/LocaleResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Locale is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "localeId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Locale for a Tenant.",
        "operationId": "UpdateLocaleV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/LocaleResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Locale is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision number passed in to the Locale being updated",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/LocaleUpdateRequest"
            }
          },
          {
            "name": "localeId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant Locale specified by the provided Locale Id.",
        "operationId": "DeleteLocaleV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/LocaleResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Locale is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "localeId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/composite-metrics": {
      "post": {
        "summary": "Create a composite Metric for a Tenant.",
        "operationId": "CreateCompositeMetricV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/CompositeMetricResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "There is already a composite Metric with this ID",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CompositeMetricCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all composite metrics for the specified Tenant.",
        "operationId": "GetAllCompositeMetricsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/CompositeMetricListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No composite metrics are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/composite-metrics/{CompositeMetricId}": {
      "get": {
        "summary": "Retrieve a composite metric by Id.",
        "operationId": "GetCompositeMetricV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/CompositeMetricResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified composite metric is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "CompositeMetricId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a composite metric specified by the provided Id.",
        "operationId": "UpdateCompositeMetricV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/CompositeMetricResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified composite metric is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision number passed in to the composite metric being updated",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CompositeMetricUpdateRequest"
            }
          },
          {
            "name": "CompositeMetricId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a composite metric specified by the provided Id.",
        "operationId": "DeleteCompositeMetricV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/CompositeMetricResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified composite metric is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "CompositeMetricId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/connector-configs": {
      "post": {
        "summary": "Create a ConnectorConfig for a Tenant.",
        "operationId": "CreateConnectorConfigV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ConnectorConfigResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The Connector being provisioned already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ConnectorConfigCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all ConnectorConfigs for the specified Tenant.",
        "operationId": "GetAllConnectorConfigsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ConnectorConfigListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No connector configurations are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/connector-configs/{connectorId}": {
      "get": {
        "summary": "Retrieve a Tenant ConnectorConfig by Id.",
        "operationId": "GetConnectorConfigV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ConnectorConfigResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified connector configuration is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "connectorId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant ConnectorConfig specified by the provided Connector Id.",
        "operationId": "UpdateConnectorConfigV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ConnectorConfigResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Connector Configuration is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision number passed in to the Connector Configuration being updated",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ConnectorConfigUpdateRequest"
            }
          },
          {
            "name": "connectorId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant ConnectorConfig specified by the provided Connector Id.",
        "operationId": "DeleteConnectorConfigV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ConnectorConfigResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Connector Configuration is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "connectorId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/connector-instances": {
      "post": {
        "summary": "Create a ConnectorInstance for a Tenant.",
        "operationId": "CreateConnectorInstanceV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ConnectorInstanceResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The Connector Instance being provisioned already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ConnectorInstanceCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all ConnectorInstances for the specified Tenant.",
        "operationId": "GetAllConnectorInstancesV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ConnectorInstanceListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Connector Instances are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/connector-instances/{connectorInstanceId}": {
      "get": {
        "summary": "Retrieve a Tenant ConnectorInstance by Id.",
        "operationId": "GetConnectorInstanceV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ConnectorInstanceResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Connector Instance is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "connectorInstanceId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a ConnectorInstance for a Tenant.",
        "operationId": "UpdateConnectorInstanceV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ConnectorInstanceResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Connector Instance is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision number passed in to the Connector Instance being updated",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ConnectorInstanceUpdateRequest"
            }
          },
          {
            "name": "connectorInstanceId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant ConnectorInstance specified by the provided Connector Instance Id.",
        "operationId": "DeleteConnectorInstanceV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ConnectorInstanceResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Connector Instance is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "connectorInstanceId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/cyber/network-assets": {
      "post": {
        "summary": "Create a Network Asset",
        "operationId": "CreateNetworkAssetV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/NetworkAssetResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "A Network Asset with this ip is already provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/NetworkAssetResponse"
            }
          }
        ],
        "tags": [
          "TenantCyberSecurityNetworkAssetServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all NetworkAssets for a Tenant.",
        "operationId": "GetAllNetworkAssetsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Fetch completed successfully",
            "schema": {
              "$ref": "#/definitions/NetworkAssetListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Network Assets are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantCyberSecurityNetworkAssetServiceV2"
        ]
      }
    },
    "/v2/cyber/network-assets/{networkAssetId}": {
      "get": {
        "summary": "Retrieve a Network Asset by its ID",
        "operationId": "GetNetworkAssetV2",
        "responses": {
          "200": {
            "description": "Retrieved Network Asset successfully",
            "schema": {
              "$ref": "#/definitions/NetworkAssetResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "networkAssetId",
            "type": "string",
            "description": "The network asset id",
            "required": true
          }
        ],
        "tags": [
          "TenantCyberSecurityNetworkAssetServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant Network Asset",
        "operationId": "UpdateNetworkAssetV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/NetworkAssetResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Network Asset is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision provided for the update request to the Network Asset",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "networkAssetId",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "The network asset id"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/NetworkAssetUpdateRequest"
            }
          }
        ],
        "tags": [
          "TenantCyberSecurityNetworkAssetServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant Network Asset specified by the provided id.",
        "operationId": "DeleteNetworkAssetV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Deleted network asset successfully",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Network Asset is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "networkAssetId",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "The network asset id"
          }
        ],
        "tags": [
          "TenantCyberSecurityNetworkAssetServiceV2"
        ]
      }
    },
    "/v2/cyber/network-assets/count": {
      "post": {
        "summary": "Retrieve a count of monitored objects based on the provided filter criteria",
        "operationId": "GetFilteredNetworkAssetCountV2",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Response list containing counts by provided grouping that match the provided meta filter criteria",
            "schema": {
              "$ref": "#/definitions/NetworkAssetFilteredCountResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/NetworkAssetFilteredListRequest"
            }
          }
        ],
        "tags": [
          "TenantCyberSecurityNetworkAssetServiceV2"
        ]
      }
    },
    "/v2/cyber/network-assets/list": {
      "post": {
        "summary": "Retrieve a list of monitored objects based on the provided filter criteria",
        "operationId": "GetFilteredNetworkAssetListV2",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Response list containing Network Assets grouping that match the provided meta filter criteria",
            "schema": {
              "$ref": "#/definitions/NetworkAssetListResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/NetworkAssetFilteredListRequest"
            }
          }
        ],
        "tags": [
          "TenantCyberSecurityNetworkAssetServiceV2"
        ]
      }
    },
    "/v2/cyber/network-assets/groupBy": {
      "post": {
        "summary": "Retrieves specified aggregation grouped by the provided fields and filtered by the metadata specification",
        "operationId": "GetNetworkAssetGroupByV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Group by successfully processed",
            "schema": {
              "$ref": "#/definitions/NetworkAssetGroupByResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Missing provisioned data",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/NetworkAssetGroupByRequest"
            }
          }
        ],
        "tags": [
          "TenantCyberSecurityNetworkAssetServiceV2"
        ]
      }
    },
    "/v2/dashboards": {
      "post": {
        "summary": "Create a Dashboard for a Tenant.",
        "operationId": "CreateDashboardV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/DashboardResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The Dashboard being provisioned already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DashboardCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all Dashboards for the specified Tenant.",
        "operationId": "GetAllDashboardsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/DashboardListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Dashboards are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/dashboards/{dashboardId}": {
      "get": {
        "summary": "Retrieve a Tenant Dashboard by Id.",
        "operationId": "GetDashboardV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/DashboardResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Dashboard is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "dashboardId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant Dashboard specified by the provided Dashboard Id.",
        "operationId": "UpdateDashboardV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/DashboardResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Dashboard is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision number passed in to the Dashboard being updated",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DashboardUpdateRequest"
            }
          },
          {
            "name": "dashboardId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant Dashboard specified by the provided Dashboard Id.",
        "operationId": "DeleteDashboardV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/DashboardResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Dashboard is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "dashboardId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/cards": {
      "post": {
        "summary": "Create a Card for a Tenant.",
        "operationId": "CreateCardV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/CardResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The Card being provisioned already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CardCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all Cards for the specified Tenant.",
        "operationId": "GetAllCardsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/CardListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Cardss are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/cards/{cardId}": {
      "get": {
        "summary": "Retrieve a Tenant Card by Id.",
        "operationId": "GetCardV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/CardResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Cards is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant Card specified by the provided Card Id.",
        "operationId": "UpdateCardV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/CardResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Cards is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision number passed in to the Cards being updated",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/CardUpdateRequest"
            }
          },
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant Card specified by the provided Card Id.",
        "operationId": "DeleteCardV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/CardResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Cards is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "cardId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/data-cleaning-profiles": {
      "post": {
        "summary": "Provides ability to Create a Tenant Data Cleaning Profile",
        "operationId": "CreateDataCleaningProfile",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "Profile creation completed successfully",
            "schema": {
              "$ref": "#/definitions/DataCleaningProfileResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "There was a conflict when creating the record",
            "schema": {
              "type": "string"
            }
          },
          "422": {
            "description": "The provided request did not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DataCleaningProfileCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all Data Cleaning Profiles for a Tenant.",
        "operationId": "GetDataCleaningProfiles",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Fetch completed successfully",
            "schema": {
              "$ref": "#/definitions/DataCleaningProfileListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Record not found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/data-cleaning-profiles/{profileId}": {
      "get": {
        "summary": "Retrieve a Data Cleaning Profiles for a Tenant.",
        "operationId": "GetDataCleaningProfile",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Fetch completed successfully",
            "schema": {
              "$ref": "#/definitions/DataCleaningProfileResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No records found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "profileId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Provides ability to Update a Tenant Data Cleaning Profile",
        "operationId": "UpdateDataCleaningProfile",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Update completed successfully",
            "schema": {
              "$ref": "#/definitions/DataCleaningProfileResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No records found",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "There was a conflict when updating the record",
            "schema": {
              "type": "string"
            }
          },
          "422": {
            "description": "The provided request did not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "profileId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DataCleaningProfileUpdateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Data Cleaning Profile for a Tenant.",
        "operationId": "DeleteDataCleaningProfile",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Deletion completed successfully",
            "schema": {
              "$ref": "#/definitions/DataCleaningProfileResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No records found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "profileId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/data-cleaning-history": {
      "get": {
        "summary": "Retrieve data cleaning event history for a given monitored object and time period.",
        "operationId": "GetDataCleaningHistory",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Fetch completed successfully",
            "schema": {
              "$ref": "#/definitions/DataCleaningHistoryResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No records found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "monitoredObjectId",
            "in": "query",
            "required": true,
            "type": "string"
          },
          {
            "name": "interval",
            "description": "ISO-8601 Interval",
            "in": "query",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/distribution/download-roadrunner": {
      "get": {
        "summary": "Download a roadrunner tarball ready for installing",
        "operationId": "DownloadRoadrunner",
        "produces": [
          "application/octet-stream"
        ],
        "responses": {
          "200": {
            "description": "download roadrunner archive",
            "schema": {
              "type": "string",
              "format": "binary"
            },
            "headers": {
              "Content-Disposition": {
                "type": "string",
                "default": "attachment; filename=DataHubConnector.tar.gz;"
              },
              "Content-Type": {
                "type": "string",
                "default": "application/octet-stream"
              }
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "zone",
            "in": "query",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/ingestion-profiles": {
      "post": {
        "summary": "Create an Ingestion Profile for a Tenant.",
        "operationId": "CreateIngestionProfileV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionProfileResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The ingestion profile already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/IngestionProfileCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Get all Tenant Ingestion Profiles",
        "operationId": "GetAllIngestionProfilesV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionProfileListResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Ingestion Profile is provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/ingestion-profiles/{ingestionProfileId}": {
      "get": {
        "summary": "Retrieve a Tenant Ingestion Profile by id.",
        "operationId": "GetIngestionProfileV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionProfileResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Ingestion Profile is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "ingestionProfileId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant Ingestion Profile",
        "operationId": "UpdateIngestionProfileV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionProfileResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Ingestion Profile is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision provided for th update request",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "ingestionProfileId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/IngestionProfileUpdateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant Ingestion Profile specified by the provided Ingestion Profile Id.",
        "operationId": "DeleteIngestionProfileV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionProfileResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Ingestion Profile is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "ingestionProfileId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/manager/monitoredObjectCache/build": {
      "post": {
        "summary": "Bootstraps the monitored object cache for all tenants",
        "consumes": [
          "application/vnd.api+json",
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json",
          "application/json"
        ],
        "responses": {
          "202": {
            "description": "Cache build in progress"
          },
          "204": {
            "description": "Started cache build"
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "ManagerV2"
        ]
      }
    },
    "/v2/manager/baseline/bulkUpdate": {
      "post": {
        "summary": "Invokes baseline bulk update",
        "consumes": [
          "application/vnd.api+json",
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json",
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Invocation successful"
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "ManagerV2"
        ]
      }
    },
    "/v2/manager/analytics/purgeRecords": {
      "post": {
        "summary": "Purges analytics reports",
        "consumes": [
          "application/vnd.api+json",
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json",
          "application/json"
        ],
        "responses": {
          "204": {
            "description": "Invocation successful"
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "ManagerV2"
        ]
      }
    },
    "/v2/manager/networkAssetCache/build": {
      "post": {
        "summary": "Bootstraps the network asset cache for all tenants",
        "consumes": [
          "application/vnd.api+json",
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json",
          "application/json"
        ],
        "responses": {
          "202": {
            "description": "Cache build in progress"
          },
          "204": {
            "description": "Started cache build"
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "ManagerV2"
        ]
      }
    },
    "/v2/metadata-configs": {
      "post": {
        "summary": "Create a Metadata Configuration for a Tenant.",
        "operationId": "CreateMetadataConfigV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MetadataConfigResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The Metadata Configuration already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MetadataConfigCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Get all Tenant Metadata Configurations",
        "operationId": "GetAllMetadataConfigsV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MetadataConfigListResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Metadata Configuration is provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/metadata-configs/{MetadataConfigId}": {
      "get": {
        "summary": "Retrieve a Tenant Metadata Configuration by id.",
        "operationId": "GetMetadataConfigV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MetadataConfigResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Metadata Configuration is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "MetadataConfigId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant Metadata Configuration",
        "operationId": "UpdateMetadataConfigV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MetadataConfigResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Metadata Configuration is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision provided for th update request",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "MetadataConfigId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MetadataConfigUpdateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant Metadata Configuration specified by the provided Metadata Configuration Id.",
        "operationId": "DeleteMetadataConfigV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MetadataConfigResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Metadata Configuration is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "MetadataConfigId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/metric-baselines/by-monitored-object/{monitoredObjectId}": {
      "get": {
        "summary": "Retrieve all Tenant Metric Baselines for a single Monitored Object.",
        "operationId": "GetMetricBaselineByMonitoredObjectIdV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MetricBaselineListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "monitoredObjectId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "interval",
            "in": "query",
            "required": false,
            "type": "string"
          },
          {
            "name": "directions",
            "in": "query",
            "required": false,
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "name": "metrics",
            "in": "query",
            "required": true,
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/duplicate-monitored-object-reports": {
      "get": {
        "summary": "Retrieve all Duplicate Monitored Object Reports for the specified Tenant.",
        "operationId": "GetAllDuplicateMonitoredObjectReportsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/DuplicateMonitoredObjectReportListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No DuplicateMonitoredObjectReports are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "post": {
        "summary": "Updates the DuplicateMonitoredObjectReport for the specified Tenant.",
        "operationId": "GenerateDuplicateMonitoredObjectReportV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "The request to update teh Duplicate Monitored Object Report was accepted",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/duplicate-monitored-object-reports/{duplicateMonitoredObjectResportId}": {
      "get": {
        "summary": "Retrieve a Tenant Duplicate Monitored Object Report by Id.",
        "operationId": "GetDuplicateMonitoredObjectReportV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/DuplicateMonitoredObjectReportResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested DuplicateMonitoredObjectReport is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "duplicateMonitoredObjectResportId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-object-tag-mappings": {
      "post": {
        "summary": "Create a MonitoredObjectTagMapping for a Tenant.",
        "operationId": "CreateMonitoredObjectTagMappingV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectTagMappingResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The MonitoredObjectTagMapping being provisioned already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MonitoredObjectTagMappingCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all MonitoredObjectTagMappings for the specified Tenant.",
        "operationId": "GetAllMonitoredObjectTagMappingsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectTagMappingListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No MonitoredObjectTagMappings are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "zone",
            "in": "query",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-object-tag-mappings/{monitoredObjectTagMappingId}": {
      "get": {
        "summary": "Retrieve a Tenant MonitoredObjectTagMapping by Id.",
        "operationId": "GetMonitoredObjectTagMappingV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectTagMappingResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified MonitoredObjectTagMapping is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "monitoredObjectTagMappingId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant MonitoredObjectTagMapping specified by the provided MonitoredObjectTagMapping Id.",
        "operationId": "UpdateMonitoredObjectTagMappingV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectTagMappingResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified MonitoredObjectTagMapping is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision number passed in to the MonitoredObjectTagMapping being updated",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MonitoredObjectTagMappingUpdateRequest"
            }
          },
          {
            "name": "monitoredObjectTagMappingId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant MonitoredObjectTagMapping specified by the provided MonitoredObjectTagMapping Id.",
        "operationId": "DeleteMonitoredObjectTagMappingV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectTagMappingResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified MonitoredObjectTagMapping is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "monitoredObjectTagMappingId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-objects": {
      "get": {
        "summary": "Retrieve all Monitored Objects for a Tenant.",
        "operationId": "GetAllMonitoredObjectsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Fetch completed successfully",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Monitored objects are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "start_key",
            "in": "query",
            "type": "string",
            "description": "The name of the Monitored Object from which the result set will begin"
          },
          {
            "name": "limit",
            "in": "query",
            "type": "integer",
            "description": "The maximum number of records to return for a single page"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "post": {
        "summary": "Create a Monitored Object for a Tenant.",
        "operationId": "CreateMonitoredObjectV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "A Monitored Object with this objectId is already provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MonitoredObjectCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-objects/count": {
      "post": {
        "summary": "Retrieve a count of monitored objects based on the provided filter criteria",
        "operationId": "GetFilteredMonitoredObjectCountV2",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Response list containing counts by provided grouping that match the provided meta filter criteria",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectFilteredCountResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MonitoredObjectFilteredListRequest"
            }
          },
          {
            "name": "group-by",
            "in": "query",
            "type": "string",
            "enum": [
              "object-type"
            ]
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-objects/id-list": {
      "post": {
        "summary": "Retrieve a list of monitored objects based on the provided filter criteria",
        "operationId": "GetFilteredMonitoredObjectListV2",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Response list containing all monitored object IDs that match the provided meta filter criteria",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectFilteredListResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MonitoredObjectFilteredListRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-objects/reporting": {
      "post": {
        "summary": "Retrieve a list of monitored objects based on the provided reporting status criteria",
        "operationId": "GetMonitoredObjectReportingListV2",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Response list containing all monitored object IDs that match the provided reporting status criteria",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectFilteredListResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MonitoredObjectReportingListRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-object-geo-clusters": {
      "post": {
        "summary": "Retrieve set of counts clustered by GeoHash identifiers specified by the open source GeoHashing algorithm.",
        "operationId": "GetMonitoredObjectGeoClustersV2",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Counts of monitored objects grouped by GeoHash identifiers",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectGeoClusterResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectFilteredListRequest"
            }
          },
          {
            "name": "precision",
            "in": "query",
            "description": "The level of precision required for the geohashing grid",
            "required": true,
            "type": "integer"
          },
          {
            "name": "location",
            "in": "query",
            "description": "The location field that we want clustering based off of",
            "required": true,
            "type": "string",
            "enum": [
              "source",
              "destination"
            ]
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-object-meta-details": {
      "get": {
        "summary": "Retrieve a record of the provisioned metadata including the counts of Monitored Objects that use each metadata value",
        "operationId": "GetMonitoredObjectMetadataDetailsV2",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Response list containing all monitored object IDs that match the provided meta filter criteria",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectMetadataDetailsListResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "meta",
            "in": "query",
            "description": "List of metadata category names by which the request should be filtered",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          {
            "name": "value-prefix",
            "in": "query",
            "description": "Prefix by which all metadata values names by should start",
            "type": "string"
          },
          {
            "name": "categories-only",
            "in": "query",
            "description": "Flag to indicate if the response should include only the metadata category names (when set to true) or also include meta values and counts (when set to false)",
            "type": "boolean",
            "default": false
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "post": {
        "summary": "Retrieve a record of the provisioned metadata including the counts of Monitored Objects that use each metadata value after being filtered by the passed in request body parameters",
        "operationId": "GetFilteredMonitoredObjectMetadataDetailsV2",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Response list containing all monitored object IDs that match the provided meta filter criteria",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectMetadataDetailsListResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MonitoredObjectFilteredListRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-objects/{monObjId}": {
      "get": {
        "summary": "Retrieve a Tenant Monitored Object by id.",
        "operationId": "GetMonitoredObjectV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Monitored Object is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "monObjId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant Monitored Object",
        "operationId": "UpdateMonitoredObjectV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Monitored Object is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision provided for the update request to the Monitored Object",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "monObjId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MonitoredObjectUpdateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant Monitored Object specified by the provided id.",
        "operationId": "DeleteMonitoredObjectV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Monitored Object is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "monObjId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/bulk/patch/monitored-objects": {
      "patch": {
        "summary": "Patches one or more Monitored Objects's based on the provided values",
        "operationId": "BulkPatchMonitoredObjectsV2",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/BulkOperationResponseV2"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/BulkMonitoredObjectPatchRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/bulk/insert/monitored-objects": {
      "post": {
        "summary": "Create one or more Monitored Objects in a single API request.",
        "operationId": "BulkInsertMonitoredObjectsV2",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/BulkOperationResponseV2"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/BulkMonitoredObjectCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "put": {
        "summary": "Update one or more Monitored Objects in a single API request. Note that this is a PUT operation for each Monitored Object. This means that all properties must be explicitly provided",
        "operationId": "BulkUpdateMonitoredObjectsV2",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/BulkOperationResponseV2"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/BulkMonitoredObjectUpdateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/bulk/insert/monitored-objects/meta": {
      "post": {
        "summary": "Update the metadata of one or more Monitored Objects in a single API request.",
        "operationId": "BulkInsertMonitoredObjectsMetaV2",
        "produces": [
          "application/json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/BulkOperationResponseV2"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/BulkMonitoredObjectMetaCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-object-summaries": {
      "get": {
        "summary": "Retrieve all Monitored Object Summaries for a Tenant.",
        "operationId": "GetAllMonitoredObjectSummariesV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Fetch completed successfully",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectSummaryListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Monitored objects are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "start_key",
            "in": "query",
            "type": "string",
            "description": "The name of the Monitored Object from which the result set will begin"
          },
          {
            "name": "limit",
            "in": "query",
            "type": "integer",
            "description": "The maximum number of records to return for a single page"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/monitored-object-summaries/{monObjId}": {
      "get": {
        "summary": "Retrieve a Tenant Monitored Object Summary by the Monitored Object's id.",
        "operationId": "GetMonitoredObjectSummaryV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectSummaryResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Monitored Object is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "monObjId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/metadata-category-mappings": {
      "get": {
        "summary": "Retrieve all Monitored Object Metadata Mappings for a Tenant.",
        "operationId": "GetAllMetadataCategoryMappingsV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Fetch completed successfully",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectMetadataCategoryMappingListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Monitored Object Metadata Mappings are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/metadata-category-mappings/{mappingType}": {
      "get": {
        "summary": "Retrieve a particular Tenant Monitored Object Metadata Mapping by the type of mapping.",
        "operationId": "GetMetadataCategoryMappingV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectMetadataCategoryMappingResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Monitored Object is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "mappingType",
            "in": "path",
            "required": true,
            "type": "string",
            "enum": [
              "unknown",
              "activeMetrics"
            ],
            "description": "The type of Metadata Category Mapping"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a particular Tenant Monitored Object Metadata Mapping by the type of mapping.",
        "operationId": "UpdateMetadataCategoryMappingV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/MonitoredObjectMetadataCategoryMappingResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Monitored Object is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/MetadataCategoryMappingUpdateRequest"
            }
          },
          {
            "name": "mappingType",
            "in": "path",
            "required": true,
            "type": "string",
            "enum": [
              "unknown",
              "activeMetrics"
            ],
            "description": "The type of Metadata Category Mapping to be updated"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/policies/alerting": {
      "post": {
        "summary": "Create an Alert Policy",
        "operationId": "createRequestAlertPolicy",
        "responses": {
          "201": {
            "description": "Policy creation completed successfully",
            "schema": {
              "$ref": "#/definitions/alertPolicyResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requester does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "There was a conflict when creating the record",
            "schema": {
              "type": "string"
            }
          },
          "422": {
            "description": "The provided request did not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "424": {
            "description": "The provided request Failed Dependency",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/alertPolicyCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      },
      "get": {
        "summary": "Get all Alert Policies",
        "operationId": "getAllRequestAlertPolicy",
        "responses": {
          "200": {
            "description": "Policy get successful",
            "schema": {
              "$ref": "#/definitions/alertPoliciesResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "useRawMetaKey",
            "in": "query",
            "default": false,
            "type": "boolean",
            "description": "Returns the raw metadata key's ID from the DB."
          },
          {
            "name": "includeDeleted",
            "in": "query",
            "default": false,
            "type": "boolean",
            "description": "Include deleted policies in the results."
          },
          {
            "name": "policyType",
            "in": "query",
            "description": "Only include policies of specified types.",
            "required": false,
            "type": "string"
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/policies/alerting/automatic": {
      "patch": {
        "summary": "Patch automaticAlertPolicy",
        "operationId": "patchAutomaticAlertPolicy",
        "responses": {
          "201": {
            "description": "Policy creation completed successfully",
            "schema": {
              "$ref": "#/definitions/AutomaticAlertPolicyResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requester does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "There was a conflict when creating the record",
            "schema": {
              "type": "string"
            }
          },
          "422": {
            "description": "The provided request did not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/AutomaticAlertPolicyCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      },
      "get": {
        "summary": "Get Automatic Detection Policy",
        "operationId": "getAutomaticAlertPolicy",
        "responses": {
          "200": {
            "description": "Policy get successful",
            "schema": {
              "$ref": "#/definitions/AutomaticAlertPolicyCreateRequest"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/policies/alerting/{id}": {
      "get": {
        "summary": "Get a specific Alert Policy",
        "operationId": "getRequestAlertPolicy",
        "responses": {
          "200": {
            "description": "Got alert policy document",
            "schema": {
              "$ref": "#/definitions/alertPolicyResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "useRawMetaKey",
            "in": "query",
            "default": false,
            "type": "boolean",
            "description": "Returns the raw metadata key's ID from the DB."
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      },
      "delete": {
        "summary": "Deletes an Alert Policy",
        "description": "Note that this does not physically delete a policy. It will become disabled and unmodifiable in order to provide references to existing alerts.",
        "operationId": "deleteRequestAlertPolicy",
        "responses": {
          "202": {
            "description": "Policy Deletion completed successfully",
            "schema": {
              "$ref": "#/definitions/alertPolicyResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No records found",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      },
      "patch": {
        "summary": "Provides ability to patch a Alert Policy",
        "operationId": "PatchRequestAlertPolicy",
        "responses": {
          "201": {
            "description": "Policy patch completed successfully",
            "schema": {
              "$ref": "#/definitions/alertPolicyResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No records found",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "There was a conflict when creating the record",
            "schema": {
              "type": "string"
            }
          },
          "422": {
            "description": "The provided request did not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "424": {
            "description": "The provided request Failed Dependency",
            "schema": {
              "type": "string"
            }
          },
          "428": {
            "description": "The provided request is trying to modify alert policy while it is an active alarm.",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/alertPolicyCreateRequest"
            }
          },
          {
            "name": "id",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "in": "query",
            "name": "force",
            "type": "string",
            "enum": [
              false,
              true
            ],
            "required": false,
            "description": "If a alert state is currently alarming, Skylight will block put updates if the force query parameter is not set to true."
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/alerts/history/": {
      "get": {
        "summary": "Gets all the history for a tenant",
        "description": "Please use the query parameters to limit the scope of the results. Otherwise, this will return all the raw alerts for a time interval",
        "operationId": "getAlertPolicyHistory",
        "responses": {
          "200": {
            "description": "Policy history returned",
            "schema": {
              "$ref": "#/definitions/alertHistory"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "policyId",
            "in": "query",
            "type": "string",
            "description": "The Policy ID"
          },
          {
            "in": "query",
            "name": "interval",
            "type": "string",
            "description": "The interval in ISO 6801 standard but with the '/' replaced with '_'"
          },
          {
            "in": "query",
            "name": "monitoredObjectId",
            "type": "string",
            "description": "The monitored object alert history"
          },
          {
            "in": "query",
            "name": "alertState",
            "type": "string",
            "enum": [
              "raised",
              "cleared"
            ],
            "description": "Provide all the includes"
          },
          {
            "in": "query",
            "name": "policyType",
            "type": "string",
            "enum": [
              "micro-tca",
              "anomaly",
              "capture",
              "capture-automatic"
            ]
          },
          {
            "in": "query",
            "name": "limit",
            "type": "number",
            "description": "Maximum number of results to return"
          },
          {
            "name": "useRawMetaKey",
            "in": "query",
            "default": false,
            "type": "boolean",
            "description": "Returns the raw metadata key's ID from the DB."
          },
          {
            "in": "query",
            "name": "category",
            "type": "string",
            "description": "Category to filter on"
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/alerting/groupBy": {
      "post": {
        "summary": "Retrieves specified aggregation grouped by the provided fields and filtered by the metadata specification",
        "operationId": "GetAlertingGroupByV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Group by successfully processed",
            "schema": {
              "$ref": "#/definitions/JsonApiAlertGroupByResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Missing provisioned data",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiAlertGroupByRequest"
            }
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/alerting/aggregate": {
      "post": {
        "summary": "Aggregates the provided metrics and filters them based on the provided criteria",
        "operationId": "GetAlertingAggregateV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Aggregate query successfully processed",
            "schema": {
              "$ref": "#/definitions/JsonApiAlertAggregateResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Missing provisioned data",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiAlertAggregateRequest"
            }
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/ramen/state/{tenantId}": {
      "get": {
        "summary": "Get the latest ramen state for a given tenant.",
        "operationId": "getRamenState",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Got the document.",
            "schema": {
              "type": "object"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action.",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No such tenant.",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request.",
            "schema": {
              "type": "string"
            }
          },
          "503": {
            "description": "Service is not available at all or for that tenant.",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "tenantId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantAlertServiceV2"
        ]
      }
    },
    "/v2/session-filter-profiles": {
      "post": {
        "summary": "Create a SessionFilterProfile for a Tenant.",
        "operationId": "CreateSessionFilterProfileV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "Successfully Created",
            "schema": {
              "$ref": "#/definitions/SessionFilterProfileResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "A SessionFilterProfile with this name already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SessionFilterProfileCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all SessionFilterProfiles for the specified Tenant.",
        "operationId": "GetAllSessionFilterProfilesV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterProfileListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No SessionFilterProfiles are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/session-filter-profiles/{sessionFilterProfileId}": {
      "get": {
        "summary": "Retrieve a Tenant Dashboard by Id.",
        "operationId": "GetSessionFilterProfileV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterProfileResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Dashboard is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "sessionFilterProfileId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "put": {
        "summary": "Update a Tenant SessionFilterProfile specified by the provided SessionFilterProfile Id.",
        "operationId": "UpdateSessionFilterProfileV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterProfileResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified SessionFilterProfile is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "A SessionFilterProfile with the given name already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SessionFilterProfileUpdateRequest"
            }
          },
          {
            "name": "sessionFilterProfileId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Patch a Tenant SessionFilterProfile specified by the provided SessionFilterProfile Id, with partial modifications.",
        "operationId": "PatchSessionFilterProfileV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterProfileResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified SessionFilterProfile is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "A SessionFilterProfile with the given name already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PatchSessionFilterProfileRequest"
            }
          },
          {
            "name": "sessionFilterProfileId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant SessionFilterProfile specified by the provided SessionFilterProfile Id.",
        "operationId": "DeleteSessionFilterProfileV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterProfileResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified SessionFilterProfile is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "sessionFilterProfileId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/session-filters": {
      "post": {
        "summary": "Create a SessionFilter for a Tenant.",
        "operationId": "CreateSessionFilterV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The SessionFilter being provisioned already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SessionFilterCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all SessionFilters for the specified Tenant.",
        "operationId": "GetAllSessionFiltersV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No SessionFilters are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/session-filters/{sessionFilterId}": {
      "get": {
        "summary": "Retrieve a Tenant SessionFilter by Id.",
        "operationId": "GetSessionFilterV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified SessionFilters is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "sessionFilterId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "put": {
        "summary": "Update a Tenant SessionFilter specified by the provided SessionFilter Id.",
        "operationId": "UpdateSessionFilterV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified SessionFilter is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "A SessionFilter with the given name already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/SessionFilterUpdateRequest"
            }
          },
          {
            "name": "sessionFilterId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Patch a Tenant SessionFilter specified by the provided SessionFilter Id, with partial modifications.",
        "operationId": "PatchSessionFilterV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified SessionFilter is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "A SessionFilter with the given name already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/PatchSessionFilterRequest"
            }
          },
          {
            "name": "sessionFilterId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant SessionFilter specified by the provided SessionFilter Id.",
        "operationId": "DeleteSessionFilterV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/SessionFilterResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified SessionFilter is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "sessionFilterId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/threshold-profiles": {
      "post": {
        "summary": "Create a Threshold Profile for a Tenant.",
        "operationId": "CreateThresholdProfileV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ThresholdProfileResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The record is already provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ThresholdProfileCreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "get": {
        "summary": "Retrieve all Threshold Profiles for the specified Tenant.",
        "operationId": "GetAllThresholdProfilesV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ThresholdProfileListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "There are no Threshold Profiles provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v2/threshold-profiles/{thrPrfId}": {
      "get": {
        "summary": "Retrieve a Tenant Threshold Profile by id.",
        "operationId": "GetThresholdProfileV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ThresholdProfileResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Threshold Profile is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "thrPrfId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "patch": {
        "summary": "Update a Tenant Threshold Profile",
        "operationId": "UpdateThresholdProfileV2",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ThresholdProfileResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Threshold Profile is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision provided in Threshold Profile update request",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "thrPrfId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/ThresholdProfileUpdateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant Threshold Profile specified by the provided id.",
        "operationId": "DeleteThresholdProfileV2",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/ThresholdProfileResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested Threshold Profile is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "thrPrfId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV2"
        ]
      }
    },
    "/v3/ingestion-dictionaries": {
      "post": {
        "summary": "Create an Ingestion Dictionary for a Tenant.",
        "operationId": "CreateIngestionDictionaryV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionDictionaryV3Response"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "The ingestion Dictionary already exists",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/IngestionDictionaryV3CreateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV3"
        ]
      },
      "get": {
        "summary": "Get all Tenant Ingestion Dictionaries",
        "operationId": "GetAllIngestionDictionariesV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionDictionaryV3ListResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Ingestion Dictionary is provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "tags": [
          "TenantProvisioningServiceV3"
        ]
      }
    },
    "/v3/ingestion-dictionaries/{IngestionDictionaryId}": {
      "get": {
        "summary": "Retrieve a Tenant Ingestion Dictionary by id.",
        "operationId": "GetIngestionDictionaryV3",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionDictionaryV3Response"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Ingestion Dictionary is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "IngestionDictionaryId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV3"
        ]
      },
      "patch": {
        "summary": "Update a Tenant Ingestion Dictionary",
        "operationId": "UpdateIngestionDictionaryV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionDictionaryV3Response"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Ingestion Dictionary is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision provided for th update request",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "IngestionDictionaryId",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/IngestionDictionaryV3UpdateRequest"
            }
          }
        ],
        "tags": [
          "TenantProvisioningServiceV3"
        ]
      },
      "delete": {
        "summary": "Delete a Tenant Ingestion Dictionary specified by the provided Ingestion Dictionary Id.",
        "operationId": "DeleteIngestionDictionaryV3",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/IngestionDictionaryV3Response"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The specified Ingestion Dictionary is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "IngestionDictionaryId",
            "in": "path",
            "required": true,
            "type": "string"
          }
        ],
        "tags": [
          "TenantProvisioningServiceV3"
        ]
      }
    },
    "/v3/metrics-admin/reconciliation/datasource/{datasource}": {
      "post": {
        "summary": "Re-ingests data into the datasource given the input parameters",
        "operationId": "CreateDatasourceReconciliationTasksV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Datasource reconciliation tasks create request successfully processed",
            "schema": {
              "$ref": "#/definitions/DatasourceReconciliationTasks"
            }
          },
          "400": {
            "description": "Invalid payload provided",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Datasource does not exist",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "datasource",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "taskCount",
            "in": "query",
            "type": "integer",
            "required": false,
            "description": "Sets the concurrency level of the ingestion task"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DatasourceReconciliationTasks"
            }
          }
        ],
        "tags": [
          "MetricsServiceV3"
        ]
      }
    },
    "/v3/metrics-admin/reindex/datasource/{datasource}": {
      "post": {
        "summary": "Re-formats data in the datasource to optomize the datasource",
        "operationId": "CreateDatasourceReindexTasksV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Datasource reindex task request successfully processed",
            "schema": {
              "$ref": "#/definitions/DatasourceReindexTasks"
            }
          },
          "400": {
            "description": "Invalid payload provided",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Datasource does not exist",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "datasource",
            "in": "path",
            "required": true,
            "type": "string"
          },
          {
            "name": "taskCount",
            "in": "query",
            "type": "integer",
            "required": false,
            "default": 1,
            "description": "Sets the concurrency level of the granularity compaction task"
          },
          {
            "name": "periodOffsetMultiplier",
            "in": "query",
            "type": "integer",
            "required": false,
            "default": 0,
            "description": "Used to generate reindexing tasks over a period from current time backwards based on the 'c' provided in the body. For example, 'targetSegmentTimebucket' of 'DAY' with 'periodOffsetMultiplier' of '5' invokes daily reindexing from [NOW-5days, NOW)."
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/DatasourceReindexTasks"
            }
          }
        ],
        "tags": [
          "MetricsServiceV3"
        ]
      }
    },
    "/v3/metrics/groupBy": {
      "post": {
        "summary": "Retrieves specified aggregation grouped by the provided fields and filtered by the metadata specification",
        "operationId": "GetGroupByV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Group by successfully processed",
            "schema": {
              "$ref": "#/definitions/JsonApiGroupByResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Missing provisioned data",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiGroupByRequest"
            }
          }
        ],
        "tags": [
          "MetricsServiceV3"
        ]
      }
    },
    "/v3/metrics/aggregate": {
      "post": {
        "summary": "Aggregates the provided metrics and filters them based on the provided criteria",
        "operationId": "GetAggregateV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Aggregate query successfully processed",
            "schema": {
              "$ref": "#/definitions/JsonApiAggregateV3Response"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "Missing provisioned data",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/JsonApiAggregateV3Request"
            }
          }
        ],
        "tags": [
          "MetricsServiceV3"
        ]
      }
    },
    "/v3/tcpThroughput/tests": {
      "post": {
        "summary": "Create a TCP Throughput test report",
        "operationId": "CreateTcpThroughputTestReportV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "201": {
            "description": "TCP Throughput test report successfully created",
            "schema": {
              "$ref": "#/definitions/TcpThroughputResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "A TCP Throughput test report with this test id and run timestamp is already provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "type": "string",
              "$ref": "#/definitions/TcpThroughputResponse"
            }
          }
        ],
        "tags": [
          "TcpThroughputTestReportServiceV3"
        ]
      },
      "get": {
        "summary": "Retrieve all TCP Throughput test run reports for a tenant.",
        "operationId": "GetAllTcpThroughputTestReportsV3",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Fetch completed successfully",
            "schema": {
              "$ref": "#/definitions/TcpThroughputListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "No Network Assets are provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "in": "query",
            "name": "shallow",
            "type": "boolean",
            "description": "If set, retrieve only summary kpi's for the test records"
          },
          {
            "name": "token",
            "description": "For paginated results, the token to receive the next batch of results",
            "in": "query",
            "type": "string"
          }
        ],
        "tags": [
          "TcpThroughputTestReportServiceV3"
        ]
      }
    },
    "/v3/tcpThroughput/tests/{testId}/reports": {
      "get": {
        "summary": "Retrieve all TCP Throughput test reports for a test instance.",
        "operationId": "GetAllTcpThroughputReportsForTestV3",
        "responses": {
          "200": {
            "description": "Retrieved TCP Throughput Tests successfully",
            "schema": {
              "$ref": "#/definitions/TcpThroughputListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "testId",
            "type": "string",
            "description": "The test identifier",
            "required": true
          },
          {
            "in": "query",
            "name": "shallow",
            "type": "boolean",
            "description": "If set, retrieve only summary kpi's for the test records"
          },
          {
            "name": "token",
            "description": "For paginated results, the token to receive the next batch of results",
            "in": "query",
            "type": "string"
          }
        ],
        "tags": [
          "TcpThroughputTestReportServiceV3"
        ]
      }
    },
    "/v3/tcpThroughput/tests/{testId}/reports/{runId}": {
      "get": {
        "summary": "Retrieve a TCP Throughput test report by test id and run id",
        "operationId": "GetTcpThroughputTestReportV3",
        "responses": {
          "200": {
            "description": "Retrieved TCP Throughput test report successfully",
            "schema": {
              "$ref": "#/definitions/TcpThroughputListResponse"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "in": "path",
            "name": "testId",
            "type": "string",
            "description": "The test identifier",
            "required": true
          },
          {
            "in": "path",
            "name": "runId",
            "type": "string",
            "description": "The id associated with a particular test run",
            "required": true
          },
          {
            "in": "query",
            "name": "shallow",
            "type": "boolean",
            "description": "If set, retrieve only summary kpi's for the test record"
          }
        ],
        "tags": [
          "TcpThroughputTestReportServiceV3"
        ]
      },
      "patch": {
        "summary": "Update a TCP Throughput test report",
        "operationId": "UpdateTcpThroughputTestReportV3",
        "consumes": [
          "application/vnd.api+json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "",
            "schema": {
              "$ref": "#/definitions/TcpThroughputResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested TCP Throughput report is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "409": {
            "description": "Incorrect revision provided for the update request to the TCP Throughput report",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "testId",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "The test identifier"
          },
          {
            "name": "runId",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "The is associated with a particular test run"
          },
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TcpThroughputUpdateRequest"
            }
          }
        ],
        "tags": [
          "TcpThroughputTestReportServiceV3"
        ]
      },
      "delete": {
        "summary": "Delete a TCP Throughput Test report specified by the provided test id and run id.",
        "operationId": "DeleteTcpThroughputTestReportV3",
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": ""
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "404": {
            "description": "The requested TCP Throughput test report is not provisioned",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "testId",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "The test identfifier"
          },
          {
            "name": "runId",
            "in": "path",
            "required": true,
            "type": "string",
            "description": "The id associated with a particular test run"
          }
        ],
        "tags": [
          "TcpThroughputTestReportServiceV3"
        ]
      }
    },
    "/v3/tcpThroughput/tests/count": {
      "post": {
        "summary": "Retrieve a count of TCP Throughput test reports based on the provided filter criteria",
        "operationId": "GetFilteredTcpThroughputCountV3",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Response list containing counts by provided grouping that match the provided meta filter criteria",
            "schema": {
              "$ref": "#/definitions/TcpThroughputFilteredCountResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "body",
            "in": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/TcpThroughputFilteredListRequest"
            }
          }
        ],
        "tags": [
          "TcpThroughputTestReportServiceV3"
        ]
      }
    },
    "/v3/tcpThroughput/tests/list": {
      "post": {
        "summary": "Retrieve a list of TCP Throughput test reports based on the provided filter criteria",
        "operationId": "GetFilteredTcpThroughputListV3",
        "consumes": [
          "application/json"
        ],
        "produces": [
          "application/vnd.api+json"
        ],
        "responses": {
          "200": {
            "description": "Response list containing TCP Throughput test results grouping that match the provided meta filter criteria",
            "schema": {
              "$ref": "#/definitions/TcpThroughputListResponse"
            }
          },
          "400": {
            "description": "Request data does not pass validation",
            "schema": {
              "type": "string"
            }
          },
          "403": {
            "description": "Requestor does not have authorization to perform this action",
            "schema": {
              "type": "string"
            }
          },
          "500": {
            "description": "Unexpected error processing request",
            "schema": {
              "type": "string"
            }
          }
        },
        "parameters": [
          {
            "name": "shallow",
            "in": "query",
            "type": "boolean",
            "description": "If set, retrieve only summary kpi's for the test record"
          },
          {
            "name": "token",
            "in": "query",
            "type": "string"
          },
          {
            "name": "body",
            "in": "body",
            "schema": {
              "$ref": "#/definitions/TcpThroughputFilteredListRequest"
            }
          }
        ],
        "tags": [
          "TcpThroughputTestReportServiceV3"
        ]
      }
    }
  },
  "definitions": {
    "ValidationResponse": {
      "type": "object",
      "properties": {
        "serviceResponse": {
          "$ref": "#/definitions/ServiceResponse"
        }
      }
    },
    "ServiceResponse": {
      "type": "object",
      "properties": {
        "authenticationSuccess": {
          "$ref": "#/definitions/ServiceResponseAuthenticationSuccess"
        },
        "authenticationFailure": {
          "$ref": "#/definitions/ServiceResponseAuthenticationFailure"
        }
      }
    },
    "ServiceResponseAuthenticationSuccess": {
      "type": "object",
      "properties": {
        "user": {
          "type": "string"
        },
        "attributes": {
          "$ref": "#/definitions/ServiceResponseAuthenticationSuccessAttributes"
        }
      }
    },
    "ServiceResponseAuthenticationSuccessAttributes": {
      "type": "object",
      "properties": {
        "backend": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "pvxSession": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "credentialType": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "isFromNewLogin": {
          "type": "array",
          "items": {
            "type": "boolean"
          }
        },
        "authenticationDate": {
          "type": "array",
          "items": {
            "type": "number",
            "format": "double"
          }
        },
        "authenticationMethod": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "roles": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "isPasswordSet": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "isRegisteredForEmail": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "name": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "tenants": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "id": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "onboardingToken": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "successfulAuthenticationHandlers": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "longTermAuthenticationRequestTokenUsed": {
          "type": "array",
          "items": {
            "type": "boolean"
          }
        },
        "access_token": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/AccessToken"
          }
        }
      }
    },
    "AccessToken": {
      "type": "object",
      "properties": {
        "lifetime": {
          "type": "integer"
        },
        "parameterName": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "value": {
          "type": "string"
        },
        "type": {
          "type": "object",
          "properties": {
            "value": {
              "type": "string"
            }
          }
        }
      }
    },
    "ServiceResponseAuthenticationFailure": {
      "type": "object",
      "properties": {
        "code": {
          "type": "string"
        },
        "description": {
          "type": "string"
        }
      }
    },
    "JsonApiAAAUser": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/AAAUser"
        }
      }
    },
    "JsonApiAAAUserList": {
      "type": "object",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/AAAUser"
          }
        }
      }
    },
    "JsonApiJWT": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/JWTClaims"
        }
      }
    },
    "JsonApiJWTList": {
      "type": "object",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/JWTClaims"
          }
        }
      }
    },
    "JWTClaims": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "tokens"
          ],
          "default": "tokens"
        },
        "attributes": {
          "type": "object",
          "properties": {
            "tokenID": {
              "type": "string",
              "description": "ID of the jwt"
            },
            "iss": {
              "type": "string",
              "description": "Issuer of the jwt"
            },
            "sub": {
              "type": "string",
              "description": "Subject of the jwt (the user)"
            },
            "aud": {
              "type": "string",
              "description": "Audience - Recipient for which the JWT is intended (tenant name)"
            },
            "exp": {
              "type": "integer",
              "description": "Expiry of the JWT - in unix time format"
            },
            "nbf": {
              "type": "integer",
              "description": "Time before which the JWT must not be accepted for processing"
            },
            "permissions": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "zone": {
              "type": "string",
              "description": "Roadrunner Zone attribute"
            },
            "deploymentURL": {
              "type": "string",
              "description": "URL of the base deployment"
            },
            "tenantURL": {
              "type": "string",
              "description": "URL of the tenant this JWT was created for"
            },
            "natsHost": {
              "type": "string",
              "description": "Hostname of the nats server"
            },
            "tenantID": {
              "type": "string",
              "description": "ID of the tenant this JWT was created for"
            }
          }
        },
        "id": {
          "type": "string"
        }
      }
    },
    "JsonApiUsergroup": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/Usergroup"
        }
      }
    },
    "JsonApiUsergroupUpdate": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/UsergroupUpdate"
        }
      }
    },
    "JsonApiUsergroupList": {
      "type": "object",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Usergroup"
          }
        }
      }
    },
    "AuthMethod": {
      "type": "object",
      "properties": {
        "method": {
          "type": "string",
          "enum": [
            "password",
            "openid"
          ]
        },
        "providerLinks": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/authProvider"
          }
        }
      }
    },
    "Usergroup": {
      "type": "object",
      "required": [
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "usergroups"
          ],
          "default": "usergroups"
        },
        "attributes": {
          "type": "object",
          "required": [
            "name"
          ],
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 128
            },
            "tenantId": {
              "type": "string",
              "maxLength": 256
            }
          }
        },
        "id": {
          "type": "string"
        },
        "relationships": {
          "$ref": "#/definitions/UsergroupRelationships"
        }
      }
    },
    "UsergroupUpdate": {
      "type": "object",
      "required": [
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "usergroups"
          ],
          "default": "usergroups"
        },
        "attributes": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 128
            },
            "tenantId": {
              "type": "string",
              "maxLength": 256
            }
          }
        },
        "id": {
          "type": "string"
        },
        "relationships": {
          "$ref": "#/definitions/UsergroupRelationships"
        }
      }
    },
    "UsergroupRelationships": {
      "type": "object",
      "properties": {
        "users": {
          "type": "object",
          "properties": {
            "data": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "user",
                      "users",
                      "addUser",
                      "removeUser"
                    ]
                  }
                }
              }
            }
          }
        },
        "roles": {
          "type": "object",
          "properties": {
            "data": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "roles",
                      "addRole",
                      "removeRole"
                    ]
                  }
                }
              }
            }
          }
        }
      }
    },
    "JsonApiRole": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/Role"
        }
      }
    },
    "JsonApiRoleUpdate": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/RoleUpdate"
        }
      }
    },
    "JsonApiRoleList": {
      "type": "object",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Role"
          }
        }
      }
    },
    "Role": {
      "type": "object",
      "required": [
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "roles"
          ],
          "default": "roles"
        },
        "attributes": {
          "type": "object",
          "required": [
            "name",
            "description"
          ],
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 128
            },
            "description": {
              "type": "string",
              "maxLength": 256
            },
            "tenantId": {
              "type": "string",
              "maxLength": 256
            }
          }
        },
        "id": {
          "type": "string"
        },
        "relationships": {
          "$ref": "#/definitions/RoleToPermissionRelationship"
        }
      }
    },
    "RoleUpdate": {
      "type": "object",
      "required": [
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "roles"
          ],
          "default": "roles"
        },
        "attributes": {
          "type": "object",
          "properties": {
            "name": {
              "type": "string",
              "maxLength": 128
            },
            "description": {
              "type": "string",
              "maxLength": 256
            },
            "tenantId": {
              "type": "string",
              "maxLength": 256
            }
          }
        },
        "id": {
          "type": "string"
        },
        "relationships": {
          "$ref": "#/definitions/RoleToPermissionRelationship"
        }
      }
    },
    "RoleToPermissionRelationship": {
      "type": "object",
      "properties": {
        "permissions": {
          "type": "object",
          "properties": {
            "data": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "type": {
                    "type": "string",
                    "enum": [
                      "permissions",
                      "addPermission",
                      "removePermission"
                    ]
                  },
                  "attributes": {
                    "type": "object",
                    "properties": {
                      "selectors": {
                        "type": "array",
                        "items": {
                          "type": "string",
                          "description": "List of selectors that customize the permission for this role"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "JsonApiPermission": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/Permission"
        }
      }
    },
    "JsonApiUpdatePermission": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/PermissionUpdate"
        }
      }
    },
    "JsonApiUpdatePermissionResponse": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/PermissionUpdateResponse"
        }
      }
    },
    "JsonApiPermissionList": {
      "type": "object",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Permission"
          }
        }
      }
    },
    "Permission": {
      "type": "object",
      "required": [
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "permissions"
          ],
          "default": "permissions"
        },
        "attributes": {
          "type": "object",
          "required": [
            "app",
            "domains",
            "actions",
            "description"
          ],
          "properties": {
            "app": {
              "type": "string",
              "description": "The application that owns and enforces the permission"
            },
            "domains": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "List of domains"
              }
            },
            "actions": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "create, read, update, delete, * or custom application specific actions"
              }
            },
            "description": {
              "type": "string",
              "description": "A description of the permission"
            }
          }
        },
        "id": {
          "type": "string"
        }
      }
    },
    "PermissionUpdate": {
      "type": "object",
      "required": [
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "permissions"
          ],
          "default": "permissions"
        },
        "attributes": {
          "type": "object",
          "properties": {
            "domains": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "List of domains"
              }
            },
            "actions": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "create, read, update, delete, * or custom application specific actions"
              }
            },
            "description": {
              "type": "string",
              "description": "A description of the permission"
            }
          }
        },
        "id": {
          "type": "string"
        }
      }
    },
    "PermissionUpdateResponse": {
      "type": "object",
      "required": [
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "permissions"
          ],
          "default": "permissions"
        },
        "attributes": {
          "type": "object",
          "properties": {
            "app": {
              "type": "string",
              "description": "The app that created and enforces this permission"
            },
            "domains": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "List of domains"
              }
            },
            "actions": {
              "type": "array",
              "items": {
                "type": "string",
                "description": "create, read, update, delete, * or custom application specific actions"
              }
            },
            "description": {
              "type": "string",
              "description": "A description of the permission"
            }
          }
        },
        "id": {
          "type": "string"
        }
      }
    },
    "JsonApiRelationship": {
      "type": "object",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/JsonApiRelationshipData"
          }
        }
      }
    },
    "JsonApiSingleRelationship": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/JsonApiRelationshipData"
        }
      }
    },
    "JsonApiRelationshipData": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string"
        },
        "id": {
          "type": "string"
        }
      }
    },
    "AAAUser": {
      "type": "object",
      "required": [
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "users"
          ],
          "default": "users"
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "$ref": "#/definitions/AAAUserAttr"
        },
        "relationships": {
          "type": "object",
          "properties": {
            "roles": {
              "type": "object",
              "properties": {
                "data": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "roles",
                          "addRole",
                          "removeRole"
                        ]
                      }
                    }
                  }
                }
              }
            },
            "usergroups": {
              "type": "object",
              "properties": {
                "data": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "usergroups",
                          "addGroup",
                          "removeGroup"
                        ]
                      }
                    }
                  }
                }
              }
            },
            "tenants": {
              "type": "object",
              "properties": {
                "data": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "id": {
                        "type": "string"
                      },
                      "type": {
                        "type": "string",
                        "enum": [
                          "tenants",
                          "addTenant",
                          "removeTenant"
                        ]
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "AAAUserAttr": {
      "type": "object",
      "properties": {
        "tenants": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 256
          }
        },
        "emailAddress": {
          "type": "string",
          "format": "email",
          "maxLength": 256
        },
        "password": {
          "type": "string",
          "minLength": 8,
          "maxLength": 64
        },
        "name": {
          "type": "string",
          "maxLength": 64
        },
        "roles": {
          "type": "array",
          "items": {
            "type": "string",
            "minLength": 7,
            "maxLength": 256,
            "enum": [
              "unknown",
              "skylight-admin",
              "tenant-admin",
              "tenant-user",
              "tenant-contributor"
            ],
            "default": "tenant-user"
          }
        },
        "groups": {
          "type": "array",
          "items": {
            "type": "string",
            "maxLength": 256
          }
        },
        "isPasswordSet": {
          "type": "boolean",
          "default": false
        },
        "isRegisteredForEmail": {
          "type": "boolean",
          "default": false
        },
        "onboardingToken": {
          "type": "string",
          "maxLength": 256,
          "x-nullable": true
        }
      }
    },
    "EmailChangeRequest": {
      "type": "object",
      "required": [
        "oldEmailAddress",
        "newEmailAddress"
      ],
      "properties": {
        "oldEmailAddress": {
          "type": "string",
          "format": "email",
          "maxLength": 256
        },
        "newEmailAddress": {
          "type": "string",
          "format": "email",
          "maxLength": 256
        }
      }
    },
    "SetPasswordRequest": {
      "type": "object",
      "required": [
        "password",
        "onboardingToken"
      ],
      "properties": {
        "password": {
          "type": "string",
          "minLength": 8,
          "maxLength": 64
        },
        "onboardingToken": {
          "type": "string",
          "maxLength": 256
        }
      }
    },
    "PasswordChangeRequest": {
      "type": "object",
      "required": [
        "oldPassword",
        "newPassword"
      ],
      "properties": {
        "oldPassword": {
          "type": "string",
          "minLength": 8,
          "maxLength": 64
        },
        "newPassword": {
          "type": "string",
          "minLength": 8,
          "maxLength": 64
        }
      }
    },
    "JsonApiTenantInfo": {
      "type": "object",
      "properties": {
        "data": {
          "$ref": "#/definitions/TenantInfo"
        }
      }
    },
    "TenantInfo": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "tenant-info"
          ],
          "default": "tenant-info"
        },
        "id": {
          "type": "string",
          "description": "The subdomain of the tenant"
        },
        "attributes": {
          "$ref": "#/definitions/TenantInfoAttr"
        }
      }
    },
    "TenantInfoAttr": {
      "type": "object",
      "properties": {
        "tenantName": {
          "type": "string",
          "maxLength": 256
        },
        "tenantId": {
          "type": "string",
          "maxLength": 256
        },
        "allowPasswordAuth": {
          "type": "boolean",
          "default": false
        },
        "providerLinks": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/authProvider"
          }
        }
      }
    },
    "authProvider": {
      "type": "object",
      "properties": {
        "label": {
          "type": "string"
        },
        "name": {
          "type": "string"
        },
        "url": {
          "type": "string"
        },
        "default": {
          "type": "boolean"
        }
      }
    },
    "OIDConfig": {
      "type": "object",
      "properties": {
        "issuer": {
          "type": "string"
        },
        "authorization_endpoint": {
          "type": "string"
        },
        "token_endpoint": {
          "type": "string"
        },
        "token_introspection_endpoint": {
          "type": "string"
        },
        "userinfo_endpoint": {
          "type": "string"
        },
        "end_session_endpoint": {
          "type": "string"
        },
        "jwks_uri": {
          "type": "string"
        },
        "check_session_iframe": {
          "type": "string"
        },
        "grant_types_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "response_types_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "subject_types_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "id_token_signing_alg_values_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "userinfo_signing_alg_values_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "request_object_signing_alg_values_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "response_modes_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "registration_endpoint": {
          "type": "string"
        },
        "token_endpoint_auth_methods_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "token_endpoint_auth_signing_alg_values_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "claims_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "claim_types_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "claims_parameter_supported": {
          "type": "boolean"
        },
        "scopes_supported": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "request_parameter_supported": {
          "type": "boolean"
        },
        "request_uri_parameter_supported": {
          "type": "boolean"
        }
      }
    },
    "OIDToken": {
      "type": "object",
      "properties": {
        "access_token": {
          "type": "string"
        },
        "token_type": {
          "type": "string"
        },
        "refresh_token": {
          "type": "string"
        },
        "expires_in": {
          "type": "integer"
        },
        "refresh_expires_in": {
          "type": "integer"
        },
        "session_state": {
          "type": "string"
        },
        "id_token": {
          "type": "string"
        }
      }
    },
    "PouchOk": {
      "type": "object",
      "properties": {
        "ok": {
          "type": "string"
        },
        "_id": {
          "type": "string"
        },
        "_rev": {
          "type": "string"
        }
      }
    },
    "PouchError": {
      "type": "object",
      "properties": {
        "error": {
          "type": "string"
        },
        "reason": {
          "type": "string"
        }
      }
    },
    "PouchGetDatabase": {
      "type": "object",
      "properties": {
        "db_name": {
          "type": "string"
        },
        "update_seq": {
          "type": "string"
        },
        "sizes": {
          "type": "object",
          "properties": {
            "file": {
              "type": "integer",
              "format": "int32"
            },
            "external": {
              "type": "integer",
              "format": "int32"
            },
            "active": {
              "type": "integer",
              "format": "int32"
            }
          }
        },
        "purge_seq": {
          "type": "integer",
          "format": "int32"
        },
        "other": {
          "type": "object",
          "properties": {
            "data_size": {
              "type": "integer",
              "format": "int32"
            }
          }
        },
        "doc_del_count": {
          "type": "integer",
          "format": "int32"
        },
        "doc_count": {
          "type": "integer",
          "format": "int32"
        },
        "disk_size": {
          "type": "integer",
          "format": "int32"
        },
        "disk_format_version": {
          "type": "integer",
          "format": "int32"
        },
        "data_size": {
          "type": "integer",
          "format": "int32"
        },
        "compact_running": {
          "type": "boolean"
        },
        "cluster": {
          "type": "object",
          "properties": {
            "q": {
              "type": "integer",
              "format": "int32"
            },
            "n": {
              "type": "integer",
              "format": "int32"
            },
            "w": {
              "type": "integer",
              "format": "int32"
            },
            "r": {
              "type": "integer",
              "format": "int32"
            }
          }
        },
        "instance_start_time": {
          "type": "string"
        }
      }
    },
    "PouchGetDocument": {
      "type": "object",
      "properties": {
        "_id": {
          "type": "string"
        },
        "_rev": {
          "type": "string"
        }
      },
      "additionalProperties": true
    },
    "GetAllExportConfigurationModel": {
      "description": "Returns all the export configurations",
      "type": "array",
      "items": {
        "$ref": "#/definitions/ExportReportsConfigurationModel"
      }
    },
    "ExportThresholdModel": {
      "description": "Model for Export Threshold Crossing columns, which will be a boolean type",
      "type": "object",
      "required": [
        "comparator",
        "metric",
        "value",
        "aggregator"
      ],
      "properties": {
        "comparator": {
          "type": "string",
          "enum": [
            "gte",
            "lte"
          ],
          "description": "The metric value can be greater or lesser (and equal) according to the operator"
        },
        "metric": {
          "type": "string",
          "description": "The metric you want to test the threshold against",
          "example": "delayP95"
        },
        "value": {
          "type": "number",
          "description": "Value for the metric to compare to",
          "example": "42"
        },
        "aggregator": {
          "type": "string",
          "enum": [
            "min",
            "max",
            "avg",
            "sum"
          ]
        }
      }
    },
    "ExportMetricSelector": {
      "type": "object",
      "required": [
        "name",
        "aggregator"
      ],
      "properties": {
        "name": {
          "type": "string",
          "example": "delayP95"
        },
        "aggregator": {
          "type": "string",
          "enum": [
            "min",
            "max",
            "avg",
            "sum"
          ]
        }
      }
    },
    "ExportAggregators": {
      "type": "string",
      "enum": [
        "min",
        "max",
        "avg",
        "sum"
      ]
    },
    "ExportReportsConfigurationModel": {
      "description": "Model for the export configuration",
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/definitions/ExportConfigurationMeta"
        },
        "data": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string",
              "description": "Export Configuration ID"
            },
            "type": {
              "type": "string",
              "enum": [
                "export-configs"
              ]
            },
            "attributes": {
              "type": "object",
              "required": [
                "name",
                "schedule",
                "filters",
                "columns",
                "emails",
                "groupBy"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "example": "My first Export Job"
                },
                "tenantId": {
                  "type": "string"
                },
                "schedule": {
                  "type": "object",
                  "properties": {
                    "hour": {
                      "type": "number",
                      "description": "When the report interval should end at. Jobs are run when system is not busy so the hour is a best effort. Can't be 'star'"
                    },
                    "dayOfMonth": {
                      "type": "string",
                      "description": "On what date of the month should this run. Note that if you wish to run this once a month for the LAST month of data, you should specify the 1 (st) of every month with a duration of `P1M`. You can only specify dayOfMonth or dayOfWeek. If both are filled in, your request will be rejected.",
                      "example": "14"
                    },
                    "dayOfWeek": {
                      "type": "string",
                      "description": "On what day of the week to schedule the job on. 0 is sunday, 1 is monday, 2 is tuesday, 3 is wednesday, 4 si thursday, 5 is friday, 6 is saturday"
                    }
                  }
                },
                "duration": {
                  "type": "string",
                  "example": "P1M",
                  "description": "The duration of the query. P1M means 1 month from the time before expected execution of the report schedule."
                },
                "filters": {
                  "type": "object",
                  "required": [
                    "objectType"
                  ],
                  "properties": {
                    "includeOnlyCleanData": {
                      "description": "If true, includes records marked clean record flag",
                      "type": "boolean",
                      "default": false
                    },
                    "includeBusyHour": {
                      "description": "If true, includes records marked with busy hour flag",
                      "type": "boolean",
                      "default": false
                    },
                    "includeMaintenanceWindow": {
                      "description": "If true, includes records marked with maintenance flag",
                      "type": "boolean",
                      "default": false
                    },
                    "includeMetadata": {
                      "description": "Include metadata key-values that you want to filter on",
                      "type": "object",
                      "additionalProperties": {
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    },
                    "objectType": {
                      "type": "string",
                      "example": "twamp-sf",
                      "description": "We must know the object type the export is for. We cannot run a single report against multiple object types in this version."
                    },
                    "direction": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "example": [
                          "0",
                          "1"
                        ],
                        "description": "Please note that direction `2`, aka `RT` is a special experimental feature for TWAMP. It must be used alone for this version and cannot be mixed with other directions."
                      }
                    }
                  }
                },
                "columns": {
                  "description": "Columns you wish to see in the exported dataset, can be dimensions, metrics, metadata",
                  "type": "object",
                  "properties": {
                    "metrics": {
                      "type": "array",
                      "items": {
                        "$ref": "#/definitions/ExportMetricSelector"
                      }
                    },
                    "metadata": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "topology": {
                      "type": "boolean",
                      "default": false
                    },
                    "thresholds": {
                      "type": "array",
                      "items": {
                        "$ref": "#/definitions/ExportThresholdModel"
                      }
                    }
                  }
                },
                "emails": {
                  "description": "List of emails that will get the report",
                  "example": [
                    "jon@doe.com",
                    "fancy@nancy.com"
                  ],
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "groupBy": {
                  "type": "object",
                  "required": [
                    "type",
                    "granularity"
                  ],
                  "properties": {
                    "type": {
                      "description": "The metric you want to group on",
                      "type": "string",
                      "example": "objectId",
                      "enum": [
                        "objectId"
                      ]
                    },
                    "granularity": {
                      "type": "string",
                      "enum": [
                        "P1D",
                        "PT1H"
                      ],
                      "default": "P1D",
                      "description": "The granularity to be applied to the aggregation. Note that PT1H is only allowed when the interval is less than 1 day"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "GetAllExportReportModel": {
      "description": "Returns all the export reports for a configuration",
      "type": "array",
      "items": {
        "$ref": "#/definitions/ExportReportModel"
      }
    },
    "ExportReportModel": {
      "description": "Returns an exported dataset",
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/definitions/ExportConfigurationMeta"
        },
        "data": {
          "required": [
            "compression",
            "payload",
            "id"
          ],
          "properties": {
            "id": {
              "type": "string",
              "description": "Export Configuration ID"
            },
            "type": {
              "type": "string",
              "enum": [
                "datasetExport"
              ]
            },
            "attributes": {
              "type": "object",
              "properties": {
                "format": {
                  "type": "string",
                  "enum": [
                    "csv"
                  ],
                  "description": "The format the payload is in."
                },
                "lastModified": {
                  "type": "string",
                  "example": "2021-06-16T13:02:59.514Z",
                  "description": "The dataset's last modified timestamp"
                },
                "size": {
                  "type": "number",
                  "format": "integer",
                  "description": "Size of the payload attribute in bytes"
                },
                "compression": {
                  "type": "string",
                  "example": "gzip",
                  "description": "The type of compression applied to the payload"
                },
                "payload": {
                  "type": "string",
                  "description": "This is the dataset stored in BASE64. You must decode the BASE64 and then decompress it using the compression format defined in the 'compression' attribute. Example: `cat <file>.csv.gz.b64 | base64 -d | gzip -d > file.csv`"
                },
                "download": {
                  "type": "string",
                  "description": "Link to the file"
                }
              }
            }
          }
        }
      }
    },
    "ExportConfigurationMeta": {
      "description": "Resuable block for users to see permission properties for a resource",
      "type": "object",
      "properties": {
        "enabled": {
          "type": "boolean",
          "default": true
        },
        "createdBy": {
          "type": "string"
        },
        "everyone": {
          "type": "string",
          "default": "none",
          "enum": [
            "none",
            "viewer",
            "editor",
            "manager"
          ]
        },
        "viewers": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "editors": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "managers": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "Error": {
      "type": "object",
      "properties": {
        "errors": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "title": {
                "type": "string"
              },
              "status": {
                "type": "string"
              },
              "code": {
                "type": "string"
              },
              "detail": {
                "type": "string"
              }
            }
          }
        }
      },
      "example": {
        "errors": [
          {
            "status": 500,
            "code": "GATHER-34",
            "title": "Warp engine failure",
            "details": "Replace dilithium"
          }
        ]
      }
    },
    "TimeExclusionRequestSpec": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "twe"
              ]
            },
            "attributes": {
              "$ref": "#/definitions/TimeExclusionRequest"
            }
          }
        }
      },
      "example": {
        "data": {
          "type": "twe",
          "attributes": {
            "name": "FridayNightBusyHour",
            "description": "Friday night prime time",
            "locale": "Canada/Montreal",
            "exclusionType": "busyHour",
            "match": {
              "metadata": {
                "include": {
                  "location": [
                    "football stadium"
                  ],
                  "zone": [
                    "east",
                    "west"
                  ]
                },
                "exclude": {
                  "zone": [
                    "north",
                    "south"
                  ]
                }
              },
              "monitoredObjectIDs": [
                "abc",
                "cde"
              ],
              "zones": [
                "Zone A",
                "Zone B"
              ],
              "applicationIds": [
                "ID1",
                "ID2"
              ],
              "sensorIDs": [
                "ID1",
                "ID2"
              ]
            },
            "startTime": "2020-12-20T17:00:00.00Z",
            "endTime": "2020-12-20T21:00:00.00Z",
            "duration": "P5DT5H30M00S",
            "recurrence": {
              "freq": "WEEKLY",
              "wkst": "FRI"
            }
          }
        }
      }
    },
    "TimeExclusionRequest": {
      "type": "object",
      "required": [
        "name",
        "exclusionType",
        "match",
        "startTime"
      ],
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string",
          "x-nullable": true
        },
        "locale": {
          "type": "string",
          "x-nullable": true,
          "description": "Locale label - Should match tome zone define in startTime and endTime, but is not enforced"
        },
        "exclusionType": {
          "type": "string",
          "enum": [
            "busyHour",
            "maintenance"
          ]
        },
        "match": {
          "$ref": "#/definitions/TimeWindowExclusionMatch"
        },
        "startTime": {
          "type": "string",
          "format": "date-time"
        },
        "endTime": {
          "type": "string",
          "format": "date-time",
          "x-nullable": true
        },
        "duration": {
          "type": "string",
          "pattern": "P(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?"
        },
        "recurrence": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TimeWindowExclusionRecurrence"
          }
        }
      }
    },
    "TimeExclusionUpdateRequestSpec": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "id",
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string"
            },
            "attributes": {
              "$ref": "#/definitions/TimeExclusionUpdateRequest"
            }
          }
        }
      },
      "example": {
        "data": {
          "type": "twe",
          "attributes": {
            "name": "FridayNightBusyHour",
            "description": "Friday night prime time",
            "locale": "Canada/Montreal",
            "exclusionType": "busyHour",
            "match": {
              "metadata": {
                "include": {
                  "location": [
                    "football stadium"
                  ],
                  "zone": [
                    "east",
                    "west"
                  ]
                },
                "exclude": {
                  "zone": [
                    "north",
                    "south"
                  ]
                }
              },
              "monitoredObjectIDs": [
                "abc",
                "cde"
              ],
              "zones": [
                "Zone A",
                "Zone B"
              ]
            },
            "startTime": "2020-12-20T17:00:00.00Z",
            "duration": "PT1H",
            "recurring": {
              "freq": "WEEKLY",
              "wkst": "FRI",
              "count": 5
            }
          }
        }
      }
    },
    "TimeExclusionUpdateRequest": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string",
          "x-nullable": true
        },
        "description": {
          "type": "string",
          "x-nullable": true
        },
        "locale": {
          "type": "string",
          "x-nullable": true,
          "description": "Locale label - Should match tome zone define in startTime and endTime, but is not enforced"
        },
        "exclusionType": {
          "type": "string",
          "enum": [
            "busyHour",
            "maintenance"
          ],
          "x-nullable": true
        },
        "match": {
          "$ref": "#/definitions/TimeWindowExclusionMatch"
        },
        "startTime": {
          "type": "string",
          "format": "date-time",
          "x-nullable": true
        },
        "endTime": {
          "type": "string",
          "format": "date-time",
          "x-nullable": true
        },
        "duration": {
          "type": "string",
          "pattern": "P(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?"
        },
        "recurrence": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TimeWindowExclusionRecurrence"
          }
        }
      }
    },
    "TimeExclusionResponseSpec": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "id",
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string"
            },
            "attributes": {
              "$ref": "#/definitions/TimeExclusionResponse"
            }
          }
        }
      },
      "example": {
        "data": {
          "id": "3211177d-c211-43ec-949b-e109686a4abe",
          "type": "twe",
          "attributes": {
            "name": "Friday Night Busy Hour",
            "description": "Friday night prime time",
            "locale": "Canada/Montreal",
            "exclusionType": "busyHour",
            "match": {
              "metadata": {
                "include": {
                  "location": [
                    "football stadium"
                  ],
                  "zone": [
                    "east",
                    "west"
                  ]
                },
                "exclude": {
                  "zone": [
                    "north",
                    "south"
                  ]
                }
              },
              "monitoredObjectIDs": [
                "abc",
                "cde"
              ],
              "zones": [
                "Zone A",
                "Zone B"
              ],
              "applicationIds": [
                "ID1",
                "ID2"
              ],
              "sensorIDs": [
                "ID1",
                "ID2"
              ]
            },
            "startTime": "2020-12-20T17:00:00.00Z",
            "endTime": "2020-12-20T21:00:00.00Z",
            "recurrence": {
              "freq": "WEEKLY",
              "wkst": "FRI"
            }
          }
        }
      }
    },
    "TimeExclusionResponseArraySpec": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "required": [
              "id",
              "type",
              "attributes"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "type": {
                "type": "string"
              },
              "attributes": {
                "$ref": "#/definitions/TimeExclusionResponse"
              }
            }
          }
        }
      },
      "example": {
        "data": [
          {
            "id": "3211177d-c211-43ec-949b-e109686a4abe",
            "type": "twe",
            "attributes": {
              "name": "FridayNightBusyHour",
              "description": "Friday night prime time",
              "locale": "Canada/Montreal",
              "exclusionType": "busyHour",
              "match": {
                "metadata": {
                  "include": {
                    "location": [
                      "football stadium"
                    ],
                    "zone": [
                      "east",
                      "west"
                    ]
                  },
                  "exclude": {
                    "zone": [
                      "north",
                      "south"
                    ]
                  }
                },
                "monitoredObjectIDs": [
                  "abc",
                  "cde"
                ],
                "zones": [
                  "Zone A",
                  "Zone B"
                ],
                "applicationIds": [
                  "ID1",
                  "ID2"
                ],
                "sensorIDs": [
                  "ID1",
                  "ID2"
                ]
              },
              "startTime": "2020-12-20T17:00:00.00Z",
              "endTime": "2020-12-20T21:00:00.00Z",
              "recurrence": {
                "freq": "WEEKLY",
                "wkst": "FRI"
              }
            }
          }
        ]
      }
    },
    "TimeExclusionResponse": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string",
          "x-nullable": true
        },
        "locale": {
          "type": "string",
          "x-nullable": true,
          "description": "Locale label - Should match tome zone define in startTime and endTime, but is not enforced"
        },
        "exclusionType": {
          "type": "string",
          "enum": [
            "busyHour",
            "maintenance"
          ]
        },
        "match": {
          "$ref": "#/definitions/TimeWindowExclusionMatch"
        },
        "startTime": {
          "type": "string",
          "format": "date-time"
        },
        "endTime": {
          "type": "string",
          "format": "date-time",
          "x-nullable": true
        },
        "duration": {
          "type": "string",
          "pattern": "P(\\d+W)?(\\d+D)?(T(\\d+H)?(\\d+M)?(\\d+S)?)?"
        },
        "recurrence": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TimeWindowExclusionRecurrence"
          }
        }
      }
    },
    "TimeWindowExclusionMatch": {
      "type": "object",
      "properties": {
        "monitoredObjectIds": {
          "type": "array",
          "description": "A list of monitored object IDs. Supports '*' wildcard to match all monitored objects",
          "items": {
            "type": "string"
          }
        },
        "metaData": {
          "type": "object",
          "properties": {
            "include": {
              "type": "object",
              "additionalProperties": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "exclude": {
              "type": "object",
              "additionalProperties": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          }
        },
        "applicationIds": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "zones": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "sensorIds": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "TimeWindowExclusionRecurrence": {
      "type": "object",
      "required": [
        "freq"
      ],
      "properties": {
        "freq": {
          "type": "string",
          "enum": [
            "SECONDLY",
            "MINUTELY",
            "HOURLY",
            "DAILY",
            "WEEKLY",
            "MONTHLY",
            "YEARLY"
          ],
          "description": "The frequency",
          "x-nullable": true
        },
        "until": {
          "type": "string",
          "format": "date-time",
          "description": "The end of this recurrence",
          "x-nullable": true
        },
        "count": {
          "type": "integer",
          "description": "The maximum number of recurrence",
          "x-nullable": true
        },
        "interval": {
          "type": "integer",
          "description": "The numeric interval",
          "x-nullable": true
        },
        "bySecond": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 0,
            "maximum": 60
          }
        },
        "byMinute": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 0,
            "maximum": 59
          }
        },
        "byHour": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 0,
            "maximum": 23
          }
        },
        "byDay": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^(\\+|-)?([1-9]|[0-4][0-9]|5[0-3])?(MO|TU|WE|TH|FR|SA|SU)"
          }
        },
        "byMonthDay": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^(\\+|-)?([1-9]|[1-2][0-9]|3[0-1])"
          }
        },
        "byYearDay": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^(\\+|-)?([1-9]|[1-2][0-9][0-9]|3[0-5][0-9]|36[0-6])"
          }
        },
        "byWeekNo": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^(\\+|-)?([1-9]|[0-4][0-9]|5[0-3])"
          }
        },
        "byMonth": {
          "type": "array",
          "items": {
            "type": "integer",
            "minimum": 1,
            "maximum": 12,
            "x-nullable": true
          }
        },
        "bySetPos": {
          "type": "array",
          "items": {
            "type": "string",
            "pattern": "^(\\+|-)?([1-9]|[1-2][0-9][0-9]|3[0-5][0-9]|36[0-6])"
          }
        },
        "wkst": {
          "type": "string",
          "pattern": "^(MO|TU|WE|TH|FR|SA|SU)"
        }
      }
    },
    "TimeWindowExclusionEventArraySpec": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "id",
              "type",
              "attributes"
            ],
            "properties": {
              "id": {
                "type": "string"
              },
              "type": {
                "type": "string"
              },
              "attributes": {
                "$ref": "#/definitions/TimeWindowExclusionEvent"
              }
            }
          }
        }
      }
    },
    "TimeWindowExclusionEvent": {
      "type": "object",
      "properties": {
        "name": {
          "type": "string"
        },
        "description": {
          "type": "string",
          "x-nullable": true
        },
        "locale": {
          "type": "string",
          "x-nullable": true,
          "description": "Locale label - Should match tome zone define in startTime and endTime, but is not enforced"
        },
        "exclusionType": {
          "type": "string",
          "enum": [
            "busyHour",
            "maintenance"
          ]
        },
        "match": {
          "$ref": "#/definitions/TimeWindowExclusionMatch"
        },
        "occurrences": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "startTimestamp": {
                "type": "integer",
                "description": "Unix timestamp (ms)",
                "format": "int64"
              },
              "endTimestamp": {
                "type": "integer",
                "description": "Unix timestamp (ms)",
                "format": "int64"
              }
            }
          }
        }
      },
      "example": [
        {
          "name": "Example",
          "description": "An example",
          "exclusionType": "Busyhour",
          "occurances": [
            {
              "startTimestamp": 1607009009,
              "endTimestamp": 1607010009
            },
            {
              "startTimestamp": 1608009009,
              "endTimestamp": 1608010009
            }
          ],
          "match": {
            "metadata": [
              {
                "location": "football stadium"
              }
            ],
            "monitoredObjectIDs": [
              "abc",
              "cde"
            ],
            "zones": [
              "Zone A",
              "Zone B"
            ],
            "applicationIds": [
              "ID1",
              "ID2"
            ],
            "sensorIDs": [
              "ID1",
              "ID2"
            ]
          }
        }
      ]
    },
    "TenantCreationRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "The request used when creating a new Tenant in Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/TenantCreationObject"
        }
      }
    },
    "TenantUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "The request used when updating an existing Tenant in Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/TenantUpdateObject"
        }
      }
    },
    "TenantResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "The response returned for a single Tenant from Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/Tenant"
        }
      }
    },
    "TenantListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "The response returned for multiple Tenants from Datahub",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Tenant"
          }
        }
      }
    },
    "TenantCreationObject": {
      "type": "object",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "tenants"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "name",
            "urlSubdomain",
            "state"
          ],
          "properties": {
            "name": {
              "type": "string",
              "description": "The name of the Tenant"
            },
            "urlSubdomain": {
              "type": "string",
              "description": "The subdomain used in the URL for accessing the Tenant's portal in Datahub"
            },
            "state": {
              "type": "string",
              "enum": [
                "USER_UNKNOWN",
                "INVITED",
                "ACTIVE",
                "SUSPENDED",
                "PENDING_DELETE"
              ],
              "description": "The current state of the Tenant"
            },
            "allowPasswordAuth": {
              "type": "boolean",
              "description": "Whether or not we allow username/password authentication"
            },
            "openIDProviders": {
              "type": "array",
              "description": "Names of supported OpenID providers",
              "items": {
                "$ref": "#/definitions/OpenIDConfig"
              }
            },
            "samlProviders": {
              "type": "array",
              "description": "Names of supported SAML providers",
              "items": {
                "$ref": "#/definitions/SAMLConfig"
              }
            }
          }
        }
      }
    },
    "TenantUpdateObject": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "tenants"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "The current version of this record. Used to guarantee updates are made in the proper order"
            },
            "name": {
              "type": "string",
              "description": "The name of the Tenant"
            },
            "allowPasswordAuth": {
              "type": "boolean",
              "description": "Whether or not we allow username/password authentication"
            },
            "urlSubdomain": {
              "type": "string",
              "description": "The subdomain used in the URL for accessing the Tenant's portal in Datahub"
            },
            "state": {
              "type": "string",
              "enum": [
                "USER_UNKNOWN",
                "INVITED",
                "ACTIVE",
                "SUSPENDED",
                "PENDING_DELETE"
              ],
              "description": "The current state of the Tenant"
            },
            "openIDProviders": {
              "type": "array",
              "description": "Names of supported OpenID providers",
              "items": {
                "$ref": "#/definitions/OpenIDConfig"
              }
            },
            "samlProviders": {
              "type": "array",
              "description": "Names of supported SAML providers",
              "items": {
                "$ref": "#/definitions/SAMLConfig"
              }
            }
          }
        }
      }
    },
    "Tenant": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "tenants"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "name",
            "urlSubdomain",
            "state",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "The current version of this record. Used to guarantee updates are made in the proper order"
            },
            "name": {
              "type": "string",
              "description": "The name of the Tenant"
            },
            "allowPasswordAuth": {
              "type": "boolean",
              "description": "Whether or not we allow username/password authentication"
            },
            "urlSubdomain": {
              "type": "string",
              "description": "The subdomain used in the URL for accessing the Tenant's portal in Datahub"
            },
            "state": {
              "type": "string",
              "enum": [
                "USER_UNKNOWN",
                "INVITED",
                "ACTIVE",
                "SUSPENDED",
                "PENDING_DELETE"
              ],
              "description": "The current state of the Tenant"
            },
            "openIDProviders": {
              "type": "array",
              "description": "Names of supported OpenID providers",
              "items": {
                "$ref": "#/definitions/OpenIDConfig"
              }
            },
            "samlProviders": {
              "type": "array",
              "description": "Names of supported SAML providers",
              "items": {
                "$ref": "#/definitions/SAMLConfig"
              }
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "The timestamp at which this record was created in Datahub"
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "The timestamp of the last update to this record in Datahub"
            }
          }
        }
      }
    },
    "OpenIDConfig": {
      "type": "object",
      "required": [
        "baseURL",
        "clientID"
      ],
      "properties": {
        "domainMapping": {
          "type": "object",
          "additionalProperties": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        },
        "default": {
          "type": "boolean"
        },
        "label": {
          "type": "string"
        },
        "baseURL": {
          "type": "string"
        },
        "clientID": {
          "type": "string"
        },
        "clientName": {
          "type": "string"
        },
        "secretEnv": {
          "type": "string"
        }
      }
    },
    "SAMLConfig": {
      "type": "object",
      "required": [
        "identityProviderMetadataPath"
      ],
      "properties": {
        "keystorePath": {
          "type": "string"
        },
        "keystorePasswordEnv": {
          "type": "string"
        },
        "privateKeyPasswordEnv": {
          "type": "string"
        },
        "identityProviderMetadataPath": {
          "type": "string"
        },
        "serviceProviderEntityID": {
          "type": "string"
        },
        "serviceProviderMetadataPath": {
          "type": "string"
        },
        "default": {
          "type": "boolean",
          "description": "If this flag is true, then UI will show this one as default login option"
        },
        "clientName": {
          "type": "string"
        },
        "label": {
          "type": "string"
        }
      }
    },
    "IngestionDictionaryListResponse": {
      "type": "object",
      "description": "Provides a listing of all metric values supported by Datahub",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "ingestionDictionaries"
                ]
              },
              "id": {
                "type": "string"
              },
              "attributes": {
                "type": "object",
                "required": [
                  "metrics"
                ],
                "properties": {
                  "metricGroups": {
                    "description": "This property will be deprecated in the next API version.",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "properties": {
                        "vendor": {
                          "type": "string"
                        },
                        "groups": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          }
                        }
                      }
                    }
                  },
                  "metricList": {
                    "description": "Provides an array of objects that describe the possible metric combinations that may be retained by Datahub",
                    "type": "array",
                    "items": {
                      "type": "object",
                      "description": "Describes a single Metric available in Datahub",
                      "properties": {
                        "vendor": {
                          "description": "The name of the Vendor from which this Metric originates",
                          "type": "string"
                        },
                        "monitoredObjectType": {
                          "description": "The name of the type of Monitored Object for which this Metric is applicable",
                          "type": "string"
                        },
                        "metric": {
                          "description": "The name of the Metric",
                          "type": "string"
                        },
                        "rawMetricId": {
                          "description": "The name of the Metric as it is reported during measurments",
                          "type": "string"
                        },
                        "directions": {
                          "type": "array",
                          "items": {
                            "type": "string"
                          },
                          "description": "Describes the possible directions of the test (i.e. actuator to reflector) versus another (i.e. round trip)"
                        },
                        "dimensions": {
                          "description": "Provides data properties by which the Metric may be filtered and/or aggregated",
                          "type": "object",
                          "additionalProperties": {
                            "type": "array",
                            "items": {
                              "type": "string"
                            }
                          }
                        },
                        "unit": {
                          "description": "The unit of measurement used when capturing the value for this Metric",
                          "type": "string"
                        },
                        "ui": {
                          "type": "object",
                          "description": "This property will be deprecated in the next API version.",
                          "properties": {
                            "group": {
                              "type": "string"
                            },
                            "position": {
                              "type": "string"
                            }
                          }
                        }
                      }
                    }
                  },
                  "metrics": {
                    "description": "Metrics will be deprecated in the next API version. Please use the 'metricList' property instead",
                    "type": "object",
                    "additionalProperties": {
                      "type": "object",
                      "properties": {
                        "ui": {
                          "type": "object",
                          "properties": {
                            "metricGroups": {
                              "type": "array",
                              "items": {
                                "type": "string"
                              }
                            }
                          }
                        },
                        "metricMap": {
                          "type": "object",
                          "additionalProperties": {
                            "type": "object",
                            "properties": {
                              "monitoredObjectTypes": {
                                "type": "array",
                                "items": {
                                  "type": "object",
                                  "properties": {
                                    "key": {
                                      "type": "string"
                                    },
                                    "rawMetricId": {
                                      "type": "string"
                                    },
                                    "units": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    },
                                    "directions": {
                                      "type": "array",
                                      "items": {
                                        "type": "string"
                                      }
                                    }
                                  }
                                }
                              },
                              "ui": {
                                "type": "object",
                                "properties": {
                                  "group": {
                                    "type": "string"
                                  },
                                  "position": {
                                    "type": "string"
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "ValidTypesListResponse": {
      "type": "object",
      "description": "Provides known values mappings for Datahub",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "validTypes"
                ]
              },
              "id": {
                "type": "string"
              },
              "attributes": {
                "type": "object",
                "required": [
                  "monitoredObjectTypes",
                  "monitoredObjectDeviceTypes"
                ],
                "properties": {
                  "monitoredObjectTypes": {
                    "type": "object",
                    "description": "Lists the known Monitored Object Types as well as known alias values for Monitored Object types",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "monitoredObjectDeviceTypes": {
                    "type": "object",
                    "description": "Lists the known Monitored Object Device Types as well as known alias values for Monitored Object Device types",
                    "additionalProperties": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "JsonApiSolutionManifestResponse": {
      "type": "object",
      "description": "A manifest containing Skylight Analytics release and solution versions as well as the version of all running services",
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "solutionManifest"
              ]
            },
            "attributes": {
              "type": "object",
              "required": [
                "releaseVersion",
                "solutionVersion",
                "componentVersions"
              ],
              "properties": {
                "solutionVersion": {
                  "type": "string",
                  "description": "The currently installed solution version. If followed by a *, indicates that local modification has been detected",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "releaseVersion": {
                  "type": "string",
                  "description": "The currently installed release version.",
                  "additionalProperties": {
                    "type": "string"
                  }
                },
                "isDirty": {
                  "type": "boolean",
                  "description": "Set to true when a local change was detected in the compose file (i.e. the expected hash of the docker compose file doesn't match the computed one)"
                },
                "componentsVersions": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "name",
                      "image",
                      "version"
                    ],
                    "properties": {
                      "name": {
                        "type": "string"
                      },
                      "image": {
                        "type": "string"
                      },
                      "version": {
                        "type": "string"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "TenantSummaryResponse": {
      "type": "object",
      "description": "Contains the mapping of an alias to a Tenant ID",
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "tenantSummaries"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "properties": {
                "id": {
                  "type": "string",
                  "description": "The unique identifier of the Tenant in Datahub"
                },
                "alias": {
                  "type": "string",
                  "description": "A known alias for the Tenant in Datahub"
                }
              }
            }
          }
        }
      }
    },
    "TenantMetadataUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update a TenantMetadata in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "tenantMetadata"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev",
                "tenantName",
                "metricDatasourceSettings",
                "metadataCategoryLimit",
                "aggregateDataCleaningThreshold",
                "metricQueryConfig",
                "deltaBatchCompactionDurationMinutes",
                "ingestionVacuumSettings",
                "baselinePeriod",
                "alertConfig",
                "latentDataPeriod"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "tenantName": {
                  "type": "string",
                  "description": "The name of a Tenant in Datahub"
                },
                "metadataCategoryLimit": {
                  "type": "integer",
                  "description": "The maximum amount of Metadata Categories allowed for this Tenant"
                },
                "deltaBatchCompactionDurationMinutes": {
                  "type": "integer",
                  "description": "The amount of time we will compact collected delta batch ingestion notifications before submitting them for ingestion",
                  "default": 5,
                  "minimum": 1,
                  "exclusiveMinimum": false,
                  "maximum": 30,
                  "exclusiveMaximum": false
                },
                "aggregateDataCleaningThreshold": {
                  "type": "number",
                  "format": "double",
                  "description": "Percentage (0.0 - 1.0] of data points which must be marked as 'dirty' before the aggregated value will also be marked as 'dirty'",
                  "minimum": 0,
                  "exclusiveMinimum": true,
                  "maximum": 1,
                  "exclusiveMaximum": false
                },
                "ingestionVacuumSettings": {
                  "$ref": "#/definitions/IngestionVersionRetetionProperties"
                },
                "baselinePeriod": {
                  "type": "string",
                  "description": "ISO8601 format period (only Time variant i.e. must start 'PT') which determines how far in the past data will contribute to the baseline average values of metrics."
                },
                "latentDataPeriod": {
                  "type": "string",
                  "description": "ISO8601 format period (only Time variant i.e. must start 'PT') which determines how far in the past data for this Tenant data will be accepted in the real-time ingestion pipeline."
                },
                "metricDatasourceSettings": {
                  "type": "object",
                  "description": "Holds a map of datasource granularity to properties that control how that granularity of metric datasource for the tenant is managed",
                  "additionalProperties": {
                    "$ref": "#/definitions/MetricDatasourceConfig"
                  }
                },
                "metricQueryConfig": {
                  "$ref": "#/definitions/MetricQueryConfig"
                },
                "alertConfig": {
                  "type": "object",
                  "properties": {
                    "enabledAlertPolicyLimit": {
                      "$ref": "#/definitions/enabledAlertPolicyLimit"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "TenantMetadataResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "A single object TenantMetadata response from Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/TenantMetadata"
        }
      }
    },
    "MetricDatasourceConfig": {
      "type": "object",
      "description": "Properties that describe how a metric datasource should be managed",
      "required": [
        "maxIngestionPeriod",
        "acceptNewData",
        "retainData",
        "canQuery",
        "granularity",
        "tableName"
      ],
      "properties": {
        "maxDeltaIngestionThreads": {
          "type": "integer",
          "description": "The maximum amount of threads that will be used to ingest data into this datasource for delta tasks"
        },
        "maxIngestionThreads": {
          "type": "integer",
          "description": "The maximum amount of threads that will be used to ingest data into this datasource for refresh tasks"
        },
        "maxRowsPerFile": {
          "type": "integer",
          "format": "int64",
          "description": "The maximum amount of rows that will be stored in a persisted metric file"
        },
        "maxRowsInMemory": {
          "type": "integer",
          "format": "int64",
          "description": "The maximum amount of rows that will be processed (among all threads) before persisting the metrics files"
        },
        "maxIngestionPeriod": {
          "type": "string",
          "description": "ISO8601 format period (only Time variant i.e. must start 'PT') which determines how far in the past data for this datasource will be accepted."
        },
        "acceptNewData": {
          "type": "boolean",
          "description": "If set to 'true' then new data will be ingested for this datasource. If 'false', no new data will be ingested for this datasource"
        },
        "retainData": {
          "type": "boolean",
          "description": "If set to 'true' then existing data must be retained up to the maxIngestionPeriod. If 'false', data for this datasource may be purged"
        },
        "canQuery": {
          "type": "boolean",
          "description": "If set to 'true' then this datasource may be queried up to maxIngestionPeriod. If 'false', data may be missing from this datasource so it should not be queried"
        },
        "granularity": {
          "type": "string",
          "description": "ISO8601 format period (only Time variant i.e. must start 'PT') which describes the granularity of the data in the datasource."
        },
        "tableName": {
          "type": "string",
          "description": "Name of the table root for finding ingestion data for this datasource."
        }
      }
    },
    "MetricQueryConfig": {
      "type": "object",
      "description": "Properties that describe how Session metrics will be queried from a Multi-Resolution datasource setup",
      "required": [
        "targetNumberOfDataPoints",
        "datasourceQueryDurationMap"
      ],
      "properties": {
        "targetNumberOfDataPoints": {
          "type": "integer",
          "description": "Approximate number of datapoints to return from any Session Metrics query. This is used to determine the Granularity bucket size for an interval."
        },
        "datasourceQueryDurationMap": {
          "type": "object",
          "additionalProperties": {
            "type": "string",
            "description": "ISO8601 format period (only Time variant i.e. must start 'PT') which determines for what duration of time the datasource will be used in queries"
          }
        }
      }
    },
    "TenantMetadata": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "description": "Represents TenantMetadata used to provide context for a Tenant in Datahub",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "tenantMetadata"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "datatype",
            "tenantId",
            "tenantName",
            "metricDatasourceSettings",
            "metadataCategoryLimit",
            "aggregateDataCleaningThreshold",
            "deltaBatchCompactionDurationMinutes",
            "baselinePeriod",
            "ingestionVacuumSettings",
            "metricQueryConfig",
            "alertConfig",
            "latentDataPeriod",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "description": "Name used to identify this type of record in Datahub",
              "type": "string"
            },
            "tenantId": {
              "description": "Unique identifier of a Tenant in Datahub",
              "type": "string"
            },
            "tenantName": {
              "type": "string",
              "description": "The name of a Tenant in Datahub"
            },
            "metadataCategoryLimit": {
              "type": "integer",
              "description": "The maximum amount of Metadata Categories allowed for this Tenant"
            },
            "aggregateDataCleaningThreshold": {
              "type": "number",
              "format": "double",
              "description": "Percentage (0.0 - 1.0] of data points which must be marked as 'dirty' before the aggregated value will also be marked as 'dirty'",
              "minimum": 0,
              "exclusiveMinimum": true,
              "maximum": 1,
              "exclusiveMaximum": false
            },
            "deltaBatchCompactionDurationMinutes": {
              "type": "integer",
              "description": "The amount of time we will compact collected delta batch ingestion notifications before submitting them for ingestion",
              "default": 5,
              "minimum": 1,
              "exclusiveMinimum": false,
              "maximum": 30,
              "exclusiveMaximum": false
            },
            "baselinePeriod": {
              "type": "string",
              "description": "ISO8601 format period (only Time variant i.e. must start 'PT') which determines how far in the past data will contribute to the baseline average values of metrics."
            },
            "ingestionVacuumSettings": {
              "$ref": "#/definitions/IngestionVersionRetetionProperties"
            },
            "metricDatasourceSettings": {
              "type": "object",
              "description": "Holds a map of datasource granularity to properties that control how that granularity of metric datasource for the tenant is managed",
              "additionalProperties": {
                "$ref": "#/definitions/MetricDatasourceConfig"
              }
            },
            "metricQueryConfig": {
              "$ref": "#/definitions/MetricQueryConfig"
            },
            "latentDataPeriod": {
              "type": "string",
              "description": "ISO8601 format period (only Time variant i.e. must start 'PT') which determines how far in the past data for this Tenant data will be accepted in the real-time ingestion pipeline."
            },
            "alertConfig": {
              "type": "object",
              "properties": {
                "enabledAlertPolicyLimit": {
                  "$ref": "#/definitions/enabledAlertPolicyLimit"
                }
              }
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was created."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "IngestionVersionRetetionProperties": {
      "type": "object",
      "required": [
        "metricAdmin",
        "metricDelta",
        "metricTable"
      ],
      "properties": {
        "metricAdmin": {
          "type": "string",
          "description": "ISO8601 format period (only Time variant i.e. must start 'PT') which determines for what period of time old versions of metric admin data (baselines, ing profile data, etc) will be kept"
        },
        "metricDelta": {
          "type": "string",
          "description": "ISO8601 format period (only Time variant i.e. must start 'PT') which determines for what period of time old versions of metric delta will be kept"
        },
        "metricTable": {
          "type": "string",
          "description": "ISO8601 format period (only Time variant i.e. must start 'PT') which determines for what period of time old versions of metric refresh will be kept"
        }
      }
    },
    "ActiveAlert": {
      "type": "object",
      "description": "An active alert for a monitoredObject",
      "required": [
        "tenantId",
        "objectId",
        "policyId"
      ],
      "properties": {
        "tenantId": {
          "type": "string",
          "description": "The tenant ID"
        },
        "objectId": {
          "type": "string",
          "description": "The Object ID for the active alert"
        },
        "policyId": {
          "type": "string",
          "description": "The policy ID"
        },
        "policyName": {
          "type": "string",
          "format": "string",
          "description": "Message is associated with an existing policy's Name"
        },
        "direction": {
          "type": "string",
          "description": "The direction of the metric that caused the alert"
        },
        "raiseProcessedAt": {
          "type": "integer",
          "format": "int64",
          "description": "When the alert was raised at. Note this is not the record's timestamp"
        },
        "startTimestamp": {
          "type": "integer",
          "format": "int64",
          "description": "The timestamp of the last record in the series to trigger this alert"
        },
        "endTimestamp": {
          "type": "integer",
          "format": "int64",
          "description": "The timestamp of the last record in the series to trigger the clearing of this alert"
        },
        "alertState": {
          "type": "string",
          "enum": [
            "raised",
            "cleared",
            "error",
            "forced-clear"
          ],
          "description": "Message type\nforced-clear -\nraised - Policy is declaring violation conditions are met\ncleared - Policy is declaring recovery conditions are met\nerror - Analytics engine encountered an error at timestamp\n"
        },
        "policyType": {
          "type": "string",
          "enum": [
            "micro-tca",
            "anomaly",
            "capture",
            "capture-automatic",
            "security",
            "capture-v2"
          ]
        },
        "metric": {
          "type": "string"
        },
        "duration": {
          "type": "number",
          "description": "The total amount of time spent in violation"
        },
        "meta": {
          "type": "object",
          "description": "Attributes added to a Monitored Object that help identify the Monitored Object as well as provide flitering/grouping properties",
          "pattern": "^[a-z_]+$",
          "additionalProperties": {
            "type": "string"
          }
        },
        "srcLat": {
          "type": "number",
          "format": "float",
          "description": "Geographic latitude of Monitored Object source"
        },
        "srcLon": {
          "type": "number",
          "format": "float",
          "description": "Geographic longitude of Monitored Object source"
        },
        "dstLat": {
          "type": "number",
          "format": "float",
          "description": "Geographic latitude of Monitored Object destination"
        },
        "dstLon": {
          "type": "number",
          "format": "float",
          "description": "Geographic longitude of Monitored Object destination"
        },
        "sourceLocation": {
          "$ref": "#/definitions/MonitoredObjectLocation"
        },
        "destinationLocation": {
          "$ref": "#/definitions/MonitoredObjectLocation"
        },
        "topology": {
          "description": "Tags used to describe the path segments associated with the Monitored Object",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "value": {
          "description": "This can either be the threshold value or a distance measure for dynamic thresholds",
          "type": "string"
        },
        "comparator": {
          "type": "string",
          "enum": [
            "gt",
            "lt",
            "eq",
            "gte",
            "lte"
          ],
          "default": "gt",
          "description": "Operand to use when evaluating the condition.\ngt  = greaterThan\nlt  = lessThan\neq  = equal\n"
        },
        "sessionId": {
          "type": "string"
        },
        "bcn": {
          "type": "string"
        },
        "bca": {
          "type": "string"
        },
        "ip": {
          "type": "string"
        },
        "captureLayer": {
          "type": "string"
        },
        "captureZone": {
          "type": "string"
        },
        "captureApplicationId": {
          "type": "string"
        },
        "captureZoneId": {
          "type": "string"
        },
        "captureMetaThresholds": {
          "type": "number"
        },
        "captureMetaValues": {
          "type": "string"
        },
        "captureMetaIps": {
          "type": "string"
        },
        "captureMetaDesc": {
          "type": "string"
        },
        "captureMetaDate_stop": {
          "type": "number"
        },
        "captureMetaDate_start": {
          "type": "number"
        },
        "captureMetaIp_client": {
          "type": "string"
        },
        "captureMetaIp_count": {
          "type": "number"
        },
        "captureMetaStart": {
          "type": "number"
        },
        "captureMetaStop": {
          "type": "number"
        },
        "captureMetaName": {
          "type": "string"
        },
        "captureMetaAlert_id": {
          "type": "number"
        },
        "captureMetaNow": {
          "type": "number"
        },
        "captureMetaFirst_sent": {
          "type": "number"
        },
        "captureMetaLast_sent": {
          "type": "number"
        },
        "captureMetaSite": {
          "type": "string"
        },
        "captureMetaWorker": {
          "type": "string"
        },
        "captureMetaFiring": {
          "type": "string"
        },
        "captureMetaCertainty": {
          "type": "number"
        },
        "captureMetaHostname": {
          "type": "string"
        },
        "captureMetaCertainty_percent": {
          "type": "number"
        },
        "captureClientZoneId": {
          "type": "string"
        },
        "captureServerZoneId": {
          "type": "string"
        },
        "severity": {
          "type": "string",
          "enum": [
            "low",
            "medium",
            "high",
            "critical"
          ]
        },
        "sourceIp": {
          "type": "string"
        },
        "destinationIp": {
          "type": "string"
        },
        "killchain": {
          "type": "string",
          "enum": [
            "ActionsOnObjective",
            "CommandAndControl",
            "Exfiltration",
            "Exploitation",
            "Reconnaissance"
          ]
        },
        "securityJobType": {
          "type": "string"
        },
        "sourceNetworkAssetRoles": {
          "type": "string"
        },
        "destinationNetworkAssetRoles": {
          "type": "string"
        },
        "securityState": {
          "$ref": "#/definitions/ActiveAlertSecurityState"
        },
        "sourcePort": {
          "type": "number"
        },
        "destinationPort": {
          "type": "number"
        }
      }
    },
    "ActiveAlertSecurityState": {
      "type": "object",
      "properties": {
        "currentState": {
          "type": "string",
          "enum": [
            "new",
            "in-progress",
            "resolved",
            "closed"
          ]
        },
        "changeHistory": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ActiveAlertSecurityStateUpdate"
          }
        }
      }
    },
    "ActiveAlertSecurityStateUpdate": {
      "type": "object",
      "properties": {
        "from": {
          "type": "string"
        },
        "to": {
          "type": "string"
        },
        "userId": {
          "type": "string"
        },
        "timestamp": {
          "type": "integer",
          "format": "int64"
        },
        "comment": {
          "type": "string"
        }
      }
    },
    "ActiveAlertsSecurityStateUpdateRequest": {
      "type": "object",
      "required": [
        "targetAlerts",
        "newState"
      ],
      "properties": {
        "targetAlerts": {
          "type": "array",
          "description": "A list of objectIDs of alerts to change security state of",
          "items": {
            "type": "string"
          }
        },
        "newState": {
          "type": "string",
          "enum": [
            "new",
            "in-progress",
            "resolved",
            "closed"
          ]
        },
        "comment": {
          "type": "string"
        }
      }
    },
    "ActiveAlertsListResponse": {
      "type": "object",
      "description": "ActiveAlert response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ActiveAlert"
          }
        },
        "meta": {
          "type": "object",
          "required": [
            "count"
          ],
          "properties": {
            "count": {
              "type": "integer"
            }
          }
        }
      }
    },
    "ActiveAlertsFilteredCountsResponse": {
      "type": "object",
      "description": "Active Alert counts response",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "id",
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "activeAlertCounts"
              ]
            },
            "attributes": {
              "type": "object",
              "properties": {
                "filters": {
                  "$ref": "#/definitions/ActiveAlertsFilteredListRequest"
                },
                "value": {
                  "type": "number"
                }
              }
            }
          }
        }
      }
    },
    "ActiveAlertsFilteredCountsRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "id",
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "activeAlertCounts"
              ]
            },
            "attributes": {
              "type": "object",
              "properties": {
                "aggregation": {
                  "type": "string",
                  "enum": [
                    "count"
                  ],
                  "default": "count",
                  "description": "Count will provide you the number of active alerts in total."
                },
                "filters": {
                  "$ref": "#/definitions/ActiveAlertsFilteredListRequest"
                }
              }
            }
          }
        }
      }
    },
    "ActiveAlertsQueryContextSortEntry": {
      "type": "object",
      "required": [
        "field"
      ],
      "properties": {
        "field": {
          "type": "string",
          "enum": [
            "objectId",
            "killchain",
            "policyId",
            "securityJobType",
            "severity",
            "startTimestamp",
            "endTimestamp",
            "raiseProcessedAt",
            "sourceIp",
            "destinationIp"
          ]
        },
        "order": {
          "type": "string",
          "x-isnullable": true,
          "enum": [
            "asc",
            "desc"
          ]
        }
      }
    },
    "ActiveAlertsQueryContext": {
      "type": "object",
      "properties": {
        "sort": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ActiveAlertsQueryContextSortEntry"
          }
        },
        "numResults": {
          "type": "integer",
          "format": "int32",
          "x-isnullable": true
        }
      }
    },
    "ActiveAlertsFilteredListRequest": {
      "type": "object",
      "properties": {
        "queryContext": {
          "x-omitempty": true,
          "$ref": "#/definitions/ActiveAlertsQueryContext"
        },
        "expressions": {
          "x-omitempty": true,
          "$ref": "#/definitions/expressions"
        },
        "meta": {
          "x-omitempty": true,
          "$ref": "#/definitions/MetaFilter"
        },
        "metaExclude": {
          "x-omitempty": true,
          "$ref": "#/definitions/MetaExclude"
        },
        "objectId": {
          "type": "array",
          "x-omitempty": true,
          "description": "The Object ID for the active alert",
          "items": {
            "type": "string"
          }
        },
        "policyName": {
          "type": "string",
          "format": "string",
          "description": "Message is associated with an existing policy's Name"
        },
        "policyId": {
          "type": "array",
          "x-omitempty": true,
          "description": "The policy ID",
          "items": {
            "type": "string"
          }
        },
        "policyType": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "direction": {
          "type": "array",
          "x-omitempty": true,
          "description": "The direction of the metric that caused the alert",
          "items": {
            "type": "string"
          }
        },
        "metric": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "topology": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureZone": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureApplicationId": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureZoneId": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureLayer": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureClientZoneId": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureServerZoneId": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "severity": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "sourceLocation": {
          "$ref": "#/definitions/GeoFence"
        },
        "destinationLocation": {
          "$ref": "#/definitions/GeoFence"
        },
        "sourceIp": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "destinationIp": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "killchain": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "securityJobType": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "sourceNetworkAssetRoles": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "destinationNetworkAssetRoles": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        }
      }
    },
    "JsonApiActiveAlertGroupByRequest": {
      "description": "JSON API compliant wrapper for the groupby query",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "groupByActiveAlerts"
              ]
            },
            "attributes": {
              "$ref": "#/definitions/ActiveAlertGroupByConfig"
            }
          }
        }
      }
    },
    "JsonApiActiveAlertGroupByResponse": {
      "description": "JSON API compliant wrapper for the groupby response",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "groupByActiveAlerts"
              ]
            },
            "attributes": {
              "type": "object",
              "allOf": [
                {
                  "$ref": "#/definitions/ActiveAlertGroupByConfig"
                },
                {
                  "type": "object",
                  "required": [
                    "result"
                  ],
                  "properties": {
                    "result": {
                      "$ref": "#/definitions/ActiveAlertGroupByReport"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    },
    "ActiveAlertGroupByConfig": {
      "description": "The necessary request parameters for the metric api call",
      "type": "object",
      "required": [
        "groupingContext",
        "alerts"
      ],
      "properties": {
        "queryContext": {
          "$ref": "#/definitions/ActiveAlertGroupByQueryContext"
        },
        "metaContext": {
          "$ref": "#/definitions/MetaContext"
        },
        "groupingContext": {
          "$ref": "#/definitions/GroupingContext"
        },
        "aggregation": {
          "$ref": "#/definitions/SupportedAggregations"
        },
        "expressions": {
          "description": "Allows to filter alerts with expressions prior to grouping",
          "$ref": "#/definitions/expressions"
        },
        "alerts": {
          "type": "array",
          "x-omitempty": true,
          "description": "A set of identifiers that considers specific alert based on the provided information",
          "items": {
            "$ref": "#/definitions/ActiveAlertSpec"
          }
        },
        "enableSecurityMetrics": {
          "type": "boolean",
          "default": false,
          "description": "Enable additional aggregations for each group of alerts"
        }
      }
    },
    "ActiveAlertGroupByReport": {
      "description": "The rendered response structure from the metric query",
      "type": "array",
      "x-omitempty": true,
      "items": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/definitions/ActiveAlertGroupedResultEntryParameters"
          }
        ]
      }
    },
    "ActiveAlertGroupByQueryContext": {
      "description": "Hints indicating how the query may be Returns",
      "type": "object",
      "properties": {
        "timeout": {
          "description": "Query timeout in milliseconds",
          "type": "integer",
          "example": 30000
        },
        "sortOnGroupingKey": {
          "description": "Allows a client to sort on a grouping key instead of the metric's value",
          "default": "policyId",
          "type": "string",
          "example": "policyId"
        },
        "sorted": {
          "type": "string",
          "description": "Indicates whether the response should return grouped by queries in ascending or descending order. Only applicable to grouped queries.",
          "enum": [
            "asc",
            "desc"
          ],
          "example": [
            "asc",
            "desc"
          ]
        },
        "numResults": {
          "description": "Number of results to return in grouped queries. A non-positive integer for this value implies there is no result limit. Only applicable to grouped queries.",
          "type": "integer",
          "format": "int32",
          "example": 10
        }
      }
    },
    "ActiveAlertGroupedResultEntryParameters": {
      "description": "Describes filtering criteria used for a particular query that uses a grouping",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/ActiveAlertSpec"
        },
        {
          "type": "object",
          "required": [
            "groupedResults"
          ],
          "properties": {
            "groupedResults": {
              "type": "array",
              "x-omitempty": true,
              "items": {
                "type": "object",
                "required": [
                  "value"
                ],
                "properties": {
                  "groupings": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "value": {
                    "type": "number",
                    "format": "float"
                  },
                  "securityMetrics": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  }
                }
              }
            }
          }
        }
      ]
    },
    "ActiveAlertSpec": {
      "description": "Filter object that identifies a specific metric within a monitored object by its key attributes",
      "type": "object",
      "properties": {
        "policyId": {
          "description": "Policy ID to filter on",
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "policyType": {
          "description": "Hint to the query engine to limit the metric to certain types of entity.",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "micro-tca",
            "anomaly",
            "capture",
            "capture-automatic",
            "security",
            "capture-v2"
          ],
          "items": {
            "type": "string"
          }
        },
        "alertState": {
          "description": "Set of one or more alert state to be used by the filter",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "raised",
            "cleared"
          ],
          "items": {
            "type": "string"
          }
        },
        "metric": {
          "description": "Name that identifies the specific metric within a monitored object",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "delayp95",
            "hit.rtt.per_sec"
          ],
          "items": {
            "type": "string"
          }
        },
        "direction": {
          "description": "Set of one or more directions to be used by the filter to identify required metric records",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "0",
            "1"
          ],
          "items": {
            "type": "string"
          }
        },
        "topology": {
          "description": "Name of a node on the route of the Monitored Object",
          "type": "string"
        },
        "objectId": {
          "description": "Set of object IDs to filter on",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "333732dc-99d4-4224-915e-3972b50d10ef",
            "931e7d13-6320-4ad7-ae06-7ff2df4f782a"
          ],
          "items": {
            "type": "string"
          }
        },
        "captureZone": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureApplicationId": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureZoneId": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureLayer": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureClientZoneId": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureServerZoneId": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "severity": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "sourceIp": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "destinationIp": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "killchain": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "securityJobType": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "sourceNetworkAssetRoles": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "destinationNetworkAssetRoles": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "sourceLocation": {
          "$ref": "#/definitions/GeoFence"
        },
        "destinationLocation": {
          "$ref": "#/definitions/GeoFence"
        }
      }
    },
    "AnalyticsRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to request a specific analysis from Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "analytics"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "properties": {
                "request": {
                  "description": "Request for Analytical analysis from Datahub",
                  "type": "object",
                  "properties": {
                    "type": {
                      "type": "string",
                      "enum": [
                        "verticalSliceQuery"
                      ],
                      "default": "verticalSliceQuery"
                    },
                    "patternMatch": {
                      "$ref": "#/definitions/AnalyticsPatternMatch"
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "AnalyticsPatternMatch": {
      "type": "object",
      "description": "Defines the Pattern Match class of anaylics request",
      "properties": {
        "timeSlice": {
          "$ref": "#/definitions/AnalyticsTimeSlice"
        }
      }
    },
    "AnalyticsTimeSlice": {
      "type": "object",
      "description": "Defines the Time Slice sub-class of anaylics request",
      "properties": {
        "configuration": {
          "type": "object",
          "description": "Details outlining the pattern that will be compared against to determine approximate matches",
          "required": [
            "interval",
            "granularity",
            "constraints",
            "pattern"
          ],
          "properties": {
            "pattern": {
              "type": "array",
              "description": "The analytics engine will normalize the pattern time series and then determine monitored objects with similar patterns for the given interval. This will not do time stretching on the dataset but will fill in the gaps so it is one continuous segment.",
              "items": {
                "$ref": "#/definitions/MetricResultEntry"
              }
            },
            "interval": {
              "type": "string",
              "description": "The window of time for which the time slice pattern will be evaluated. Uses ISO 8601 timestamp formatting rules."
            },
            "granularity": {
              "type": "string",
              "description": "The granularity of the datapoints in ISO 8601 format",
              "example": "PT1M"
            },
            "numResults": {
              "type": "integer",
              "description": "The number of results to return for the time slice analysis"
            },
            "constraints": {
              "description": "Provides the metric related scoping parameters for the pattern to match",
              "$ref": "#/definitions/AnalyticsTargetScope"
            }
          }
        },
        "match": {
          "type": "object",
          "description": "Details outlining the specific types of metrics to compare the pattern against for matches",
          "properties": {
            "constraints": {
              "type": "array",
              "description": "An array of metric related scoping parameters for which scopes of data the pattern should be matched against",
              "items": {
                "$ref": "#/definitions/AnalyticsTargetScope"
              }
            }
          }
        }
      }
    },
    "AnalyticsTargetScope": {
      "description": "Properties that filter what matched patterns will be returned. If not provided, then the widest match range will be returned",
      "type": "object",
      "required": [
        "vendor",
        "objectType",
        "metric",
        "direction"
      ],
      "properties": {
        "vendor": {
          "x-omitempty": true,
          "type": "string"
        },
        "objectType": {
          "x-omitempty": true,
          "type": "string"
        },
        "metric": {
          "x-omitempty": true,
          "type": "string"
        },
        "direction": {
          "x-omitempty": true,
          "type": "string"
        }
      }
    },
    "AnalyticsObject": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "analytics"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "tenantId",
            "_id",
            "_rev",
            "datatype",
            "request",
            "results",
            "lastModifiedTimestamp",
            "lastResetTimestamp"
          ],
          "properties": {
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of the Tenant in Datahub"
            },
            "_id": {
              "type": "string"
            },
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "type": "string",
              "description": "Name used to identify this type of record in Datahub"
            },
            "request": {
              "description": "The details of the original request for Analytical analysis from Datahub",
              "type": "object",
              "properties": {
                "type": {
                  "type": "string",
                  "enum": [
                    "verticalSliceQuery"
                  ],
                  "default": "verticalSliceQuery"
                },
                "patternMatch": {
                  "$ref": "#/definitions/AnalyticsPatternMatch"
                }
              }
            },
            "result": {
              "description": "The details of the result of the Analytical analysis from Datahub",
              "type": "object",
              "properties": {
                "computationExecTime": {
                  "type": "string",
                  "description": "The time it took to perform the anyltical analysis."
                },
                "status": {
                  "type": "string",
                  "description": "Indicates the success or failure of an anyltical analysis"
                },
                "message": {
                  "type": "string",
                  "description": "When an anyltical analysis is an error, this message will explain the error"
                },
                "details": {
                  "type": "object",
                  "properties": {
                    "patternMatch": {
                      "type": "object",
                      "description": "Defines the result format for a PatternMatch analytics operation",
                      "properties": {
                        "timeSlice": {
                          "type": "object",
                          "description": "Defines the result format for the Time Slice sub-class of a PatternMatch analytics operation",
                          "properties": {
                            "neighbourResults": {
                              "type": "array",
                              "description": "Ordered list (based on distance) of Monitored Objects that resembled the provided comparison baseline",
                              "items": {
                                "type": "object",
                                "properties": {
                                  "monitoredObjectId": {
                                    "type": "string",
                                    "description": "Unique identifier of the matching Monitored Object"
                                  },
                                  "direction": {
                                    "type": "string",
                                    "description": "The direction matched for the matched pattern"
                                  },
                                  "distance": {
                                    "type": "number",
                                    "format": "double",
                                    "description": "How closely the matching Monitored Object resembles the provided comparison baseline"
                                  },
                                  "vendor": {
                                    "description": "The vendor for the matched pattern",
                                    "type": "string"
                                  },
                                  "objectType": {
                                    "description": "The type of the monitored object for the matched pattern",
                                    "type": "string"
                                  },
                                  "metric": {
                                    "description": "The metric for the matched pattern",
                                    "type": "string"
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "AnalyticsListResponse": {
      "type": "object",
      "description": "Analytics response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/AnalyticsObject"
          }
        }
      }
    },
    "AnalyticsResponse": {
      "type": "object",
      "description": "An Analytics response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/AnalyticsObject"
        }
      }
    },
    "BrandingCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "brandings"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "properties": {
                "color": {
                  "type": "string",
                  "description": "The primary colour used for the Datahub UI"
                },
                "logo": {
                  "$ref": "#/definitions/BrandingLogo",
                  "description": "The image used for the Branding logo"
                }
              }
            }
          }
        }
      }
    },
    "BrandingUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "brandings"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "color": {
                  "type": "string",
                  "description": "The primary colour used for the Datahub UI"
                },
                "logo": {
                  "$ref": "#/definitions/BrandingLogo",
                  "description": "The image used for the Branding logo"
                }
              }
            }
          }
        }
      }
    },
    "BrandingResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/Branding"
        }
      }
    },
    "BrandingListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Branding"
          }
        }
      }
    },
    "Branding": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "brandings"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "datatype",
            "color",
            "logo",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "type": "string"
            },
            "tenantId": {
              "type": "string"
            },
            "color": {
              "description": "The primary colour used for the Datahub UI",
              "type": "string"
            },
            "logo": {
              "description": "The image used for the Branding logo",
              "$ref": "#/definitions/BrandingLogo"
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "BrandingLogo": {
      "type": "object",
      "description": "Describes the information used to display the branding logo image on the Datahub UI",
      "properties": {
        "file": {
          "type": "object",
          "properties": {
            "content_type": {
              "type": "string",
              "description": "Describes the media type of the document stored"
            },
            "data": {
              "type": "string",
              "description": "Contains the image data for the uploaded branding logo"
            }
          }
        }
      }
    },
    "LocaleCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "locales"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "intl",
                "moment",
                "timezone"
              ],
              "properties": {
                "intl": {
                  "type": "string",
                  "description": "The short-form code for the internationalization region"
                },
                "moment": {
                  "type": "string"
                },
                "timezone": {
                  "type": "string",
                  "description": "Timezone used to coordinate timestamps for the specified region"
                }
              }
            }
          }
        }
      }
    },
    "LocaleUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "locales"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "intl": {
                  "type": "string",
                  "description": "The short-form code for the internationalization region"
                },
                "moment": {
                  "type": "string"
                },
                "timezone": {
                  "type": "string",
                  "description": "Timezone used to coordinate timestamps for the specified region"
                }
              }
            }
          }
        }
      }
    },
    "LocaleResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/Locale"
        }
      }
    },
    "LocaleListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Locale"
          }
        }
      }
    },
    "Locale": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "locales"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "datatype",
            "intl",
            "moment",
            "timezone",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "type": "string"
            },
            "tenantId": {
              "type": "string"
            },
            "intl": {
              "type": "string",
              "description": "The short-form code for the internationalization region"
            },
            "moment": {
              "type": "string"
            },
            "timezone": {
              "type": "string",
              "description": "Timezone used to coordinate timestamps for the specified region"
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "MetricIdentifierFilter": {
      "description": "Filter object that identifies a specific metric within a monitored object by its key attributes",
      "type": "object",
      "required": [
        "objectType",
        "metric"
      ],
      "properties": {
        "vendor": {
          "description": "Vendor name associated with the monitored object",
          "type": "string",
          "example": "accedian-twamp"
        },
        "objectType": {
          "description": "Object types to be considered as part of the filter",
          "type": "array",
          "example": [
            [
              "twamp-pe"
            ],
            [
              "twamp-sl",
              "twamp-sf"
            ]
          ],
          "items": {
            "type": "string"
          }
        },
        "metric": {
          "description": "Name that identifies the specific metric within a monitored object",
          "type": "string",
          "example": "delayP95"
        },
        "direction": {
          "description": "Set of one or more directions to be used by the filter to identify required metric records",
          "type": "array",
          "example": [
            [
              "0"
            ],
            [
              "0",
              "1"
            ]
          ],
          "items": {
            "type": "string"
          }
        }
      }
    },
    "MetricBucket": {
      "type": "object",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "fixed",
            "baseline_percentage",
            "baseline_static_below",
            "baseline_static_above"
          ]
        },
        "filterMetric": {
          "type": "string"
        },
        "lower": {
          "description": "The specification for the lower boundary of the bucket",
          "type": "object",
          "required": [
            "value"
          ],
          "properties": {
            "value": {
              "description": "The lower, positive number to be used to describe the lowest value of the bucket. Omitting this value assumes that this bucket includes anything lower than the defined \"upper\" value",
              "type": "number",
              "format": "float"
            },
            "strict": {
              "description": "If set to true, then the lower value is assumed to be exclusive. Otherwise a value of false or the absence of this value assumes that the lower value is to be taken inclusively",
              "type": "boolean"
            }
          }
        },
        "upper": {
          "description": "The specification for the upper boundary of the bucket",
          "type": "object",
          "required": [
            "value"
          ],
          "properties": {
            "value": {
              "description": "The upper, positive number to be used to describe the highest value of the bucket. Omitting this value assumes that this bucket includes anything higher than the defined \"lower\" value",
              "type": "number",
              "format": "float"
            },
            "strict": {
              "description": "If set to true, then the upper value is assumed to be exclusive. Otherwise a value of false or the absence of this value assumes that the upper value is to be taken inclusively",
              "type": "boolean"
            }
          }
        }
      }
    },
    "SupportedAggregations": {
      "type": "string",
      "description": "The type of aggregation (avg/min/max/count/sum) avg - Returns the averaging the metric per monitored object for the time range, within the bounding filter as specified by the bucket property. min - Returns the minimum value for the metric per monitored object for the time range, within the bounding filter as specified by the bucket property. max - Returns the maximum value for the metric per monitored object for the time range, within the bounding filter as specified by the bucket property. count - Returns the number of events within the specified bucket property. A single bucket is the preferred usage but multiple buckets can be used as a band pass filter.  sum - Returns the summed value of all records grouped by the provided groupings  \n",
      "enum": [
        "min",
        "max",
        "avg",
        "count",
        "sum"
      ],
      "example": [
        "min",
        "max",
        "avg",
        "count",
        "sum"
      ]
    },
    "SpatialFilter": {
      "type": "object",
      "properties": {
        "rectangular": {
          "type": "object",
          "properties": {
            "minCoordinates": {
              "$ref": "#/definitions/SpatialCoordinates"
            },
            "maxCoordinates": {
              "$ref": "#/definitions/SpatialCoordinates"
            }
          }
        }
      }
    },
    "SpatialCoordinates": {
      "type": "object",
      "required": [
        "latitude",
        "longitude"
      ],
      "properties": {
        "latitude": {
          "type": "number",
          "format": "float"
        },
        "longitude": {
          "type": "number",
          "format": "float"
        }
      }
    },
    "MetricSpec": {
      "description": "Filter object that identifies a specific metric within a monitored object by its key attributes",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/SupportedMetricDimensionFilters"
        },
        {
          "$ref": "#/definitions/SupportedMetricValueFilters"
        },
        {
          "type": "object",
          "required": [
            "metric"
          ],
          "properties": {
            "metric": {
              "description": "Name that identifies the specific metric within a monitored object",
              "type": "string",
              "example": "delayP95"
            }
          }
        }
      ]
    },
    "SupportedMetricValueFilters": {
      "type": "object",
      "properties": {
        "valueBoundary": {
          "description": "Provides lower and/or lower bounds to filter in the metric value",
          "$ref": "#/definitions/MetricBucket"
        }
      }
    },
    "SupportedMetricDimensionFilters": {
      "type": "object",
      "properties": {
        "vendor": {
          "description": "Vendor name associated with the monitored object",
          "type": "string",
          "example": "accedian-twamp"
        },
        "objectType": {
          "description": "Object types to be considered as part of the filter",
          "type": "array",
          "x-omitempty": true,
          "example": [
            [
              "twamp-pe"
            ],
            [
              "twamp-sl",
              "twamp-sf"
            ]
          ],
          "items": {
            "type": "string"
          }
        },
        "direction": {
          "description": "Set of one or more directions to be used by the filter to identify required metric records",
          "type": "array",
          "x-omitempty": true,
          "example": [
            [
              "0"
            ],
            [
              "0",
              "1"
            ]
          ],
          "items": {
            "type": "string"
          }
        },
        "monitoredObjectId": {
          "description": "Set of one or more monitored object Ids to be used by the filter to identify required metric records",
          "type": "array",
          "x-omitempty": true,
          "example": [
            [
              "abc"
            ],
            [
              "abc",
              "def"
            ]
          ],
          "items": {
            "type": "string"
          }
        },
        "sourceLocation": {
          "$ref": "#/definitions/SpatialFilter"
        },
        "destinationLocation": {
          "$ref": "#/definitions/SpatialFilter"
        },
        "topology": {
          "description": "Name of a node on the route of the Monitored Object",
          "type": "string"
        },
        "metadata": {
          "type": "object",
          "description": "Inclusion and exclusion filters for metadata records",
          "properties": {
            "include": {
              "$ref": "#/definitions/MetaFilter"
            },
            "exclude": {
              "$ref": "#/definitions/MetaFilter"
            }
          }
        }
      }
    },
    "MetricResultSeries": {
      "description": "Describes series data prefixed with the filter criteria that were used to generate the output",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/ResultEntryParameters"
        },
        {
          "type": "object",
          "required": [
            "series"
          ],
          "properties": {
            "series": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/MetricResultEntry"
              }
            }
          }
        }
      ]
    },
    "MetricResultEntry": {
      "description": "A singular time series entry that contains the timestamp and value",
      "type": "object",
      "required": [
        "timestamp",
        "value"
      ],
      "properties": {
        "timestamp": {
          "type": "string"
        },
        "value": {
          "type": "number",
          "format": "double"
        }
      }
    },
    "ResultEntryParameters": {
      "description": "Describes filtering criteria used for a particular query",
      "type": "object",
      "required": [
        "metric"
      ],
      "properties": {
        "monitoredObjectIds": {
          "x-omitempty": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "vendor": {
          "type": "string"
        },
        "objectType": {
          "x-omitempty": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "metric": {
          "type": "string"
        },
        "direction": {
          "x-omitempty": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "MetaFilter": {
      "description": "An object that allows filtering on arbitrary metadata criteria and their values.  The keys in the map are associated with metadata categories and the value array  corresponds to a set of whitelist filter-in values for that category. The logical  semantics associated with this structure are conditional-AND across metadata criteria (keys) and conditional-OR across the values contained within the value array. For example, {\"region\":[\"montreal\",\"ottawa\"], \"group\":[\"radio\"]} will match all records that are of group \"radio\" AND from the region \"montreal\" OR \"ottawa\"\n",
      "type": "object",
      "example": {
        "region": [
          "montreal",
          "ottawa"
        ],
        "group": [
          "radio"
        ]
      },
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "genericFilterMapItem": {
      "properties": {
        "key": {
          "type": "string",
          "example": "zone"
        },
        "values": {
          "type": "array",
          "example": [
            "paris",
            "lyon"
          ],
          "items": {
            "type": "string"
          }
        }
      }
    },
    "MetaExclude": {
      "description": "An array that allows blacklisting one or more metadata criteria. Each key in the array must correspond to a given key in the MetaFilter portion of the request. This exclusion is a logical NOT for any values belonging to the metadata criteria listed in this request. For example, if the MetaFilter is: {\"region\":[\"montreal\",\"ottawa\"], \"group\":[\"radio\"]}, we can have a MetaExclude of the form [\"region\"]. This would result in a request that includes any records that are of group \"radio\" AND NOT in regions Ottawa or Montreal.\n",
      "type": "array",
      "items": {
        "type": "string"
      },
      "example": [
        "group"
      ]
    },
    "DimensionFilter": {
      "description": "An object that allows filtering on dimensions tracked against metric records during ingestion. The keys in the map are associated with the dimension name and the value array corresponds to a set of whitelist filter-in values for that dimension. The logical  semantics associated with this structure are conditional-AND across dimensions (keys) and conditional-OR across the values contained within the value array. For example, {\"firmware\":[\"v1.0.0\",\"v1.0.1\"], \"state\":[\"active\"]} will match all records that have a state of \"active\" AND with firmware versions \"v1.0.0\" OR \"v1.0.1\"\n",
      "type": "object",
      "example": {
        "firmware": [
          "v1.0.0",
          "v1.0.1"
        ],
        "state": [
          "active"
        ]
      },
      "additionalProperties": {
        "type": "array",
        "items": {
          "type": "string"
        }
      }
    },
    "enabledAlertPolicyLimit": {
      "type": "object",
      "properties": {
        "micro-tca": {
          "type": "integer",
          "example": 20,
          "description": "Describes the total number of active micro-tca policies"
        },
        "capture": {
          "type": "integer",
          "example": 20,
          "description": "Describes the total number of active capture policies"
        },
        "security": {
          "type": "integer",
          "example": 20,
          "description": "Describes the total number of active security policies"
        }
      }
    },
    "expressionCondition": {
      "type": "object",
      "properties": {
        "equal": {
          "x-omitempty": true,
          "type": "string"
        },
        "notequal": {
          "x-omitempty": true,
          "type": "string"
        },
        "lt": {
          "x-omitempty": true,
          "x-nullable": true,
          "type": "integer"
        },
        "gt": {
          "x-omitempty": true,
          "x-nullable": true,
          "type": "integer"
        },
        "in": {
          "x-omitempty": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "notin": {
          "x-omitempty": true,
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "expressionItems": {
      "type": "object",
      "properties": {
        "field": {
          "type": "string"
        },
        "condition": {
          "$ref": "#/definitions/expressionCondition"
        },
        "expressions": {
          "x-omitempty": true,
          "$ref": "#/definitions/expressions"
        }
      }
    },
    "expressions": {
      "type": "object",
      "properties": {
        "operator": {
          "type": "string",
          "enum": [
            "and",
            "or"
          ],
          "example": "and",
          "description": "Locical Operator for filter fields"
        },
        "expressions": {
          "type": "array",
          "items": {
            "x-omitempty": true,
            "$ref": "#/definitions/expressionItems"
          }
        }
      }
    },
    "CompositeMetric": {
      "description": "Composite metrics",
      "type": "object",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "compositeMetrics"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "name",
            "operation",
            "vendor",
            "direction",
            "objectType"
          ],
          "properties": {
            "_id": {
              "type": "string"
            },
            "_rev": {
              "type": "string"
            },
            "tenantId": {
              "description": "Unique identifier of a Tenant in Datahub",
              "type": "string"
            },
            "name": {
              "description": "Name of the composition",
              "type": "string"
            },
            "direction": {
              "description": "The composite metric user's defined direction.",
              "type": "string"
            },
            "vendor": {
              "description": "The composite metric user's defined direction.",
              "type": "string"
            },
            "objectType": {
              "description": "Object types to be considered as part of the filter",
              "type": "array",
              "example": [
                [
                  "twamp-pe"
                ],
                [
                  "twamp-sl",
                  "twamp-sf"
                ]
              ],
              "items": {
                "type": "string"
              }
            },
            "description": {
              "description": "Space to provide in depth explanation of the composition.",
              "type": "string"
            },
            "enabled": {
              "description": "Used to enable/disable the composition from the GUI. Compositions are always available when using the RESTful API.",
              "type": "boolean"
            },
            "unitType": {
              "description": "The composite metric's unit of measurement.",
              "type": "string",
              "example": "us"
            },
            "createdTimestamp": {
              "type": "integer",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "description": "Time since epoch at which this object was last altered."
            },
            "operation": {
              "$ref": "#/definitions/CompositeMetricOperation"
            }
          }
        }
      }
    },
    "CompositionParameters": {
      "required": [
        "type"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "constant",
            "metric",
            "compositeMetric"
          ],
          "x-omitempty": true
        },
        "metricIdentifier": {
          "$ref": "#/definitions/MetricIdentifierFilter",
          "x-omitempty": true
        },
        "constant": {
          "$ref": "#/definitions/CompositeConstant",
          "x-omitempty": true
        },
        "compositionId": {
          "type": "string",
          "x-omitempty": true
        }
      }
    },
    "CompositeMetricOperation": {
      "description": "CompositeMetric metrics operations.",
      "type": "object",
      "required": [
        "type",
        "parameters"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "add",
            "subtract",
            "divide",
            "multiply"
          ]
        },
        "parameters": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CompositionParameters"
          }
        }
      }
    },
    "CompositeConstant": {
      "description": "For arithmetic compositions, constant float values be used as part of the artihmetic",
      "type": "object",
      "required": [
        "value"
      ],
      "properties": {
        "value": {
          "type": "number",
          "format": "double",
          "x-omitempty": true
        }
      }
    },
    "CompositeMetricCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to create a CompositeMetric metric in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "compositeMetrics"
              ]
            },
            "attributes": {
              "type": "object",
              "required": [
                "name",
                "operation",
                "enabled",
                "direction",
                "vendor",
                "objectType",
                "unitType"
              ],
              "properties": {
                "name": {
                  "description": "Name of the composition",
                  "type": "string"
                },
                "direction": {
                  "description": "The composite metric user's defined direction.",
                  "type": "string"
                },
                "vendor": {
                  "description": "The composite metric user's defined direction.",
                  "type": "string"
                },
                "objectType": {
                  "description": "Object types to be considered as part of the filter",
                  "type": "array",
                  "example": [
                    [
                      "twamp-pe"
                    ],
                    [
                      "twamp-sl",
                      "twamp-sf"
                    ]
                  ],
                  "items": {
                    "type": "string"
                  }
                },
                "description": {
                  "description": "Space to provide in depth explanation of the composition.",
                  "type": "string"
                },
                "enabled": {
                  "description": "Used to enable/disable the composition from the GUI. Compositions are always available when using the RESTful API.",
                  "type": "boolean"
                },
                "unitType": {
                  "description": "The composite metric's unit of measurement.",
                  "type": "string"
                },
                "operation": {
                  "$ref": "#/definitions/CompositeMetricOperation"
                }
              }
            }
          }
        }
      }
    },
    "CompositeMetricUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update a CompositeMetric metric in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id",
            "enabled"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "compositeMetrics"
              ]
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev"
              ],
              "properties": {
                "_rev": {
                  "type": "string"
                },
                "name": {
                  "description": "Name of the composition",
                  "type": "string"
                },
                "direction": {
                  "description": "The composite metric user's defined direction.",
                  "type": "string"
                },
                "vendor": {
                  "description": "The composite metric user's defined direction.",
                  "type": "string"
                },
                "objectType": {
                  "description": "Object types to be considered as part of the filter",
                  "type": "array",
                  "example": [
                    [
                      "twamp-pe"
                    ],
                    [
                      "twamp-sl",
                      "twamp-sf"
                    ]
                  ],
                  "items": {
                    "type": "string"
                  }
                },
                "description": {
                  "description": "Space to provide in depth explanation of the composition.",
                  "type": "string"
                },
                "enabled": {
                  "type": "boolean"
                },
                "unitType": {
                  "description": "The composite metric's unit of measurement.",
                  "type": "string"
                },
                "operation": {
                  "$ref": "#/definitions/CompositeMetricOperation"
                }
              }
            }
          }
        }
      }
    },
    "CompositeMetricResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "A single object CompositeMetric metric response from Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/CompositeMetric"
        }
      }
    },
    "CompositeMetricListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Response for one or more CompositeMetricd metrics from Datahub",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/CompositeMetric"
          }
        }
      }
    },
    "ConnectorConfigCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "connectorConfigs"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "url",
                "type"
              ],
              "properties": {
                "name": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "port": {
                  "type": "integer"
                },
                "pollingFrequency": {
                  "type": "integer",
                  "default": 60
                },
                "username": {
                  "type": "string"
                },
                "password": {
                  "type": "string"
                },
                "exportGroup": {
                  "type": "string"
                },
                "datahubHeartbeatFrequency": {
                  "type": "integer"
                },
                "datahubConnectionRetryFrequency": {
                  "type": "integer"
                },
                "type": {
                  "type": "string"
                },
                "zone": {
                  "type": "string",
                  "pattern": "^[a-zA-Z0-9:_-]*$"
                },
                "prometheusAddr": {
                  "type": "string",
                  "description": "When set, instructs roadrunner to connect to this local prometheus store intermediary metrics"
                },
                "prometheusPort": {
                  "type": "integer"
                },
                "ciscoTelemetryConfig": {
                  "$ref": "#/definitions/CiscoTelemetryConfig"
                },
                "openMetricsConfig": {
                  "$ref": "#/definitions/OpenMetricsConfig"
                },
                "openMetricsScraperConfig": {
                  "$ref": "#/definitions/OpenMetricsScraperConfig"
                },
                "agentProxyConfig": {
                  "$ref": "#/definitions/AgentProxyConfig"
                },
                "SNMPConfig": {
                  "$ref": "#/definitions/SNMPConfig"
                },
                "SNMPTrapSenderConfig": {
                  "$ref": "#/definitions/SNMPTrapSenderConfig"
                },
                "MQTTConfig": {
                  "$ref": "#/definitions/MQTTConfig"
                },
                "restartRoadrunner": {
                  "type": "boolean",
                  "description": "Triggers a restart of roadrunner on configuration reload"
                },
                "pauseRoadRunnerMetricIngestion": {
                  "type": "boolean",
                  "description": "Pauses RoadRunner Ingestion",
                  "default": false
                },
                "sessionFilterProfileID": {
                  "type": "string",
                  "description": "If set, RR will fetch and use the session filter profile for the given ID."
                }
              }
            }
          }
        }
      }
    },
    "ConnectorConfigUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "connectorConfigs"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "name": {
                  "type": "string"
                },
                "url": {
                  "type": "string"
                },
                "port": {
                  "type": "integer"
                },
                "pollingFrequency": {
                  "type": "integer"
                },
                "username": {
                  "type": "string"
                },
                "password": {
                  "type": "string"
                },
                "exportGroup": {
                  "type": "string"
                },
                "datahubHeartbeatFrequency": {
                  "type": "integer"
                },
                "datahubConnectionRetryFrequency": {
                  "type": "integer"
                },
                "type": {
                  "type": "string"
                },
                "zone": {
                  "type": "string",
                  "pattern": "^[a-zA-Z0-9_-]*$"
                },
                "prometheusAddr": {
                  "type": "string",
                  "description": "When set, instructs roadrunner to connect to this local prometheus store intermediary metrics"
                },
                "prometheusPort": {
                  "type": "integer"
                },
                "ciscoTelemetryConfig": {
                  "$ref": "#/definitions/CiscoTelemetryConfig"
                },
                "openMetricsConfig": {
                  "$ref": "#/definitions/OpenMetricsConfig"
                },
                "openMetricsScraperConfig": {
                  "$ref": "#/definitions/OpenMetricsScraperConfig"
                },
                "agentProxyConfig": {
                  "$ref": "#/definitions/AgentProxyConfig"
                },
                "SNMPConfig": {
                  "$ref": "#/definitions/SNMPConfig"
                },
                "SNMPTrapSenderConfig": {
                  "$ref": "#/definitions/SNMPTrapSenderConfig"
                },
                "MQTTConfig": {
                  "$ref": "#/definitions/MQTTConfig"
                },
                "sessionFilterProfileID": {
                  "type": "string",
                  "description": "If set, RR will fetch and use the session filter profile for the given ID."
                }
              }
            }
          }
        }
      }
    },
    "ConnectorConfigResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/ConnectorConfig"
        }
      }
    },
    "ConnectorConfigListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ConnectorConfig"
          }
        }
      }
    },
    "ConnectorConfig": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "connectorConfigs"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "url",
            "pollingFrequency",
            "type",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "loglvl": {
              "type": "string",
              "enum": [
                "debug",
                "info",
                "warning",
                "error"
              ],
              "default": "info"
            },
            "datatype": {
              "type": "string"
            },
            "tenantId": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "url": {
              "type": "string"
            },
            "port": {
              "type": "integer"
            },
            "pollingFrequency": {
              "type": "integer"
            },
            "username": {
              "type": "string"
            },
            "password": {
              "type": "string"
            },
            "exportGroup": {
              "type": "string"
            },
            "datahubHeartbeatFrequency": {
              "type": "integer"
            },
            "datahubConnectionRetryFrequency": {
              "type": "integer"
            },
            "type": {
              "type": "string"
            },
            "zone": {
              "type": "string"
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            },
            "connectorInstanceId": {
              "type": "string",
              "description": "When set, describes the connectorInstanceId that corresponds to a roadrunner connection and that is currently using this connectorConfig"
            },
            "prometheusAddr": {
              "type": "string",
              "description": "When set, instructs roadrunner to connect to this local prometheus store intermediary metrics"
            },
            "prometheusPort": {
              "type": "integer"
            },
            "SNMPConfig": {
              "$ref": "#/definitions/SNMPConfig"
            },
            "SNMPTrapSenderConfig": {
              "$ref": "#/definitions/SNMPTrapSenderConfig"
            },
            "MQTTConfig": {
              "$ref": "#/definitions/MQTTConfig"
            },
            "ciscoTelemetryConfig": {
              "$ref": "#/definitions/CiscoTelemetryConfig"
            },
            "openMetricsConfig": {
              "$ref": "#/definitions/OpenMetricsConfig"
            },
            "openMetricsScraperConfig": {
              "$ref": "#/definitions/OpenMetricsScraperConfig"
            },
            "agentProxyConfig": {
              "$ref": "#/definitions/AgentProxyConfig"
            },
            "sessionFilterProfileID": {
              "type": "string",
              "description": "If set, RR will fetch and use the session filter profile for the given ID."
            }
          }
        }
      }
    },
    "SNMPConfig": {
      "type": "object",
      "required": [
        "version",
        "baseOIDs",
        "targetList"
      ],
      "properties": {
        "targetList": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "target"
            ],
            "properties": {
              "host": {
                "type": "string"
              },
              "port": {
                "type": "integer",
                "default": 161
              },
              "name": {
                "type": "string"
              }
            }
          }
        },
        "logWalkResults": {
          "type": "boolean",
          "description": "Intruct roadrunner to dump the total walk resutls to log for debug purposes. WARNING - On system with lots of\nSNMP targets, this can quite drastically reduce peformance\n"
        },
        "logSNMPTableResults": {
          "type": "boolean",
          "description": "Intruct roadrunner to dump a table view in the logs of the data extracted from the SNMP walk. WARNING - On system with lots of\nSNMP targets, this can quite drastically reduce peformance\n"
        },
        "version": {
          "type": "string",
          "description": "The SNMP Version protocol to use (either v2c or v3)",
          "default": "v3"
        },
        "V3PrivacyProtocol": {
          "type": "string",
          "description": "The privacy protocol to use (AES or DES)",
          "enum": [
            "AES",
            "DES"
          ],
          "default": "AES"
        },
        "V3AuthenticationProtocol": {
          "type": "string",
          "description": "The authentication protocol to use for V3 (SHA or MD5)",
          "enum": [
            "SHA",
            "MD5"
          ],
          "default": "SHA"
        },
        "V3PrivMode": {
          "type": "string",
          "description": "The v3 privacy mode (NoAuthNoPriv, AuthNoPriv, AuthPriv)",
          "enum": [
            "NoAuthNoPriv",
            "AuthNoPriv",
            "AuthPriv"
          ],
          "default": "AuthPriv"
        },
        "community": {
          "type": "string",
          "description": "When using v2c SNMP version, the community to use",
          "default": "public"
        },
        "walkType": {
          "type": "string",
          "enum": [
            "walk",
            "bulkwalk"
          ],
          "default": "bulkwalk",
          "description": "Allows the choice of using snmp walk vs snmp bulk walk\n"
        },
        "timeout": {
          "type": "string",
          "description": "The fetch timeout duration (in go time.Duration string format)",
          "default": "10s"
        },
        "maxRepetition": {
          "type": "integer",
          "description": "The maximum number of elements to fetch in a bulkGetNext (used during SNMPv3 walks)",
          "default": 20
        },
        "baseOIDs": {
          "type": "array",
          "items": {
            "type": "string"
          },
          "description": "The base OID to start the SNMP walk from. A single bulk fetch is issued every Polling frequency using the OID as root"
        },
        "mibPath": {
          "type": "string",
          "description": "A path that is local to the roadrunner instances and that contains properly json formatted mibs for mib resolution. \nSee https://github.com/qmsk/snmpbot for details\n",
          "default": "/defaultmibs/"
        },
        "recordMappings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/RecordMappingHeader"
          }
        },
        "testRawFilePaths": {
          "description": "For SNMP testing, Roadrunner can fetch a test file from that location and serve it instead of \nhaving to connect to real devices. \n",
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "SNMPTrapSenderConfig": {
      "type": "object",
      "required": [
        "trapTargetHost",
        "trapTargetPort",
        "community"
      ],
      "properties": {
        "trapTargetHost": {
          "type": "string"
        },
        "trapTargetPort": {
          "type": "string"
        },
        "community": {
          "type": "string"
        },
        "timeout": {
          "type": "integer"
        }
      }
    },
    "MQTTConfig": {
      "type": "object",
      "properties": {
        "brokerURI": {
          "type": "string"
        },
        "clientID": {
          "type": "string"
        },
        "notificationTopic": {
          "type": "string"
        },
        "user": {
          "type": "string"
        },
        "token": {
          "type": "string"
        }
      }
    },
    "CiscoTelemetryConfig": {
      "type": "object",
      "properties": {
        "logFetchResults": {
          "type": "boolean",
          "description": "Intruct roadrunner to dump all data retrieved from cisco-pipeline to log\n"
        },
        "logTableResults": {
          "type": "boolean",
          "description": "Intruct roadrunner to dump a table view in the logs of the data extracted from cisco-pipeline. WARNING - On system with lots of\nSNMP targets, this can quite drastically reduce peformance\n"
        },
        "recordMappings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/RecordMappingHeader"
          }
        }
      }
    },
    "OpenMetricsConfig": {
      "type": "object",
      "properties": {
        "logFetchResults": {
          "type": "boolean",
          "description": "Instruct roadrunner to dump all data retrieved from open metrics pipeline to log\n"
        },
        "logTableResults": {
          "type": "boolean",
          "description": "Instruct roadrunner to dump a table view in the logs of the data extracted from open metrics pipeline\n"
        },
        "metricsGatewayHost": {
          "type": "string",
          "description": "The address of the web server which the data source will receive metrics on.\n"
        },
        "metricsGatewayPort": {
          "type": "integer",
          "description": "The port for the web server which the data source will receive metrics on.\n"
        },
        "metricsGatewayURL": {
          "type": "string",
          "description": "Endpoint on the web server on which open metrics will be received.\n"
        },
        "metricsGatewayTLS": {
          "type": "boolean",
          "description": "Use TLS between the agent and RR for OpenMetrics data\n"
        },
        "metricsGatewayJWT": {
          "type": "boolean",
          "description": "Perform JWT verification on connections between the sensor agents and RR for OpenMetricsData\n",
          "default": true
        },
        "blockDuplicateAgentIds": {
          "type": "boolean",
          "description": "Block connections from sensor agents if another connection is already registered with the same id\n",
          "default": true
        },
        "recordMappings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/RecordMappingHeader"
          }
        },
        "enableNativeMetrics": {
          "type": "boolean",
          "description": "Feature flag to enable connector to publish open metrics in native format.\n"
        }
      }
    },
    "OpenMetricsScraperConfig": {
      "type": "object",
      "required": [
        "prometheusConfig"
      ],
      "properties": {
        "prometheusConfig": {
          "type": "string",
          "description": "Raw contents of a prometheus.yml config to use while scraping\n"
        },
        "batchFrequency": {
          "type": "string",
          "description": "Metric data is batched and marked as ready for sending from RoadRunner at this frequency.\n",
          "example": "30s"
        },
        "dictionaryReportFrequency": {
          "type": "string",
          "description": "Ingestion Dictionaries are sent from RoadRunner at this frequency.\n",
          "example": "30s"
        }
      }
    },
    "AgentProxyConfig": {
      "type": "object",
      "properties": {
        "orchestratorHost": {
          "type": "string",
          "description": "Address or hostname of the sensor orchestration component.\n"
        },
        "orchestratorPort": {
          "type": "integer",
          "description": "The port which the sensor orchestration component is listening for connections on.\n"
        },
        "orchestratorURL": {
          "type": "string",
          "description": "The endpoint on the sensor orchestrator for agent control traffic.\n"
        },
        "agentProxyHost": {
          "type": "string",
          "description": "The address of the proxy server used by the sensor agents for control messages.\n"
        },
        "agentProxyTLS": {
          "type": "boolean",
          "description": "Use TLS between the agent and RR for control messages\n"
        },
        "agentProxyJWT": {
          "type": "boolean",
          "description": "Perform JWT authentication on connections between the sensor agents and RR for control messages\n",
          "default": true
        },
        "agentProxyPort": {
          "type": "integer",
          "description": "The port for the proxy server used by the sensor agents for control messages.\n"
        },
        "agentProxyURL": {
          "type": "string",
          "description": "Endpoint on the proxy server for sensor agents to use for establishing a connection to the proxy.\n"
        }
      }
    },
    "RecordMappingHeader": {
      "type": "object",
      "required": [
        "objectType",
        "monitoredObjectId"
      ],
      "properties": {
        "monitoredObjectId": {
          "type": "string"
        },
        "objectType": {
          "type": "string"
        },
        "sysUpTimeticks": {
          "type": "string",
          "description": "The OID (or SNMPv2-MIB::sysUpTime )\n"
        },
        "sysCurrentTime": {
          "type": "string",
          "description": "The oid (or mib handle) for the current time of the system. We use that and sysUpTimeTick \nto compute a date from timetick\n"
        },
        "mappingType": {
          "type": "string",
          "enum": [
            "scalars",
            "array",
            "timetickArray"
          ],
          "default": "scalars",
          "description": "Describes if the raw record format is a single scalar or if it is express as an array. \nIn some raw format (for instance, SNMP, or CiscoTelemetry), arrays are natively supported. When this is the \ncase, the connectors instance will be instructed to parse the array and generate one row of data\nper row in the array\n"
        },
        "mappingMatch": {
          "$ref": "#/definitions/MatchEntry"
        },
        "mappings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/RecordMapping"
          }
        }
      }
    },
    "MatchEntry": {
      "type": "object",
      "required": [
        "key",
        "matches"
      ],
      "properties": {
        "key": {
          "type": "string"
        },
        "matches": {
          "type": "string"
        }
      }
    },
    "RecordMapping": {
      "type": "object",
      "required": [
        "headerName",
        "rawSourceName"
      ],
      "properties": {
        "headerName": {
          "type": "string",
          "description": "Defines the header name for the column of data to be sent to Analytics"
        },
        "rawSourceName": {
          "type": "string",
          "description": "The Source name of the metrics to fetch. For SNMP, this can be either a mib handle (for instance, for Mib2, SNMPv2-MIB::sysName), \nor the equivalent OID (.1.3.6.1.2.1.1.5.0). Note that for in order for mib handle resolution to work, the appropriate mib must have been\nprovided to Connector's deployed instance upfront.\n"
        },
        "ObjectOIDMappingType": {
          "type": "string",
          "enum": [
            "oidIndex",
            "instanceID",
            "encoded",
            "encodedv2",
            "lookup",
            ""
          ],
          "default": "",
          "description": "Describes how objects IDs are encoded inside the OID. In some cases, portions of the OID are used as an instance ID, and this is important to know\nand use for mapping data to the correct object.\n"
        },
        "rawRecordType": {
          "type": "string",
          "enum": [
            "timestamp",
            "fixed",
            "interpolate",
            "mapped",
            "rate",
            "rateMean",
            "rate1",
            "rate5",
            "rate15",
            "oidIndex",
            "timetick",
            "instanceID",
            "encoded",
            "encodedv2",
            "lookup",
            "transformation",
            "instanceIDMap",
            ""
          ],
          "default": "",
          "description": "Describes if the raw record format a generated timestamp at the connector level (for \nsources where the collection time is not available), \"fixed\" (an absolute provided here), \"interpolate\" (we apply the value from another \nfield specified in the rawSourceName -- for instance, if field \"Name\" is interpolated and has rawSourceName=objectId, we will use the computed \nobjectId to set the value of the field \"Name\") or if it is express as an mapped value, (fetched from the data received from the probed host).\n\"rateMean\", \"rate1\", \"rate5\" and \"rate15\" computes the specified rate and sets this mapping with the appropriate value.\n"
        },
        "includeInObjectId": {
          "type": "boolean",
          "default": false,
          "description": "Wether this record's value must be included as part of the object-ID in the row"
        },
        "Transformation": {
          "type": "object",
          "$ref": "#/definitions/Transformation"
        },
        "InstanceIDIdx": {
          "type": "array",
          "description": "If it's a single number, it's the index of the value in the OID (after we split on dots).\nIf it's an array of 2, it's the start and end indeces of the OID.\n",
          "items": {
            "type": "integer"
          },
          "maxItems": 2
        },
        "ChildOid": {
          "type": "string",
          "description": "The full child oid to match on\n",
          "example": "1.2.3"
        },
        "LookupSrcName": {
          "type": "string",
          "description": "The source name of the value we will need in order to do the lookup\n"
        },
        "LookupDestName": {
          "type": "string",
          "description": "The name of the field we're matching the lookup against'\n"
        },
        "objectIdJoinKey": {
          "type": "string",
          "default": "-",
          "description": "Which chain of characters to use to join this value's to the object Id. Only applicable when \"includeInObjectId\" is true"
        }
      }
    },
    "Transformation": {
      "type": "object",
      "properties": {
        "Operation": {
          "type": "string"
        },
        "Parameter": {
          "type": "string"
        },
        "Type": {
          "type": "string",
          "enum": [
            "fixed",
            "interpolate"
          ]
        }
      }
    },
    "ConnectorInstanceCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "connectorInstances"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "status",
                "hostname"
              ],
              "properties": {
                "status": {
                  "type": "string"
                },
                "hostname": {
                  "type": "string"
                }
              }
            }
          }
        }
      }
    },
    "ConnectorInstanceUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "connectorInstances"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "status": {
                  "type": "string"
                },
                "hostname": {
                  "type": "string"
                },
                "createdTimestamp": {
                  "type": "integer",
                  "format": "int64",
                  "description": "Time since epoch at which this object was instantiated."
                },
                "lastModifiedTimestamp": {
                  "type": "integer",
                  "format": "int64",
                  "description": "Time since epoch at which this object was last altered."
                }
              }
            }
          }
        }
      }
    },
    "ConnectorInstanceResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/ConnectorInstance"
        }
      }
    },
    "ConnectorInstanceListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ConnectorInstance"
          }
        }
      }
    },
    "ConnectorInstance": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "connectorInstances"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "datatype",
            "tenantId",
            "status",
            "hostname",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "type": "string"
            },
            "tenantId": {
              "type": "string"
            },
            "status": {
              "type": "string"
            },
            "hostname": {
              "type": "string"
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "NetworkAssetListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NetworkAsset"
          }
        },
        "meta": {
          "type": "object",
          "required": [
            "count"
          ],
          "properties": {
            "count": {
              "type": "integer"
            }
          }
        }
      }
    },
    "NetworkAssetResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/NetworkAsset"
        }
      }
    },
    "NetworkAssetCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to create a new Network Asset",
      "properties": {
        "data": {
          "$ref": "#/definitions/NetworkAsset"
        }
      }
    },
    "NetworkAssetUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update an existing Network Asset",
      "properties": {
        "data": {
          "$ref": "#/definitions/NetworkAsset"
        }
      }
    },
    "NetworkAssetQueryContextSortEntry": {
      "type": "object",
      "required": [
        "field"
      ],
      "properties": {
        "field": {
          "type": "string",
          "enum": [
            "firstSeen",
            "lastSeen"
          ]
        },
        "order": {
          "type": "string",
          "x-isnullable": true,
          "enum": [
            "asc",
            "desc"
          ]
        }
      }
    },
    "NetworkAssetFilteredListRequest": {
      "type": "object",
      "properties": {
        "queryContext": {
          "x-omitempty": true,
          "$ref": "#/definitions/NetworkAssetQueryContext"
        },
        "meta": {
          "$ref": "#/definitions/MetaFilter"
        },
        "metaExclude": {
          "$ref": "#/definitions/MetaExclude"
        },
        "ip": {
          "type": "array",
          "x-omitempty": true,
          "description": "An array of IPs",
          "items": {
            "type": "string"
          }
        },
        "mac": {
          "type": "array",
          "x-omitempty": true,
          "description": "An array of MACs",
          "items": {
            "type": "string"
          }
        },
        "roles": {
          "type": "array",
          "x-omitempty": true,
          "description": "An array of Roles",
          "items": {
            "$ref": "#/definitions/NetworkAssetRole"
          }
        },
        "firstSeen": {
          "type": "object",
          "properties": {
            "from": {
              "type": "integer",
              "format": "int64"
            },
            "to": {
              "type": "integer",
              "format": "int64"
            }
          }
        },
        "lastSeen": {
          "type": "object",
          "properties": {
            "from": {
              "type": "integer",
              "format": "int64"
            },
            "to": {
              "type": "integer",
              "format": "int64"
            }
          }
        }
      }
    },
    "NetworkAssetFilteredCountResponse": {
      "type": "object",
      "description": "Active Alert counts response",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "networkAssetCount"
              ]
            },
            "attributes": {
              "type": "object",
              "properties": {
                "filters": {
                  "$ref": "#/definitions/NetworkAssetFilteredListRequest"
                },
                "count": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "NetworkAssetGroupByRequest": {
      "description": "JSON API compliant wrapper for the groupby query",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "groupByNetworkAssets"
              ]
            },
            "attributes": {
              "$ref": "#/definitions/NetworkAssetGroupByConfig"
            }
          }
        }
      }
    },
    "NetworkAssetGroupByResponse": {
      "description": "JSON API compliant wrapper for the groupby response",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "groupByNetworkAssets"
              ]
            },
            "attributes": {
              "type": "object",
              "allOf": [
                {
                  "$ref": "#/definitions/NetworkAssetGroupByConfig"
                },
                {
                  "type": "object",
                  "required": [
                    "result"
                  ],
                  "properties": {
                    "result": {
                      "$ref": "#/definitions/NetworkAssetGroupByReport"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    },
    "NetworkAssetGroupByConfig": {
      "description": "The necessary request parameters for the network asset api call",
      "type": "object",
      "required": [
        "groupingContext",
        "networkAssets"
      ],
      "properties": {
        "queryContext": {
          "$ref": "#/definitions/NetworkAssetQueryContext"
        },
        "metaContext": {
          "$ref": "#/definitions/MetaContext"
        },
        "groupingContext": {
          "$ref": "#/definitions/GroupingContext"
        },
        "aggregation": {
          "$ref": "#/definitions/SupportedAggregations"
        },
        "networkAssets": {
          "type": "array",
          "x-omitempty": true,
          "description": "A set of identifiers that considers specific network asset based on the provided information",
          "items": {
            "$ref": "#/definitions/NetworkAssetSpec"
          }
        }
      }
    },
    "NetworkAssetGroupByReport": {
      "description": "The rendered response structure from the network asset query",
      "type": "array",
      "x-omitempty": true,
      "items": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/definitions/NetworkAssetGroupedResultEntryParameters"
          }
        ]
      }
    },
    "NetworkAssetQueryContext": {
      "description": "Hints indicating how the query may be Returns",
      "type": "object",
      "properties": {
        "timeout": {
          "description": "Query timeout in milliseconds",
          "type": "integer",
          "example": 30000
        },
        "sortOnGroupingKey": {
          "description": "Allows a client to sort on a grouping key instead of the network asset's id",
          "default": "id",
          "type": "string",
          "example": "id"
        },
        "sorted": {
          "type": "string",
          "description": "Indicates whether the response should return grouped by queries in ascending or descending order. Only applicable to grouped queries.",
          "enum": [
            "asc",
            "desc"
          ],
          "example": [
            "asc",
            "desc"
          ]
        },
        "numResults": {
          "description": "Number of results to return in grouped queries. A non-positive integer for this value implies there is no result limit. Only applicable to grouped queries.",
          "type": "integer",
          "format": "int32",
          "example": 10
        },
        "pageNumber": {
          "description": "Retrieve certain page of search results.",
          "x-isnullable": true,
          "type": "integer"
        },
        "sort": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/NetworkAssetQueryContextSortEntry"
          }
        }
      }
    },
    "NetworkAssetGroupedResultEntryParameters": {
      "description": "Describes filtering criteria used for a particular query that uses a grouping",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/NetworkAssetSpec"
        },
        {
          "type": "object",
          "required": [
            "groupedResults"
          ],
          "properties": {
            "groupedResults": {
              "type": "array",
              "x-omitempty": true,
              "items": {
                "type": "object",
                "required": [
                  "value"
                ],
                "properties": {
                  "groupings": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "value": {
                    "type": "number",
                    "format": "float"
                  }
                }
              }
            }
          }
        }
      ]
    },
    "NetworkAssetSpec": {
      "description": "Filter object that identifies a specific metric within a monitored object by its key attributes",
      "type": "object",
      "properties": {
        "id": {
          "description": "IDs to filter on",
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "ip": {
          "description": "IPs to filter on",
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "roles": {
          "description": "Network Asset Roles to filter on",
          "type": "array",
          "x-omitempty": true,
          "items": {
            "$ref": "#/definitions/NetworkAssetRole"
          }
        }
      }
    },
    "NetworkAssetRole": {
      "type": "object",
      "description": "A role that a machine can take on based on heuristics",
      "required": [
        "role"
      ],
      "properties": {
        "role": {
          "type": "string"
        },
        "info": {
          "type": "string"
        },
        "firstSeen": {
          "type": "integer",
          "format": "int64"
        },
        "lastSeen": {
          "type": "integer",
          "format": "int64"
        }
      }
    },
    "NetworkAsset": {
      "type": "object",
      "description": "A network device that is on a customer's network",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "networkAssets"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "properties": {
            "ip": {
              "type": "string"
            },
            "mac": {
              "type": "string"
            },
            "roles": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/NetworkAssetRole"
              }
            },
            "meta": {
              "type": "object",
              "description": "Attributes added to a Network Asset that help identify the Network Asset as well as provide filtering/grouping properties",
              "additionalProperties": {
                "type": "string"
              }
            },
            "firstSeen": {
              "type": "integer",
              "format": "int64"
            },
            "lastSeen": {
              "type": "integer",
              "format": "int64"
            }
          }
        }
      }
    },
    "DashboardCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to create a Dashboard in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "dashboards"
              ]
            },
            "id": {
              "type": "string"
            },
            "relationships": {
              "$ref": "#/definitions/DashboardRelationships"
            },
            "attributes": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "User provided identifier for a Dashboard"
                },
                "category": {
                  "type": "string",
                  "description": "Name of the visual 'group' where this Dashboard will be displayed when looking at the list of all Dashboards in Datahub"
                },
                "metaExclude": {
                  "$ref": "#/definitions/MetaExclude",
                  "description": "List of metadata keys to exclude from the search results"
                },
                "metadataFilters": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/MetadataFilter"
                  },
                  "description": "List of filters used to obtain a list of Monitoreed Objects which will be useds to provide metric data to the Dashboard"
                },
                "cardPositions": {
                  "description": "Describes the locations of the Cards on the Dashboard in the Datahub UI",
                  "$ref": "#/definitions/CardPositions"
                },
                "_permissions": {
                  "$ref": "#/definitions/RequestPermissions"
                },
                "sharedWithAll": {
                  "type": "string",
                  "enum": [
                    "none",
                    "viewers",
                    "editors",
                    "managers"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "DashboardUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update a Dashboard in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "dashboards"
              ]
            },
            "id": {
              "type": "string"
            },
            "relationships": {
              "$ref": "#/definitions/DashboardRelationships"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev",
                "name"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "name": {
                  "type": "string",
                  "description": "User provided identifier for a Dashboard"
                },
                "category": {
                  "type": "string",
                  "description": "Name of the visual 'group' where this Dashboard will be displayed when looking at the list of all Dashboards in Datahub"
                },
                "metaExclude": {
                  "$ref": "#/definitions/MetaExclude",
                  "description": "List of metadata keys to exclude from the search results"
                },
                "metadataFilters": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/MetadataFilter"
                  },
                  "description": "List of filters used to obtain a list of Monitoreed Objects which will be useds to provide metric data to the Dashboard"
                },
                "cardPositions": {
                  "description": "Describes the locations of the Cards on the Dashboard in the Datahub UI",
                  "$ref": "#/definitions/CardPositions"
                },
                "_permissions": {
                  "$ref": "#/definitions/RequestPermissions"
                },
                "sharedWithAll": {
                  "type": "string",
                  "enum": [
                    "none",
                    "viewers",
                    "editors",
                    "managers"
                  ]
                }
              }
            }
          }
        }
      }
    },
    "DashboardResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "A single object Dashboard response from Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/Dashboard"
        }
      }
    },
    "DashboardListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Response for one ore more Dashboards from Datahub",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Dashboard"
          }
        }
      }
    },
    "Dashboard": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "description": "Represents a Dashboard used to display metric information on the Datahub UI",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "dashboards"
          ]
        },
        "id": {
          "type": "string"
        },
        "relationships": {
          "$ref": "#/definitions/DashboardRelationships"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "name",
            "datatype",
            "port",
            "tenantId",
            "category",
            "metaExclude",
            "metadataFilters",
            "cardPositions",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "description": "Name used to identify this type of record in Datahub",
              "type": "string"
            },
            "tenantId": {
              "description": "Unique identifier of a Tenant in Datahub",
              "type": "string"
            },
            "name": {
              "type": "string",
              "description": "User provided identifier for a Dashboard"
            },
            "category": {
              "type": "string",
              "description": "Name of the visual 'group' where this Dashboard will be displayed when looking at the list of all Dashboards in Datahub"
            },
            "metaExclude": {
              "$ref": "#/definitions/MetaExclude",
              "description": "List of metadata keys to exclude from the search results"
            },
            "metadataFilters": {
              "description": "List of filters used to obtain a list of Monitoreed Objects which will be useds to provide metric data to the Dashboard",
              "type": "array",
              "items": {
                "$ref": "#/definitions/MetadataFilter"
              }
            },
            "cardPositions": {
              "description": "Describes the locations of the Cards on the Dashboard in the Datahub UI",
              "$ref": "#/definitions/CardPositions"
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64"
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            },
            "_permissions": {
              "$ref": "#/definitions/RequestPermissions"
            },
            "sharedWithAll": {
              "type": "string",
              "enum": [
                "none",
                "viewers",
                "editors",
                "managers"
              ]
            }
          }
        }
      }
    },
    "CardPositions": {
      "type": "object",
      "description": "Describes the locations of the Cards on the Dashboard in the Datahub UI",
      "additionalProperties": {
        "type": "object",
        "required": [
          "position"
        ],
        "properties": {
          "position": {
            "type": "integer",
            "description": "The placement order of this card on the Dashboard"
          },
          "dimensions": {
            "type": "object",
            "description": "The amount of columns and rows this card will occupy",
            "properties": {
              "columns": {
                "type": "integer"
              },
              "rows": {
                "type": "integer"
              }
            }
          }
        }
      }
    },
    "MetadataFilter": {
      "type": "object",
      "description": "Used to obtain a list of Monitoreed Objects which will be useds to provide metric data to the Dashboard",
      "properties": {
        "key": {
          "type": "string"
        },
        "values": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "DashboardRelationships": {
      "type": "object",
      "properties": {
        "cards": {
          "description": "References the unique identifiers of the Cards that are used on this Dashboard in the Datahub UI",
          "$ref": "#/definitions/JsonApiRelationship"
        },
        "thresholdProfile": {
          "description": "References the unique identifier of the Threshold Profile used to generate Threshold Crossing Events on this Dashboard in the Datahub UI",
          "$ref": "#/definitions/JsonApiSingleRelationship"
        },
        "editors": {
          "description": "References the unique identifiers of the usergroups that are allowed to edit this dashboard",
          "$ref": "#/definitions/JsonApiRelationship"
        },
        "managers": {
          "description": "References the unique identifiers of the usergroups that are allowed to manage this dashboard",
          "$ref": "#/definitions/JsonApiRelationship"
        },
        "createdBy": {
          "description": "References the unique identifier of the user who created this dashboard",
          "$ref": "#/definitions/JsonApiSingleRelationship"
        },
        "viewers": {
          "description": "References the unique identifiers of the usergroups that are allowed to view this dashboard",
          "$ref": "#/definitions/JsonApiRelationship"
        }
      }
    },
    "RequestPermissions": {
      "type": "array",
      "items": {
        "type": "string"
      }
    },
    "CardCreateRequest": {
      "type": "object",
      "description": "Object used to create a Card in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "cards"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "name",
                "state"
              ],
              "properties": {
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "active",
                    "pending"
                  ]
                },
                "visualization": {
                  "$ref": "#/definitions/CardVisualization"
                },
                "metaExclude": {
                  "$ref": "#/definitions/MetaExclude",
                  "description": "List of metadata keys to exclude from the search results"
                },
                "metadataFilters": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/MetadataFilter"
                  }
                },
                "metrics": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/CardMetric"
                  }
                }
              }
            }
          }
        }
      }
    },
    "CardUpdateRequest": {
      "type": "object",
      "description": "Object used to update a Card in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "cards"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "name": {
                  "type": "string"
                },
                "description": {
                  "type": "string"
                },
                "state": {
                  "type": "string",
                  "enum": [
                    "active",
                    "pending"
                  ]
                },
                "visualization": {
                  "$ref": "#/definitions/CardVisualization"
                },
                "metaExclude": {
                  "$ref": "#/definitions/MetaExclude",
                  "description": "List of metadata keys to exclude from the search results"
                },
                "metadataFilters": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/MetadataFilter"
                  }
                },
                "metrics": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/CardMetric"
                  }
                }
              }
            }
          }
        }
      }
    },
    "CardResponse": {
      "type": "object",
      "description": "A single object Card response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/Card"
        }
      }
    },
    "CardListResponse": {
      "type": "object",
      "description": "Response for one ore more Cards from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/Card"
          }
        }
      }
    },
    "Card": {
      "type": "object",
      "description": "Models a single Card used by Dashboards in the Datahub UI",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "cards"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "name",
            "datatype",
            "tenantId",
            "description",
            "state",
            "visualization",
            "metaExclude",
            "metadataFilters",
            "metrics",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "type": "string",
              "description": "Name used to identify this type of record in Datahub"
            },
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of a Tenant in Datahub"
            },
            "name": {
              "type": "string",
              "description": "User provided identifier for a Card"
            },
            "description": {
              "type": "string",
              "description": "User provided description for a Card"
            },
            "state": {
              "type": "string",
              "enum": [
                "active",
                "pending"
              ]
            },
            "visualization": {
              "$ref": "#/definitions/CardVisualization",
              "description": "Object which contains the components to display on this Card"
            },
            "metaExclude": {
              "$ref": "#/definitions/MetaExclude",
              "description": "List of metadata keys to exclude from the search results"
            },
            "metadataFilters": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/MetadataFilter"
              }
            },
            "metrics": {
              "type": "array",
              "description": "A list of the data which will be displayed in the Card visualization",
              "items": {
                "$ref": "#/definitions/CardMetric"
              }
            },
            "createdTimestamp": {
              "type": "integer",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "CardVisualization": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string",
          "description": "Label referencing the type of visualization to be displayed"
        },
        "label": {
          "type": "string",
          "description": "User provided identifier for a Visualization"
        },
        "category": {
          "type": "string"
        },
        "icon": {
          "type": "string"
        },
        "component": {
          "type": "string"
        },
        "queryParams": {
          "type": "object",
          "properties": {
            "limit": {
              "description": "Restricts the number ofresults to the provided limit.",
              "type": "integer"
            },
            "sortDescending": {
              "type": "boolean",
              "description": "Items will be displayed sorted in descending order when true, ascending order when false",
              "default": true
            },
            "aggregator": {
              "type": "string",
              "description": "The type of aggregation to use when displaying the values",
              "enum": [
                "min",
                "max",
                "avg"
              ],
              "default": "avg"
            }
          }
        },
        "availability": {
          "type": "object",
          "properties": {
            "count": {
              "type": "integer"
            },
            "type": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        },
        "defaultDimensions": {
          "type": "object",
          "properties": {
            "columns": {
              "type": "integer"
            },
            "rows": {
              "type": "integer"
            }
          }
        }
      }
    },
    "CardMetric": {
      "type": "object",
      "properties": {
        "key": {
          "type": "string"
        },
        "label": {
          "type": "string"
        },
        "vendorLabel": {
          "type": "string"
        },
        "vendorKey": {
          "type": "string"
        },
        "vendor": {
          "type": "string"
        },
        "objectType": {
          "type": "string"
        },
        "unit": {
          "type": "string"
        },
        "type": {
          "type": "string"
        },
        "rawMetricId": {
          "type": "string"
        },
        "metric": {
          "type": "string"
        },
        "metricKey": {
          "type": "string"
        },
        "enabled": {
          "type": "boolean"
        },
        "monitoredObjectTypes": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "directions": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "units": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "options": {
          "type": "object",
          "properties": {
            "useExplicitSeries": {
              "type": "boolean"
            },
            "useBins": {
              "type": "boolean"
            },
            "formatUnit": {
              "type": "string"
            },
            "bins": {
              "type": "array",
              "items": {
                "type": "number",
                "format": "double"
              }
            },
            "series": {
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "type": {
              "type": "string",
              "enum": [
                "measure",
                "events",
                "bins"
              ]
            },
            "directions": {
              "type": "array",
              "x-omitempty": true,
              "items": {
                "type": "string"
              }
            },
            "buckets": {
              "type": "array",
              "x-omitempty": true,
              "items": {
                "type": "object",
                "additionalProperties": true
              }
            },
            "aggregation": {
              "type": "string",
              "enum": [
                "none",
                "sum",
                "min",
                "max",
                "avg"
              ]
            }
          }
        }
      }
    },
    "DataCleaningProfileCreateRequest": {
      "type": "object",
      "description": "Object used to create a Data Cleaning Profile in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "dataCleaningProfiles"
              ],
              "default": "dataCleaningProfiles"
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "rules"
              ],
              "properties": {
                "rules": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/DataCleaningRule"
                  },
                  "description": "List of all the rules to evaluate for Data Cleaning"
                }
              }
            }
          }
        }
      }
    },
    "DataCleaningProfileUpdateRequest": {
      "type": "object",
      "description": "Object used to update a Data Cleaning Profile in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "id",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "dataCleaningProfiles"
              ],
              "default": "dataCleaningProfiles"
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev",
                "rules"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "rules": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/DataCleaningRule"
                  },
                  "description": "List of all the rules to evaluate for Data Cleaning"
                }
              }
            }
          }
        }
      }
    },
    "DataCleaningRule": {
      "type": "object",
      "description": "Provides the logic used to determine when data should be ommitted from queries",
      "required": [
        "metricVendor",
        "metricLabel",
        "triggerCondition",
        "clearCondition"
      ],
      "properties": {
        "metricVendor": {
          "type": "string",
          "description": "The name of the vendor which provides the metric used in the rule."
        },
        "metricLabel": {
          "type": "string",
          "description": "The name of the metric used in the rule."
        },
        "triggerCondition": {
          "$ref": "#/definitions/DataCleaningCondition",
          "description": "Object which determines when a rule will be triggered/applied"
        },
        "clearCondition": {
          "$ref": "#/definitions/DataCleaningCondition",
          "description": "Object which determines when a rule will be cleared"
        }
      }
    },
    "DataCleaningCondition": {
      "type": "object",
      "required": [
        "comparator",
        "value",
        "valueAggregate",
        "duration"
      ],
      "description": "A condition used to evalutate when a data cleaning rule should be triggered or cleared.",
      "properties": {
        "comparator": {
          "type": "string",
          "enum": [
            "gt",
            "lt",
            "gte",
            "lte",
            "eq"
          ],
          "description": "Operand to use when evaluating the condition. [gt=greaterThan, lt=lessThan, gte=greaterThanOrEqual, lte=lessThanOrEqual, eq=equal]"
        },
        "value": {
          "type": "string",
          "description": "The value against which the selected metric will be compared."
        },
        "valueAggregate": {
          "type": "string",
          "enum": [
            "min",
            "max",
            "avg"
          ],
          "description": "The method of aggregation by which the selected metric will be aggregateds. [min=minimum, max=maximum, avg=average]"
        },
        "duration": {
          "type": "string",
          "description": "ISO-8601 interval over which this codition will be evaluated."
        }
      }
    },
    "DataCleaningProfileResponse": {
      "type": "object",
      "description": "A single object Data Cleaning Profile response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/DataCleaningProfile"
        }
      }
    },
    "DataCleaningProfileListResponse": {
      "type": "object",
      "description": "Response for one ore more Data Cleaning Profiles from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/DataCleaningProfile"
          }
        }
      }
    },
    "DataCleaningProfile": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "dataCleaningProfiles"
          ],
          "default": "dataCleaningProfiles"
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "rules",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "rules": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/DataCleaningRule"
              },
              "description": "List of all the rules to evaluate for Data Cleaning"
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "DataCleaningHistoryResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/DataCleaningHistory"
        }
      }
    },
    "DataCleaningHistory": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "dataCleaningHistory"
          ],
          "default": "dataCleaningHistory"
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "events"
          ],
          "properties": {
            "transitions": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/DataCleaningTransition"
              },
              "description": "List of data cleaning events"
            }
          }
        }
      }
    },
    "DataCleaningTransition": {
      "type": "object",
      "properties": {
        "timestamp": {
          "type": "integer",
          "format": "int64",
          "description": "Time since epoch at which these transitions occurred."
        },
        "rulesRaised": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/DataCleaningTransitionRule"
          }
        },
        "rulesCleared": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/DataCleaningTransitionRule"
          }
        },
        "errorsRaised": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/DataCleaningTransitionError"
          }
        },
        "errorsCleared": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/DataCleaningTransitionError"
          }
        }
      }
    },
    "DataCleaningTransitionRule": {
      "type": "object",
      "properties": {
        "direction": {
          "type": "string"
        },
        "rule": {
          "$ref": "#/definitions/DataCleaningRule"
        }
      }
    },
    "DataCleaningTransitionError": {
      "type": "object",
      "properties": {
        "direction": {
          "type": "string"
        },
        "errorCode": {
          "type": "string"
        }
      }
    },
    "IngestionProfileCreateRequest": {
      "type": "object",
      "description": "Object used to create an Ingestion Profile in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "ingestionProfiles"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "metrics"
              ],
              "properties": {
                "metrics": {
                  "description": "Metrics will be deprecated in the next API version. Please use the 'metricList' property instead",
                  "$ref": "#/definitions/IngestionProfileMetrics"
                },
                "metricList": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/IngestionProfileMetricListItem"
                  }
                }
              }
            }
          }
        }
      }
    },
    "IngestionProfileUpdateRequest": {
      "type": "object",
      "description": "Object used to update an Ingestion Profile in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "id",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "ingestionProfiles"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "metrics": {
                  "description": "Metrics will be deprecated in the next API version. Please use the 'metricList' property instead",
                  "$ref": "#/definitions/IngestionProfileMetrics"
                },
                "metricList": {
                  "description": "A list of objects that allow customization on which Metrics will be available to query from Datahub",
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/IngestionProfileMetricListItem"
                  }
                }
              }
            }
          }
        }
      }
    },
    "IngestionProfileListResponse": {
      "type": "object",
      "description": "Ingestion Profile response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/IngestionProfile"
          }
        }
      }
    },
    "IngestionProfileResponse": {
      "type": "object",
      "description": "A single object Ingestion Profile response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/IngestionProfile"
        }
      }
    },
    "IngestionProfile": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "ingestionProfiles"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_id",
            "_rev",
            "tenantId",
            "dataType",
            "metrics",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of the Tenant in Datahub"
            },
            "_id": {
              "type": "string"
            },
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "description": "Name used to identify this type of record in Datahub",
              "type": "string"
            },
            "metrics": {
              "description": "Metrics will be deprecated in the next API version. Please use the 'metricList' property instead",
              "$ref": "#/definitions/IngestionProfileMetrics"
            },
            "metricList": {
              "description": "A collection of Metric descriptors that determine which metrics will be recorded by Datahub",
              "type": "array",
              "items": {
                "$ref": "#/definitions/IngestionProfileMetricListItem"
              }
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "IngestionProfileMetrics": {
      "type": "object",
      "description": "This object will be deprecated in a future version of the Datahub API",
      "properties": {
        "vendorMap": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "monitoredObjectTypeMap": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "metricMap": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "boolean"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "IngestionProfileMetricListItem": {
      "type": "object",
      "description": "Provides customization on which Metrics will be available to query from Datahub",
      "properties": {
        "vendor": {
          "description": "The name of the Vendor from which this Metric originates",
          "type": "string"
        },
        "monitoredObjectType": {
          "description": "The name of the type of Monitored Object for which this Metric is applicable",
          "type": "string"
        },
        "metric": {
          "type": "string",
          "description": "The name of the Metric"
        },
        "enabled": {
          "description": "When true, this metric will be recorded by Datahub. When false, this metric is ommitted.",
          "type": "boolean"
        },
        "direction": {
          "type": "string",
          "description": "Describes the direction of the test in case a Threshold needs to be different for one direction (i.e. actuator to reflector) versus another (i.e. round trip)"
        },
        "dimensions": {
          "type": "object",
          "description": "Provides data properties by which the Metric may be filtered and/or aggregated"
        }
      }
    },
    "MetadataConfigCreateRequest": {
      "type": "object",
      "description": "Object used to create a Metadata Configuration in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "metadataConfigs"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "startPoint",
                "endPoint",
                "midPoints"
              ],
              "properties": {
                "startPoint": {
                  "description": "The first point of a Logical Map",
                  "type": "string"
                },
                "endPoint": {
                  "description": "The last point of a Logical Map",
                  "type": "string"
                },
                "midPoints": {
                  "description": "The points between the startPoint and endPoint of a logical map",
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "geo": {
                  "$ref": "#/definitions/MetadataConfigGeo"
                }
              }
            }
          }
        }
      }
    },
    "MetadataConfigUpdateRequest": {
      "type": "object",
      "description": "Object used to update a Metadata Configuration in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "id",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "metadataConfigs"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "startPoint": {
                  "description": "The first point of a Logical Map",
                  "type": "string"
                },
                "endPoint": {
                  "description": "The last point of a Logical Map",
                  "type": "string"
                },
                "midPoints": {
                  "description": "The points between the startPoint and endPoint of a logical map",
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                },
                "geo": {
                  "$ref": "#/definitions/MetadataConfigGeo"
                }
              }
            }
          }
        }
      }
    },
    "MetadataConfigListResponse": {
      "type": "object",
      "description": "Metadata Configuration response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/MetadataConfig"
          }
        }
      }
    },
    "MetadataConfigResponse": {
      "type": "object",
      "description": "A single object Metadata Configuration response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/MetadataConfig"
        }
      }
    },
    "MetadataConfig": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "metadataConfigs"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_id",
            "_rev",
            "tenantId",
            "dataType",
            "startPoint",
            "endPoint",
            "midPoints",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of the Tenant in Datahub"
            },
            "_id": {
              "type": "string"
            },
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "description": "Name used to identify this type of record in Datahub",
              "type": "string"
            },
            "startPoint": {
              "description": "The first point of a Logical Map",
              "type": "string"
            },
            "endPoint": {
              "description": "The last point of a Logical Map",
              "type": "string"
            },
            "midPoints": {
              "description": "The points between the startPoint and endPoint of a logical map",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "geo": {
              "$ref": "#/definitions/MetadataConfigGeo"
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "MetadataConfigGeo": {
      "description": "The geographical location information for nodes on the logical map",
      "type": "object",
      "properties": {
        "startPoint": {
          "description": "The geographical location details for the first point of a Logical Map",
          "$ref": "#/definitions/GeoDetails"
        },
        "endPoint": {
          "description": "The geographical location details for the first point of a Logical Map",
          "$ref": "#/definitions/GeoDetails"
        }
      }
    },
    "GeoDetails": {
      "type": "object",
      "required": [
        "latitude",
        "longitude"
      ],
      "properties": {
        "latitude": {
          "type": "string"
        },
        "longitude": {
          "type": "string"
        }
      }
    },
    "MetricBaselineData": {
      "type": "object",
      "properties": {
        "metric": {
          "description": "The name of the metric represented by this baseline",
          "type": "string"
        },
        "direction": {
          "description": "The direction of the metric baseline",
          "type": "string"
        },
        "average": {
          "description": "The calculated average of the Metric obtained via (sum/count)",
          "type": "number",
          "format": "double"
        }
      }
    },
    "MetricBaseline": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "metricBaselines"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "tenantId",
            "_id",
            "datatype",
            "baselines"
          ],
          "properties": {
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of the Tenant in Datahub"
            },
            "_id": {
              "type": "string"
            },
            "datatype": {
              "type": "string",
              "description": "Name used to identify this type of record in Datahub"
            },
            "monitoredObjectId": {
              "type": "string",
              "description": "Unique identifier of the Monitored Object for which these baselines are applicable"
            },
            "hourOfWeek": {
              "description": "Integer value of the day of the week and hour of day for which this baseline is calculated. Values are 0-167 which corresponds to each our of each day in one week",
              "type": "integer",
              "format": "int32",
              "minimum": 0,
              "maximum": 167
            },
            "baselines": {
              "description": "Contains the dynamically calculated baseline values for the metrics collected by Datahub",
              "type": "array",
              "items": {
                "$ref": "#/definitions/MetricBaselineData"
              }
            }
          }
        }
      }
    },
    "MetricBaselineResponse": {
      "type": "object",
      "description": "A Metric Baseline response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/MetricBaseline"
        }
      }
    },
    "MetricBaselineListResponse": {
      "type": "object",
      "description": "Metric Baseline response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/MetricBaseline"
          }
        }
      }
    },
    "MetricBaselineDataWrapper": {
      "type": "object",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "metricBaselineData"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "$ref": "#/definitions/MetricBaselineData"
        }
      }
    },
    "DuplicateMonitoredObjectReportResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/DuplicateMonitoredObjectReport"
        }
      }
    },
    "DuplicateMonitoredObjectReportListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/DuplicateMonitoredObjectReport"
          }
        }
      }
    },
    "DuplicateMonitoredObjectReport": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "duplicateMonitoredObjectReport"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "tenantId",
            "datatype",
            "duplicateMap",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "type": "string"
            },
            "tenantId": {
              "type": "string"
            },
            "duplicateMap": {
              "type": "object",
              "description": "A map of Monitored Object Name to a list of Monitored Object Ids of Monitored Objects that all share the same name",
              "additionalProperties": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "MonitoredObjectTagMappingCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to create a MonitoredObjectTagMapping in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "monitoredObjectTagMappings"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "tag",
                "monitoredObjectIdList"
              ],
              "properties": {
                "tag": {
                  "type": "string",
                  "description": "User provided identifier for a MonitoredObjectTagMapping"
                },
                "monitoredObjectIdList": {
                  "type": "array",
                  "description": "List of Monitored Object IDs that are grouped by the Tag",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "MonitoredObjectTagMappingUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update a MonitoredObjectTagMapping in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "monitoredObjectTagMappings"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev",
                "tag",
                "monitoredObjectIdList"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "tag": {
                  "type": "string",
                  "description": "User provided identifier for a MonitoredObjectTagMapping"
                },
                "monitoredObjectIdList": {
                  "type": "array",
                  "description": "List of Monitored Object IDs that are grouped by the Tag",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "MonitoredObjectTagMappingResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "A single object MonitoredObjectTagMapping response from Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/MonitoredObjectTagMapping"
        }
      }
    },
    "MonitoredObjectTagMappingListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Response for one ore more MonitoredObjectTagMappings from Datahub",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/MonitoredObjectTagMapping"
          }
        }
      }
    },
    "MonitoredObjectTagMapping": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "description": "Represents a MonitoredObjectTagMapping used to group a list of Monitored Object Ids to an ad-hoc value",
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "monitoredObjectTagMappings"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "tag",
            "datatype",
            "monitoredObjectIdList",
            "tenantId",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "description": "Name used to identify this type of record in Datahub",
              "type": "string"
            },
            "tenantId": {
              "description": "Unique identifier of a Tenant in Datahub",
              "type": "string"
            },
            "tag": {
              "type": "string",
              "description": "User provided identifier for a MonitoredObjectTagMapping"
            },
            "monitoredObjectIdList": {
              "type": "array",
              "description": "List of Monitored Object IDs that are grouped by the Tag",
              "items": {
                "type": "string"
              }
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64"
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "MonitoredObjectCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to create a new Monitored Object in Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/MonitoredObjectCreate"
        }
      }
    },
    "MonitoredObjectUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update an existing Monitored Object in Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/MonitoredObjectUpdate"
        }
      }
    },
    "MonitoredObjectListResponse": {
      "type": "object",
      "description": "Monitoerd Object response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "links": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/MonitoredObject"
          }
        }
      }
    },
    "MonitoredObjectResponse": {
      "type": "object",
      "description": "A single object Monitored Object response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "links": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "data": {
          "$ref": "#/definitions/MonitoredObject"
        }
      }
    },
    "MonitoredObject": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "monitoredObjects"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "objectId",
            "actuatorName",
            "actuatorType",
            "reflectorName",
            "reflectorType",
            "objectName",
            "objectType",
            "createdTimestamp",
            "sourceLocation",
            "targetLocation",
            "topology",
            "archiveTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "type": "string",
              "description": "Name used to identify this type of record in Datahub"
            },
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of the Tenant in Datahub"
            },
            "objectId": {
              "type": "string",
              "description": "Unique identifier of the Monitored Object in Datahub"
            },
            "reportingMonitoredObjectId": {
              "type": "string",
              "description": "Unique identifier the object is reported with. This may change, while the objectId can never change"
            },
            "actuatorName": {
              "type": "string",
              "description": "Name of the origin of the Monitored Object"
            },
            "actuatorType": {
              "type": "string",
              "description": "Type of the origin of the Monitored Object",
              "enum": [
                "unknown",
                "accedian-nid",
                "accedian-vnid"
              ]
            },
            "reflectorName": {
              "type": "string",
              "description": "Name of the target of the Monitored Object"
            },
            "reflectorType": {
              "type": "string",
              "description": "Type of the target of the Monitored Object",
              "enum": [
                "unknown",
                "accedian-nid",
                "accedian-vnid"
              ]
            },
            "objectName": {
              "type": "string",
              "description": "Common name of the Monitored Object"
            },
            "objectType": {
              "type": "string",
              "description": "Type of the Monitored Object. For instance, possible values are [unknown, flowmeter, twamp-pe, twamp-sf, twamp-sl, cisco-interface, cisco-node-summary, pvx, paa, \nregulator, rfc8321, dmm, slm, eth-dm, eth-vs, port, sa, sa-metrics, pl, iperf, echo-icmp, echo-udp]. If using dynamic types (i.e, for SNMP), you must enter the name of the dynamic type here\n"
            },
            "meta": {
              "type": "object",
              "description": "Attributes added to a Monitored Object that help identify the Monitored Object as well as provide flitering/grouping properties",
              "pattern": "^[a-z_]+$",
              "additionalProperties": {
                "type": "string"
              },
              "example": {
                "region": "paris",
                "wgs87_x": "-45.7123912",
                "wgs87_y": "-74.2130912"
              }
            },
            "sourceLocation": {
              "$ref": "#/definitions/MonitoredObjectLocation"
            },
            "destinationLocation": {
              "$ref": "#/definitions/MonitoredObjectLocation"
            },
            "topology": {
              "description": "Tags used to describe the path segments associated with the Monitored Object",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "archiveTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was archived."
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            },
            "previousIdentities": {
              "type": "array",
              "x-omitempty": true,
              "items": {
                "type": "object",
                "properties": {
                  "time": {
                    "type": "string",
                    "format": "date-time"
                  },
                  "objectId": {
                    "type": "string"
                  },
                  "objectName": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "BulkOperationResponseV2": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "type": "object",
            "required": [
              "type",
              "id",
              "attributes"
            ],
            "properties": {
              "type": {
                "type": "string",
                "enum": [
                  "bulkOperationResponses"
                ]
              },
              "id": {
                "type": "string"
              },
              "attributes": {
                "description": "Provides the result of multiple operations that were issued in a single request to Datahub",
                "type": "object",
                "properties": {
                  "ok": {
                    "type": "boolean"
                  },
                  "id": {
                    "type": "string"
                  },
                  "rev": {
                    "type": "string"
                  },
                  "error": {
                    "type": "string"
                  },
                  "reason": {
                    "type": "string"
                  }
                }
              }
            }
          }
        }
      }
    },
    "BulkMonitoredObjectCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to create one or more Monitored Object in Datahub",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/MonitoredObjectCreate"
          }
        }
      }
    },
    "MonitoredObjectCreate": {
      "type": "object",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "monitoredObjects"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "objectId"
          ],
          "properties": {
            "objectId": {
              "type": "string",
              "description": "Unique identifier of the Monitored Object in Datahub"
            },
            "actuatorName": {
              "type": "string",
              "description": "Name of the origin of the Monitored Object"
            },
            "actuatorType": {
              "type": "string",
              "description": "Type of the origin of the Monitored Object",
              "enum": [
                "unknown",
                "accedian-nid",
                "accedian-vnid"
              ]
            },
            "reflectorName": {
              "type": "string",
              "description": "Name of the target of the Monitored Object"
            },
            "reflectorType": {
              "type": "string",
              "description": "Type of the target of the Monitored Object",
              "enum": [
                "unknown",
                "accedian-nid",
                "accedian-vnid"
              ]
            },
            "objectName": {
              "type": "string",
              "description": "Name of the Monitored Object"
            },
            "objectType": {
              "type": "string",
              "description": "Type of the Monitored Object. For instance, possible values are [unknown, flowmeter, twamp-pe, twamp-sf, twamp-sl, cisco-interface, cisco-node-summary, pvx, paa, \nregulator, rfc8321, dmm, slm, eth-dm, eth-vs, port, sa, sa-metrics, pl, iperf, echo-icmp, echo-udp]. If using dynamic types (i.e, for SNMP), you must enter the name of the dynamic type here\n"
            },
            "meta": {
              "type": "object",
              "description": "Attributes added to a Monitored Object that help identify the Monitored Object as well as provide flitering/grouping properties",
              "additionalProperties": {
                "type": "string"
              },
              "example": {
                "region": "paris",
                "wgs87_x": "-45.7123912",
                "wgs87_y": "-74.2130912"
              }
            },
            "sourceLocation": {
              "$ref": "#/definitions/MonitoredObjectLocation"
            },
            "destinationLocation": {
              "$ref": "#/definitions/MonitoredObjectLocation"
            },
            "topology": {
              "description": "Tags used to describe the path segments associated with the Monitored Object",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "BulkMonitoredObjectMetaCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update the meta information for one or more Monitored Objects in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "monitoredObjectsMeta"
              ]
            },
            "attributes": {
              "type": "object",
              "properties": {
                "metadata-entries": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "required": [
                      "objectName",
                      "metadata"
                    ],
                    "properties": {
                      "objectName": {
                        "type": "string",
                        "description": "Name of the monitored object in the datastore"
                      },
                      "metadata": {
                        "type": "object",
                        "description": "Attributes added to a Monitored Object that help identify the Monitored Object as well as provide filtering/grouping properties",
                        "additionalProperties": {
                          "type": "string"
                        },
                        "example": {
                          "region": "paris",
                          "wgs87_x": "-45.7123912",
                          "wgs87_y": "-74.2130912"
                        }
                      },
                      "sourceLocation": {
                        "$ref": "#/definitions/MonitoredObjectLocation"
                      },
                      "destinationLocation": {
                        "$ref": "#/definitions/MonitoredObjectLocation"
                      },
                      "topology": {
                        "description": "Tags used to describe the path segments associated with the Monitored Object",
                        "type": "array",
                        "items": {
                          "type": "string"
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "BulkMonitoredObjectPatchRequest": {
      "type": "object",
      "description": "Patch the names for Monitored Objects in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/MonitoredObjectPatch"
          }
        }
      }
    },
    "BulkMonitoredObjectUpdateRequest": {
      "type": "object",
      "description": "Object used to update one or more Monitored Objects in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/MonitoredObjectUpdate"
          }
        }
      }
    },
    "MonitoredObjectFilteredListRequest": {
      "type": "object",
      "properties": {
        "objectNamePrefix": {
          "type": "string"
        },
        "objectType": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "meta": {
          "$ref": "#/definitions/MetaFilter"
        },
        "metaExclude": {
          "$ref": "#/definitions/MetaExclude"
        },
        "archiveTimestamp": {
          "$ref": "#/definitions/TimeRange"
        },
        "createdTimestamp": {
          "$ref": "#/definitions/TimeRange"
        },
        "sourceLocation": {
          "$ref": "#/definitions/GeoFence"
        },
        "destinationLocation": {
          "$ref": "#/definitions/GeoFence"
        },
        "topology": {
          "type": "array",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "GeoFence": {
      "type": "object",
      "properties": {
        "box": {
          "type": "object",
          "properties": {
            "topLeft": {
              "$ref": "#/definitions/SpatialCoordinates"
            },
            "bottomRight": {
              "$ref": "#/definitions/SpatialCoordinates"
            }
          }
        }
      }
    },
    "TimeRange": {
      "type": "object",
      "description": "A time range specified by before and after in epoch time. Both before and after are inclusive to the specified value.",
      "properties": {
        "before": {
          "type": "integer"
        },
        "after": {
          "type": "integer"
        },
        "absent": {
          "type": "boolean"
        }
      }
    },
    "MonitoredObjectFilteredCountResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/MonitoredObjectFilteredCount"
        }
      }
    },
    "MonitoredObjectFilteredCount": {
      "type": "object",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "filteredMonitoredObjectCount"
          ],
          "default": "filteredMonitoredObjectCount"
        },
        "attributes": {
          "type": "object",
          "properties": {
            "totalCount": {
              "type": "integer"
            },
            "groupedCounts": {
              "type": "object",
              "additionalProperties": {
                "type": "integer"
              }
            }
          }
        }
      }
    },
    "MonitoredObjectFilteredListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/MonitoredObjectFilteredList"
        }
      }
    },
    "MonitoredObjectFilteredList": {
      "type": "object",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "filteredResourceIdentifierList"
          ],
          "default": "filteredResourceIdentifierList"
        },
        "attributes": {
          "type": "object",
          "properties": {
            "resourceIdentifiers": {
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "MonitoredObjectMetadataDetailsListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/MonitoredObjectMetadataDetailsList"
        }
      }
    },
    "MonitoredObjectMetadataDetailsList": {
      "type": "object",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "monitoredObjectMetadataDetails"
          ],
          "default": "monitoredObjectMetadataDetails"
        },
        "attributes": {
          "type": "object",
          "required": [
            "datatype",
            "tenantId",
            "countPerValueMap"
          ],
          "properties": {
            "datatype": {
              "type": "string",
              "description": "Name used to identify this type of record in Datahub"
            },
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of the Tenant in Datahub"
            },
            "countPerValueMap": {
              "description": "Contains a map of metadata category names to the values and their corresponding count of Monitored Objects that use the Metadata value",
              "type": "object",
              "additionalProperties": {
                "description": "Contains a map of metadata values and their corresponding count of Monitored Objects that use the Metadata value",
                "type": "object",
                "additionalProperties": {
                  "type": "integer",
                  "format": "int64",
                  "description": "Time since epoch at which this object was last altered."
                }
              }
            }
          }
        }
      }
    },
    "MonitoredObjectGeoClusterResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/MonitoredObjectGeoClusters"
        }
      }
    },
    "MonitoredObjectGeoClusters": {
      "type": "object",
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "monitoredObjectGeoClusters"
          ],
          "default": "monitoredObjectGeoClusters"
        },
        "attributes": {
          "type": "object",
          "properties": {
            "datatype": {
              "type": "string",
              "description": "Name used to identify this type of record in Datahub"
            },
            "clusters": {
              "type": "array",
              "items": {
                "type": "object",
                "properties": {
                  "geohash": {
                    "type": "string"
                  },
                  "count": {
                    "type": "integer"
                  },
                  "centroid": {
                    "type": "object",
                    "properties": {
                      "lat": {
                        "type": "number",
                        "format": "float",
                        "description": "Geographic latitude of the calculated center of the Monitored Objects in the geofence bounds"
                      },
                      "lon": {
                        "type": "number",
                        "format": "float",
                        "description": "Geographic longitude of the calculated center of the Monitored Objects in the geofence bounds"
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "MonitoredObjectPatch": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "monitoredObjects"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "objectId"
          ],
          "properties": {
            "actuatorName": {
              "type": "string",
              "default": "unknown",
              "description": "Name of the origin of the Monitored Object"
            },
            "actuatorType": {
              "type": "string",
              "description": "Type of the origin of the Monitored Object",
              "enum": [
                "unknown",
                "accedian-nid",
                "accedian-vnid"
              ]
            },
            "reflectorName": {
              "type": "string",
              "default": "unknown",
              "description": "Name of the target of the Monitored Object"
            },
            "reflectorType": {
              "type": "string",
              "description": "Type of the target of the Monitored Object",
              "enum": [
                "unknown",
                "accedian-nid",
                "accedian-vnid"
              ]
            },
            "objectType": {
              "type": "string",
              "description": "Type of the Monitored Object. For instance, possible values are [unknown, flowmeter, twamp-pe, twamp-sf, twamp-sl, cisco-interface, cisco-node-summary, pvx, paa, \nregulator, rfc8321, dmm, slm, eth-dm, eth-vs, port, sa, sa-metrics, pl, iperf, echo-icmp, echo-udp]. If using dynamic types (i.e, for SNMP), you must enter the name of the dynamic type here\n"
            },
            "meta": {
              "type": "object",
              "description": "Attributes added to a Monitored Object that help identify the Monitored Object as well as provide flitering/grouping properties",
              "additionalProperties": {
                "type": "string"
              },
              "example": {
                "region": "paris",
                "wgs87_x": "-45.7123912",
                "wgs87_y": "-74.2130912"
              }
            },
            "sourceLocation": {
              "$ref": "#/definitions/MonitoredObjectLocation"
            },
            "destinationLocation": {
              "$ref": "#/definitions/MonitoredObjectLocation"
            },
            "topology": {
              "description": "Tags used to describe the path segments associated with the Monitored Object",
              "x-omitempty": true,
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "MonitoredObjectUpdate": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "monitoredObjects"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "objectId",
            "actuatorName",
            "actuatorType",
            "reflectorName",
            "reflectorType",
            "objectName",
            "objectType",
            "createdTimestamp",
            "topology"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "objectId": {
              "type": "string",
              "description": "Unique identifier of the Monitored Object in Datahub"
            },
            "actuatorName": {
              "type": "string",
              "default": "unknown",
              "description": "Name of the origin of the Monitored Object"
            },
            "actuatorType": {
              "type": "string",
              "description": "Type of the origin of the Monitored Object",
              "enum": [
                "unknown",
                "accedian-nid",
                "accedian-vnid"
              ]
            },
            "reflectorName": {
              "type": "string",
              "default": "unknown",
              "description": "Name of the target of the Monitored Object"
            },
            "reflectorType": {
              "type": "string",
              "description": "Type of the target of the Monitored Object",
              "enum": [
                "unknown",
                "accedian-nid",
                "accedian-vnid"
              ]
            },
            "objectName": {
              "type": "string",
              "description": "Name of the Monitored Object"
            },
            "objectType": {
              "type": "string",
              "description": "Type of the Monitored Object. For instance, possible values are [unknown, flowmeter, twamp-pe, twamp-sf, twamp-sl, cisco-interface, cisco-node-summary, pvx, paa, \nregulator, rfc8321, dmm, slm, eth-dm, eth-vs, port, sa, sa-metrics, pl, iperf, echo-icmp, echo-udp]. If using dynamic types (i.e, for SNMP), you must enter the name of the dynamic type here\n"
            },
            "createdTimestamp": {
              "type": "integer",
              "description": "Time since epoch at which this object was instantiated."
            },
            "meta": {
              "type": "object",
              "description": "Attributes added to a Monitored Object that help identify the Monitored Object as well as provide flitering/grouping properties",
              "additionalProperties": {
                "type": "string"
              },
              "example": {
                "region": "paris",
                "wgs87_x": "-45.7123912",
                "wgs87_y": "-74.2130912"
              }
            },
            "sourceLocation": {
              "$ref": "#/definitions/MonitoredObjectLocation"
            },
            "destinationLocation": {
              "$ref": "#/definitions/MonitoredObjectLocation"
            },
            "topology": {
              "description": "Tags used to describe the path segments associated with the Monitored Object",
              "type": "array",
              "items": {
                "type": "string"
              }
            },
            "archiveTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was archived.",
              "default": 0
            }
          }
        }
      }
    },
    "MonitoredObjectSummaryListResponse": {
      "type": "object",
      "description": "Monitoerd Object Summary response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "links": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/MonitoredObjectSummary"
          }
        }
      }
    },
    "MonitoredObjectSummaryResponse": {
      "type": "object",
      "description": "A single object Monitored Object Summary response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "links": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "data": {
          "$ref": "#/definitions/MonitoredObjectSummary"
        }
      }
    },
    "MonitoredObjectSummary": {
      "description": "Provides a trimmed down and modified version of a monitored object. Used for providing provisioning details to Datahub processing applications",
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "monitoredObjectSummaries"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "attributes"
          ],
          "properties": {
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of the Tenant in Datahub"
            },
            "objectId": {
              "type": "string",
              "description": "Unique identifier of the Monitored Object in Datahub"
            },
            "objectName": {
              "type": "string",
              "description": "Common name of the Monitored Object"
            },
            "meta": {
              "type": "object",
              "description": "The map of the metrics column and value that should be entered into that column",
              "additionalProperties": {
                "type": "string"
              }
            },
            "srcLat": {
              "type": "number",
              "format": "float",
              "description": "Geographic latitude of Monitored Object source"
            },
            "srcLon": {
              "type": "number",
              "format": "float",
              "description": "Geographic longitude of Monitored Object source"
            },
            "dstLat": {
              "type": "number",
              "format": "float",
              "description": "Geographic latitude of Monitored Object destination"
            },
            "dstLon": {
              "type": "number",
              "format": "float",
              "description": "Geographic longitude of Monitored Object destination"
            },
            "topology": {
              "description": "Tags used to describe the path segments associated with the Monitored Object",
              "type": "array",
              "items": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "MonitoredObjectMetadataCategoryMappingListResponse": {
      "type": "object",
      "description": "Monitoerd Object Metadata Category Mapping response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "links": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/MetadataCategoryMapping"
          }
        }
      }
    },
    "MonitoredObjectMetadataCategoryMappingResponse": {
      "type": "object",
      "description": "A single object Monitored Object Metadata Category Mapping response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "links": {
          "type": "object",
          "additionalProperties": {
            "type": "string"
          }
        },
        "data": {
          "$ref": "#/definitions/MetadataCategoryMapping"
        }
      }
    },
    "MetadataCategoryMapping": {
      "description": "Provides a mapping of Metadata Category name mappings to the Customer facing aliases",
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "metadataCategoryMapping"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "_rev",
            "datatype",
            "tenantId",
            "mappingType",
            "metadataCategoryMap",
            "createdTimestamp",
            "lastModifiedTimestamp"
          ],
          "properties": {
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "type": "string",
              "description": "Name used to identify this type of record in Datahub"
            },
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of the Tenant in Datahub"
            },
            "mappingType": {
              "type": "string",
              "description": "Type of the origin of the Monitored Object",
              "enum": [
                "unknown",
                "activeMetrics"
              ]
            },
            "metadataCategoryMap": {
              "type": "object",
              "description": "Name of the target of the Monitored Object",
              "additionalProperties": {
                "$ref": "#/definitions/MetadataAlias"
              }
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "MetadataAlias": {
      "type": "object",
      "description": "Properties of an alias used for Monitored Object Metadata storade in Datahub",
      "required": [
        "name",
        "isActive",
        "activeRangeMap"
      ],
      "properties": {
        "name": {
          "type": "string",
          "description": "The customer provided alias name for the Metadata Category"
        },
        "isActive": {
          "type": "boolean",
          "description": "Boolean flag indicating if this Metadata Category Alias is currently being used (true) or if it is no longer an active Metadata Category (false)"
        },
        "activeRangeMap": {
          "type": "object",
          "description": "A mapping of start timestamp to end timestamp ranges when this particular Metadata Mapping Alias was active.",
          "additionalProperties": {
            "type": "integer",
            "format": "int64",
            "description": "The end timestamp of an active range for a Metadata Mapping Alias. A value of -1 means this mapping is currently in use and has not ended yet."
          }
        }
      }
    },
    "MetadataCategoryMappingUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update a Metadata Category Mapping for a Tenant in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "metadataCategoryMappings"
              ]
            },
            "attributes": {
              "type": "object",
              "properties": {
                "add": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "List of Metadata Category Names to be added to the Metadata Category Mapping"
                },
                "archive": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "List of Metadata Category Names that should no longer be tracked against the Monitored Objects"
                },
                "rename": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/MetadataRenameData"
                  },
                  "description": "List of Metadata Category Names to be renamed in the Metadata Category Mapping"
                }
              }
            }
          }
        }
      }
    },
    "MetadataRenameData": {
      "type": "object",
      "required": [
        "existingName",
        "newName"
      ],
      "description": "Object providing Metadata Category Mapping alias name change information",
      "properties": {
        "existingName": {
          "type": "string",
          "description": "The current alias name of a Metadata Category Mapping to be changed"
        },
        "newName": {
          "type": "string",
          "description": "The desired alias name of a Metadata Category Mapping to be changed"
        }
      }
    },
    "MonitoredObjectLocation": {
      "type": "object",
      "description": "Defines the geographical location of the Monitored Object",
      "required": [
        "lat",
        "lon"
      ],
      "properties": {
        "lat": {
          "type": "number",
          "format": "float",
          "description": "Geographic latitude"
        },
        "lon": {
          "type": "number",
          "format": "float",
          "description": "Geographic longitude"
        }
      }
    },
    "MonitoredObjectReportingListRequest": {
      "type": "object",
      "description": "Contains the parameters related to fetching a list of reporting Monitored Object IDs for a given timeframe",
      "properties": {
        "reportingObjects": {
          "description": "If true, the result will be a list of ids for monitored objects that are reporting. If false, the returned list will be monitored objects that are not reporting",
          "type": "boolean",
          "default": true
        },
        "numberOfDays": {
          "type": "number",
          "format": "integer",
          "default": 7,
          "description": "Number of days, from current time, to look in the past to determine if the Monitored Objects are reporting",
          "minimum": 1,
          "exclusiveMinimum": false,
          "maximum": 31,
          "exclusiveMaximum": false
        }
      }
    },
    "JsonApiAlertGroupByRequest": {
      "description": "JSON API compliant wrapper for the groupby query",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "groupByAlerts"
              ]
            },
            "attributes": {
              "$ref": "#/definitions/AlertGroupByConfig"
            }
          }
        }
      }
    },
    "JsonApiAlertGroupByResponse": {
      "description": "JSON API compliant wrapper for the groupby response",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "groupByAlerts"
              ]
            },
            "attributes": {
              "type": "object",
              "allOf": [
                {
                  "$ref": "#/definitions/AlertGroupByConfig"
                },
                {
                  "type": "object",
                  "required": [
                    "result"
                  ],
                  "properties": {
                    "result": {
                      "$ref": "#/definitions/AlertGroupByReport"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    },
    "AlertQueryContext": {
      "description": "Hints indicating how the query may be Returns",
      "type": "object",
      "properties": {
        "groupNull": {
          "description": "When doing a group by, there are columns with no value associated with the metadata key supplied. By default, we ignore these rows but in certain use-cases, it is advantageous to group all the records not in the set as a new value.",
          "type": "boolean",
          "default": false
        },
        "ignoreCleaning": {
          "description": "A value of true will have the aggregation request execute on all data regardless of whether it has been cleaned or not",
          "type": "boolean"
        },
        "timeout": {
          "description": "Query timeout in milliseconds",
          "type": "integer",
          "example": 30000
        },
        "sortOnGroupingKey": {
          "description": "Allows a client to sort on a grouping key instead of the metric's value",
          "default": "metric",
          "type": "string",
          "example": "startTimestamp"
        },
        "sorted": {
          "type": "string",
          "description": "Indicates whether the response should return grouped by queries in ascending or descending order. Only applicable to grouped queries.",
          "enum": [
            "asc",
            "desc"
          ],
          "example": [
            "asc",
            "desc"
          ]
        },
        "numResults": {
          "description": "Number of results to return in grouped queries. A non-positive integer for this value implies there is no result limit. Only applicable to grouped queries.",
          "type": "integer",
          "format": "int32",
          "example": 10
        }
      }
    },
    "AlertGroupByConfig": {
      "description": "The necessary request parameters for the metric api call",
      "type": "object",
      "required": [
        "interval",
        "aggregation",
        "groupingContext",
        "metrics"
      ],
      "properties": {
        "queryContext": {
          "$ref": "#/definitions/AlertQueryContext"
        },
        "metaContext": {
          "$ref": "#/definitions/MetaContext"
        },
        "groupingContext": {
          "$ref": "#/definitions/GroupingContext"
        },
        "interval": {
          "description": "Time boundary for the metrics under consideration using the ISO-8601 standard",
          "type": "string",
          "example": "2018-04-08T14:00:00/2018-04-09T15:00:00"
        },
        "aggregation": {
          "$ref": "#/definitions/SupportedAggregations"
        },
        "metrics": {
          "type": "array",
          "x-omitempty": true,
          "description": "A set of identifiers that considers specific metrics based on the provided information",
          "items": {
            "$ref": "#/definitions/AlertSpec"
          }
        }
      }
    },
    "AlertGroupByReport": {
      "description": "The rendered response structure from the metric query",
      "type": "array",
      "x-omitempty": true,
      "items": {
        "type": "object",
        "allOf": [
          {
            "$ref": "#/definitions/AlertGroupedResultEntryParameters"
          }
        ]
      }
    },
    "AlertGroupedResultEntryParameters": {
      "description": "Describes filtering criteria used for a particular query that uses a grouping",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/AlertSpec"
        },
        {
          "type": "object",
          "required": [
            "groupedResults"
          ],
          "properties": {
            "groupedResults": {
              "type": "array",
              "x-omitempty": true,
              "items": {
                "type": "object",
                "required": [
                  "value"
                ],
                "properties": {
                  "groupings": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "value": {
                    "type": "number",
                    "format": "float"
                  }
                }
              }
            }
          }
        }
      ]
    },
    "JsonApiAlertAggregateRequest": {
      "description": "JSON API compliant wrapper for the aggregate query",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "aggregateAlerts"
              ]
            },
            "attributes": {
              "$ref": "#/definitions/V2AlertAggregateConfig"
            }
          }
        }
      }
    },
    "JsonApiAlertAggregateResponse": {
      "description": "JSON API compliant wrapper for the aggregate response",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "aggregateAlerts"
              ]
            },
            "attributes": {
              "type": "object",
              "allOf": [
                {
                  "$ref": "#/definitions/V2AlertAggregateConfig"
                },
                {
                  "type": "object",
                  "required": [
                    "result"
                  ],
                  "properties": {
                    "result": {
                      "$ref": "#/definitions/V2AlertAggregateReport"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    },
    "V2AlertAggregateConfig": {
      "description": "The necessary request parameters for the metric api call",
      "type": "object",
      "required": [
        "interval",
        "granularity",
        "aggregation",
        "metrics"
      ],
      "properties": {
        "queryContext": {
          "$ref": "#/definitions/QueryContext"
        },
        "metaContext": {
          "$ref": "#/definitions/MetaContext"
        },
        "interval": {
          "description": "Time boundary for the metrics under consideration using the ISO-8601 standard",
          "type": "string",
          "example": "2018-04-08T14:00:00/2018-04-09T15:00:00"
        },
        "granularity": {
          "description": "the granularity for timeseries in ISO-8601 duration format, or ALL",
          "type": "string",
          "example": "PT1H"
        },
        "aggregation": {
          "$ref": "#/definitions/SupportedAggregations"
        },
        "metrics": {
          "type": "array",
          "x-omitempty": true,
          "description": "A set of identifiers that considers specific metrics based on the provided information",
          "items": {
            "$ref": "#/definitions/AlertSpec"
          }
        }
      }
    },
    "V2AlertAggregateReport": {
      "description": "The rendered response structure from the metric query",
      "type": "array",
      "x-omitempty": true,
      "items": {
        "$ref": "#/definitions/alertTimeseriesResult"
      }
    },
    "CaptureSpec": {
      "type": "object",
      "additionalProperties": {
        "type": "array",
        "x-omitempty": true,
        "items": {
          "type": "string"
        }
      }
    },
    "AlertSpec": {
      "description": "Filter object that identifies a specific metric within a monitored object by its key attributes",
      "type": "object",
      "properties": {
        "policyId": {
          "description": "Policy ID to filter on",
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "policyType": {
          "description": "Hint to the query engine to limit the metric to certain types of entity.",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "session",
            "anomaly"
          ],
          "items": {
            "enum": [
              "capture",
              "capture-automatic",
              "micro-tca",
              "anomaly",
              "security"
            ],
            "type": "string"
          }
        },
        "alertState": {
          "description": "Set of one or more alert state to be used by the filter",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "raised",
            "cleared"
          ],
          "items": {
            "type": "string"
          }
        },
        "metric": {
          "description": "Name that identifies the specific metric within a monitored object",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "delayp95",
            "hit.rtt.per_sec"
          ],
          "items": {
            "type": "string"
          }
        },
        "uid": {
          "description": "Filter on Alert UID.",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "111111111"
          ],
          "items": {
            "type": "string"
          }
        },
        "startTimestamp": {
          "description": "Start Timestamp to filter on",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "delayp95",
            "hit.rtt.per_sec"
          ],
          "items": {
            "type": "integer",
            "format": "int64"
          }
        },
        "captureSpec": {
          "$ref": "#/definitions/CaptureSpec"
        },
        "objectType": {
          "description": "Object types to be considered as part of the filter",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "twamp-sl",
            "flowmeter"
          ],
          "items": {
            "type": "string"
          }
        },
        "direction": {
          "description": "Set of one or more directions to be used by the filter to identify required metric records",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "0",
            "1"
          ],
          "items": {
            "type": "string"
          }
        },
        "geoSpatial": {
          "$ref": "#/definitions/SpatialFilter"
        },
        "sourceLocation": {
          "$ref": "#/definitions/SpatialFilter"
        },
        "destinationLocation": {
          "$ref": "#/definitions/SpatialFilter"
        },
        "topology": {
          "description": "Name of a node on the route of the Monitored Object",
          "type": "string"
        },
        "valueBoundary": {
          "description": "Provides lower and/or lower bounds to filter in the metric value",
          "$ref": "#/definitions/MetricBucket"
        },
        "objectId": {
          "description": "Set of object IDs to filter on",
          "type": "array",
          "x-omitempty": true,
          "example": [
            "333732dc-99d4-4224-915e-3972b50d10ef",
            "931e7d13-6320-4ad7-ae06-7ff2df4f782a"
          ],
          "items": {
            "type": "string"
          }
        },
        "captureClientZoneId": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "captureServerZoneId": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "severity": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "sourceIp": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "destinationIp": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "killchain": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "securityJobType": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "sourceNetworkAssetRoles": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "destinationNetworkAssetRoles": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        }
      }
    },
    "alertHistory": {
      "type": "object",
      "required": [
        "type",
        "id",
        "data"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "alertHistories"
          ],
          "default": "alertHistories"
        },
        "id": {
          "type": "string"
        },
        "data": {
          "type": "array",
          "items": {
            "type": "object",
            "properties": {
              "relationships": {
                "type": "object",
                "properties": {
                  "policyId": {
                    "$ref": "#/definitions/JsonApiSingleRelationship"
                  },
                  "objectId": {
                    "$ref": "#/definitions/JsonApiSingleRelationship"
                  }
                }
              },
              "attributes": {
                "$ref": "#/definitions/AlertPayload"
              }
            }
          }
        }
      }
    },
    "alertPolicyCreateRequest": {
      "type": "object",
      "description": "JSON API wrapper for creating Alert Policy",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/alertPolicy"
        }
      }
    },
    "alertPoliciesResponse": {
      "type": "object",
      "description": "JSON API Response for Alert Policies",
      "required": [
        "data"
      ],
      "properties": {
        "meta": {
          "type": "object",
          "properties": {
            "enabledAlertPolicyLimit": {
              "$ref": "#/definitions/enabledAlertPolicyLimit"
            }
          }
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/alertPolicy"
          }
        }
      }
    },
    "alertPolicyResponse": {
      "type": "object",
      "description": "JSON API Response for Alert Policy",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/alertPolicy"
        }
      }
    },
    "alertPoliciesStatistics": {
      "required": [
        "id",
        "type",
        "attributes"
      ],
      "properties": {
        "id": {
          "type": "string",
          "description": "The timestamp when this status was queried at"
        },
        "type": {
          "type": "string",
          "enum": [
            "status"
          ],
          "default": "status"
        },
        "attributes": {
          "required": [
            "activeAlerts",
            "totalObjects"
          ],
          "properties": {
            "activeAlerts": {
              "type": "number",
              "format": "int",
              "description": "Number of alerts that have crossed thresholds"
            },
            "totalObjects": {
              "type": "number",
              "format": "int",
              "description": "Total number of objects in this policy's object set"
            }
          }
        }
      }
    },
    "alertTimeseriesResult": {
      "description": "Describes series data prefixed with the filter criteria that were used to generate the output",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/AlertSpec"
        },
        {
          "type": "object",
          "required": [
            "series"
          ],
          "properties": {
            "series": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/MetricTimeseriesResultEntry"
              }
            }
          }
        }
      ]
    },
    "alertPolicy": {
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "alertPolicies"
          ],
          "default": "alertPolicies"
        },
        "id": {
          "type": "string"
        },
        "relationships": {
          "type": "object",
          "properties": {
            "createdBy": {
              "$ref": "#/definitions/JsonApiSingleRelationship"
            },
            "modifiedBy": {
              "$ref": "#/definitions/JsonApiSingleRelationship"
            },
            "tenantId": {
              "$ref": "#/definitions/JsonApiSingleRelationship"
            },
            "tenantName": {
              "$ref": "#/definitions/JsonApiSingleRelationship"
            }
          }
        },
        "included": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/alertPoliciesStatistics"
          }
        },
        "attributes": {
          "type": "object",
          "description": "Every alert policy requires a trigger condition. Recovery is optional as some alarms may need to be stopped\nby an operator.\nTrigger condition  - This is the policies that causes an alarm to start\nRecovery condition - This is the policies that automatically causes an alarm to stop\n",
          "required": [
            "conditions",
            "name",
            "description",
            "configuration"
          ],
          "properties": {
            "enabled": {
              "type": "boolean",
              "default": true,
              "description": "Controls whether this policy should be enabled"
            },
            "deleted": {
              "type": "boolean",
              "default": false,
              "description": "This flag is to tell us whether the alert has been deleted and cannot be modified. The reasoning we don't do a real delete is because existing alerts in the database still need to correspond to something."
            },
            "_rev": {
              "type": "string",
              "description": "Policy revision. Not necessarily sequential"
            },
            "lastModifiedTimestamp": {
              "type": "number",
              "format": "int64",
              "description": "Last modification timestamp in POSIX epoch generated by server"
            },
            "createdTimestamp": {
              "type": "number",
              "format": "int64",
              "description": "Creation timestamp in POSIX epoch generated by server"
            },
            "useCleanData": {
              "type": "boolean",
              "default": true,
              "description": "By default alerts will ignore records that are marked dirty. This can be overriden (switch this to false) in the scenarios that alert should check invalid records."
            },
            "useBusyHourOnly": {
              "type": "boolean",
              "default": false,
              "description": "By default alerts will ignore records that are marked as busyHour. If this is set to true, ONLY busy hour data will be considered when alert rules are applied"
            },
            "useMaintenance": {
              "type": "boolean",
              "default": true,
              "description": "By default alerts will consider records that are marked as maintenance. If this is set to false, data tagged as maintenance will be ignored when alert rules are applied"
            },
            "conditions": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/alertConditionGroup"
              }
            },
            "configuration": {
              "$ref": "#/definitions/alertsConfiguration"
            },
            "name": {
              "type": "string",
              "description": "The name of the alert so it can be easily differentiated.",
              "minLength": 1,
              "maxLength": 64
            },
            "description": {
              "type": "string",
              "description": "Brief description of what the Alert Policy will do",
              "maxLength": 512
            },
            "tags": {
              "description": "Miscellaneous data the user wants to tag this alert with",
              "type": "string",
              "maxLength": 255,
              "example": "orderId:uuid123"
            }
          }
        }
      }
    },
    "alertsConfiguration": {
      "type": "object",
      "required": [
        "policyType"
      ],
      "properties": {
        "policyType": {
          "type": "string",
          "enum": [
            "micro-tca",
            "anomaly",
            "capture",
            "security",
            "capture-v2"
          ],
          "description": "micro-tca - Alerts per monitored object.\nanomaly   - Alerts detected by the Anomaly detector.\ncapture   - Alerts for Capture\ncapture-v2 - Alerts for Capture with a v2 schema.\n",
          "default": "micro-tca"
        },
        "aggregationGranularity": {
          "description": "Capture aggregation's granularity. The alert condition's duration must be same or larger than this value."
        },
        "severity": {
          "type": "string",
          "enum": [
            "low",
            "medium",
            "high",
            "critical"
          ]
        },
        "killchain": {
          "type": "string",
          "enum": [
            "ActionsOnObjective",
            "CommandAndControl",
            "Exfiltration",
            "Exploitation",
            "Reconnaissance"
          ],
          "description": "Killchain step according to MITRE techniques. Applicable to security alerts only."
        },
        "context": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/genericFilterMapItem"
          }
        }
      }
    },
    "alertConditionGroup": {
      "type": "object",
      "required": [
        "triggersOn"
      ],
      "description": "\"The conditions for an alert (violation or recovery). eg: metric > threshold\"\n\"Note that metric will in the future support composite metrics.\"\n",
      "properties": {
        "triggersOn": {
          "$ref": "#/definitions/alertCondition"
        },
        "recoversOn": {
          "$ref": "#/definitions/alertCondition"
        }
      }
    },
    "alertCondition": {
      "type": "object",
      "properties": {
        "duration": {
          "type": "string",
          "default": "PT5M"
        },
        "metric": {
          "type": "object",
          "required": [
            "vendor"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "session",
                "capture",
                "security"
              ],
              "default": "session"
            },
            "layer": {
              "type": "string",
              "description": "Capture field name",
              "example": "http"
            },
            "vendor": {
              "description": "Vendor name associated with the monitored object",
              "type": "string",
              "example": "accedian-twamp"
            },
            "objectType": {
              "description": "Object types to be considered as part of the filter",
              "type": "array",
              "example": [
                "twamp-sl",
                "twamp-sf"
              ],
              "items": {
                "type": "string"
              }
            },
            "id": {
              "description": "The metric's identifier",
              "type": "string",
              "example": "delayP95"
            },
            "direction": {
              "description": "Set of one or more directions to be used by the filter to identify required metric records",
              "type": "array",
              "example": [
                "0"
              ],
              "items": {
                "type": "string"
              }
            }
          }
        },
        "ratioPercent": {
          "type": "number"
        },
        "value": {
          "type": "string"
        },
        "values": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        },
        "comparator": {
          "type": "string",
          "enum": [
            "gt",
            "lt",
            "eq",
            "gte",
            "lte",
            "in"
          ],
          "default": "eq",
          "description": "Operand to use when evaluating the condition.\ngt  = greaterThan\nlt  = lessThan\neq  = equal\n"
        },
        "blacklist": {
          "description": "Generic blacklist of fields and their values that can trigger an alert.\nSupported only for \"security\" policy type!\n",
          "type": "array",
          "x-omitempty": true,
          "items": {
            "$ref": "#/definitions/alertConditionListEntry"
          }
        },
        "whitelist": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "$ref": "#/definitions/alertConditionListEntry"
          }
        }
      }
    },
    "alertConditionListEntry": {
      "type": "object",
      "required": [
        "field",
        "value"
      ],
      "properties": {
        "field": {
          "type": "string"
        },
        "value": {
          "type": "string"
        },
        "description": {
          "type": "string",
          "x-omitempty": false,
          "default": ""
        }
      }
    },
    "AlertPayload": {
      "type": "object",
      "required": [
        "tenantName",
        "tenantId",
        "timestamp",
        "processedTimestamp",
        "startTimestamp",
        "policyId",
        "source",
        "alertState",
        "policyType"
      ],
      "properties": {
        "uid": {
          "type": "string",
          "description": "Unique Identifier"
        },
        "tenantName": {
          "type": "string",
          "description": "The tenant Name"
        },
        "tenantId": {
          "type": "string",
          "description": "The tenant ID"
        },
        "processedTimestamp": {
          "type": "integer",
          "format": "int64",
          "description": "When the record was processed by the stream processor. Note that this is not the record's timestamp."
        },
        "timestamp": {
          "type": "integer",
          "format": "int64",
          "description": "The timestamp of the last record that causes the alert to trigger."
        },
        "startTimestamp": {
          "type": "integer",
          "format": "int64",
          "description": "For a raised alert, this will match the timestamp value. For a cleared alert, this value will signify the timestamp of the last record that causes the alert to clear."
        },
        "endTimestamp": {
          "type": "integer",
          "format": "int64",
          "description": "As usual it will be capture end data. Or end of time window"
        },
        "policyName": {
          "type": "string",
          "format": "string",
          "description": "Message is associated with an existing policy's Name"
        },
        "policyId": {
          "type": "string",
          "format": "uuid",
          "description": "Message is associated with an existing policy"
        },
        "objectId": {
          "type": "string",
          "description": "Object ID that is in violation if the policy is configured for micro-TCA"
        },
        "objectName": {
          "type": "string",
          "description": "Object Name that is in violation if the policy is configured for micro-TCA"
        },
        "source": {
          "type": "string",
          "description": "Originator of the message, eg: the stream processors"
        },
        "uri": {
          "type": "string",
          "format": "uri",
          "description": "The alert may provide a link to the alert's dashboard for investigation"
        },
        "annotation": {
          "type": "string",
          "maxLength": 255
        },
        "metric": {
          "type": "string",
          "description": "The metric that this alert sampled"
        },
        "direction": {
          "type": "string",
          "description": "The direction of the metric that caused the alert"
        },
        "tags": {
          "description": "Miscellenous data the user wants to tag this alert with",
          "type": "string",
          "maxLength": 255
        },
        "policyType": {
          "type": "string",
          "enum": [
            "micro-tca",
            "anomaly",
            "capture",
            "capture-automatic",
            "security",
            "capture-v2"
          ]
        },
        "objectType": {
          "type": "string",
          "description": "The type of object this alert is for"
        },
        "duration": {
          "type": "number",
          "description": "The minimum amount of time beyond the threshold"
        },
        "timeInViolation": {
          "type": "number",
          "description": "The total amount of time spent in violation"
        },
        "alertState": {
          "type": "string",
          "enum": [
            "raised",
            "cleared",
            "error",
            "forced-clear"
          ],
          "description": "Message type\nforced-clear -\nraised - Policy is declaring violation conditions are met\ncleared - Policy is declaring recovery conditions are met\nerror - Analytics engine encountered an error at timestamp\n"
        },
        "srcLat": {
          "type": "number",
          "format": "float",
          "description": "Geographic latitude of Monitored Object source"
        },
        "srcLon": {
          "type": "number",
          "format": "float",
          "description": "Geographic longitude of Monitored Object source"
        },
        "dstLat": {
          "type": "number",
          "format": "float",
          "description": "Geographic latitude of Monitored Object destination"
        },
        "dstLon": {
          "type": "number",
          "format": "float",
          "description": "Geographic longitude of Monitored Object destination"
        },
        "topology": {
          "description": "Tags used to describe the path segments associated with the Monitored Object",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "metadata": {
          "type": "object",
          "example": {
            "meta21": "First value",
            "meta31": "Second value"
          },
          "description": "Metadata Attributes of an monitored object",
          "pattern": "^[a-z_]+$",
          "additionalProperties": {
            "type": "string"
          }
        },
        "value": {
          "description": "This can either be the threshold value or a distance measure for dynamic thresholds",
          "type": "string"
        },
        "comparator": {
          "type": "string",
          "enum": [
            "gt",
            "lt",
            "eq",
            "gte",
            "lte"
          ],
          "default": "gt",
          "description": "Operand to use when evaluating the condition.\ngt  = greaterThan\nlt  = lessThan\neq  = equal\n"
        },
        "sessionId": {
          "type": "string"
        },
        "bcn": {
          "type": "string"
        },
        "bca": {
          "type": "string"
        },
        "ip": {
          "type": "string"
        },
        "captureLayer": {
          "type": "string"
        },
        "captureZone": {
          "type": "string"
        },
        "captureApplicationId": {
          "type": "string"
        },
        "captureZoneId": {
          "type": "string"
        },
        "captureMetaThresholds": {
          "type": "number"
        },
        "captureMetaValues": {
          "type": "string"
        },
        "captureMetaIps": {
          "type": "string"
        },
        "captureMetaDesc": {
          "type": "string"
        },
        "captureMetaDate_stop": {
          "type": "number"
        },
        "captureMetaDate_start": {
          "type": "number"
        },
        "captureMetaIp_client": {
          "type": "string"
        },
        "captureMetaIp_count": {
          "type": "number"
        },
        "captureMetaStart": {
          "type": "number"
        },
        "captureMetaStop": {
          "type": "number"
        },
        "captureMetaName": {
          "type": "string"
        },
        "captureMetaAlert_id": {
          "type": "string"
        },
        "captureMetaNow": {
          "type": "number"
        },
        "captureMetaFirst_sent": {
          "type": "number"
        },
        "captureMetaLast_sent": {
          "type": "number"
        },
        "captureMetaSite": {
          "type": "string"
        },
        "captureMetaWorker": {
          "type": "string"
        },
        "captureMetaFiring": {
          "type": "string"
        },
        "captureMetaCertainty": {
          "type": "number"
        },
        "captureMetaHostname": {
          "type": "string"
        },
        "captureMetaCertainty_percent": {
          "type": "number"
        },
        "captureClientZoneId": {
          "type": "string"
        },
        "captureServerZoneId": {
          "type": "string"
        },
        "sourceIp": {
          "type": "string"
        },
        "destinationIp": {
          "type": "string"
        },
        "severity": {
          "type": "string",
          "enum": [
            "low",
            "medium",
            "high",
            "critical"
          ]
        },
        "killchain": {
          "type": "string",
          "enum": [
            "ActionsOnObjective",
            "CommandAndControl",
            "Exfiltration",
            "Exploitation",
            "Reconnaissance"
          ]
        },
        "securityJobType": {
          "type": "string"
        },
        "sourceNetworkAssetRoles": {
          "type": "string"
        },
        "destinationNetworkAssetRoles": {
          "type": "string"
        },
        "sourcePort": {
          "type": "number"
        },
        "destinationPort": {
          "type": "number"
        }
      }
    },
    "AutomaticAlertPolicyCreateRequest": {
      "type": "object",
      "description": "JSON API wrapper for creating Alert Policy",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "rev": {
              "type": "string"
            },
            "configuration": {
              "$ref": "#/definitions/AutomaticAlertConfiguration"
            }
          }
        }
      }
    },
    "AutomaticAlertPolicyResponse": {
      "type": "object",
      "description": "JSON API Response for Alert Policy",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "rev": {
              "type": "string"
            },
            "configuration": {
              "$ref": "#/definitions/AutomaticAlertConfiguration"
            }
          }
        }
      }
    },
    "AutomaticAlertConfiguration": {
      "type": "object",
      "description": "We have built in rules that are already running and the user will be able to tune those rules here.",
      "properties": {
        "enabled": {
          "type": "boolean",
          "default": true
        },
        "capture": {
          "type": "object",
          "properties": {
            "scanDetection": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": false
                },
                "false_pos_rate": {
                  "type": "number"
                },
                "remember_duration": {
                  "type": "string"
                },
                "time_step": {
                  "type": "string"
                },
                "max_ports": {
                  "type": "number"
                },
                "max_hosts": {
                  "type": "number"
                },
                "max_num_packets": {
                  "type": "number"
                },
                "top_size": {
                  "type": "number"
                },
                "top_max_size": {
                  "type": "number"
                },
                "alert_memory": {
                  "type": "string"
                },
                "whilelist": {
                  "type": "array",
                  "x-omitempty": true,
                  "items": {
                    "type": "string"
                  }
                }
              }
            },
            "ddosDetection": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": false
                },
                "false_pos_rate": {
                  "type": "number"
                },
                "remember_duration": {
                  "type": "string"
                },
                "avg_win": {
                  "type": "string"
                },
                "whitelist": {
                  "type": "array",
                  "x-omitempty": true,
                  "items": {
                    "type": "string"
                  }
                }
              }
            },
            "synFloodDetection": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": false
                },
                "time_step": {
                  "type": "string"
                },
                "max_syns_per_sec": {
                  "type": "number"
                },
                "top_size": {
                  "type": "number"
                },
                "top_max_size": {
                  "type": "number"
                },
                "alert_memory": {
                  "type": "string"
                },
                "whitelist": {
                  "type": "array",
                  "x-omitempty": true,
                  "items": {
                    "type": "string"
                  }
                }
              }
            },
            "perApplication": {
              "type": "object",
              "properties": {
                "enabled": {
                  "type": "boolean",
                  "default": false
                },
                "fitting_points": {
                  "type": "number"
                },
                "smooth_coefficient": {
                  "type": "number"
                }
              }
            }
          }
        },
        "sessionAnomaly": {
          "description": "Place holder for anomoly detection",
          "type": "object",
          "properties": {
            "enabled": {
              "type": "boolean"
            }
          }
        }
      }
    },
    "AlertSummary": {
      "type": "object",
      "description": "Alerts summaries are checkpoints to aid in the tracking of sets of active objects per policy every hour",
      "required": [
        "tenantId",
        "policyId",
        "timestamp",
        "alertState",
        "policyType"
      ],
      "properties": {
        "metric": {
          "type": "string",
          "description": "The metric that this alert sampled"
        },
        "direction": {
          "type": "string"
        },
        "tenantId": {
          "type": "string"
        },
        "policyId": {
          "type": "string"
        },
        "itemsInViolationCount": {
          "type": "number"
        },
        "startTimestamp": {
          "type": "number",
          "format": "int64"
        },
        "timestamp": {
          "type": "number",
          "format": "int64"
        },
        "duration": {
          "type": "number"
        },
        "policyType": {
          "type": "string"
        },
        "alertState": {
          "type": "string",
          "enum": [
            "summary",
            "object-checkpoint"
          ]
        },
        "objectId": {
          "type": "string"
        },
        "srcLat": {
          "type": "number",
          "format": "float",
          "description": "Geographic latitude of Monitored Object source"
        },
        "srcLon": {
          "type": "number",
          "format": "float",
          "description": "Geographic longitude of Monitored Object source"
        },
        "dstLat": {
          "type": "number",
          "format": "float",
          "description": "Geographic latitude of Monitored Object destination"
        },
        "dstLon": {
          "type": "number",
          "format": "float",
          "description": "Geographic longitude of Monitored Object destination"
        },
        "topology": {
          "description": "Tags used to describe the path segments associated with the Monitored Object",
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "value": {
          "description": "This can either be the threshold value or a distance measure for dynamic thresholds",
          "type": "string"
        },
        "comparator": {
          "type": "string",
          "enum": [
            "gt",
            "lt",
            "eq",
            "gte",
            "lte"
          ],
          "default": "gt",
          "description": "Operand to use when evaluating the condition.\ngt  = greaterThan\nlt  = lessThan\neq  = equal\n"
        },
        "sessionId": {
          "type": "string"
        },
        "bcn": {
          "type": "string"
        },
        "bca": {
          "type": "string"
        },
        "ip": {
          "type": "string"
        },
        "captureLayer": {
          "type": "string"
        },
        "captureZone": {
          "type": "string"
        },
        "captureApplicationId": {
          "type": "string"
        },
        "captureZoneId": {
          "type": "string"
        },
        "captureMetaThresholds": {
          "type": "number"
        },
        "captureMetaValues": {
          "type": "string"
        },
        "captureMetaIps": {
          "type": "string"
        },
        "captureMetaDesc": {
          "type": "string"
        },
        "captureMetaDate_stop": {
          "type": "number"
        },
        "captureMetaDate_start": {
          "type": "number"
        },
        "captureMetaIp_client": {
          "type": "string"
        },
        "captureMetaIp_count": {
          "type": "number"
        },
        "captureMetaStart": {
          "type": "number"
        },
        "captureMetaStop": {
          "type": "number"
        },
        "captureMetaName": {
          "type": "string"
        },
        "captureMetaAlert_id": {
          "type": "number"
        },
        "captureMetaNow": {
          "type": "number"
        },
        "captureMetaFirst_sent": {
          "type": "number"
        },
        "captureMetaLast_sent": {
          "type": "number"
        },
        "captureMetaSite": {
          "type": "string"
        },
        "captureMetaWorker": {
          "type": "string"
        },
        "captureMetaFiring": {
          "type": "string"
        },
        "captureMetaCertainty": {
          "type": "number"
        },
        "captureMetaHostname": {
          "type": "string"
        },
        "captureMetaCertainty_percent": {
          "type": "number"
        }
      }
    },
    "AlertsPayloadListResponse": {
      "type": "object",
      "description": "AlertPayload response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/AlertPayload"
          }
        }
      }
    },
    "SessionFilterProfile": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "SessionFilterProfiles"
          ]
        },
        "id": {
          "type": "string"
        },
        "relationships": {
          "$ref": "#/definitions/SessionFilterProfileRelationships"
        },
        "attributes": {
          "type": "object",
          "required": [
            "tenantId",
            "name"
          ],
          "properties": {
            "name": {
              "type": "string"
            },
            "tenantId": {
              "type": "string"
            },
            "createdTimestamp": {
              "type": "integer"
            },
            "lastModifiedTimestamp": {
              "type": "integer"
            }
          }
        }
      }
    },
    "SessionFilterProfileRelationships": {
      "type": "object",
      "properties": {
        "sessionFilters": {
          "description": "References the unique identifiers of the SessionFilters that are used in this SessionFilterProfile",
          "$ref": "#/definitions/JsonApiRelationship"
        }
      }
    },
    "SessionFilterProfileListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Response for one ore more SessionFilterProfiles from Datahub",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SessionFilterProfile"
          }
        }
      }
    },
    "SessionFilterProfileResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "A single object SessionFilterProfile response from Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/SessionFilterProfile"
        }
      }
    },
    "SessionFilterProfileCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to create a SessionFilterProfile in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "sessionFilterProfiles"
              ]
            },
            "id": {
              "type": "string"
            },
            "relationships": {
              "$ref": "#/definitions/SessionFilterProfileRelationships"
            },
            "attributes": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "User provided identifier for a SessionFilterProfile"
                }
              }
            }
          }
        }
      }
    },
    "SessionFilterProfileUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update a SessionFilterProfile in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "sessionFilterProfiles"
              ]
            },
            "id": {
              "type": "string"
            },
            "relationships": {
              "$ref": "#/definitions/SessionFilterProfileRelationships"
            },
            "attributes": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "type": "string",
                  "description": "User provided identifier for a SessionFilterProfile"
                }
              }
            }
          }
        }
      }
    },
    "SessionFilter": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "filterList"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "tenantId",
            "type",
            "reportingDuration",
            "filterItems"
          ],
          "properties": {
            "tenantId": {
              "type": "string"
            },
            "name": {
              "type": "string"
            },
            "reportingDuration": {
              "type": "integer",
              "description": "The minimum allowed reporting duration, in seconds. ex: - per second data = 1 - per 5 minute data = 5*60 = 300 - per 15 miunte data = 5*15 = 900 The lower the duration, the higher the rate. i.e.: - per second data = 1 record every second = 3600 every hour"
            },
            "type": {
              "type": "string",
              "enum": [
                "whitelist",
                "blacklist"
              ]
            },
            "filterItems": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/FilterItem"
              },
              "description": "A list containing the attribute and value the filter will work on."
            }
          }
        }
      }
    },
    "SessionFilterListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Response for one ore more SessionFilters from Datahub",
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/SessionFilter"
          }
        }
      }
    },
    "SessionFilterResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "A single object SessionFilter response from Datahub",
      "properties": {
        "data": {
          "$ref": "#/definitions/SessionFilter"
        }
      }
    },
    "SessionFilterCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to create a SessionFilter in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "sessionFilters"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "type": "string"
                },
                "reportingDuration": {
                  "type": "integer",
                  "description": "The minimum allowed reporting duration, in seconds. ex: - per second data = 1 - per 5 minute data = 5*60 = 300 - per 15 miunte data = 5*15 = 900 The lower the duration, the higher the rate. i.e.: - per second data = 1 record every second = 3600 every hour"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "whitelist",
                    "blacklist"
                  ]
                },
                "filterItems": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/FilterItem"
                  },
                  "description": "A list containing the attribute and value the filter will work on."
                }
              }
            }
          }
        }
      }
    },
    "SessionFilterUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update a SessionFilter in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "sessionFilters"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "type": "string"
                },
                "reportingDuration": {
                  "type": "integer",
                  "description": "The minimum allowed reporting duration, in seconds. ex: - per second data = 1 - per 5 minute data = 5*60 = 300 - per 15 miunte data = 5*15 = 900 The lower the duration, the higher the rate. i.e.: - per second data = 1 record every second = 3600 every hour"
                },
                "type": {
                  "type": "string",
                  "enum": [
                    "whitelist",
                    "blacklist"
                  ]
                },
                "filterItems": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/FilterItem"
                  },
                  "description": "A list containing the attribute and value the filter will work on."
                }
              }
            }
          }
        }
      }
    },
    "FilterItem": {
      "type": "object",
      "required": [
        "field",
        "value",
        "isPartialMatch"
      ],
      "properties": {
        "field": {
          "type": "string",
          "description": "The field the filtering will be filtering on."
        },
        "value": {
          "type": "string",
          "description": "The value the filtering will be filtering by. Can be a full value, or partial string match."
        },
        "isPartialMatch": {
          "type": "boolean",
          "description": "If true, 'value' will be used as a partial string match."
        }
      }
    },
    "PatchSessionFilterProfileRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to patch a SessionFilterProfile in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "sessionFilterProfiles"
              ]
            },
            "attributes": {
              "type": "object",
              "properties": {
                "addSessionFilters": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "List of SessionFilter IDs to be added to this SessionFilterProfile"
                },
                "removeSessionFilters": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  },
                  "description": "List of SessionFilter IDs to be removed from this SessionFilterProfile"
                },
                "updateProperties": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    }
                  },
                  "description": "Properties to be edited on the SessionFilterProfile"
                }
              }
            }
          }
        }
      }
    },
    "PatchSessionFilterRequest": {
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes",
            "id"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "sessionFilters"
              ]
            },
            "attributes": {
              "type": "object",
              "properties": {
                "addSessionFilterItems": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/FilterItem"
                  },
                  "description": "List of SessionFilterItems to be added to this SessionFilter"
                },
                "removeSessionFilterItems": {
                  "type": "array",
                  "items": {
                    "$ref": "#/definitions/FilterItem"
                  },
                  "description": "List of SessionFilterItems to be removed from this SessionFilter"
                },
                "updateProperties": {
                  "type": "object",
                  "properties": {
                    "name": {
                      "type": "string"
                    },
                    "type": {
                      "type": "string",
                      "enum": [
                        "whitelist",
                        "blacklist"
                      ]
                    }
                  },
                  "description": "Properties to be edited on the SessionFilter"
                }
              }
            }
          }
        }
      }
    },
    "ThresholdProfileCreateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to create a new Threshold Profile in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "thresholdProfiles"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "name"
              ],
              "properties": {
                "name": {
                  "type": "string"
                },
                "thresholds": {
                  "description": "Thresholds will be deprecated in the next API version. Please use the 'thresholdList' property instead",
                  "$ref": "#/definitions/ThresholdsObject"
                },
                "thresholdList": {
                  "$ref": "#/definitions/ThresholdList",
                  "description": "A collection of objects that describe Thresholds which when crossed will trigger events in Datahub"
                }
              }
            }
          }
        }
      }
    },
    "ThresholdProfileUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update an existing Threshold Profile in Datahub",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "id",
            "attributes"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "thresholdProfiles"
              ]
            },
            "id": {
              "type": "string"
            },
            "attributes": {
              "type": "object",
              "required": [
                "_rev"
              ],
              "properties": {
                "_rev": {
                  "type": "string",
                  "description": "Value used to ensure updates to this object are handled in order."
                },
                "name": {
                  "type": "string"
                },
                "thresholds": {
                  "description": "Thresholds will be deprecated in the next API version. Please use the 'thresholdList' property instead",
                  "$ref": "#/definitions/ThresholdsObject"
                },
                "thresholdList": {
                  "$ref": "#/definitions/ThresholdList",
                  "description": "A collection of objects that describe Thresholds which when crossed will trigger events in Datahub"
                }
              }
            }
          }
        }
      }
    },
    "ThresholdProfileListResponse": {
      "type": "object",
      "description": "Threshold Profile response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/ThresholdProfile"
          }
        }
      }
    },
    "ThresholdProfileResponse": {
      "type": "object",
      "description": "A single object Threshold Profile response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/ThresholdProfile"
        }
      }
    },
    "ThresholdProfile": {
      "type": "object",
      "required": [
        "type",
        "id",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "thresholdProfiles"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "tenantId",
            "_id",
            "_rev",
            "datatype",
            "name",
            "createdTimestamp",
            "lastModifiedTimestamp",
            "thresholds"
          ],
          "properties": {
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of the Tenant in Datahub"
            },
            "_id": {
              "type": "string"
            },
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "datatype": {
              "type": "string",
              "description": "Name used to identify this type of record in Datahub"
            },
            "name": {
              "type": "string",
              "description": "Identifying name of a Threshold Profile"
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            },
            "thresholds": {
              "description": "Thresholds will be deprecated in the next API version. Please use the 'thresholdList' property instead",
              "$ref": "#/definitions/ThresholdsObject"
            },
            "thresholdList": {
              "$ref": "#/definitions/ThresholdList"
            }
          }
        }
      }
    },
    "ThresholdList": {
      "description": "Contains an array of objects that outline thresholds per vendor/monitoredObjectType/direction which, when crossed, will generate events",
      "type": "array",
      "items": {
        "type": "object",
        "properties": {
          "vendor": {
            "type": "string",
            "description": "The name of the Vendor from which this Metric originates"
          },
          "monitoredObjectType": {
            "type": "string",
            "description": "The name of the type of Monitored Object for which this Metric is applicable"
          },
          "metric": {
            "type": "string",
            "description": "The name of the Metric"
          },
          "direction": {
            "type": "string",
            "description": "Describes the direction of the test in case a Threshold needs to be different for one direction (i.e. actuator to reflector) versus another (i.e. round trip)"
          },
          "enabled": {
            "type": "string",
            "description": "When true, Threshold Crossing for this Metric will be reported. When false, Threshold Crossings for this Metric are not reported."
          },
          "dimensions": {
            "type": "object",
            "description": "Provides data properties by which the Metric may be filtered and/or aggregated"
          },
          "events": {
            "description": "A collection of objects that describe the properties of a Threshold for a Metric",
            "type": "array",
            "items": {
              "type": "object",
              "additionalProperties": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "ThresholdsObject": {
      "type": "object",
      "properties": {
        "vendorMap": {
          "type": "object",
          "additionalProperties": {
            "type": "object",
            "properties": {
              "metricMap": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "eventAttrMap": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "string"
                      }
                    }
                  }
                }
              },
              "monitoredObjectTypeMap": {
                "type": "object",
                "additionalProperties": {
                  "type": "object",
                  "properties": {
                    "metricMap": {
                      "type": "object",
                      "additionalProperties": {
                        "type": "object",
                        "properties": {
                          "directionMap": {
                            "type": "object",
                            "additionalProperties": {
                              "type": "object",
                              "properties": {
                                "eventMap": {
                                  "type": "object",
                                  "additionalProperties": {
                                    "type": "object",
                                    "properties": {
                                      "eventAttrMap": {
                                        "type": "object",
                                        "additionalProperties": {
                                          "type": "string"
                                        }
                                      }
                                    }
                                  }
                                }
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    },
    "IngestionDictionaryV3CreateRequest": {
      "type": "object",
      "description": "Object used to create an Ingestion Dictionary in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/IngestionDictionaryV3"
        }
      }
    },
    "IngestionDictionaryV3UpdateRequest": {
      "type": "object",
      "description": "Object used to update an Ingestion Dictionary in Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/IngestionDictionaryV3"
        }
      }
    },
    "IngestionDictionaryV3ListResponse": {
      "type": "object",
      "description": "Ingestion Dictionary response including one or more values",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/IngestionDictionaryV3"
          }
        }
      }
    },
    "IngestionDictionaryV3Response": {
      "type": "object",
      "description": "A single object Ingestion Dictionary response from Datahub",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/IngestionDictionaryV3"
        }
      }
    },
    "IngestionDictionaryV3": {
      "type": "object",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "type": {
          "type": "string",
          "enum": [
            "ingestionDictionaries"
          ]
        },
        "id": {
          "type": "string"
        },
        "attributes": {
          "type": "object",
          "required": [
            "tenantId",
            "dictionaryName",
            "objectType"
          ],
          "properties": {
            "tenantId": {
              "type": "string",
              "description": "Unique identifier of the Tenant in Datahub"
            },
            "_id": {
              "type": "string"
            },
            "_rev": {
              "type": "string",
              "description": "Value used to ensure updates to this object are handled in order."
            },
            "dictionaryName": {
              "type": "string"
            },
            "dictionaryType": {
              "type": "string",
              "enum": [
                "custom",
                "extension",
                "global"
              ]
            },
            "vendor": {
              "type": "string"
            },
            "objectType": {
              "type": "string"
            },
            "dimensions": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/IngestionDictionaryV3Item"
              }
            },
            "metrics": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/IngestionDictionaryV3Item"
              }
            },
            "customMetrics": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/IngestionDictionaryV3Item"
              }
            },
            "createdTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was instantiated."
            },
            "lastModifiedTimestamp": {
              "type": "integer",
              "format": "int64",
              "description": "Time since epoch at which this object was last altered."
            }
          }
        }
      }
    },
    "IngestionDictionaryV3Item": {
      "type": "object",
      "required": [
        "analyticsName"
      ],
      "properties": {
        "analyticsName": {
          "type": "string"
        },
        "rawName": {
          "type": "string"
        },
        "dataType": {
          "type": "string",
          "enum": [
            "integer",
            "long",
            "float",
            "double",
            "string"
          ]
        },
        "hasBaseline": {
          "type": "boolean"
        },
        "sqlExpr": {
          "type": "string"
        },
        "unit": {
          "type": "string",
          "x-omitempty": true
        },
        "directions": {
          "type": "array",
          "x-omitempty": true,
          "items": {
            "type": "string"
          }
        }
      }
    },
    "DatasourceReconciliationTasks": {
      "description": "JSON API compliant wrapper for the datasource reconciliation tasks request",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "datasourceReconciliationTasks"
              ]
            },
            "attributes": {
              "$ref": "#/definitions/DatasourceReconciliationTaskConfig"
            }
          }
        }
      }
    },
    "DatasourceReconciliationTaskConfig": {
      "type": "object",
      "required": [
        "interval"
      ],
      "properties": {
        "interval": {
          "type": "string"
        },
        "storage": {
          "type": "string",
          "enum": [
            "hdfs",
            "s3"
          ],
          "default": "hdfs"
        }
      }
    },
    "DatasourceReindexTasks": {
      "description": "JSON API compliant wrapper for the datasource reindex tasks request",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "datasourceReindexTasks"
              ]
            },
            "attributes": {
              "$ref": "#/definitions/DatasourceReindexConfig"
            }
          }
        }
      }
    },
    "DatasourceReindexConfig": {
      "description": "Payload for a reindexing task of a metrics datasource. 'intervalStart' and 'intervalEnd' are required unless query parameter 'periodOffsetMultiplier' is provided, in which case they are ignored",
      "type": "object",
      "required": [
        "targetSegmentTimebucket"
      ],
      "properties": {
        "intervalStart": {
          "type": "string",
          "format": "date",
          "example": "2021-04-01",
          "description": "Start of time interval over which to execute the granularity compaction. Is of format 'YYYY-MM-DD'"
        },
        "intervalEnd": {
          "type": "string",
          "format": "date",
          "example": "2021-04-08",
          "description": "End of time interval over which to execute the granularity compaction. Is of format 'YYYY-MM-DD"
        },
        "targetSegmentTimebucket": {
          "type": "string",
          "enum": [
            "DAY",
            "MONTH"
          ],
          "description": "Target granularity at which the files holding the data in the datasource will be compacted"
        }
      }
    },
    "JsonApiGroupByRequest": {
      "description": "JSON API compliant wrapper for the groupby query",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "groupByMetrics"
              ]
            },
            "attributes": {
              "$ref": "#/definitions/GroupByConfig"
            }
          }
        }
      }
    },
    "JsonApiGroupByResponse": {
      "description": "JSON API compliant wrapper for the groupby response",
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/definitions/MetricQueryResponseMeta"
        },
        "data": {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "groupByMetrics"
              ]
            },
            "attributes": {
              "type": "object",
              "allOf": [
                {
                  "$ref": "#/definitions/GroupByConfig"
                },
                {
                  "type": "object",
                  "required": [
                    "result"
                  ],
                  "properties": {
                    "result": {
                      "$ref": "#/definitions/GroupByReport"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    },
    "GroupByConfig": {
      "description": "The necessary request parameters for the metric api call",
      "type": "object",
      "required": [
        "interval",
        "aggregation",
        "groupingContext",
        "metrics"
      ],
      "properties": {
        "queryContext": {
          "$ref": "#/definitions/QueryContext"
        },
        "metaContext": {
          "$ref": "#/definitions/MetaContext"
        },
        "groupingContext": {
          "$ref": "#/definitions/GroupingContext"
        },
        "interval": {
          "description": "Time boundary for the metrics under consideration using the ISO-8601 standard",
          "type": "string",
          "example": "2018-04-08T14:00:00/2018-04-09T15:00:00"
        },
        "aggregation": {
          "$ref": "#/definitions/SupportedAggregations"
        },
        "globalMetricFilterContext": {
          "$ref": "#/definitions/SupportedMetricDimensionFilters"
        },
        "metrics": {
          "type": "array",
          "description": "A set of identifiers that considers specific metrics based on the provided information",
          "items": {
            "$ref": "#/definitions/MetricSpec"
          }
        }
      }
    },
    "GroupByReport": {
      "description": "The rendered response structure from the metric query",
      "type": "array",
      "items": {
        "$ref": "#/definitions/GroupedResultEntryParameters"
      }
    },
    "MetaContext": {
      "description": "Elements of the query that define metadata specific components",
      "required": [
        "metadataFilters"
      ],
      "type": "object",
      "properties": {
        "metadataFilters": {
          "$ref": "#/definitions/MetaFilter"
        },
        "metaExclude": {
          "$ref": "#/definitions/MetaExclude"
        }
      }
    },
    "QueryContext": {
      "description": "Hints indicating how the query may be Returns",
      "type": "object",
      "properties": {
        "ignoreCleaning": {
          "description": "A value of true will have the aggregation request execute on all data regardless of whether it has been cleaned or not",
          "type": "boolean"
        },
        "focusBusyHour": {
          "description": "A value of true will only consider data tagged as 'busyHour' for the aggregation request",
          "type": "boolean"
        },
        "ignoreMaintenance": {
          "description": "A value of true will ignore data tagged as 'maintenance' for the aggregation request",
          "type": "boolean"
        },
        "timeout": {
          "description": "Query timeout in milliseconds",
          "type": "integer",
          "example": 30000
        },
        "sorted": {
          "type": "string",
          "description": "Indicates whether the response should return grouped by queries in ascending or descending order. Only applicable to grouped queries.",
          "enum": [
            "asc",
            "desc"
          ],
          "example": [
            "asc",
            "desc"
          ]
        },
        "numResults": {
          "description": "Number of results to return in grouped queries. A non-positive integer for this value implies there is no result limit. Only applicable to grouped queries.",
          "type": "integer",
          "format": "int32",
          "example": 10
        }
      }
    },
    "GroupingContext": {
      "description": "Defines how the results should be grouped",
      "required": [
        "groupings"
      ],
      "type": "object",
      "properties": {
        "strictGroupings": {
          "description": "Value of true indicates that all requested groupings MUST exist within a data record in order to be considered for aggregation within that group",
          "type": "boolean"
        },
        "groupings": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/GroupingEntity"
          }
        }
      }
    },
    "GroupingEntity": {
      "description": "Provides additional information about the entity to group by",
      "required": [
        "groupName",
        "groupType"
      ],
      "type": "object",
      "properties": {
        "groupName": {
          "type": "string"
        },
        "groupType": {
          "type": "string",
          "enum": [
            "active",
            "passive",
            "meta"
          ]
        }
      }
    },
    "GroupedResultEntryParameters": {
      "description": "Describes filtering criteria used for a particular query that uses a grouping",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/MetricSpec"
        },
        {
          "type": "object",
          "required": [
            "groupedResults"
          ],
          "properties": {
            "groupedResults": {
              "type": "array",
              "items": {
                "type": "object",
                "required": [
                  "groupings",
                  "value"
                ],
                "properties": {
                  "groupings": {
                    "type": "object",
                    "additionalProperties": {
                      "type": "string"
                    }
                  },
                  "value": {
                    "type": "number",
                    "format": "float"
                  }
                }
              }
            }
          }
        }
      ]
    },
    "JsonApiAggregateV3Request": {
      "description": "JSON API compliant wrapper for the aggregate query",
      "type": "object",
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "type",
            "attributes"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "aggregates"
              ]
            },
            "attributes": {
              "$ref": "#/definitions/AggregateV3Config"
            }
          }
        }
      }
    },
    "JsonApiAggregateV3Response": {
      "description": "JSON API compliant wrapper for the aggregate response",
      "type": "object",
      "properties": {
        "meta": {
          "$ref": "#/definitions/MetricQueryResponseMeta"
        },
        "data": {
          "type": "object",
          "required": [
            "type"
          ],
          "properties": {
            "id": {
              "type": "string"
            },
            "type": {
              "type": "string",
              "enum": [
                "aggregates"
              ]
            },
            "attributes": {
              "type": "object",
              "allOf": [
                {
                  "$ref": "#/definitions/AggregateV3Config"
                },
                {
                  "type": "object",
                  "required": [
                    "result"
                  ],
                  "properties": {
                    "result": {
                      "$ref": "#/definitions/AggregateV3Report"
                    }
                  }
                }
              ]
            }
          }
        }
      }
    },
    "AggregateV3Config": {
      "description": "The necessary request parameters for the metric api call",
      "type": "object",
      "required": [
        "interval",
        "granularity",
        "aggregation",
        "metrics"
      ],
      "properties": {
        "queryContext": {
          "$ref": "#/definitions/QueryContext"
        },
        "metaContext": {
          "$ref": "#/definitions/MetaContext"
        },
        "interval": {
          "description": "Time boundary for the metrics under consideration using the ISO-8601 standard",
          "type": "string",
          "example": "2018-04-08T14:00:00/2018-04-09T15:00:00"
        },
        "granularity": {
          "description": "the granularity for timeseries in ISO-8601 duration format, or ALL",
          "type": "string",
          "example": "PT1H"
        },
        "aggregation": {
          "$ref": "#/definitions/SupportedAggregations"
        },
        "globalMetricFilterContext": {
          "$ref": "#/definitions/SupportedMetricDimensionFilters"
        },
        "metrics": {
          "type": "array",
          "description": "A set of identifiers that considers specific metrics based on the provided information",
          "items": {
            "$ref": "#/definitions/MetricSpec"
          }
        }
      }
    },
    "AggregateV3Report": {
      "description": "The rendered response structure from the metric query",
      "type": "array",
      "items": {
        "$ref": "#/definitions/MetricTimeseriesResult"
      }
    },
    "MetricTimeseriesResult": {
      "description": "Describes series data prefixed with the filter criteria that were used to generate the output",
      "type": "object",
      "allOf": [
        {
          "$ref": "#/definitions/MetricSpec"
        },
        {
          "type": "object",
          "required": [
            "series"
          ],
          "properties": {
            "series": {
              "type": "array",
              "items": {
                "$ref": "#/definitions/MetricTimeseriesResultEntry"
              }
            }
          }
        }
      ]
    },
    "MetricTimeseriesResultEntry": {
      "description": "A singular time series entry that contains the timestamp and value",
      "type": "object",
      "required": [
        "timestamp",
        "value"
      ],
      "properties": {
        "timestamp": {
          "type": "string"
        },
        "value": {
          "type": "number",
          "format": "double"
        }
      }
    },
    "MetricQueryResponseMeta": {
      "description": "Provides additional diagnostic information about the query to the skylight-admin user",
      "type": "object",
      "properties": {
        "datasource": {
          "type": "string"
        },
        "datasourceSelectionRules": {
          "type": "array",
          "items": {
            "type": "string"
          }
        },
        "queryID": {
          "type": "string"
        }
      }
    },
    "TcpThroughputResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "$ref": "#/definitions/TcpThroughputTestReport"
        }
      }
    },
    "TcpThroughputPaginationStanza": {
      "type": "object",
      "properties": {
        "total-results": {
          "type": "integer"
        },
        "token": {
          "type": "string"
        },
        "next": {
          "type": "string"
        }
      }
    },
    "TcpThroughputListResponse": {
      "type": "object",
      "required": [
        "data"
      ],
      "properties": {
        "pagination": {
          "x-omitempty": true,
          "$ref": "#/definitions/TcpThroughputPaginationStanza"
        },
        "data": {
          "type": "array",
          "items": {
            "$ref": "#/definitions/TcpThroughputTestReport"
          }
        }
      }
    },
    "TcpThroughputUpdateRequest": {
      "type": "object",
      "required": [
        "data"
      ],
      "description": "Object used to update an existing TCP Throughput test report",
      "properties": {
        "data": {
          "$ref": "#/definitions/TcpThroughputUpdateBody"
        }
      }
    },
    "TcpThroughputUpdateBody": {
      "type": "object",
      "description": "A single instance of a TCP Throughput test run.",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "tcpThroughputReport"
          ]
        },
        "attributes": {
          "type": "object",
          "properties": {
            "user-meta": {
              "type": "object",
              "description": "User defined attributes added to a TCP Test that help identify the test as well as provide filtering/grouping properties",
              "x-omitempty": true,
              "additionalProperties": {
                "type": "string"
              }
            }
          }
        }
      }
    },
    "TcpThroughputFilteredListRequest": {
      "type": "object",
      "properties": {
        "expressions": {
          "x-omitempty": true,
          "$ref": "#/definitions/expressions"
        },
        "user-meta": {
          "$ref": "#/definitions/MetaFilter"
        },
        "ingestion-meta": {
          "$ref": "#/definitions/MetaFilter"
        },
        "metaExclude": {
          "$ref": "#/definitions/MetaExclude"
        },
        "test-id": {
          "type": "array",
          "x-omitempty": true,
          "description": "An array of test identifiers",
          "items": {
            "type": "string"
          }
        },
        "run-id": {
          "type": "array",
          "x-omitempty": true,
          "description": "An array of run identifiers",
          "items": {
            "type": "string"
          }
        }
      }
    },
    "TcpThroughputFilteredCountResponse": {
      "type": "object",
      "description": "Tcp Throughput counts response",
      "required": [
        "data"
      ],
      "properties": {
        "data": {
          "type": "object",
          "required": [
            "id"
          ],
          "properties": {
            "type": {
              "type": "string",
              "enum": [
                "tcpThroughputReportCount"
              ]
            },
            "attributes": {
              "type": "object",
              "properties": {
                "filters": {
                  "$ref": "#/definitions/TcpThroughputFilteredListRequest"
                },
                "count": {
                  "type": "integer"
                }
              }
            }
          }
        }
      }
    },
    "TcpThroughputTestMetrics": {
      "type": "object",
      "description": "Free form map of KPIs",
      "additionalProperties": {
        "type": "string"
      }
    },
    "TcpThroughputInterval": {
      "type": "object",
      "additionalProperties": {
        "$ref": "#/definitions/TcpThroughputTestMetrics"
      }
    },
    "TcpThroughputTestSummaryReport": {
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "tcpThroughputReport"
          ]
        },
        "attributes": {
          "type": "object",
          "properties": {
            "test-id": {
              "type": "string"
            },
            "run-id": {
              "type": "string"
            },
            "run-timestamp": {
              "type": "string"
            },
            "user-meta": {
              "type": "object",
              "description": "User defined attributes added to a TCP Test that help identify the test as well as provide filtering/grouping properties",
              "x-omitempty": true,
              "additionalProperties": {
                "type": "string"
              }
            },
            "ingestion-meta": {
              "type": "object",
              "description": "Attributes added to a TCP Test at ingestion time that help identify the test as well as provide filtering/grouping properties",
              "x-omitempty": true,
              "additionalProperties": {
                "type": "string"
              }
            },
            "test-summary-metrics": {
              "x-omitempty": true,
              "$ref": "#/definitions/TcpThroughputTestMetrics"
            }
          }
        }
      }
    },
    "TcpThroughputTestIntervalReport": {
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "tcpThroughputReport"
          ]
        },
        "attributes": {
          "type": "object",
          "properties": {
            "test-id": {
              "type": "string"
            },
            "run-id": {
              "type": "string"
            },
            "run-timestamp": {
              "type": "string"
            },
            "user-meta": {
              "type": "object",
              "description": "User defined attributes added to a TCP Test that help identify the test as well as provide filtering/grouping properties",
              "x-omitempty": true,
              "additionalProperties": {
                "type": "string"
              }
            },
            "ingestion-meta": {
              "type": "object",
              "description": "Attributes added to a TCP Test at ingestion time that help identify the test as well as provide filtering/grouping properties",
              "x-omitempty": true,
              "additionalProperties": {
                "type": "string"
              }
            },
            "test-interval-metrics": {
              "x-omitempty": true,
              "$ref": "#/definitions/TcpThroughputInterval"
            }
          }
        }
      }
    },
    "TcpThroughputTestReport": {
      "type": "object",
      "description": "A single instance of a TCP Throughput test run.",
      "required": [
        "type",
        "attributes"
      ],
      "properties": {
        "id": {
          "type": "string"
        },
        "type": {
          "type": "string",
          "enum": [
            "tcpThroughputReport"
          ]
        },
        "attributes": {
          "type": "object",
          "properties": {
            "test-id": {
              "type": "string"
            },
            "run-id": {
              "type": "string"
            },
            "run-timestamp": {
              "type": "string"
            },
            "user-meta": {
              "type": "object",
              "description": "User defined attributes added to a TCP Test that help identify the test as well as provide filtering/grouping properties",
              "x-omitempty": true,
              "additionalProperties": {
                "type": "string"
              }
            },
            "ingestion-meta": {
              "type": "object",
              "description": "Attributes added to a TCP Test at ingestion time that help identify the test as well as provide filtering/grouping properties",
              "x-omitempty": true,
              "additionalProperties": {
                "type": "string"
              }
            },
            "test-summary-metrics": {
              "x-omitempty": true,
              "$ref": "#/definitions/TcpThroughputTestMetrics"
            },
            "test-interval-metrics": {
              "x-omitempty": true,
              "$ref": "#/definitions/TcpThroughputInterval"
            }
          }
        }
      }
    }
  }
}