{
  "swagger": "2.0",
  "basePath": "/",
  "info": {
    "title": "ChirpStack REST API",
    "version": "v4.14.1",
    "description": "For documentation, please refer to www.chirpstack.io."
  },
  "securityDefinitions": {
    "api_key": {
      "type": "apiKey",
      "name": "Grpc-Metadata-Authorization",
      "in": "header"
    }
  },
  "security": [
    {
      "api_key": []
    }
  ],
  "schemes": ["http", "https"],
  "consumes": [
    "application/json"
  ],
  "produces": [
    "application/json"
  ],
  "paths": {
    "/api/applications": {
      "get": {
        "operationId": "ApplicationService_List",
        "parameters": [
          {
            "description": "Max number of applications to return in the result-set.\nIf not set, it will be treated as 0, and the response will only return the total_count.",
            "format": "int64",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Offset in the result-set (for pagination).",
            "format": "int64",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          },
          {
            "description": "If set, the given string will be used to search on name (optional).",
            "in": "query",
            "name": "search",
            "required": false,
            "type": "string"
          },
          {
            "description": "Tenant ID to list the applications for.",
            "in": "query",
            "name": "tenantId",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListApplicationsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the list of applications.",
        "tags": [
          "ApplicationService"
        ]
      },
      "post": {
        "operationId": "ApplicationService_Create",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/apiCreateApplicationRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiCreateApplicationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create creates the given application.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{application.id}": {
      "put": {
        "operationId": "ApplicationService_Update",
        "parameters": [
          {
            "description": "Application ID (UUID).\nNote: on create this will be automatically generated.",
            "in": "path",
            "name": "application.id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "application": {
                  "description": "Application object.",
                  "properties": {
                    "description": {
                      "description": "Application description.",
                      "type": "string"
                    },
                    "name": {
                      "description": "Application name.",
                      "type": "string"
                    },
                    "tags": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Tags (user defined).\nThese tags can be used to add additional information to the application.\nThese tags are exposed in all the integration events of devices under\nthis application.",
                      "type": "object"
                    },
                    "tenantId": {
                      "description": "Tenant ID (UUID).",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update updates the given application.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/device-profiles": {
      "get": {
        "operationId": "ApplicationService_ListDeviceProfiles",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListApplicationDeviceProfilesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List device-profiles used within the given application.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/device-tags": {
      "get": {
        "operationId": "ApplicationService_ListDeviceTags",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListApplicationDeviceTagsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List device tags used within the given application.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations": {
      "get": {
        "operationId": "ApplicationService_ListIntegrations",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListIntegrationsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List all configured integrations.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations/aws-sns": {
      "delete": {
        "operationId": "ApplicationService_DeleteAwsSnsIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete AWS SNS integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "get": {
        "operationId": "ApplicationService_GetAwsSnsIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetAwsSnsIntegrationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get AWS SNS integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations/azure-service-bus": {
      "delete": {
        "operationId": "ApplicationService_DeleteAzureServiceBusIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete Azure Service-Bus integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "get": {
        "operationId": "ApplicationService_GetAzureServiceBusIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetAzureServiceBusIntegrationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get Azure Service-Bus integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations/gcp-pub-sub": {
      "delete": {
        "operationId": "ApplicationService_DeleteGcpPubSubIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete GCP Pub/Sub integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "get": {
        "operationId": "ApplicationService_GetGcpPubSubIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetGcpPubSubIntegrationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get GCP Pub/Sub integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations/http": {
      "delete": {
        "operationId": "ApplicationService_DeleteHttpIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the HTTP integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "get": {
        "operationId": "ApplicationService_GetHttpIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetHttpIntegrationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the configured HTTP integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations/ifttt": {
      "delete": {
        "operationId": "ApplicationService_DeleteIftttIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete IFTTT integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "get": {
        "operationId": "ApplicationService_GetIftttIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetIftttIntegrationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get IFTTT integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations/influxdb": {
      "delete": {
        "operationId": "ApplicationService_DeleteInfluxDbIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete InfluxDb integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "get": {
        "operationId": "ApplicationService_GetInfluxDbIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetInfluxDbIntegrationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get InfluxDb integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations/mqtt/certificate": {
      "post": {
        "operationId": "ApplicationService_GenerateMqttIntegrationClientCertificate",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGenerateMqttIntegrationClientCertificateResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Generates application ID specific client-certificate.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations/mydevices": {
      "delete": {
        "operationId": "ApplicationService_DeleteMyDevicesIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete myDevices integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "get": {
        "operationId": "ApplicationService_GetMyDevicesIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetMyDevicesIntegrationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get myDevices integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations/pilot-things": {
      "delete": {
        "operationId": "ApplicationService_DeletePilotThingsIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete Pilot Things integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "get": {
        "operationId": "ApplicationService_GetPilotThingsIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetPilotThingsIntegrationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get Pilot Things integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{applicationId}/integrations/thingsboard": {
      "delete": {
        "operationId": "ApplicationService_DeleteThingsBoardIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete ThingsBoard integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "get": {
        "operationId": "ApplicationService_GetThingsBoardIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "applicationId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetThingsBoardIntegrationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get ThingsBoard integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{id}": {
      "delete": {
        "operationId": "ApplicationService_Delete",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the application for the given ID.",
        "tags": [
          "ApplicationService"
        ]
      },
      "get": {
        "operationId": "ApplicationService_Get",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetApplicationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the application for the given ID.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{integration.applicationId}/integrations/aws-sns": {
      "post": {
        "operationId": "ApplicationService_CreateAwsSnsIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to create.",
                  "properties": {
                    "accessKeyId": {
                      "description": "AWS Access Key ID.",
                      "type": "string"
                    },
                    "encoding": {
                      "$ref": "#/definitions/apiEncoding",
                      "description": "Encoding."
                    },
                    "region": {
                      "description": "AWS region.",
                      "type": "string"
                    },
                    "secretAccessKey": {
                      "description": "AWS Secret Access Key.",
                      "type": "string"
                    },
                    "topicArn": {
                      "description": "Topic ARN.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create AWS SNS integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "put": {
        "operationId": "ApplicationService_UpdateAwsSnsIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to update.",
                  "properties": {
                    "accessKeyId": {
                      "description": "AWS Access Key ID.",
                      "type": "string"
                    },
                    "encoding": {
                      "$ref": "#/definitions/apiEncoding",
                      "description": "Encoding."
                    },
                    "region": {
                      "description": "AWS region.",
                      "type": "string"
                    },
                    "secretAccessKey": {
                      "description": "AWS Secret Access Key.",
                      "type": "string"
                    },
                    "topicArn": {
                      "description": "Topic ARN.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update AWS SNS integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{integration.applicationId}/integrations/azure-service-bus": {
      "post": {
        "operationId": "ApplicationService_CreateAzureServiceBusIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to create.",
                  "properties": {
                    "connectionString": {
                      "description": "Connection string.",
                      "type": "string"
                    },
                    "encoding": {
                      "$ref": "#/definitions/apiEncoding",
                      "description": "Encoding."
                    },
                    "publishName": {
                      "description": "Publish name.\nThis is the name of the topic or queue.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create Azure Service-Bus integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "put": {
        "operationId": "ApplicationService_UpdateAzureServiceBusIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to create.",
                  "properties": {
                    "connectionString": {
                      "description": "Connection string.",
                      "type": "string"
                    },
                    "encoding": {
                      "$ref": "#/definitions/apiEncoding",
                      "description": "Encoding."
                    },
                    "publishName": {
                      "description": "Publish name.\nThis is the name of the topic or queue.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update Azure Service-Bus integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{integration.applicationId}/integrations/gcp-pub-sub": {
      "post": {
        "operationId": "ApplicationService_CreateGcpPubSubIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to create.",
                  "properties": {
                    "credentialsFile": {
                      "description": "Credentials file.\nThis IAM service-account credentials file (JSON) must have the following\nPub/Sub roles:\n* Pub/Sub Publisher",
                      "type": "string"
                    },
                    "encoding": {
                      "$ref": "#/definitions/apiEncoding",
                      "description": "Encoding."
                    },
                    "projectId": {
                      "description": "Project ID.",
                      "type": "string"
                    },
                    "topicName": {
                      "description": "Topic name.\nThis is the name of the Pub/Sub topic.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create GCP Pub/Sub integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "put": {
        "operationId": "ApplicationService_UpdateGcpPubSubIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to update.",
                  "properties": {
                    "credentialsFile": {
                      "description": "Credentials file.\nThis IAM service-account credentials file (JSON) must have the following\nPub/Sub roles:\n* Pub/Sub Publisher",
                      "type": "string"
                    },
                    "encoding": {
                      "$ref": "#/definitions/apiEncoding",
                      "description": "Encoding."
                    },
                    "projectId": {
                      "description": "Project ID.",
                      "type": "string"
                    },
                    "topicName": {
                      "description": "Topic name.\nThis is the name of the Pub/Sub topic.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update GCP Pub/Sub integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{integration.applicationId}/integrations/http": {
      "post": {
        "operationId": "ApplicationService_CreateHttpIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to create.",
                  "properties": {
                    "encoding": {
                      "$ref": "#/definitions/apiEncoding",
                      "description": "Payload encoding."
                    },
                    "eventEndpointUrl": {
                      "description": "Event endpoint URL.\nThe HTTP integration will POST all events to this enpoint. The request\nwill contain a query parameters \"event\" containing the type of the\nevent.",
                      "type": "string"
                    },
                    "headers": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "HTTP headers to set when making requests.",
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create HTTP integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "put": {
        "operationId": "ApplicationService_UpdateHttpIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to update.",
                  "properties": {
                    "encoding": {
                      "$ref": "#/definitions/apiEncoding",
                      "description": "Payload encoding."
                    },
                    "eventEndpointUrl": {
                      "description": "Event endpoint URL.\nThe HTTP integration will POST all events to this enpoint. The request\nwill contain a query parameters \"event\" containing the type of the\nevent.",
                      "type": "string"
                    },
                    "headers": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "HTTP headers to set when making requests.",
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the HTTP integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{integration.applicationId}/integrations/ifttt": {
      "post": {
        "operationId": "ApplicationService_CreateIftttIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object.",
                  "properties": {
                    "arbitraryJson": {
                      "description": "Arbitrary JSON.\nIf set to true, ChirpStack events will be sent as-is as arbitrary JSON\npayload. If set to false (default), the 3 JSON values format will be used.",
                      "type": "boolean"
                    },
                    "eventPrefix": {
                      "description": "Event prefix.\nIf set, the event name will be PREFIX_EVENT. For example if event_prefix\nis set to weatherstation, and uplink event will be sent as\nweatherstation_up to the IFTTT webhook.\nNote: Only characters in the A-Z, a-z and 0-9 range are allowed.",
                      "type": "string"
                    },
                    "key": {
                      "description": "Key.\nThis key can be obtained from the IFTTT Webhooks documentation page.",
                      "type": "string"
                    },
                    "uplinkValues": {
                      "description": "Values.\nUp to 2 values can be forwarded to IFTTT. These values must map to the\ndecoded payload keys. For example:\n{\n  \"batteryLevel\": 75.3,\n  \"buttons\": [{\"pressed\": false}, {\"pressed\": true}]\n}\nYou would specify the following fields:\nuplink_values = [\"batteryLevel\", \"buttons_0_pressed\"]",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create IFTTT integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "put": {
        "operationId": "ApplicationService_UpdateIftttIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to update.",
                  "properties": {
                    "arbitraryJson": {
                      "description": "Arbitrary JSON.\nIf set to true, ChirpStack events will be sent as-is as arbitrary JSON\npayload. If set to false (default), the 3 JSON values format will be used.",
                      "type": "boolean"
                    },
                    "eventPrefix": {
                      "description": "Event prefix.\nIf set, the event name will be PREFIX_EVENT. For example if event_prefix\nis set to weatherstation, and uplink event will be sent as\nweatherstation_up to the IFTTT webhook.\nNote: Only characters in the A-Z, a-z and 0-9 range are allowed.",
                      "type": "string"
                    },
                    "key": {
                      "description": "Key.\nThis key can be obtained from the IFTTT Webhooks documentation page.",
                      "type": "string"
                    },
                    "uplinkValues": {
                      "description": "Values.\nUp to 2 values can be forwarded to IFTTT. These values must map to the\ndecoded payload keys. For example:\n{\n  \"batteryLevel\": 75.3,\n  \"buttons\": [{\"pressed\": false}, {\"pressed\": true}]\n}\nYou would specify the following fields:\nuplink_values = [\"batteryLevel\", \"buttons_0_pressed\"]",
                      "items": {
                        "type": "string"
                      },
                      "type": "array"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update IFTTT integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{integration.applicationId}/integrations/influxdb": {
      "post": {
        "operationId": "ApplicationService_CreateInfluxDbIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to create.",
                  "properties": {
                    "bucket": {
                      "description": "Bucket. (InfluxDb v2)",
                      "type": "string"
                    },
                    "db": {
                      "description": "InfluxDb database name. (InfluxDb v1)",
                      "type": "string"
                    },
                    "endpoint": {
                      "description": "InfluxDb API write endpoint (e.g. http://localhost:8086/write).",
                      "type": "string"
                    },
                    "organization": {
                      "description": "Organization. (InfluxDb v2)",
                      "type": "string"
                    },
                    "password": {
                      "description": "InfluxDb password. (InfluxDb v1)",
                      "type": "string"
                    },
                    "precision": {
                      "$ref": "#/definitions/apiInfluxDbPrecision",
                      "description": "InfluxDb timestamp precision (InfluxDb v1)."
                    },
                    "retentionPolicyName": {
                      "description": "InfluxDb retention policy name. (InfluxDb v1)",
                      "type": "string"
                    },
                    "token": {
                      "description": "Token. (InfluxDb v2)",
                      "type": "string"
                    },
                    "username": {
                      "description": "InfluxDb username. (InfluxDb v1)",
                      "type": "string"
                    },
                    "version": {
                      "$ref": "#/definitions/apiInfluxDbVersion",
                      "description": "InfluxDb version."
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create InfluxDb integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "put": {
        "operationId": "ApplicationService_UpdateInfluxDbIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to update.",
                  "properties": {
                    "bucket": {
                      "description": "Bucket. (InfluxDb v2)",
                      "type": "string"
                    },
                    "db": {
                      "description": "InfluxDb database name. (InfluxDb v1)",
                      "type": "string"
                    },
                    "endpoint": {
                      "description": "InfluxDb API write endpoint (e.g. http://localhost:8086/write).",
                      "type": "string"
                    },
                    "organization": {
                      "description": "Organization. (InfluxDb v2)",
                      "type": "string"
                    },
                    "password": {
                      "description": "InfluxDb password. (InfluxDb v1)",
                      "type": "string"
                    },
                    "precision": {
                      "$ref": "#/definitions/apiInfluxDbPrecision",
                      "description": "InfluxDb timestamp precision (InfluxDb v1)."
                    },
                    "retentionPolicyName": {
                      "description": "InfluxDb retention policy name. (InfluxDb v1)",
                      "type": "string"
                    },
                    "token": {
                      "description": "Token. (InfluxDb v2)",
                      "type": "string"
                    },
                    "username": {
                      "description": "InfluxDb username. (InfluxDb v1)",
                      "type": "string"
                    },
                    "version": {
                      "$ref": "#/definitions/apiInfluxDbVersion",
                      "description": "InfluxDb version."
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update InfluxDb integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{integration.applicationId}/integrations/mydevices": {
      "post": {
        "operationId": "ApplicationService_CreateMyDevicesIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to create.",
                  "properties": {
                    "endpoint": {
                      "description": "myDevices API endpoint.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create myDevices integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "put": {
        "operationId": "ApplicationService_UpdateMyDevicesIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to update.",
                  "properties": {
                    "endpoint": {
                      "description": "myDevices API endpoint.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update myDevices integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{integration.applicationId}/integrations/pilot-things": {
      "post": {
        "operationId": "ApplicationService_CreatePilotThingsIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to create.",
                  "properties": {
                    "server": {
                      "description": "Server URL.",
                      "type": "string"
                    },
                    "token": {
                      "description": "Authentication token.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create Pilot Things integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "put": {
        "operationId": "ApplicationService_UpdatePilotThingsIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to update.",
                  "properties": {
                    "server": {
                      "description": "Server URL.",
                      "type": "string"
                    },
                    "token": {
                      "description": "Authentication token.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update Pilot Things integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/applications/{integration.applicationId}/integrations/thingsboard": {
      "post": {
        "operationId": "ApplicationService_CreateThingsBoardIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to create.",
                  "properties": {
                    "server": {
                      "description": "ThingsBoard server endpoint, e.g. https://example.com",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create ThingsBoard integration.",
        "tags": [
          "ApplicationService"
        ]
      },
      "put": {
        "operationId": "ApplicationService_UpdateThingsBoardIntegration",
        "parameters": [
          {
            "description": "Application ID (UUID).",
            "in": "path",
            "name": "integration.applicationId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "integration": {
                  "description": "Integration object to update.",
                  "properties": {
                    "server": {
                      "description": "ThingsBoard server endpoint, e.g. https://example.com",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update ThingsBoard integration.",
        "tags": [
          "ApplicationService"
        ]
      }
    },
    "/api/device-profile-templates": {
      "get": {
        "operationId": "DeviceProfileTemplateService_List",
        "parameters": [
          {
            "description": "Max number of device-profile templates to return in the result-set.\nIf not set, it will be treated as 0, and the response will only return the total_count.",
            "format": "int64",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Offset in the result-set (for pagination).",
            "format": "int64",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListDeviceProfileTemplatesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List the available device-profile templates.",
        "tags": [
          "DeviceProfileTemplateService"
        ]
      },
      "post": {
        "operationId": "DeviceProfileTemplateService_Create",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/apiCreateDeviceProfileTemplateRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create the given device-profile template.",
        "tags": [
          "DeviceProfileTemplateService"
        ]
      }
    },
    "/api/device-profile-templates/{deviceProfileTemplate.id}": {
      "put": {
        "operationId": "DeviceProfileTemplateService_Update",
        "parameters": [
          {
            "description": "Device-profile template ID.",
            "in": "path",
            "name": "deviceProfileTemplate.id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "deviceProfileTemplate": {
                  "description": "Object to update.",
                  "properties": {
                    "abpRx1Delay": {
                      "description": "RX1 delay (for ABP).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "abpRx1DrOffset": {
                      "description": "RX1 DR offset (for ABP).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "abpRx2Dr": {
                      "description": "RX2 DR (for ABP).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "abpRx2Freq": {
                      "description": "RX2 frequency (for ABP, Hz).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "adrAlgorithmId": {
                      "description": "ADR algorithm ID.",
                      "type": "string"
                    },
                    "autoDetectMeasurements": {
                      "description": "Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.",
                      "type": "boolean"
                    },
                    "classBPingSlotDr": {
                      "description": "Class-B ping-slot DR.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "classBPingSlotFreq": {
                      "description": "Class-B ping-slot freq (Hz).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "classBPingSlotPeriodicity": {
                      "description": "Class-B ping-slot periodicity (only for Class-B).\nValid options are: 0 - 7.\n\nNumber of ping-slots per beacon-period:\npingNb = 2^(7-periodicity)\n\nPeriodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec\nPeriodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec",
                      "format": "int64",
                      "type": "integer"
                    },
                    "classBTimeout": {
                      "description": "Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "classCTimeout": {
                      "description": "Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "description": {
                      "description": "Description.",
                      "type": "string"
                    },
                    "deviceStatusReqInterval": {
                      "description": "Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the device-status\nfrom the device.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "firmware": {
                      "description": "Firmware.",
                      "type": "string"
                    },
                    "flushQueueOnActivate": {
                      "description": "Flush queue on device activation.",
                      "type": "boolean"
                    },
                    "macVersion": {
                      "$ref": "#/definitions/commonMacVersion",
                      "description": "LoRaWAN mac-version."
                    },
                    "measurements": {
                      "additionalProperties": {
                        "$ref": "#/definitions/apiMeasurement"
                      },
                      "description": "Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.",
                      "type": "object"
                    },
                    "name": {
                      "description": "Name.",
                      "type": "string"
                    },
                    "payloadCodecRuntime": {
                      "$ref": "#/definitions/apiCodecRuntime",
                      "description": "Payload codec runtime."
                    },
                    "payloadCodecScript": {
                      "description": "Payload codec script.",
                      "type": "string"
                    },
                    "regParamsRevision": {
                      "$ref": "#/definitions/commonRegParamsRevision",
                      "description": "Regional parameters revision."
                    },
                    "region": {
                      "$ref": "#/definitions/commonRegion",
                      "description": "Region."
                    },
                    "supportsClassB": {
                      "description": "Supports Class B.",
                      "type": "boolean"
                    },
                    "supportsClassC": {
                      "description": "Supports Class-C.",
                      "type": "boolean"
                    },
                    "supportsOtaa": {
                      "description": "Supports OTAA.",
                      "type": "boolean"
                    },
                    "tags": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "User defined tags.",
                      "type": "object"
                    },
                    "uplinkInterval": {
                      "description": "Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. When the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "vendor": {
                      "description": "Vendor.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the given device-profile template.",
        "tags": [
          "DeviceProfileTemplateService"
        ]
      }
    },
    "/api/device-profile-templates/{id}": {
      "delete": {
        "operationId": "DeviceProfileTemplateService_Delete",
        "parameters": [
          {
            "description": "ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the device-profile template with the given ID.",
        "tags": [
          "DeviceProfileTemplateService"
        ]
      },
      "get": {
        "operationId": "DeviceProfileTemplateService_Get",
        "parameters": [
          {
            "description": "ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetDeviceProfileTemplateResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the device-profile template for the given ID.",
        "tags": [
          "DeviceProfileTemplateService"
        ]
      }
    },
    "/api/device-profiles": {
      "get": {
        "operationId": "DeviceProfileService_List",
        "parameters": [
          {
            "description": "Max number of device-profiles to return in the result-set.\nIf not set, it will be treated as 0, and the response will only return the total_count.",
            "format": "int64",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Offset in the result-set (for pagination).",
            "format": "int64",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          },
          {
            "description": "If set, the given string will be used to search on name.",
            "in": "query",
            "name": "search",
            "required": false,
            "type": "string"
          },
          {
            "description": "Tenant ID to list the device-profiles for.",
            "in": "query",
            "name": "tenantId",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListDeviceProfilesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List the available device-profiles.",
        "tags": [
          "DeviceProfileService"
        ]
      },
      "post": {
        "operationId": "DeviceProfileService_Create",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/apiCreateDeviceProfileRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiCreateDeviceProfileResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create the given device-profile.",
        "tags": [
          "DeviceProfileService"
        ]
      }
    },
    "/api/device-profiles/adr-algorithms": {
      "get": {
        "operationId": "DeviceProfileService_ListAdrAlgorithms",
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListDeviceProfileAdrAlgorithmsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List available ADR algorithms.",
        "tags": [
          "DeviceProfileService"
        ]
      }
    },
    "/api/device-profiles/{deviceProfile.id}": {
      "put": {
        "operationId": "DeviceProfileService_Update",
        "parameters": [
          {
            "description": "Device-profile ID (UUID).\nNote: on create this will be automatically generated.",
            "in": "path",
            "name": "deviceProfile.id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "deviceProfile": {
                  "description": "Device-profile object.",
                  "properties": {
                    "abpRx1Delay": {
                      "description": "RX1 delay (for ABP).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "abpRx1DrOffset": {
                      "description": "RX1 DR offset (for ABP).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "abpRx2Dr": {
                      "description": "RX2 DR (for ABP).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "abpRx2Freq": {
                      "description": "RX2 frequency (for ABP, Hz).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "adrAlgorithmId": {
                      "description": "ADR algorithm ID.",
                      "type": "string"
                    },
                    "allowRoaming": {
                      "description": "Allow roaming.\n\nIf set to true, it means that the device is allowed to use roaming.",
                      "type": "boolean"
                    },
                    "appLayerParams": {
                      "$ref": "#/definitions/apiAppLayerParams",
                      "description": "Application Layer parameters."
                    },
                    "autoDetectMeasurements": {
                      "description": "Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.",
                      "type": "boolean"
                    },
                    "classBPingSlotDr": {
                      "description": "Class-B ping-slot DR.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "classBPingSlotFreq": {
                      "description": "Class-B ping-slot freq (Hz).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "classBPingSlotPeriodicity": {
                      "description": "Class-B ping-slot periodicity.\nValid options are: 0 - 7.\n\nNumber of ping-slots per beacon-period:\npingNb = 2^(7-periodicity)\n\nPeriodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec\nPeriodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec",
                      "format": "int64",
                      "type": "integer"
                    },
                    "classBTimeout": {
                      "description": "Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "classCTimeout": {
                      "description": "Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "description": {
                      "description": "Description.",
                      "type": "string"
                    },
                    "deviceStatusReqInterval": {
                      "description": "Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the\ndevice-status from the device.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "flushQueueOnActivate": {
                      "description": "Flush queue on device activation.",
                      "type": "boolean"
                    },
                    "isRelay": {
                      "description": "Device is a Relay device.\nEnable this in case the device is a Relay. A Relay device implements TS011\nand is able to relay data from relay capable devices.\nSee for more information the TS011 specification.",
                      "type": "boolean"
                    },
                    "isRelayEd": {
                      "description": "Device is a Relay end-device.\nEnable this in case the device is an end-device that can operate under a\nRelay. Please refer to the TS011 specification for more information.",
                      "type": "boolean"
                    },
                    "macVersion": {
                      "$ref": "#/definitions/commonMacVersion",
                      "description": "LoRaWAN mac-version."
                    },
                    "measurements": {
                      "additionalProperties": {
                        "$ref": "#/definitions/apiMeasurement"
                      },
                      "description": "Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.",
                      "type": "object"
                    },
                    "name": {
                      "description": "Name.",
                      "type": "string"
                    },
                    "payloadCodecRuntime": {
                      "$ref": "#/definitions/apiCodecRuntime",
                      "description": "Payload codec runtime."
                    },
                    "payloadCodecScript": {
                      "description": "Payload codec script.",
                      "type": "string"
                    },
                    "regParamsRevision": {
                      "$ref": "#/definitions/commonRegParamsRevision",
                      "description": "Regional parameters revision."
                    },
                    "region": {
                      "$ref": "#/definitions/commonRegion",
                      "description": "Region."
                    },
                    "regionConfigId": {
                      "description": "Region configuration ID.\nIf set, devices will only use the associated region. If let blank, then\ndevices will use all regions matching the selected common-name. Note\nthat multiple region configurations can exist for the same common-name,\ne.g. to provide an 8 channel and 16 channel configuration for the US915\nband.",
                      "type": "string"
                    },
                    "relayCadPeriodicity": {
                      "$ref": "#/definitions/apiCadPeriodicity",
                      "description": "Relay CAD periodicity."
                    },
                    "relayDefaultChannelIndex": {
                      "description": "Relay default channel index.\nValid values are 0 and 1, please refer to the RP002 specification for\nthe meaning of these values.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayEdActivationMode": {
                      "$ref": "#/definitions/apiRelayModeActivation",
                      "description": "Relay end-device activation mode."
                    },
                    "relayEdBackOff": {
                      "description": "Relay end-device back-off (in case it does not receive WOR ACK frame).\n0 = Always send a LoRaWAN uplink\n1..63 = Send a LoRaWAN uplink after X WOR frames without a WOR ACK",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayEdRelayOnly": {
                      "description": "End-device only accept data through relay.\nOnly accept data for this device through a relay. This setting is useful\nfor testing as in case of a test-setup, the end-device is usually within\nrange of the gateway.",
                      "type": "boolean"
                    },
                    "relayEdSmartEnableLevel": {
                      "description": "Relay end-device smart-enable level.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayEdUplinkLimitBucketSize": {
                      "description": "Relay end-device uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n  0 = 1\n  1 = 2\n  2 = 4\n  3 = 12",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayEdUplinkLimitReloadRate": {
                      "description": "Relay end-device uplink limit reload rate.\n\nValid values:\n  * 0 - 62 = X tokens every hour\n  * 63     = no limitation",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayEnabled": {
                      "description": "Relay must be enabled.",
                      "type": "boolean"
                    },
                    "relayGlobalUplinkLimitBucketSize": {
                      "description": "Relay globak uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n  0 = 1\n  1 = 2\n  2 = 4\n  3 = 12",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayGlobalUplinkLimitReloadRate": {
                      "description": "Relay global uplink limit reload rate.\n\nValid values:\n  * 0 - 126 = X tokens every hour\n  * 127     = no limitation",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayJoinReqLimitBucketSize": {
                      "description": "Relay join-request limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n  0 = 1\n  1 = 2\n  2 = 4\n  3 = 12",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayJoinReqLimitReloadRate": {
                      "description": "Relay join-request limit reload rate.\n\nValid values:\n  * 0 - 126 = X tokens every hour\n  * 127     = no limitation",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayNotifyLimitBucketSize": {
                      "description": "Relay notify limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n  0 = 1\n  1 = 2\n  2 = 4\n  3 = 12",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayNotifyLimitReloadRate": {
                      "description": "Relay notify limit reload rate.\n\nValid values:\n  * 0 - 126 = X tokens every hour\n  * 127     = no limitation",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayOverallLimitBucketSize": {
                      "description": "Relay overall limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n  0 = 1\n  1 = 2\n  2 = 4\n  3 = 12",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relayOverallLimitReloadRate": {
                      "description": "Relay overall limit reload rate.\n\nValid values:\n  * 0 - 126 = X tokens every hour\n  * 127     = no limitation",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relaySecondChannelAckOffset": {
                      "$ref": "#/definitions/apiSecondChAckOffset",
                      "description": "Relay second channel ACK offset."
                    },
                    "relaySecondChannelDr": {
                      "description": "Relay second channel DR.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "relaySecondChannelFreq": {
                      "description": "Relay second channel frequency (Hz).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "rx1Delay": {
                      "description": "RX1 Delay.\n\nThis makes it possible to override the system RX1 Delay. Please note that\nthis values only has effect in case it is higher than the system value.\nIn other words, it can be used to increase the RX1 Delay but not to decrease\nit.\nValid options are 1 - 15 (0 = always use system RX1 Delay).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "supportsClassB": {
                      "description": "Supports Class B.",
                      "type": "boolean"
                    },
                    "supportsClassC": {
                      "description": "Supports Class-C.",
                      "type": "boolean"
                    },
                    "supportsOtaa": {
                      "description": "Supports OTAA.",
                      "type": "boolean"
                    },
                    "tags": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Tags (user defined).\nThese tags can be used to add additional information the the\ndevice-profile. These tags are exposed in all the integration events of\ndevices using this device-profile.",
                      "type": "object"
                    },
                    "tenantId": {
                      "description": "Tenant ID (UUID).",
                      "type": "string"
                    },
                    "uplinkInterval": {
                      "description": "Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. If the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.",
                      "format": "int64",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the given device-profile.",
        "tags": [
          "DeviceProfileService"
        ]
      }
    },
    "/api/device-profiles/{id}": {
      "delete": {
        "operationId": "DeviceProfileService_Delete",
        "parameters": [
          {
            "description": "ID (UUID).",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the device-profile with the given ID.",
        "tags": [
          "DeviceProfileService"
        ]
      },
      "get": {
        "operationId": "DeviceProfileService_Get",
        "parameters": [
          {
            "description": "ID (UUID).",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetDeviceProfileResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the device-profile for the given ID.",
        "tags": [
          "DeviceProfileService"
        ]
      }
    },
    "/api/devices": {
      "get": {
        "operationId": "DeviceService_List",
        "parameters": [
          {
            "description": "Max number of devices to return in the result-set.\nIf not set, it will be treated as 0, and the response will only return the total_count.",
            "format": "int64",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Offset in the result-set (for pagination).",
            "format": "int64",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          },
          {
            "description": "If set, the given string will be used to search on name (optional).",
            "in": "query",
            "name": "search",
            "required": false,
            "type": "string"
          },
          {
            "description": "Application ID (UUID) to filter devices on.",
            "in": "query",
            "name": "applicationId",
            "required": false,
            "type": "string"
          },
          {
            "description": "Multicst-group ID (UUID) to filter devices on.",
            "in": "query",
            "name": "multicastGroupId",
            "required": false,
            "type": "string"
          },
          {
            "default": "NAME",
            "description": "If set, the given value will be used to sort by (optional).",
            "enum": [
              "NAME",
              "DEV_EUI",
              "LAST_SEEN_AT",
              "DEVICE_PROFILE_NAME"
            ],
            "in": "query",
            "name": "orderBy",
            "required": false,
            "type": "string"
          },
          {
            "description": "If set, the sorting direction will be decending (default = ascending) (optional).",
            "in": "query",
            "name": "orderByDesc",
            "required": false,
            "type": "boolean"
          },
          {
            "description": "Device-profile ID (UUID) to filter devices on.",
            "in": "query",
            "name": "deviceProfileId",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListDevicesResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the list of devices.",
        "tags": [
          "DeviceService"
        ]
      },
      "post": {
        "operationId": "DeviceService_Create",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/apiCreateDeviceRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create the given device.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{devEui}": {
      "delete": {
        "operationId": "DeviceService_Delete",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the device with the given DevEUI.",
        "tags": [
          "DeviceService"
        ]
      },
      "get": {
        "operationId": "DeviceService_Get",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetDeviceResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get returns the device for the given DevEUI.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{devEui}/activation": {
      "delete": {
        "operationId": "DeviceService_Deactivate",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Deactivate de-activates the device.",
        "tags": [
          "DeviceService"
        ]
      },
      "get": {
        "operationId": "DeviceService_GetActivation",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetDeviceActivationResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "GetActivation returns the current activation details of the device (OTAA or\nABP).",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{devEui}/dev-nonces": {
      "delete": {
        "operationId": "DeviceService_FlushDevNonces",
        "parameters": [
          {
            "description": "Device EUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "FlushDevNonces flushes the OTAA device nonces.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{devEui}/get-next-f-cnt-down": {
      "post": {
        "operationId": "DeviceService_GetNextFCntDown",
        "parameters": [
          {
            "description": "Device EUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetDeviceNextFCntDownResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "GetNextFCntDown returns the next FCntDown to use for enqueing encrypted\ndownlinks. The difference with the DeviceActivation f_cont_down is that\nthis method takes potential existing queue-items into account.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{devEui}/get-random-dev-addr": {
      "post": {
        "operationId": "DeviceService_GetRandomDevAddr",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetRandomDevAddrResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "GetRandomDevAddr returns a random DevAddr taking the NwkID prefix into\naccount.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{devEui}/keys": {
      "delete": {
        "operationId": "DeviceService_DeleteKeys",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the device-keys for the given DevEUI.",
        "tags": [
          "DeviceService"
        ]
      },
      "get": {
        "operationId": "DeviceService_GetKeys",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetDeviceKeysResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the device-keys for the given DevEUI.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{devEui}/link-metrics": {
      "get": {
        "operationId": "DeviceService_GetLinkMetrics",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          },
          {
            "description": "Interval start timestamp.",
            "format": "date-time",
            "in": "query",
            "name": "start",
            "required": false,
            "type": "string"
          },
          {
            "description": "Interval end timestamp.",
            "format": "date-time",
            "in": "query",
            "name": "end",
            "required": false,
            "type": "string"
          },
          {
            "default": "HOUR",
            "description": "Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.",
            "enum": [
              "HOUR",
              "DAY",
              "MONTH",
              "MINUTE"
            ],
            "in": "query",
            "name": "aggregation",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetDeviceLinkMetricsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "GetLinkMetrics returns the device link metrics.\nThis includes uplinks, downlinks, RSSI, SNR, etc...",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{devEui}/metrics": {
      "get": {
        "operationId": "DeviceService_GetMetrics",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          },
          {
            "description": "Interval start timestamp.",
            "format": "date-time",
            "in": "query",
            "name": "start",
            "required": false,
            "type": "string"
          },
          {
            "description": "Interval end timestamp.",
            "format": "date-time",
            "in": "query",
            "name": "end",
            "required": false,
            "type": "string"
          },
          {
            "default": "HOUR",
            "description": "Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.",
            "enum": [
              "HOUR",
              "DAY",
              "MONTH",
              "MINUTE"
            ],
            "in": "query",
            "name": "aggregation",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetDeviceMetricsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "GetMetrics returns the device metrics.\nNote that this requires a device-profile with codec and measurements\nconfigured.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{devEui}/queue": {
      "delete": {
        "operationId": "DeviceService_FlushQueue",
        "parameters": [
          {
            "description": "Device EUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "FlushQueue flushes the downlink device-queue.",
        "tags": [
          "DeviceService"
        ]
      },
      "get": {
        "operationId": "DeviceService_GetQueue",
        "parameters": [
          {
            "description": "Device EUI (EUI64).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          },
          {
            "description": "Return only the count, not the result-set.",
            "in": "query",
            "name": "countOnly",
            "required": false,
            "type": "boolean"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetDeviceQueueItemsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "GetQueue returns the downlink device-queue.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{device.devEui}": {
      "put": {
        "operationId": "DeviceService_Update",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "device.devEui",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "device": {
                  "description": "Device object.",
                  "properties": {
                    "applicationId": {
                      "description": "Application ID (UUID).",
                      "type": "string"
                    },
                    "description": {
                      "description": "Description.",
                      "type": "string"
                    },
                    "deviceProfileId": {
                      "description": "Device-profile ID (UUID).",
                      "type": "string"
                    },
                    "isDisabled": {
                      "description": "Device is disabled.",
                      "type": "boolean"
                    },
                    "joinEui": {
                      "description": "JoinEUI (optional, EUI64).\nThis field will be automatically set / updated on OTAA. However, in some\ncases it must be pre-configured. For example to allow OTAA using a Relay.\nIn this case the Relay needs to know the JoinEUI + DevEUI combinations\nof the devices for which it needs to forward uplinks.",
                      "type": "string"
                    },
                    "name": {
                      "description": "Name.",
                      "type": "string"
                    },
                    "skipFcntCheck": {
                      "description": "Skip frame-counter checks (this is insecure, but could be helpful for\ndebugging).",
                      "type": "boolean"
                    },
                    "tags": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Tags (user defined).\nThese tags can be used to add additional information to the device.\nThese tags are exposed in all the integration events.",
                      "type": "object"
                    },
                    "variables": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Variables (user defined).\nThese variables can be used together with integrations to store tokens /\nsecrets that must be configured per device. These variables are not\nexposed in the event payloads.",
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the given device.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{deviceActivation.devEui}/activate": {
      "post": {
        "operationId": "DeviceService_Activate",
        "parameters": [
          {
            "description": "Device EUI (EUI64).",
            "in": "path",
            "name": "deviceActivation.devEui",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "deviceActivation": {
                  "description": "Device activation object.",
                  "properties": {
                    "aFCntDown": {
                      "description": "Downlink application frame-counter.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "appSKey": {
                      "description": "Application session key (HEX encoded).",
                      "type": "string"
                    },
                    "devAddr": {
                      "description": "Device address (HEX encoded).",
                      "type": "string"
                    },
                    "fCntUp": {
                      "description": "Uplink frame-counter.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "fNwkSIntKey": {
                      "description": "Forwarding network session integrity key (HEX encoded).\nNote: For LoRaWAN 1.0.x devices, set this to the NwkSKey.",
                      "type": "string"
                    },
                    "nFCntDown": {
                      "description": "Downlink network frame-counter.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "nwkSEncKey": {
                      "description": "Network session encryption key (HEX encoded).\nNote: For LoRaWAN 1.0.x devices, set this to the NwkSKey.",
                      "type": "string"
                    },
                    "sNwkSIntKey": {
                      "description": "Serving network session integrity key (HEX encoded).\nNote: For LoRaWAN 1.0.x devices, set this to the NwkSKey.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Activate (re)activates the device with the given parameters (for ABP or for\nimporting OTAA activations).",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{deviceKeys.devEui}/keys": {
      "post": {
        "operationId": "DeviceService_CreateKeys",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "deviceKeys.devEui",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "deviceKeys": {
                  "description": "Device-keys object.",
                  "properties": {
                    "appKey": {
                      "description": "Application root key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.1.x devices!",
                      "type": "string"
                    },
                    "genAppKey": {
                      "description": "Gen App Key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.0.x devices that\nimplement TS005 (remote multicast setup).",
                      "type": "string"
                    },
                    "nwkKey": {
                      "description": "Network root key (128 bit).\nNote: For LoRaWAN 1.0.x, use this field for the LoRaWAN 1.0.x 'AppKey`!",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create the given device-keys.",
        "tags": [
          "DeviceService"
        ]
      },
      "put": {
        "operationId": "DeviceService_UpdateKeys",
        "parameters": [
          {
            "description": "DevEUI (EUI64).",
            "in": "path",
            "name": "deviceKeys.devEui",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "deviceKeys": {
                  "description": "Device-keys object.",
                  "properties": {
                    "appKey": {
                      "description": "Application root key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.1.x devices!",
                      "type": "string"
                    },
                    "genAppKey": {
                      "description": "Gen App Key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.0.x devices that\nimplement TS005 (remote multicast setup).",
                      "type": "string"
                    },
                    "nwkKey": {
                      "description": "Network root key (128 bit).\nNote: For LoRaWAN 1.0.x, use this field for the LoRaWAN 1.0.x 'AppKey`!",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the given device-keys.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/devices/{queueItem.devEui}/queue": {
      "post": {
        "operationId": "DeviceService_Enqueue",
        "parameters": [
          {
            "description": "Device EUI (EUI64).",
            "in": "path",
            "name": "queueItem.devEui",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "queueItem": {
                  "properties": {
                    "confirmed": {
                      "description": "Confirmed.",
                      "type": "boolean"
                    },
                    "data": {
                      "description": "Data.\nOr use the json_object field when a codec has been configured.",
                      "format": "byte",
                      "type": "string"
                    },
                    "expiresAt": {
                      "description": "Expires at (optional).\nExpired queue-items will be automatically removed from the queue.",
                      "format": "date-time",
                      "type": "string"
                    },
                    "fCntDown": {
                      "description": "Downlink frame-counter.\nDo not set this for plain-text data payloads. It will be automatically set\nby ChirpStack when the payload has been sent as downlink.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "fPort": {
                      "description": "FPort (must be \u003e 0).\nOn enqueue and if using a JavaScript codec, this value might be\nautomatically set by the codec function.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "id": {
                      "description": "ID (UUID).\nThis is automatically generated on enqueue.",
                      "type": "string"
                    },
                    "isEncrypted": {
                      "description": "Is encrypted.\nThis must be set to true if the end-application has already encrypted\nthe data payload. In this case, the f_cnt_down field must be set to\nthe corresponding frame-counter which has been used during the encryption.",
                      "type": "boolean"
                    },
                    "isPending": {
                      "description": "Is pending.\nThis is set by ChirpStack to true when the downlink is pending (e.g. it\nhas been sent, but a confirmation is still pending).",
                      "type": "boolean"
                    },
                    "object": {
                      "description": "Only use this when a codec has been configured that can encode this\nobject to bytes.",
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiEnqueueDeviceQueueItemResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Enqueue adds the given item to the downlink queue.",
        "tags": [
          "DeviceService"
        ]
      }
    },
    "/api/gateways": {
      "get": {
        "operationId": "GatewayService_List",
        "parameters": [
          {
            "description": "Max number of gateways to return in the result-set.\nIf not set, it will be treated as 0, and the response will only return the total_count.",
            "format": "int64",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Offset in the result-set (for pagination).",
            "format": "int64",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          },
          {
            "description": "If set, the given string will be used to search on name (optional).",
            "in": "query",
            "name": "search",
            "required": false,
            "type": "string"
          },
          {
            "description": "Tenant ID (UUID) to filter gateways on.\nTo list all gateways as a global admin user, this field can be left blank.",
            "in": "query",
            "name": "tenantId",
            "required": false,
            "type": "string"
          },
          {
            "description": "Multicast-group ID (UUID) to filter gateways on.",
            "in": "query",
            "name": "multicastGroupId",
            "required": false,
            "type": "string"
          },
          {
            "default": "NAME",
            "description": "If set, the given value will be used to sort by (optional).",
            "enum": [
              "NAME",
              "GATEWAY_ID",
              "LAST_SEEN_AT"
            ],
            "in": "query",
            "name": "orderBy",
            "required": false,
            "type": "string"
          },
          {
            "description": "If set, the sorting direction will be decending (default = ascending) (optional).",
            "in": "query",
            "name": "orderByDesc",
            "required": false,
            "type": "boolean"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListGatewaysResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the list of gateways.",
        "tags": [
          "GatewayService"
        ]
      },
      "post": {
        "operationId": "GatewayService_Create",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/apiCreateGatewayRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create creates the given gateway.",
        "tags": [
          "GatewayService"
        ]
      }
    },
    "/api/gateways/relay-gateways": {
      "get": {
        "operationId": "GatewayService_ListRelayGateways",
        "parameters": [
          {
            "description": "Max number of relay-gateways to return in the result-set.\nIf not set, it will be treated as 0, and the response will only return the total_count.",
            "format": "int64",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Offset in the result-set (for pagination).",
            "format": "int64",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Tenant ID (UUID) to filter relay-gateways on.\nTo list all relay-gateways as a global admin user, this field can be left blank.",
            "in": "query",
            "name": "tenantId",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListRelayGatewaysResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List the detected Relay Gateways.",
        "tags": [
          "GatewayService"
        ]
      }
    },
    "/api/gateways/relay-gateways/{relayGateway.tenantId}/{relayGateway.relayId}": {
      "put": {
        "operationId": "GatewayService_UpdateRelayGateway",
        "parameters": [
          {
            "description": "Tenant ID.",
            "in": "path",
            "name": "relayGateway.tenantId",
            "required": true,
            "type": "string"
          },
          {
            "description": "Relay ID (4 byte HEX).",
            "in": "path",
            "name": "relayGateway.relayId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "relayGateway": {
                  "description": "Relay Gateway object.",
                  "properties": {
                    "description": {
                      "description": "Description.",
                      "type": "string"
                    },
                    "name": {
                      "description": "Name.",
                      "type": "string"
                    },
                    "regionConfigId": {
                      "description": "Region configuration ID.",
                      "type": "string"
                    },
                    "statsInterval": {
                      "description": "Stats interval (seconds).\nThis defines the expected interval in which the gateway sends its\nstatistics.",
                      "format": "int64",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the given Relay Gateway.",
        "tags": [
          "GatewayService"
        ]
      }
    },
    "/api/gateways/relay-gateways/{tenantId}/{relayId}": {
      "delete": {
        "operationId": "GatewayService_DeleteRelayGateway",
        "parameters": [
          {
            "description": "Tenant ID.",
            "in": "path",
            "name": "tenantId",
            "required": true,
            "type": "string"
          },
          {
            "description": "Relay ID (4 byte HEX).",
            "in": "path",
            "name": "relayId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the given Relay Gateway.",
        "tags": [
          "GatewayService"
        ]
      },
      "get": {
        "operationId": "GatewayService_GetRelayGateway",
        "parameters": [
          {
            "description": "Tenant ID (UUID).",
            "in": "path",
            "name": "tenantId",
            "required": true,
            "type": "string"
          },
          {
            "description": "Relay ID (4 byte HEX).",
            "in": "path",
            "name": "relayId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetRelayGatewayResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the given Relay Gateway.",
        "tags": [
          "GatewayService"
        ]
      }
    },
    "/api/gateways/{gateway.gatewayId}": {
      "put": {
        "operationId": "GatewayService_Update",
        "parameters": [
          {
            "description": "Gateway ID (EUI64).",
            "in": "path",
            "name": "gateway.gatewayId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "gateway": {
                  "description": "Gateway object.",
                  "properties": {
                    "description": {
                      "description": "Description.",
                      "type": "string"
                    },
                    "location": {
                      "$ref": "#/definitions/commonLocation",
                      "description": "Gateway location."
                    },
                    "metadata": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Metadata (provided by the gateway).",
                      "type": "object"
                    },
                    "name": {
                      "description": "Name.",
                      "type": "string"
                    },
                    "statsInterval": {
                      "description": "Stats interval (seconds).\nThis defines the expected interval in which the gateway sends its\nstatistics.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "tags": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Tags.",
                      "type": "object"
                    },
                    "tenantId": {
                      "description": "Tenant ID (UUID).",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update updates the given gateway.",
        "tags": [
          "GatewayService"
        ]
      }
    },
    "/api/gateways/{gatewayId}": {
      "delete": {
        "operationId": "GatewayService_Delete",
        "parameters": [
          {
            "description": "Gateway ID (EUI64).",
            "in": "path",
            "name": "gatewayId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete deletes the gateway matching the given Gateway ID.",
        "tags": [
          "GatewayService"
        ]
      },
      "get": {
        "operationId": "GatewayService_Get",
        "parameters": [
          {
            "description": "Gateway ID (EUI64).",
            "in": "path",
            "name": "gatewayId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetGatewayResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get returns the gateway for the given Gateway ID.",
        "tags": [
          "GatewayService"
        ]
      }
    },
    "/api/gateways/{gatewayId}/duty-cycle-metrics": {
      "get": {
        "operationId": "GatewayService_GetDutyCycleMetrics",
        "parameters": [
          {
            "description": "Gateway ID (EUI64).",
            "in": "path",
            "name": "gatewayId",
            "required": true,
            "type": "string"
          },
          {
            "description": "Interval start timestamp.",
            "format": "date-time",
            "in": "query",
            "name": "start",
            "required": false,
            "type": "string"
          },
          {
            "description": "Interval end timestamp.",
            "format": "date-time",
            "in": "query",
            "name": "end",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetGatewayDutyCycleMetricsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "GetDutyCycleMetrics returns the duty-cycle metrics.\nNote that only the last 2 hours of data are stored. Currently only per minute aggregation is available.",
        "tags": [
          "GatewayService"
        ]
      }
    },
    "/api/gateways/{gatewayId}/generate-certificate": {
      "post": {
        "operationId": "GatewayService_GenerateClientCertificate",
        "parameters": [
          {
            "description": "Gateway ID (EUI64).",
            "in": "path",
            "name": "gatewayId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGenerateGatewayClientCertificateResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Generate client-certificate for the gateway.",
        "tags": [
          "GatewayService"
        ]
      }
    },
    "/api/gateways/{gatewayId}/metrics": {
      "get": {
        "operationId": "GatewayService_GetMetrics",
        "parameters": [
          {
            "description": "Gateway ID (EUI64).",
            "in": "path",
            "name": "gatewayId",
            "required": true,
            "type": "string"
          },
          {
            "description": "Interval start timestamp.",
            "format": "date-time",
            "in": "query",
            "name": "start",
            "required": false,
            "type": "string"
          },
          {
            "description": "Interval end timestamp.",
            "format": "date-time",
            "in": "query",
            "name": "end",
            "required": false,
            "type": "string"
          },
          {
            "default": "HOUR",
            "description": "Aggregation.\n\n - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.",
            "enum": [
              "HOUR",
              "DAY",
              "MONTH",
              "MINUTE"
            ],
            "in": "query",
            "name": "aggregation",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetGatewayMetricsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "GetMetrics returns the gateway metrics.",
        "tags": [
          "GatewayService"
        ]
      }
    },
    "/api/multicast-groups": {
      "get": {
        "operationId": "MulticastGroupService_List",
        "parameters": [
          {
            "description": "Max number of multicast groups to return in the result-set.\nIf not set, it will be treated as 0, and the response will only return the total_count.",
            "format": "int64",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Offset in the result-set (for pagination).",
            "format": "int64",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          },
          {
            "description": "If set, the given string will be used to search on name.",
            "in": "query",
            "name": "search",
            "required": false,
            "type": "string"
          },
          {
            "description": "Application ID to list the multicast groups for.",
            "in": "query",
            "name": "applicationId",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListMulticastGroupsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List the available multicast groups.",
        "tags": [
          "MulticastGroupService"
        ]
      },
      "post": {
        "operationId": "MulticastGroupService_Create",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/apiCreateMulticastGroupRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiCreateMulticastGroupResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create the given multicast group.",
        "tags": [
          "MulticastGroupService"
        ]
      }
    },
    "/api/multicast-groups/{id}": {
      "delete": {
        "operationId": "MulticastGroupService_Delete",
        "parameters": [
          {
            "description": "Multicast group iD.",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the multicast-group with the given ID.",
        "tags": [
          "MulticastGroupService"
        ]
      },
      "get": {
        "operationId": "MulticastGroupService_Get",
        "parameters": [
          {
            "description": "Multicast group ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetMulticastGroupResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get returns the multicast group for the given ID.",
        "tags": [
          "MulticastGroupService"
        ]
      }
    },
    "/api/multicast-groups/{multicastGroup.id}": {
      "put": {
        "operationId": "MulticastGroupService_Update",
        "parameters": [
          {
            "description": "ID (UUID).\nThis will be generated automatically on create.",
            "in": "path",
            "name": "multicastGroup.id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "multicastGroup": {
                  "description": "Multicast group object to update.",
                  "properties": {
                    "applicationId": {
                      "description": "Application ID.\nAfter creation, this can not be updated.",
                      "type": "string"
                    },
                    "classBPingSlotPeriodicity": {
                      "description": "Class-B ping-slot periodicity (only for Class-B).\nValid options are: 0 - 7.\n\nNumber of ping-slots per beacon-period:\npingNb = 2^(7-periodicity)\n\nPeriodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec\nPeriodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec",
                      "format": "int64",
                      "type": "integer"
                    },
                    "classCSchedulingType": {
                      "$ref": "#/definitions/apiMulticastGroupSchedulingType",
                      "description": "Scheduling type (only for Class-C)."
                    },
                    "dr": {
                      "description": "Data-rate.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "fCnt": {
                      "description": "Frame-counter.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "frequency": {
                      "description": "Frequency (Hz).",
                      "format": "int64",
                      "type": "integer"
                    },
                    "groupType": {
                      "$ref": "#/definitions/apiMulticastGroupType",
                      "description": "Multicast group type."
                    },
                    "mcAddr": {
                      "description": "Multicast address (HEX encoded DevAddr).",
                      "type": "string"
                    },
                    "mcAppSKey": {
                      "description": "Multicast application session key (HEX encoded AES128 key).",
                      "type": "string"
                    },
                    "mcNwkSKey": {
                      "description": "Multicast network session key (HEX encoded AES128 key).",
                      "type": "string"
                    },
                    "name": {
                      "description": "Name.",
                      "type": "string"
                    },
                    "region": {
                      "$ref": "#/definitions/commonRegion",
                      "description": "Region."
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the given multicast group.",
        "tags": [
          "MulticastGroupService"
        ]
      }
    },
    "/api/multicast-groups/{multicastGroupId}/devices": {
      "post": {
        "operationId": "MulticastGroupService_AddDevice",
        "parameters": [
          {
            "description": "Multicast group ID.",
            "in": "path",
            "name": "multicastGroupId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "devEui": {
                  "description": "Device EUI (HEX encoded).",
                  "type": "string"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Add a device to the multicast group.",
        "tags": [
          "MulticastGroupService"
        ]
      }
    },
    "/api/multicast-groups/{multicastGroupId}/devices/{devEui}": {
      "delete": {
        "operationId": "MulticastGroupService_RemoveDevice",
        "parameters": [
          {
            "description": "Multicast group ID.",
            "in": "path",
            "name": "multicastGroupId",
            "required": true,
            "type": "string"
          },
          {
            "description": "Device EUI (HEX encoded).",
            "in": "path",
            "name": "devEui",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Remove a device from the multicast group.",
        "tags": [
          "MulticastGroupService"
        ]
      }
    },
    "/api/multicast-groups/{multicastGroupId}/gateways": {
      "post": {
        "operationId": "MulticastGroupService_AddGateway",
        "parameters": [
          {
            "description": "Multicast group ID.",
            "in": "path",
            "name": "multicastGroupId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "gatewayId": {
                  "description": "Gateway ID (HEX encoded).",
                  "type": "string"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Add a gateway to the multicast group.",
        "tags": [
          "MulticastGroupService"
        ]
      }
    },
    "/api/multicast-groups/{multicastGroupId}/gateways/{gatewayId}": {
      "delete": {
        "operationId": "MulticastGroupService_RemoveGateway",
        "parameters": [
          {
            "description": "Multicast group ID.",
            "in": "path",
            "name": "multicastGroupId",
            "required": true,
            "type": "string"
          },
          {
            "description": "Gateway ID (HEX encoded).",
            "in": "path",
            "name": "gatewayId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Remove a gateway from the multicast group.",
        "tags": [
          "MulticastGroupService"
        ]
      }
    },
    "/api/multicast-groups/{multicastGroupId}/queue": {
      "delete": {
        "operationId": "MulticastGroupService_FlushQueue",
        "parameters": [
          {
            "description": "Multicast group ID.",
            "in": "path",
            "name": "multicastGroupId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Flush the queue for the given multicast group.",
        "tags": [
          "MulticastGroupService"
        ]
      },
      "get": {
        "operationId": "MulticastGroupService_ListQueue",
        "parameters": [
          {
            "description": "Multicast group ID.",
            "in": "path",
            "name": "multicastGroupId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListMulticastGroupQueueResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "List the items in the multicast group queue.",
        "tags": [
          "MulticastGroupService"
        ]
      }
    },
    "/api/multicast-groups/{queueItem.multicastGroupId}/queue": {
      "post": {
        "operationId": "MulticastGroupService_Enqueue",
        "parameters": [
          {
            "description": "Multicast group ID.",
            "in": "path",
            "name": "queueItem.multicastGroupId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "queueItem": {
                  "description": "Multicast queue-item to enqueue.",
                  "properties": {
                    "data": {
                      "description": "Payload.",
                      "format": "byte",
                      "type": "string"
                    },
                    "expiresAt": {
                      "description": "Expires at (optional).\nExpired queue-items will be automatically removed from the queue.",
                      "format": "date-time",
                      "type": "string"
                    },
                    "fCnt": {
                      "description": "Downlink frame-counter.\nThis will be automatically set on enqueue.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "fPort": {
                      "description": "FPort (must be \u003e 0).",
                      "format": "int64",
                      "type": "integer"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiEnqueueMulticastGroupQueueItemResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Add the given item to the multicast group queue.",
        "tags": [
          "MulticastGroupService"
        ]
      }
    },
    "/api/tenants": {
      "get": {
        "operationId": "TenantService_List",
        "parameters": [
          {
            "description": "Max number of tenants to return in the result-set.\nIf not set, it will be treated as 0, and the response will only return the total_count.",
            "format": "int64",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Offset in the result-set (for pagination).",
            "format": "int64",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          },
          {
            "description": "If set, the given string will be used to search on name.",
            "in": "query",
            "name": "search",
            "required": false,
            "type": "string"
          },
          {
            "description": "If set, filters the result set to the tenants of the user.\nOnly global API keys are able to filter by this field.",
            "in": "query",
            "name": "userId",
            "required": false,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListTenantsResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the list of tenants.",
        "tags": [
          "TenantService"
        ]
      },
      "post": {
        "operationId": "TenantService_Create",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/apiCreateTenantRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiCreateTenantResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create a new tenant.",
        "tags": [
          "TenantService"
        ]
      }
    },
    "/api/tenants/{id}": {
      "delete": {
        "operationId": "TenantService_Delete",
        "parameters": [
          {
            "description": "Tenant ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the tenant with the given ID.",
        "tags": [
          "TenantService"
        ]
      },
      "get": {
        "operationId": "TenantService_Get",
        "parameters": [
          {
            "description": "Tenant ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetTenantResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the tenant for the given ID.",
        "tags": [
          "TenantService"
        ]
      }
    },
    "/api/tenants/{tenant.id}": {
      "put": {
        "operationId": "TenantService_Update",
        "parameters": [
          {
            "description": "Tenant ID (UUID).\nNote: this value will be automatically generated on create.",
            "in": "path",
            "name": "tenant.id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "tenant": {
                  "description": "Tenant object.",
                  "properties": {
                    "canHaveGateways": {
                      "description": "Can the tenant create and \"own\" Gateways?",
                      "type": "boolean"
                    },
                    "description": {
                      "description": "Tenant description.",
                      "type": "string"
                    },
                    "maxDeviceCount": {
                      "description": "Max. device count for tenant.\nWhen set to 0, the tenant can have unlimited devices.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "maxGatewayCount": {
                      "description": "Max. gateway count for tenant.\nWhen set to 0, the tenant can have unlimited gateways.",
                      "format": "int64",
                      "type": "integer"
                    },
                    "name": {
                      "description": "Tenant name,",
                      "type": "string"
                    },
                    "privateGatewaysDown": {
                      "description": "Private gateways (downlink).\nIf enabled, then other tenants will not be able to schedule downlink\nmessages through the gateways of this tenant. For example, in case you\ndo want to share uplinks with other tenants (private_gateways_up=false),\nbut you want to prevent other tenants from using gateway airtime.",
                      "type": "boolean"
                    },
                    "privateGatewaysUp": {
                      "description": "Private gateways (uplink).\nIf enabled, then uplink messages will not be shared with other tenants.",
                      "type": "boolean"
                    },
                    "tags": {
                      "additionalProperties": {
                        "type": "string"
                      },
                      "description": "Tags (user defined).\nThese tags can be used to add additional information to the tenant. These\ntags are NOT exposed in the integration events.",
                      "type": "object"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the given tenant.",
        "tags": [
          "TenantService"
        ]
      }
    },
    "/api/tenants/{tenantId}/users": {
      "get": {
        "operationId": "TenantService_ListUsers",
        "parameters": [
          {
            "description": "Tenant ID (UUID).",
            "in": "path",
            "name": "tenantId",
            "required": true,
            "type": "string"
          },
          {
            "description": "Max number of tenants to return in the result-set.\nIf not set, it will be treated as 0, and the response will only return the total_count.",
            "format": "int64",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Offset in the result-set (for pagination).",
            "format": "int64",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListTenantUsersResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the list of tenant users.",
        "tags": [
          "TenantService"
        ]
      }
    },
    "/api/tenants/{tenantId}/users/{userId}": {
      "delete": {
        "operationId": "TenantService_DeleteUser",
        "parameters": [
          {
            "description": "Tenant ID (UUID).",
            "in": "path",
            "name": "tenantId",
            "required": true,
            "type": "string"
          },
          {
            "description": "User ID (UUID).",
            "in": "path",
            "name": "userId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the given tenant user.",
        "tags": [
          "TenantService"
        ]
      },
      "get": {
        "operationId": "TenantService_GetUser",
        "parameters": [
          {
            "description": "Tenant ID (UUID).",
            "in": "path",
            "name": "tenantId",
            "required": true,
            "type": "string"
          },
          {
            "description": "User ID (UUID).",
            "in": "path",
            "name": "userId",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetTenantUserResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the the tenant user for the given tenant and user IDs.",
        "tags": [
          "TenantService"
        ]
      }
    },
    "/api/tenants/{tenantUser.tenantId}/users": {
      "post": {
        "operationId": "TenantService_AddUser",
        "parameters": [
          {
            "description": "Tenant ID (UUID).",
            "in": "path",
            "name": "tenantUser.tenantId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "tenantUser": {
                  "description": "Tenant user object.",
                  "properties": {
                    "email": {
                      "description": "Email (only used on get and when adding a user to a tenant).",
                      "type": "string"
                    },
                    "isAdmin": {
                      "description": "User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.",
                      "type": "boolean"
                    },
                    "isDeviceAdmin": {
                      "description": "User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).",
                      "type": "boolean"
                    },
                    "isGatewayAdmin": {
                      "description": "User is able to modify gateways.",
                      "type": "boolean"
                    },
                    "userId": {
                      "description": "User ID (UUID).",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Add an user to the tenant.\nNote: the user must already exist.",
        "tags": [
          "TenantService"
        ]
      }
    },
    "/api/tenants/{tenantUser.tenantId}/users/{tenantUser.userId}": {
      "put": {
        "operationId": "TenantService_UpdateUser",
        "parameters": [
          {
            "description": "Tenant ID (UUID).",
            "in": "path",
            "name": "tenantUser.tenantId",
            "required": true,
            "type": "string"
          },
          {
            "description": "User ID (UUID).",
            "in": "path",
            "name": "tenantUser.userId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "tenantUser": {
                  "description": "Tenant user object.",
                  "properties": {
                    "email": {
                      "description": "Email (only used on get and when adding a user to a tenant).",
                      "type": "string"
                    },
                    "isAdmin": {
                      "description": "User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.",
                      "type": "boolean"
                    },
                    "isDeviceAdmin": {
                      "description": "User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).",
                      "type": "boolean"
                    },
                    "isGatewayAdmin": {
                      "description": "User is able to modify gateways.",
                      "type": "boolean"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the given tenant user.",
        "tags": [
          "TenantService"
        ]
      }
    },
    "/api/users": {
      "get": {
        "operationId": "UserService_List",
        "parameters": [
          {
            "description": "Max number of tenants to return in the result-set.\nIf not set, it will be treated as 0, and the response will only return the total_count.",
            "format": "int64",
            "in": "query",
            "name": "limit",
            "required": false,
            "type": "integer"
          },
          {
            "description": "Offset in the result-set (for pagination).",
            "format": "int64",
            "in": "query",
            "name": "offset",
            "required": false,
            "type": "integer"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiListUsersResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the list of users.",
        "tags": [
          "UserService"
        ]
      },
      "post": {
        "operationId": "UserService_Create",
        "parameters": [
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "$ref": "#/definitions/apiCreateUserRequest"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiCreateUserResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Create a new user.",
        "tags": [
          "UserService"
        ]
      }
    },
    "/api/users/{id}": {
      "delete": {
        "operationId": "UserService_Delete",
        "parameters": [
          {
            "description": "User ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Delete the user with the given ID.",
        "tags": [
          "UserService"
        ]
      },
      "get": {
        "operationId": "UserService_Get",
        "parameters": [
          {
            "description": "User ID.",
            "in": "path",
            "name": "id",
            "required": true,
            "type": "string"
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "$ref": "#/definitions/apiGetUserResponse"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Get the user for the given ID.",
        "tags": [
          "UserService"
        ]
      }
    },
    "/api/users/{user.id}": {
      "put": {
        "operationId": "UserService_Update",
        "parameters": [
          {
            "description": "User ID (UUID).\nWill be set automatically on create.",
            "in": "path",
            "name": "user.id",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "user": {
                  "description": "User object.",
                  "properties": {
                    "email": {
                      "description": "E-mail of the user.",
                      "type": "string"
                    },
                    "isActive": {
                      "description": "Set to false to disable the user.",
                      "type": "boolean"
                    },
                    "isAdmin": {
                      "description": "Set to true to make the user a global administrator.",
                      "type": "boolean"
                    },
                    "note": {
                      "description": "Optional note to store with the user.",
                      "type": "string"
                    }
                  },
                  "type": "object"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the given user.",
        "tags": [
          "UserService"
        ]
      }
    },
    "/api/users/{userId}/password": {
      "post": {
        "operationId": "UserService_UpdatePassword",
        "parameters": [
          {
            "description": "User ID.",
            "in": "path",
            "name": "userId",
            "required": true,
            "type": "string"
          },
          {
            "in": "body",
            "name": "body",
            "required": true,
            "schema": {
              "properties": {
                "password": {
                  "description": "Password to set.",
                  "type": "string"
                }
              },
              "type": "object"
            }
          }
        ],
        "responses": {
          "200": {
            "description": "A successful response.",
            "schema": {
              "properties": {},
              "type": "object"
            }
          },
          "default": {
            "description": "An unexpected error response.",
            "schema": {
              "$ref": "#/definitions/rpcStatus"
            }
          }
        },
        "summary": "Update the password for the given user.",
        "tags": [
          "UserService"
        ]
      }
    }
  },
  "definitions": {
    "ListDevicesRequestOrderBy": {
      "default": "NAME",
      "enum": [
        "NAME",
        "DEV_EUI",
        "LAST_SEEN_AT",
        "DEVICE_PROFILE_NAME"
      ],
      "type": "string"
    },
    "ListGatewaysRequestOrderBy": {
      "default": "NAME",
      "enum": [
        "NAME",
        "GATEWAY_ID",
        "LAST_SEEN_AT"
      ],
      "type": "string"
    },
    "apiAdrAlgorithmListItem": {
      "properties": {
        "id": {
          "description": "Algorithm ID.",
          "type": "string"
        },
        "name": {
          "description": "Algorithm name.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiAppLayerParams": {
      "properties": {
        "ts003FPort": {
          "description": "TS003 fPort.",
          "format": "int64",
          "type": "integer"
        },
        "ts003Version": {
          "$ref": "#/definitions/apiTs003Version",
          "description": "TS003 version (Application Layer Clock Sync)."
        },
        "ts004FPort": {
          "description": "TS004 fPort.",
          "format": "int64",
          "type": "integer"
        },
        "ts004Version": {
          "$ref": "#/definitions/apiTs004Version",
          "description": "TS004 version (Fragmented Data Block Transport)."
        },
        "ts005FPort": {
          "description": "TS005 fPort.",
          "format": "int64",
          "type": "integer"
        },
        "ts005Version": {
          "$ref": "#/definitions/apiTs005Version",
          "description": "TS005 version (Remote Multicast Setup)."
        }
      },
      "type": "object"
    },
    "apiApplication": {
      "properties": {
        "description": {
          "description": "Application description.",
          "type": "string"
        },
        "id": {
          "description": "Application ID (UUID).\nNote: on create this will be automatically generated.",
          "type": "string"
        },
        "name": {
          "description": "Application name.",
          "type": "string"
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Tags (user defined).\nThese tags can be used to add additional information to the application.\nThese tags are exposed in all the integration events of devices under\nthis application.",
          "type": "object"
        },
        "tenantId": {
          "description": "Tenant ID (UUID).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiApplicationDeviceProfileListItem": {
      "properties": {
        "id": {
          "description": "Device-profile ID (UUID).",
          "type": "string"
        },
        "name": {
          "description": "Name.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiApplicationDeviceTagListItem": {
      "properties": {
        "key": {
          "description": "Tag key.",
          "type": "string"
        },
        "values": {
          "description": "Used values.",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "apiApplicationListItem": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "description": {
          "description": "Application description.",
          "type": "string"
        },
        "id": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "name": {
          "description": "Application name.",
          "type": "string"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiAwsSnsIntegration": {
      "properties": {
        "accessKeyId": {
          "description": "AWS Access Key ID.",
          "type": "string"
        },
        "applicationId": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "encoding": {
          "$ref": "#/definitions/apiEncoding",
          "description": "Encoding."
        },
        "region": {
          "description": "AWS region.",
          "type": "string"
        },
        "secretAccessKey": {
          "description": "AWS Secret Access Key.",
          "type": "string"
        },
        "topicArn": {
          "description": "Topic ARN.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiAzureServiceBusIntegration": {
      "properties": {
        "applicationId": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "connectionString": {
          "description": "Connection string.",
          "type": "string"
        },
        "encoding": {
          "$ref": "#/definitions/apiEncoding",
          "description": "Encoding."
        },
        "publishName": {
          "description": "Publish name.\nThis is the name of the topic or queue.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiCadPeriodicity": {
      "default": "SEC_1",
      "description": "- SEC_1: 1 second.\n - MS_500: 500 milliseconds\n - MS_250: 250 milliseconds\n - MS_100: 100 milliseconds\n - MS_50: 50 milliseconds\n - MS_20: 20 milliseconds",
      "enum": [
        "SEC_1",
        "MS_500",
        "MS_250",
        "MS_100",
        "MS_50",
        "MS_20"
      ],
      "type": "string"
    },
    "apiCodecRuntime": {
      "default": "NONE",
      "description": " - NONE: None.\n - CAYENNE_LPP: Cayenne LPP.\n - JS: JavaScript.",
      "enum": [
        "NONE",
        "CAYENNE_LPP",
        "JS"
      ],
      "type": "string"
    },
    "apiCreateApplicationRequest": {
      "properties": {
        "application": {
          "$ref": "#/definitions/apiApplication",
          "description": "Application object to create."
        }
      },
      "type": "object"
    },
    "apiCreateApplicationResponse": {
      "properties": {
        "id": {
          "description": "Application ID (UUID).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiCreateDeviceProfileRequest": {
      "properties": {
        "deviceProfile": {
          "$ref": "#/definitions/apiDeviceProfile",
          "description": "Object to create."
        }
      },
      "type": "object"
    },
    "apiCreateDeviceProfileResponse": {
      "properties": {
        "id": {
          "description": "ID (UUID).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiCreateDeviceProfileTemplateRequest": {
      "properties": {
        "deviceProfileTemplate": {
          "$ref": "#/definitions/apiDeviceProfileTemplate",
          "description": "Object to create."
        }
      },
      "type": "object"
    },
    "apiCreateDeviceRequest": {
      "properties": {
        "device": {
          "$ref": "#/definitions/apiDevice",
          "description": "Device object."
        }
      },
      "type": "object"
    },
    "apiCreateGatewayRequest": {
      "properties": {
        "gateway": {
          "$ref": "#/definitions/apiGateway",
          "description": "Gateway object."
        }
      },
      "type": "object"
    },
    "apiCreateMulticastGroupRequest": {
      "properties": {
        "multicastGroup": {
          "$ref": "#/definitions/apiMulticastGroup",
          "description": "Multicast group to create."
        }
      },
      "type": "object"
    },
    "apiCreateMulticastGroupResponse": {
      "properties": {
        "id": {
          "description": "ID of created multicast group (UUID).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiCreateTenantRequest": {
      "properties": {
        "tenant": {
          "$ref": "#/definitions/apiTenant",
          "description": "Tenant object to create."
        }
      },
      "type": "object"
    },
    "apiCreateTenantResponse": {
      "properties": {
        "id": {
          "description": "Tenant ID.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiCreateUserRequest": {
      "properties": {
        "password": {
          "description": "Password to set for the user.",
          "type": "string"
        },
        "tenants": {
          "description": "Add the user to the following tenants.",
          "items": {
            "$ref": "#/definitions/apiUserTenant"
          },
          "type": "array"
        },
        "user": {
          "$ref": "#/definitions/apiUser",
          "description": "User object to create."
        }
      },
      "type": "object"
    },
    "apiCreateUserResponse": {
      "properties": {
        "id": {
          "description": "User ID.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiDevice": {
      "properties": {
        "applicationId": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "description": {
          "description": "Description.",
          "type": "string"
        },
        "devEui": {
          "description": "DevEUI (EUI64).",
          "type": "string"
        },
        "deviceProfileId": {
          "description": "Device-profile ID (UUID).",
          "type": "string"
        },
        "isDisabled": {
          "description": "Device is disabled.",
          "type": "boolean"
        },
        "joinEui": {
          "description": "JoinEUI (optional, EUI64).\nThis field will be automatically set / updated on OTAA. However, in some\ncases it must be pre-configured. For example to allow OTAA using a Relay.\nIn this case the Relay needs to know the JoinEUI + DevEUI combinations\nof the devices for which it needs to forward uplinks.",
          "type": "string"
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "skipFcntCheck": {
          "description": "Skip frame-counter checks (this is insecure, but could be helpful for\ndebugging).",
          "type": "boolean"
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Tags (user defined).\nThese tags can be used to add additional information to the device.\nThese tags are exposed in all the integration events.",
          "type": "object"
        },
        "variables": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Variables (user defined).\nThese variables can be used together with integrations to store tokens /\nsecrets that must be configured per device. These variables are not\nexposed in the event payloads.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "apiDeviceActivation": {
      "properties": {
        "aFCntDown": {
          "description": "Downlink application frame-counter.",
          "format": "int64",
          "type": "integer"
        },
        "appSKey": {
          "description": "Application session key (HEX encoded).",
          "type": "string"
        },
        "devAddr": {
          "description": "Device address (HEX encoded).",
          "type": "string"
        },
        "devEui": {
          "description": "Device EUI (EUI64).",
          "type": "string"
        },
        "fCntUp": {
          "description": "Uplink frame-counter.",
          "format": "int64",
          "type": "integer"
        },
        "fNwkSIntKey": {
          "description": "Forwarding network session integrity key (HEX encoded).\nNote: For LoRaWAN 1.0.x devices, set this to the NwkSKey.",
          "type": "string"
        },
        "nFCntDown": {
          "description": "Downlink network frame-counter.",
          "format": "int64",
          "type": "integer"
        },
        "nwkSEncKey": {
          "description": "Network session encryption key (HEX encoded).\nNote: For LoRaWAN 1.0.x devices, set this to the NwkSKey.",
          "type": "string"
        },
        "sNwkSIntKey": {
          "description": "Serving network session integrity key (HEX encoded).\nNote: For LoRaWAN 1.0.x devices, set this to the NwkSKey.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiDeviceKeys": {
      "properties": {
        "appKey": {
          "description": "Application root key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.1.x devices!",
          "type": "string"
        },
        "devEui": {
          "description": "DevEUI (EUI64).",
          "type": "string"
        },
        "genAppKey": {
          "description": "Gen App Key (128 bit).\nNote: This field only needs to be set for LoRaWAN 1.0.x devices that\nimplement TS005 (remote multicast setup).",
          "type": "string"
        },
        "nwkKey": {
          "description": "Network root key (128 bit).\nNote: For LoRaWAN 1.0.x, use this field for the LoRaWAN 1.0.x 'AppKey`!",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiDeviceListItem": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "description": {
          "description": "Description.",
          "type": "string"
        },
        "devEui": {
          "description": "DevEUI (EUI64).",
          "type": "string"
        },
        "deviceProfileId": {
          "description": "Device-profile ID (UUID).",
          "type": "string"
        },
        "deviceProfileName": {
          "description": "Device-profile name.",
          "type": "string"
        },
        "deviceStatus": {
          "$ref": "#/definitions/apiDeviceStatus",
          "description": "Device status."
        },
        "lastSeenAt": {
          "description": "Last seen at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Device tags.",
          "type": "object"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiDeviceProfile": {
      "properties": {
        "abpRx1Delay": {
          "description": "RX1 delay (for ABP).",
          "format": "int64",
          "type": "integer"
        },
        "abpRx1DrOffset": {
          "description": "RX1 DR offset (for ABP).",
          "format": "int64",
          "type": "integer"
        },
        "abpRx2Dr": {
          "description": "RX2 DR (for ABP).",
          "format": "int64",
          "type": "integer"
        },
        "abpRx2Freq": {
          "description": "RX2 frequency (for ABP, Hz).",
          "format": "int64",
          "type": "integer"
        },
        "adrAlgorithmId": {
          "description": "ADR algorithm ID.",
          "type": "string"
        },
        "allowRoaming": {
          "description": "Allow roaming.\n\nIf set to true, it means that the device is allowed to use roaming.",
          "type": "boolean"
        },
        "appLayerParams": {
          "$ref": "#/definitions/apiAppLayerParams",
          "description": "Application Layer parameters."
        },
        "autoDetectMeasurements": {
          "description": "Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.",
          "type": "boolean"
        },
        "classBPingSlotDr": {
          "description": "Class-B ping-slot DR.",
          "format": "int64",
          "type": "integer"
        },
        "classBPingSlotFreq": {
          "description": "Class-B ping-slot freq (Hz).",
          "format": "int64",
          "type": "integer"
        },
        "classBPingSlotPeriodicity": {
          "description": "Class-B ping-slot periodicity.\nValid options are: 0 - 7.\n\nNumber of ping-slots per beacon-period:\npingNb = 2^(7-periodicity)\n\nPeriodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec\nPeriodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec",
          "format": "int64",
          "type": "integer"
        },
        "classBTimeout": {
          "description": "Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).",
          "format": "int64",
          "type": "integer"
        },
        "classCTimeout": {
          "description": "Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement\nfrom the device (if requested).",
          "format": "int64",
          "type": "integer"
        },
        "description": {
          "description": "Description.",
          "type": "string"
        },
        "deviceStatusReqInterval": {
          "description": "Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the\ndevice-status from the device.",
          "format": "int64",
          "type": "integer"
        },
        "flushQueueOnActivate": {
          "description": "Flush queue on device activation.",
          "type": "boolean"
        },
        "id": {
          "description": "Device-profile ID (UUID).\nNote: on create this will be automatically generated.",
          "type": "string"
        },
        "isRelay": {
          "description": "Device is a Relay device.\nEnable this in case the device is a Relay. A Relay device implements TS011\nand is able to relay data from relay capable devices.\nSee for more information the TS011 specification.",
          "type": "boolean"
        },
        "isRelayEd": {
          "description": "Device is a Relay end-device.\nEnable this in case the device is an end-device that can operate under a\nRelay. Please refer to the TS011 specification for more information.",
          "type": "boolean"
        },
        "macVersion": {
          "$ref": "#/definitions/commonMacVersion",
          "description": "LoRaWAN mac-version."
        },
        "measurements": {
          "additionalProperties": {
            "$ref": "#/definitions/apiMeasurement"
          },
          "description": "Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.",
          "type": "object"
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "payloadCodecRuntime": {
          "$ref": "#/definitions/apiCodecRuntime",
          "description": "Payload codec runtime."
        },
        "payloadCodecScript": {
          "description": "Payload codec script.",
          "type": "string"
        },
        "regParamsRevision": {
          "$ref": "#/definitions/commonRegParamsRevision",
          "description": "Regional parameters revision."
        },
        "region": {
          "$ref": "#/definitions/commonRegion",
          "description": "Region."
        },
        "regionConfigId": {
          "description": "Region configuration ID.\nIf set, devices will only use the associated region. If let blank, then\ndevices will use all regions matching the selected common-name. Note\nthat multiple region configurations can exist for the same common-name,\ne.g. to provide an 8 channel and 16 channel configuration for the US915\nband.",
          "type": "string"
        },
        "relayCadPeriodicity": {
          "$ref": "#/definitions/apiCadPeriodicity",
          "description": "Relay CAD periodicity."
        },
        "relayDefaultChannelIndex": {
          "description": "Relay default channel index.\nValid values are 0 and 1, please refer to the RP002 specification for\nthe meaning of these values.",
          "format": "int64",
          "type": "integer"
        },
        "relayEdActivationMode": {
          "$ref": "#/definitions/apiRelayModeActivation",
          "description": "Relay end-device activation mode."
        },
        "relayEdBackOff": {
          "description": "Relay end-device back-off (in case it does not receive WOR ACK frame).\n0 = Always send a LoRaWAN uplink\n1..63 = Send a LoRaWAN uplink after X WOR frames without a WOR ACK",
          "format": "int64",
          "type": "integer"
        },
        "relayEdRelayOnly": {
          "description": "End-device only accept data through relay.\nOnly accept data for this device through a relay. This setting is useful\nfor testing as in case of a test-setup, the end-device is usually within\nrange of the gateway.",
          "type": "boolean"
        },
        "relayEdSmartEnableLevel": {
          "description": "Relay end-device smart-enable level.",
          "format": "int64",
          "type": "integer"
        },
        "relayEdUplinkLimitBucketSize": {
          "description": "Relay end-device uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n  0 = 1\n  1 = 2\n  2 = 4\n  3 = 12",
          "format": "int64",
          "type": "integer"
        },
        "relayEdUplinkLimitReloadRate": {
          "description": "Relay end-device uplink limit reload rate.\n\nValid values:\n  * 0 - 62 = X tokens every hour\n  * 63     = no limitation",
          "format": "int64",
          "type": "integer"
        },
        "relayEnabled": {
          "description": "Relay must be enabled.",
          "type": "boolean"
        },
        "relayGlobalUplinkLimitBucketSize": {
          "description": "Relay globak uplink limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n  0 = 1\n  1 = 2\n  2 = 4\n  3 = 12",
          "format": "int64",
          "type": "integer"
        },
        "relayGlobalUplinkLimitReloadRate": {
          "description": "Relay global uplink limit reload rate.\n\nValid values:\n  * 0 - 126 = X tokens every hour\n  * 127     = no limitation",
          "format": "int64",
          "type": "integer"
        },
        "relayJoinReqLimitBucketSize": {
          "description": "Relay join-request limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n  0 = 1\n  1 = 2\n  2 = 4\n  3 = 12",
          "format": "int64",
          "type": "integer"
        },
        "relayJoinReqLimitReloadRate": {
          "description": "Relay join-request limit reload rate.\n\nValid values:\n  * 0 - 126 = X tokens every hour\n  * 127     = no limitation",
          "format": "int64",
          "type": "integer"
        },
        "relayNotifyLimitBucketSize": {
          "description": "Relay notify limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n  0 = 1\n  1 = 2\n  2 = 4\n  3 = 12",
          "format": "int64",
          "type": "integer"
        },
        "relayNotifyLimitReloadRate": {
          "description": "Relay notify limit reload rate.\n\nValid values:\n  * 0 - 126 = X tokens every hour\n  * 127     = no limitation",
          "format": "int64",
          "type": "integer"
        },
        "relayOverallLimitBucketSize": {
          "description": "Relay overall limit bucket size.\n\nThis field indicates the multiplier to determine the bucket size\naccording to the following formula:\nBucketSize TOKEN = _reload_rate x _bucket_size\n\nValid values (0 - 3):\n  0 = 1\n  1 = 2\n  2 = 4\n  3 = 12",
          "format": "int64",
          "type": "integer"
        },
        "relayOverallLimitReloadRate": {
          "description": "Relay overall limit reload rate.\n\nValid values:\n  * 0 - 126 = X tokens every hour\n  * 127     = no limitation",
          "format": "int64",
          "type": "integer"
        },
        "relaySecondChannelAckOffset": {
          "$ref": "#/definitions/apiSecondChAckOffset",
          "description": "Relay second channel ACK offset."
        },
        "relaySecondChannelDr": {
          "description": "Relay second channel DR.",
          "format": "int64",
          "type": "integer"
        },
        "relaySecondChannelFreq": {
          "description": "Relay second channel frequency (Hz).",
          "format": "int64",
          "type": "integer"
        },
        "rx1Delay": {
          "description": "RX1 Delay.\n\nThis makes it possible to override the system RX1 Delay. Please note that\nthis values only has effect in case it is higher than the system value.\nIn other words, it can be used to increase the RX1 Delay but not to decrease\nit.\nValid options are 1 - 15 (0 = always use system RX1 Delay).",
          "format": "int64",
          "type": "integer"
        },
        "supportsClassB": {
          "description": "Supports Class B.",
          "type": "boolean"
        },
        "supportsClassC": {
          "description": "Supports Class-C.",
          "type": "boolean"
        },
        "supportsOtaa": {
          "description": "Supports OTAA.",
          "type": "boolean"
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Tags (user defined).\nThese tags can be used to add additional information the the\ndevice-profile. These tags are exposed in all the integration events of\ndevices using this device-profile.",
          "type": "object"
        },
        "tenantId": {
          "description": "Tenant ID (UUID).",
          "type": "string"
        },
        "uplinkInterval": {
          "description": "Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. If the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiDeviceProfileListItem": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "id": {
          "description": "Device-profile ID (UUID).",
          "type": "string"
        },
        "macVersion": {
          "$ref": "#/definitions/commonMacVersion",
          "description": "LoRaWAN mac-version."
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "regParamsRevision": {
          "$ref": "#/definitions/commonRegParamsRevision",
          "description": "Regional parameters revision."
        },
        "region": {
          "$ref": "#/definitions/commonRegion",
          "description": "Region."
        },
        "supportsClassB": {
          "description": "Supports Class-B.",
          "type": "boolean"
        },
        "supportsClassC": {
          "description": "Supports Class-C.",
          "type": "boolean"
        },
        "supportsOtaa": {
          "description": "Supports OTAA.",
          "type": "boolean"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiDeviceProfileTemplate": {
      "properties": {
        "abpRx1Delay": {
          "description": "RX1 delay (for ABP).",
          "format": "int64",
          "type": "integer"
        },
        "abpRx1DrOffset": {
          "description": "RX1 DR offset (for ABP).",
          "format": "int64",
          "type": "integer"
        },
        "abpRx2Dr": {
          "description": "RX2 DR (for ABP).",
          "format": "int64",
          "type": "integer"
        },
        "abpRx2Freq": {
          "description": "RX2 frequency (for ABP, Hz).",
          "format": "int64",
          "type": "integer"
        },
        "adrAlgorithmId": {
          "description": "ADR algorithm ID.",
          "type": "string"
        },
        "autoDetectMeasurements": {
          "description": "Auto-detect measurements.\nIf set to true, measurements will be automatically added based on the\nkeys of the decoded payload. In cases where the decoded payload contains\nrandom keys in the data, you want to set this to false.",
          "type": "boolean"
        },
        "classBPingSlotDr": {
          "description": "Class-B ping-slot DR.",
          "format": "int64",
          "type": "integer"
        },
        "classBPingSlotFreq": {
          "description": "Class-B ping-slot freq (Hz).",
          "format": "int64",
          "type": "integer"
        },
        "classBPingSlotPeriodicity": {
          "description": "Class-B ping-slot periodicity (only for Class-B).\nValid options are: 0 - 7.\n\nNumber of ping-slots per beacon-period:\npingNb = 2^(7-periodicity)\n\nPeriodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec\nPeriodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec",
          "format": "int64",
          "type": "integer"
        },
        "classBTimeout": {
          "description": "Class-B timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).",
          "format": "int64",
          "type": "integer"
        },
        "classCTimeout": {
          "description": "Class-C timeout (seconds).\nThis is the maximum time ChirpStack will wait to receive an acknowledgement from the device (if requested).",
          "format": "int64",
          "type": "integer"
        },
        "description": {
          "description": "Description.",
          "type": "string"
        },
        "deviceStatusReqInterval": {
          "description": "Device-status request interval (times / day).\nThis defines the times per day that ChirpStack will request the device-status\nfrom the device.",
          "format": "int64",
          "type": "integer"
        },
        "firmware": {
          "description": "Firmware.",
          "type": "string"
        },
        "flushQueueOnActivate": {
          "description": "Flush queue on device activation.",
          "type": "boolean"
        },
        "id": {
          "description": "Device-profile template ID.",
          "type": "string"
        },
        "macVersion": {
          "$ref": "#/definitions/commonMacVersion",
          "description": "LoRaWAN mac-version."
        },
        "measurements": {
          "additionalProperties": {
            "$ref": "#/definitions/apiMeasurement"
          },
          "description": "Measurements.\nIf defined, ChirpStack will visualize these metrics in the web-interface.",
          "type": "object"
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "payloadCodecRuntime": {
          "$ref": "#/definitions/apiCodecRuntime",
          "description": "Payload codec runtime."
        },
        "payloadCodecScript": {
          "description": "Payload codec script.",
          "type": "string"
        },
        "regParamsRevision": {
          "$ref": "#/definitions/commonRegParamsRevision",
          "description": "Regional parameters revision."
        },
        "region": {
          "$ref": "#/definitions/commonRegion",
          "description": "Region."
        },
        "supportsClassB": {
          "description": "Supports Class B.",
          "type": "boolean"
        },
        "supportsClassC": {
          "description": "Supports Class-C.",
          "type": "boolean"
        },
        "supportsOtaa": {
          "description": "Supports OTAA.",
          "type": "boolean"
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "User defined tags.",
          "type": "object"
        },
        "uplinkInterval": {
          "description": "Uplink interval (seconds).\nThis defines the expected uplink interval which the device uses for\ncommunication. When the uplink interval has expired and no uplink has\nbeen received, the device is considered inactive.",
          "format": "int64",
          "type": "integer"
        },
        "vendor": {
          "description": "Vendor.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiDeviceProfileTemplateListItem": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "firmware": {
          "description": "Firmware.",
          "type": "string"
        },
        "id": {
          "description": "Device-profile template ID.",
          "type": "string"
        },
        "macVersion": {
          "$ref": "#/definitions/commonMacVersion",
          "description": "LoRaWAN mac-version."
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "regParamsRevision": {
          "$ref": "#/definitions/commonRegParamsRevision",
          "description": "Regional parameters revision."
        },
        "region": {
          "$ref": "#/definitions/commonRegion",
          "description": "Region."
        },
        "supportsClassB": {
          "description": "Supports Class-B.",
          "type": "boolean"
        },
        "supportsClassC": {
          "description": "Supports Class-C.",
          "type": "boolean"
        },
        "supportsOtaa": {
          "description": "Supports OTAA.",
          "type": "boolean"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "vendor": {
          "description": "Vendor.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiDeviceQueueItem": {
      "properties": {
        "confirmed": {
          "description": "Confirmed.",
          "type": "boolean"
        },
        "data": {
          "description": "Data.\nOr use the json_object field when a codec has been configured.",
          "format": "byte",
          "type": "string"
        },
        "devEui": {
          "description": "Device EUI (EUI64).",
          "type": "string"
        },
        "expiresAt": {
          "description": "Expires at (optional).\nExpired queue-items will be automatically removed from the queue.",
          "format": "date-time",
          "type": "string"
        },
        "fCntDown": {
          "description": "Downlink frame-counter.\nDo not set this for plain-text data payloads. It will be automatically set\nby ChirpStack when the payload has been sent as downlink.",
          "format": "int64",
          "type": "integer"
        },
        "fPort": {
          "description": "FPort (must be \u003e 0).\nOn enqueue and if using a JavaScript codec, this value might be\nautomatically set by the codec function.",
          "format": "int64",
          "type": "integer"
        },
        "id": {
          "description": "ID (UUID).\nThis is automatically generated on enqueue.",
          "type": "string"
        },
        "isEncrypted": {
          "description": "Is encrypted.\nThis must be set to true if the end-application has already encrypted\nthe data payload. In this case, the f_cnt_down field must be set to\nthe corresponding frame-counter which has been used during the encryption.",
          "type": "boolean"
        },
        "isPending": {
          "description": "Is pending.\nThis is set by ChirpStack to true when the downlink is pending (e.g. it\nhas been sent, but a confirmation is still pending).",
          "type": "boolean"
        },
        "object": {
          "description": "Only use this when a codec has been configured that can encode this\nobject to bytes.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "apiDeviceState": {
      "properties": {
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "value": {
          "description": "Value.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiDeviceStatus": {
      "properties": {
        "batteryLevel": {
          "description": "Device battery level as a percentage.\n-1 when the battery level is not available.",
          "format": "float",
          "type": "number"
        },
        "externalPowerSource": {
          "description": "Device is connected to an external power source.",
          "type": "boolean"
        },
        "margin": {
          "description": "The device margin status\n-32..32: The demodulation SNR ration in dB",
          "format": "int32",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiEncoding": {
      "default": "JSON",
      "enum": [
        "JSON",
        "PROTOBUF"
      ],
      "type": "string"
    },
    "apiEnqueueDeviceQueueItemResponse": {
      "properties": {
        "id": {
          "description": "ID (UUID).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiEnqueueMulticastGroupQueueItemResponse": {
      "properties": {
        "fCnt": {
          "description": "Frame-counter of the enqueued payload.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiGateway": {
      "properties": {
        "description": {
          "description": "Description.",
          "type": "string"
        },
        "gatewayId": {
          "description": "Gateway ID (EUI64).",
          "type": "string"
        },
        "location": {
          "$ref": "#/definitions/commonLocation",
          "description": "Gateway location."
        },
        "metadata": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Metadata (provided by the gateway).",
          "type": "object"
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "statsInterval": {
          "description": "Stats interval (seconds).\nThis defines the expected interval in which the gateway sends its\nstatistics.",
          "format": "int64",
          "type": "integer"
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Tags.",
          "type": "object"
        },
        "tenantId": {
          "description": "Tenant ID (UUID).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGatewayListItem": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "description": {
          "description": "Description.",
          "type": "string"
        },
        "gatewayId": {
          "description": "Gateway ID (EUI64).",
          "type": "string"
        },
        "lastSeenAt": {
          "description": "Last seen at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "location": {
          "$ref": "#/definitions/commonLocation",
          "description": "Location."
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "properties": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Gateway properties.",
          "type": "object"
        },
        "state": {
          "$ref": "#/definitions/apiGatewayState",
          "description": "Gateway state.\nPlease note that the state of the gateway is driven by the stats\npackages that are sent by the gateway."
        },
        "tenantId": {
          "description": "Tenant ID.",
          "type": "string"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGatewayState": {
      "default": "NEVER_SEEN",
      "description": " - NEVER_SEEN: The gateway has never sent any stats.\n - ONLINE: Online.\n - OFFLINE: Offline.",
      "enum": [
        "NEVER_SEEN",
        "ONLINE",
        "OFFLINE"
      ],
      "type": "string"
    },
    "apiGcpPubSubIntegration": {
      "properties": {
        "applicationId": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "credentialsFile": {
          "description": "Credentials file.\nThis IAM service-account credentials file (JSON) must have the following\nPub/Sub roles:\n* Pub/Sub Publisher",
          "type": "string"
        },
        "encoding": {
          "$ref": "#/definitions/apiEncoding",
          "description": "Encoding."
        },
        "projectId": {
          "description": "Project ID.",
          "type": "string"
        },
        "topicName": {
          "description": "Topic name.\nThis is the name of the Pub/Sub topic.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGenerateGatewayClientCertificateResponse": {
      "properties": {
        "caCert": {
          "description": "CA certificate.",
          "type": "string"
        },
        "expiresAt": {
          "description": "Expires at defines the expiration date of the certificate.",
          "format": "date-time",
          "type": "string"
        },
        "tlsCert": {
          "description": "TLS certificate.",
          "type": "string"
        },
        "tlsKey": {
          "description": "TLS key.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGenerateMqttIntegrationClientCertificateResponse": {
      "properties": {
        "caCert": {
          "description": "CA certificate.",
          "type": "string"
        },
        "expiresAt": {
          "description": "Expires at defines the expiration date of the certificate.",
          "format": "date-time",
          "type": "string"
        },
        "tlsCert": {
          "description": "TLS certificate.",
          "type": "string"
        },
        "tlsKey": {
          "description": "TLS key.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetApplicationResponse": {
      "properties": {
        "application": {
          "$ref": "#/definitions/apiApplication",
          "description": "Application object."
        },
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "measurementKeys": {
          "description": "Measurement keys.\nThis contains the measurement keys from all the device-profiles that\nare used by the devices under this application.",
          "items": {
            "type": "string"
          },
          "type": "array"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetAwsSnsIntegrationResponse": {
      "properties": {
        "integration": {
          "$ref": "#/definitions/apiAwsSnsIntegration",
          "description": "Integration object."
        }
      },
      "type": "object"
    },
    "apiGetAzureServiceBusIntegrationResponse": {
      "properties": {
        "integration": {
          "$ref": "#/definitions/apiAzureServiceBusIntegration",
          "description": "Integration object."
        }
      },
      "type": "object"
    },
    "apiGetDeviceActivationResponse": {
      "properties": {
        "deviceActivation": {
          "$ref": "#/definitions/apiDeviceActivation",
          "description": "Device activation object."
        },
        "joinServerContext": {
          "$ref": "#/definitions/commonJoinServerContext",
          "description": "Join-Server context.\nA non-empty value indicatest that ChirpStack does not have access to\nthe AppSKey and that the encryption / decryption of the payloads is\nthe responsibility of the end-application."
        }
      },
      "type": "object"
    },
    "apiGetDeviceKeysResponse": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "deviceKeys": {
          "$ref": "#/definitions/apiDeviceKeys",
          "description": "Device-keys object."
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetDeviceLinkMetricsResponse": {
      "properties": {
        "errors": {
          "$ref": "#/definitions/commonMetric",
          "description": "Errors."
        },
        "gwRssi": {
          "$ref": "#/definitions/commonMetric",
          "description": "RSSI (as reported by the gateway(s))."
        },
        "gwSnr": {
          "$ref": "#/definitions/commonMetric",
          "description": "SNR (as reported by the gateway(s))."
        },
        "rxPackets": {
          "$ref": "#/definitions/commonMetric",
          "description": "Packets received from the device."
        },
        "rxPacketsPerDr": {
          "$ref": "#/definitions/commonMetric",
          "description": "Packets received by DR."
        },
        "rxPacketsPerFreq": {
          "$ref": "#/definitions/commonMetric",
          "description": "Packets received by frequency."
        }
      },
      "type": "object"
    },
    "apiGetDeviceMetricsResponse": {
      "properties": {
        "metrics": {
          "additionalProperties": {
            "$ref": "#/definitions/commonMetric"
          },
          "type": "object"
        },
        "states": {
          "additionalProperties": {
            "$ref": "#/definitions/apiDeviceState"
          },
          "type": "object"
        }
      },
      "type": "object"
    },
    "apiGetDeviceNextFCntDownResponse": {
      "properties": {
        "fCntDown": {
          "description": "FCntDown.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiGetDeviceProfileResponse": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "deviceProfile": {
          "$ref": "#/definitions/apiDeviceProfile",
          "description": "Device-profile object."
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetDeviceProfileTemplateResponse": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "deviceProfileTemplate": {
          "$ref": "#/definitions/apiDeviceProfileTemplate",
          "description": "Device-profile template object."
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetDeviceQueueItemsResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiDeviceQueueItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of queue items.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiGetDeviceResponse": {
      "properties": {
        "classEnabled": {
          "$ref": "#/definitions/commonDeviceClass",
          "description": "Enabled device class."
        },
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "device": {
          "$ref": "#/definitions/apiDevice",
          "description": "Device object."
        },
        "deviceStatus": {
          "$ref": "#/definitions/apiDeviceStatus",
          "description": "Device status."
        },
        "lastSeenAt": {
          "description": "Last seen at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetGatewayDutyCycleMetricsResponse": {
      "properties": {
        "maxLoadPercentage": {
          "$ref": "#/definitions/commonMetric",
          "description": "Percentage relative to max load."
        },
        "windowPercentage": {
          "$ref": "#/definitions/commonMetric",
          "description": "Percentage relative to tracking window."
        }
      },
      "type": "object"
    },
    "apiGetGatewayMetricsResponse": {
      "properties": {
        "rxPackets": {
          "$ref": "#/definitions/commonMetric",
          "description": "RX packets."
        },
        "rxPacketsPerDr": {
          "$ref": "#/definitions/commonMetric",
          "description": "RX packets / DR."
        },
        "rxPacketsPerFreq": {
          "$ref": "#/definitions/commonMetric",
          "description": "RX packets / frequency."
        },
        "txPackets": {
          "$ref": "#/definitions/commonMetric",
          "description": "TX packets."
        },
        "txPacketsPerDr": {
          "$ref": "#/definitions/commonMetric",
          "description": "TX packets / DR."
        },
        "txPacketsPerFreq": {
          "$ref": "#/definitions/commonMetric",
          "description": "TX packets / frequency."
        },
        "txPacketsPerStatus": {
          "$ref": "#/definitions/commonMetric",
          "description": "TX packets per status."
        }
      },
      "type": "object"
    },
    "apiGetGatewayResponse": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "gateway": {
          "$ref": "#/definitions/apiGateway",
          "description": "Gateway object."
        },
        "lastSeenAt": {
          "description": "Last seen at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetGcpPubSubIntegrationResponse": {
      "properties": {
        "integration": {
          "$ref": "#/definitions/apiGcpPubSubIntegration",
          "description": "Integration object."
        }
      },
      "type": "object"
    },
    "apiGetHttpIntegrationResponse": {
      "properties": {
        "integration": {
          "$ref": "#/definitions/apiHttpIntegration",
          "description": "Integration object."
        }
      },
      "type": "object"
    },
    "apiGetIftttIntegrationResponse": {
      "properties": {
        "integration": {
          "$ref": "#/definitions/apiIftttIntegration",
          "description": "Integration object."
        }
      },
      "type": "object"
    },
    "apiGetInfluxDbIntegrationResponse": {
      "properties": {
        "integration": {
          "$ref": "#/definitions/apiInfluxDbIntegration",
          "description": "Integration object."
        }
      },
      "type": "object"
    },
    "apiGetMulticastGroupResponse": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "multicastGroup": {
          "$ref": "#/definitions/apiMulticastGroup",
          "description": "Multicast group object."
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetMyDevicesIntegrationResponse": {
      "properties": {
        "integration": {
          "$ref": "#/definitions/apiMyDevicesIntegration",
          "description": "Integration object."
        }
      },
      "type": "object"
    },
    "apiGetPilotThingsIntegrationResponse": {
      "properties": {
        "integration": {
          "$ref": "#/definitions/apiPilotThingsIntegration",
          "description": "Integration object."
        }
      },
      "type": "object"
    },
    "apiGetRandomDevAddrResponse": {
      "properties": {
        "devAddr": {
          "description": "DevAddr.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetRelayGatewayResponse": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "lastSeenAt": {
          "description": "Last seen at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "relayGateway": {
          "$ref": "#/definitions/apiRelayGateway",
          "description": "Relay Gateway object."
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetTenantResponse": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "tenant": {
          "$ref": "#/definitions/apiTenant",
          "description": "Tenant object."
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetTenantUserResponse": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "tenantUser": {
          "$ref": "#/definitions/apiTenantUser",
          "description": "Tenant user object."
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiGetThingsBoardIntegrationResponse": {
      "properties": {
        "integration": {
          "$ref": "#/definitions/apiThingsBoardIntegration",
          "description": "Integration object."
        }
      },
      "type": "object"
    },
    "apiGetUserResponse": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "user": {
          "$ref": "#/definitions/apiUser",
          "description": "User object."
        }
      },
      "type": "object"
    },
    "apiHttpIntegration": {
      "properties": {
        "applicationId": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "encoding": {
          "$ref": "#/definitions/apiEncoding",
          "description": "Payload encoding."
        },
        "eventEndpointUrl": {
          "description": "Event endpoint URL.\nThe HTTP integration will POST all events to this enpoint. The request\nwill contain a query parameters \"event\" containing the type of the\nevent.",
          "type": "string"
        },
        "headers": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "HTTP headers to set when making requests.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "apiIftttIntegration": {
      "properties": {
        "applicationId": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "arbitraryJson": {
          "description": "Arbitrary JSON.\nIf set to true, ChirpStack events will be sent as-is as arbitrary JSON\npayload. If set to false (default), the 3 JSON values format will be used.",
          "type": "boolean"
        },
        "eventPrefix": {
          "description": "Event prefix.\nIf set, the event name will be PREFIX_EVENT. For example if event_prefix\nis set to weatherstation, and uplink event will be sent as\nweatherstation_up to the IFTTT webhook.\nNote: Only characters in the A-Z, a-z and 0-9 range are allowed.",
          "type": "string"
        },
        "key": {
          "description": "Key.\nThis key can be obtained from the IFTTT Webhooks documentation page.",
          "type": "string"
        },
        "uplinkValues": {
          "description": "Values.\nUp to 2 values can be forwarded to IFTTT. These values must map to the\ndecoded payload keys. For example:\n{\n  \"batteryLevel\": 75.3,\n  \"buttons\": [{\"pressed\": false}, {\"pressed\": true}]\n}\nYou would specify the following fields:\nuplink_values = [\"batteryLevel\", \"buttons_0_pressed\"]",
          "items": {
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "apiInfluxDbIntegration": {
      "properties": {
        "applicationId": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "bucket": {
          "description": "Bucket. (InfluxDb v2)",
          "type": "string"
        },
        "db": {
          "description": "InfluxDb database name. (InfluxDb v1)",
          "type": "string"
        },
        "endpoint": {
          "description": "InfluxDb API write endpoint (e.g. http://localhost:8086/write).",
          "type": "string"
        },
        "organization": {
          "description": "Organization. (InfluxDb v2)",
          "type": "string"
        },
        "password": {
          "description": "InfluxDb password. (InfluxDb v1)",
          "type": "string"
        },
        "precision": {
          "$ref": "#/definitions/apiInfluxDbPrecision",
          "description": "InfluxDb timestamp precision (InfluxDb v1)."
        },
        "retentionPolicyName": {
          "description": "InfluxDb retention policy name. (InfluxDb v1)",
          "type": "string"
        },
        "token": {
          "description": "Token. (InfluxDb v2)",
          "type": "string"
        },
        "username": {
          "description": "InfluxDb username. (InfluxDb v1)",
          "type": "string"
        },
        "version": {
          "$ref": "#/definitions/apiInfluxDbVersion",
          "description": "InfluxDb version."
        }
      },
      "type": "object"
    },
    "apiInfluxDbPrecision": {
      "default": "NS",
      "enum": [
        "NS",
        "U",
        "MS",
        "S",
        "M",
        "H"
      ],
      "type": "string"
    },
    "apiInfluxDbVersion": {
      "default": "INFLUXDB_1",
      "enum": [
        "INFLUXDB_1",
        "INFLUXDB_2"
      ],
      "type": "string"
    },
    "apiIntegrationKind": {
      "default": "HTTP",
      "enum": [
        "HTTP",
        "INFLUX_DB",
        "THINGS_BOARD",
        "MY_DEVICES",
        "GCP_PUB_SUB",
        "AWS_SNS",
        "AZURE_SERVICE_BUS",
        "PILOT_THINGS",
        "MQTT_GLOBAL",
        "IFTTT"
      ],
      "type": "string"
    },
    "apiIntegrationListItem": {
      "properties": {
        "kind": {
          "$ref": "#/definitions/apiIntegrationKind",
          "description": "Integration kind."
        }
      },
      "type": "object"
    },
    "apiListApplicationDeviceProfilesResponse": {
      "properties": {
        "result": {
          "description": "Device-profiles.",
          "items": {
            "$ref": "#/definitions/apiApplicationDeviceProfileListItem"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "apiListApplicationDeviceTagsResponse": {
      "properties": {
        "result": {
          "description": "Device tags.",
          "items": {
            "$ref": "#/definitions/apiApplicationDeviceTagListItem"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "apiListApplicationsResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiApplicationListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of applications.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListDeviceProfileAdrAlgorithmsResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiAdrAlgorithmListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of algorithms.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListDeviceProfileTemplatesResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiDeviceProfileTemplateListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of device-profile templates.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListDeviceProfilesResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiDeviceProfileListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of device-profiles.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListDevicesResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiDeviceListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of devices.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListGatewaysResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiGatewayListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of gateways.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListIntegrationsResponse": {
      "properties": {
        "result": {
          "description": "Integrations within result-set.",
          "items": {
            "$ref": "#/definitions/apiIntegrationListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of integrations available within the result-set.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListMulticastGroupQueueResponse": {
      "properties": {
        "items": {
          "items": {
            "$ref": "#/definitions/apiMulticastGroupQueueItem"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "apiListMulticastGroupsResponse": {
      "properties": {
        "result": {
          "description": "Result-test.",
          "items": {
            "$ref": "#/definitions/apiMulticastGroupListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of multicast groups.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListRelayGatewaysResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiRelayGatewayListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of relay-gateways.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListTenantUsersResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiTenantUserListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of tenants.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListTenantsResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiTenantListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of tenants.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiListUsersResponse": {
      "properties": {
        "result": {
          "description": "Result-set.",
          "items": {
            "$ref": "#/definitions/apiUserListItem"
          },
          "type": "array"
        },
        "totalCount": {
          "description": "Total number of users.",
          "format": "int64",
          "type": "integer"
        }
      },
      "type": "object"
    },
    "apiMeasurement": {
      "properties": {
        "kind": {
          "$ref": "#/definitions/apiMeasurementKind",
          "description": "Kind."
        },
        "name": {
          "description": "Name (user defined).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiMeasurementKind": {
      "default": "UNKNOWN",
      "description": " - UNKNOWN: Unknown (in which case it is not tracked).\n - COUNTER: Incrementing counters that never decrease (these are not reset on each\nreading).\n - ABSOLUTE: Counters that do get reset upon reading.\n - GAUGE: E.g. a temperature value.\n - STRING: E.g. a firmware version, true / false value.",
      "enum": [
        "UNKNOWN",
        "COUNTER",
        "ABSOLUTE",
        "GAUGE",
        "STRING"
      ],
      "type": "string"
    },
    "apiMulticastGroup": {
      "properties": {
        "applicationId": {
          "description": "Application ID.\nAfter creation, this can not be updated.",
          "type": "string"
        },
        "classBPingSlotPeriodicity": {
          "description": "Class-B ping-slot periodicity (only for Class-B).\nValid options are: 0 - 7.\n\nNumber of ping-slots per beacon-period:\npingNb = 2^(7-periodicity)\n\nPeriodicity: 0 = 128 ping-slots per beacon period = ~ every 1 sec\nPeriodicity: 7 = 1 ping-slot per beacon period = ~ every 128 sec",
          "format": "int64",
          "type": "integer"
        },
        "classCSchedulingType": {
          "$ref": "#/definitions/apiMulticastGroupSchedulingType",
          "description": "Scheduling type (only for Class-C)."
        },
        "dr": {
          "description": "Data-rate.",
          "format": "int64",
          "type": "integer"
        },
        "fCnt": {
          "description": "Frame-counter.",
          "format": "int64",
          "type": "integer"
        },
        "frequency": {
          "description": "Frequency (Hz).",
          "format": "int64",
          "type": "integer"
        },
        "groupType": {
          "$ref": "#/definitions/apiMulticastGroupType",
          "description": "Multicast group type."
        },
        "id": {
          "description": "ID (UUID).\nThis will be generated automatically on create.",
          "type": "string"
        },
        "mcAddr": {
          "description": "Multicast address (HEX encoded DevAddr).",
          "type": "string"
        },
        "mcAppSKey": {
          "description": "Multicast application session key (HEX encoded AES128 key).",
          "type": "string"
        },
        "mcNwkSKey": {
          "description": "Multicast network session key (HEX encoded AES128 key).",
          "type": "string"
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "region": {
          "$ref": "#/definitions/commonRegion",
          "description": "Region."
        }
      },
      "type": "object"
    },
    "apiMulticastGroupListItem": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "groupType": {
          "$ref": "#/definitions/apiMulticastGroupType",
          "description": "Multicast group type."
        },
        "id": {
          "description": "ID.",
          "type": "string"
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "region": {
          "$ref": "#/definitions/commonRegion",
          "description": "Region."
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiMulticastGroupQueueItem": {
      "properties": {
        "data": {
          "description": "Payload.",
          "format": "byte",
          "type": "string"
        },
        "expiresAt": {
          "description": "Expires at (optional).\nExpired queue-items will be automatically removed from the queue.",
          "format": "date-time",
          "type": "string"
        },
        "fCnt": {
          "description": "Downlink frame-counter.\nThis will be automatically set on enqueue.",
          "format": "int64",
          "type": "integer"
        },
        "fPort": {
          "description": "FPort (must be \u003e 0).",
          "format": "int64",
          "type": "integer"
        },
        "multicastGroupId": {
          "description": "Multicast group ID.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiMulticastGroupSchedulingType": {
      "default": "DELAY",
      "description": " - DELAY: Delay.\nIf multicast downlinks must be sent through multiple gateways, then\nthese will be sent one by one with a delay between each gateway.\n - GPS_TIME: Time.\nIf multicast downlinks must be sent through multiple gateways, then\nthese will be sent simultaneously using GPS time synchronization.\nNote that this does require GPS time-synchronized LoRa gateways.",
      "enum": [
        "DELAY",
        "GPS_TIME"
      ],
      "type": "string"
    },
    "apiMulticastGroupType": {
      "default": "CLASS_C",
      "description": " - CLASS_C: Class C.\n - CLASS_B: Class-B.",
      "enum": [
        "CLASS_C",
        "CLASS_B"
      ],
      "type": "string"
    },
    "apiMyDevicesIntegration": {
      "properties": {
        "applicationId": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "endpoint": {
          "description": "myDevices API endpoint.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiPilotThingsIntegration": {
      "properties": {
        "applicationId": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "server": {
          "description": "Server URL.",
          "type": "string"
        },
        "token": {
          "description": "Authentication token.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiRelayGateway": {
      "properties": {
        "description": {
          "description": "Description.",
          "type": "string"
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "regionConfigId": {
          "description": "Region configuration ID.",
          "type": "string"
        },
        "relayId": {
          "description": "Relay ID (4 byte HEX).",
          "type": "string"
        },
        "statsInterval": {
          "description": "Stats interval (seconds).\nThis defines the expected interval in which the gateway sends its\nstatistics.",
          "format": "int64",
          "type": "integer"
        },
        "tenantId": {
          "description": "Tenant ID.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiRelayGatewayListItem": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "description": {
          "description": "Description.",
          "type": "string"
        },
        "lastSeenAt": {
          "description": "Last seen at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "regionConfigId": {
          "description": "Region configuration ID.",
          "type": "string"
        },
        "relayId": {
          "description": "Relay ID (4 byte HEX).",
          "type": "string"
        },
        "state": {
          "$ref": "#/definitions/apiGatewayState",
          "description": "Gateway state.\nPlease note that the state of the relay is driven by the last\nreceived stats packet sent by the relay-gateway."
        },
        "tenantId": {
          "description": "Tenant ID.",
          "type": "string"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiRelayModeActivation": {
      "default": "DISABLE_RELAY_MODE",
      "description": " - DISABLE_RELAY_MODE: Disable the relay mode.\n - ENABLE_RELAY_MODE: Enable the relay model.\n - DYNAMIC: Dynamic.\n - END_DEVICE_CONTROLLED: End-device controlled.",
      "enum": [
        "DISABLE_RELAY_MODE",
        "ENABLE_RELAY_MODE",
        "DYNAMIC",
        "END_DEVICE_CONTROLLED"
      ],
      "type": "string"
    },
    "apiSecondChAckOffset": {
      "default": "KHZ_0",
      "description": " - KHZ_0: 0 kHz.\n - KHZ_200: 200 kHz.\n - KHZ_400: 400 kHz.\n - KHZ_800: 800 kHz.\n - KHZ_1600: 1600 kHz.\n - KHZ_3200: 3200 kHz.",
      "enum": [
        "KHZ_0",
        "KHZ_200",
        "KHZ_400",
        "KHZ_800",
        "KHZ_1600",
        "KHZ_3200"
      ],
      "type": "string"
    },
    "apiTenant": {
      "properties": {
        "canHaveGateways": {
          "description": "Can the tenant create and \"own\" Gateways?",
          "type": "boolean"
        },
        "description": {
          "description": "Tenant description.",
          "type": "string"
        },
        "id": {
          "description": "Tenant ID (UUID).\nNote: this value will be automatically generated on create.",
          "type": "string"
        },
        "maxDeviceCount": {
          "description": "Max. device count for tenant.\nWhen set to 0, the tenant can have unlimited devices.",
          "format": "int64",
          "type": "integer"
        },
        "maxGatewayCount": {
          "description": "Max. gateway count for tenant.\nWhen set to 0, the tenant can have unlimited gateways.",
          "format": "int64",
          "type": "integer"
        },
        "name": {
          "description": "Tenant name,",
          "type": "string"
        },
        "privateGatewaysDown": {
          "description": "Private gateways (downlink).\nIf enabled, then other tenants will not be able to schedule downlink\nmessages through the gateways of this tenant. For example, in case you\ndo want to share uplinks with other tenants (private_gateways_up=false),\nbut you want to prevent other tenants from using gateway airtime.",
          "type": "boolean"
        },
        "privateGatewaysUp": {
          "description": "Private gateways (uplink).\nIf enabled, then uplink messages will not be shared with other tenants.",
          "type": "boolean"
        },
        "tags": {
          "additionalProperties": {
            "type": "string"
          },
          "description": "Tags (user defined).\nThese tags can be used to add additional information to the tenant. These\ntags are NOT exposed in the integration events.",
          "type": "object"
        }
      },
      "type": "object"
    },
    "apiTenantListItem": {
      "properties": {
        "canHaveGateways": {
          "description": "Can the tenant create and \"own\" Gateways?",
          "type": "boolean"
        },
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "id": {
          "description": "Tenant ID (UUID).",
          "type": "string"
        },
        "maxDeviceCount": {
          "description": "Max device count.\n0 = unlimited.",
          "format": "int64",
          "type": "integer"
        },
        "maxGatewayCount": {
          "description": "Max gateway count.\n0 = unlimited.",
          "format": "int64",
          "type": "integer"
        },
        "name": {
          "description": "Tenant name.",
          "type": "string"
        },
        "privateGatewaysDown": {
          "description": "Private gateways (downlink).",
          "type": "boolean"
        },
        "privateGatewaysUp": {
          "description": "Private gateways (uplink).",
          "type": "boolean"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiTenantUser": {
      "properties": {
        "email": {
          "description": "Email (only used on get and when adding a user to a tenant).",
          "type": "string"
        },
        "isAdmin": {
          "description": "User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.",
          "type": "boolean"
        },
        "isDeviceAdmin": {
          "description": "User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).",
          "type": "boolean"
        },
        "isGatewayAdmin": {
          "description": "User is able to modify gateways.",
          "type": "boolean"
        },
        "tenantId": {
          "description": "Tenant ID (UUID).",
          "type": "string"
        },
        "userId": {
          "description": "User ID (UUID).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiTenantUserListItem": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "email": {
          "description": "Email.",
          "type": "string"
        },
        "isAdmin": {
          "description": "User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.",
          "type": "boolean"
        },
        "isDeviceAdmin": {
          "description": "User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).",
          "type": "boolean"
        },
        "isGatewayAdmin": {
          "description": "User is able to modify gateways.",
          "type": "boolean"
        },
        "tenantId": {
          "description": "Tenant ID (UUID).",
          "type": "string"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "userId": {
          "description": "User ID (UUID).",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiThingsBoardIntegration": {
      "properties": {
        "applicationId": {
          "description": "Application ID (UUID).",
          "type": "string"
        },
        "server": {
          "description": "ThingsBoard server endpoint, e.g. https://example.com",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiTs003Version": {
      "default": "TS003_NOT_IMPLEMENTED",
      "description": "- TS003_NOT_IMPLEMENTED: Not implemented.\n - TS003_V100: v1.0.0.\n - TS003_v200: v2.0.0",
      "enum": [
        "TS003_NOT_IMPLEMENTED",
        "TS003_V100",
        "TS003_v200"
      ],
      "type": "string"
    },
    "apiTs004Version": {
      "default": "TS004_NOT_IMPLEMENTED",
      "description": "- TS004_NOT_IMPLEMENTED: Not implemented.\n - TS004_V100: v1.0.0.\n - TS004_V200: v2.0.0",
      "enum": [
        "TS004_NOT_IMPLEMENTED",
        "TS004_V100",
        "TS004_V200"
      ],
      "type": "string"
    },
    "apiTs005Version": {
      "default": "TS005_NOT_IMPLEMENTED",
      "description": "- TS005_NOT_IMPLEMENTED: Not implemented.\n - TS005_V100: v1.0.0.\n - TS005_V200: v2.0.0",
      "enum": [
        "TS005_NOT_IMPLEMENTED",
        "TS005_V100",
        "TS005_V200"
      ],
      "type": "string"
    },
    "apiUser": {
      "properties": {
        "email": {
          "description": "E-mail of the user.",
          "type": "string"
        },
        "id": {
          "description": "User ID (UUID).\nWill be set automatically on create.",
          "type": "string"
        },
        "isActive": {
          "description": "Set to false to disable the user.",
          "type": "boolean"
        },
        "isAdmin": {
          "description": "Set to true to make the user a global administrator.",
          "type": "boolean"
        },
        "note": {
          "description": "Optional note to store with the user.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiUserListItem": {
      "properties": {
        "createdAt": {
          "description": "Created at timestamp.",
          "format": "date-time",
          "type": "string"
        },
        "email": {
          "description": "Email of the user.",
          "type": "string"
        },
        "id": {
          "description": "User ID (UUID).",
          "type": "string"
        },
        "isActive": {
          "description": "Set to false to disable the user.",
          "type": "boolean"
        },
        "isAdmin": {
          "description": "Set to true to make the user a global administrator.",
          "type": "boolean"
        },
        "updatedAt": {
          "description": "Last update timestamp.",
          "format": "date-time",
          "type": "string"
        }
      },
      "type": "object"
    },
    "apiUserTenant": {
      "properties": {
        "isAdmin": {
          "description": "User is admin within the context of the tenant.\nThere is no need to set the is_device_admin and is_gateway_admin flags.",
          "type": "boolean"
        },
        "isDeviceAdmin": {
          "description": "User is able to modify device related resources (applications,\ndevice-profiles, devices, multicast-groups).",
          "type": "boolean"
        },
        "isGatewayAdmin": {
          "description": "User is able to modify gateways.",
          "type": "boolean"
        },
        "tenantId": {
          "description": "Tenant ID.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "commonAggregation": {
      "default": "HOUR",
      "description": " - HOUR: Hour.\n - DAY: Day.\n - MONTH: Month.\n - MINUTE: Minute.",
      "enum": [
        "HOUR",
        "DAY",
        "MONTH",
        "MINUTE"
      ],
      "type": "string"
    },
    "commonDeviceClass": {
      "default": "CLASS_A",
      "description": " - CLASS_A: Class-A.\n - CLASS_B: Class-B.\n - CLASS_C: Class-C.",
      "enum": [
        "CLASS_A",
        "CLASS_B",
        "CLASS_C"
      ],
      "type": "string"
    },
    "commonJoinServerContext": {
      "description": "Join-Server context.",
      "properties": {
        "appSKey": {
          "$ref": "#/definitions/commonKeyEnvelope",
          "description": "AppSKey envelope."
        },
        "sessionKeyId": {
          "description": "Session-key ID.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "commonKeyEnvelope": {
      "properties": {
        "aesKey": {
          "description": "AES key (when the kek_label is set, this value must first be decrypted).",
          "format": "byte",
          "type": "string"
        },
        "kekLabel": {
          "description": "KEK label.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "commonLocation": {
      "properties": {
        "accuracy": {
          "description": "Accuracy.",
          "format": "float",
          "type": "number"
        },
        "altitude": {
          "description": "Altitude.",
          "format": "double",
          "type": "number"
        },
        "latitude": {
          "description": "Latitude.",
          "format": "double",
          "type": "number"
        },
        "longitude": {
          "description": "Longitude.",
          "format": "double",
          "type": "number"
        },
        "source": {
          "$ref": "#/definitions/commonLocationSource",
          "description": "Location source."
        }
      },
      "type": "object"
    },
    "commonLocationSource": {
      "default": "UNKNOWN",
      "description": " - UNKNOWN: Unknown.\n - GPS: GPS.\n - CONFIG: Manually configured.\n - GEO_RESOLVER_TDOA: Geo resolver (TDOA).\n - GEO_RESOLVER_RSSI: Geo resolver (RSSI).\n - GEO_RESOLVER_GNSS: Geo resolver (GNSS).\n - GEO_RESOLVER_WIFI: Geo resolver (WIFI).",
      "enum": [
        "UNKNOWN",
        "GPS",
        "CONFIG",
        "GEO_RESOLVER_TDOA",
        "GEO_RESOLVER_RSSI",
        "GEO_RESOLVER_GNSS",
        "GEO_RESOLVER_WIFI"
      ],
      "type": "string"
    },
    "commonMacVersion": {
      "default": "LORAWAN_1_0_0",
      "enum": [
        "LORAWAN_1_0_0",
        "LORAWAN_1_0_1",
        "LORAWAN_1_0_2",
        "LORAWAN_1_0_3",
        "LORAWAN_1_0_4",
        "LORAWAN_1_1_0"
      ],
      "type": "string"
    },
    "commonMetric": {
      "properties": {
        "datasets": {
          "description": "Datasets.",
          "items": {
            "$ref": "#/definitions/commonMetricDataset"
          },
          "type": "array"
        },
        "kind": {
          "$ref": "#/definitions/commonMetricKind",
          "description": "Kind."
        },
        "name": {
          "description": "Name.",
          "type": "string"
        },
        "timestamps": {
          "description": "Timestamps.",
          "items": {
            "format": "date-time",
            "type": "string"
          },
          "type": "array"
        }
      },
      "type": "object"
    },
    "commonMetricDataset": {
      "properties": {
        "data": {
          "description": "Data.\nEach value index corresponds with the same timestamp index of the Metric.",
          "items": {
            "format": "float",
            "type": "number"
          },
          "type": "array"
        },
        "label": {
          "description": "Label.",
          "type": "string"
        }
      },
      "type": "object"
    },
    "commonMetricKind": {
      "default": "COUNTER",
      "description": " - COUNTER: Incrementing counters that never decrease (these are not reset on each\nreading).\n - ABSOLUTE: Counters that do get reset upon reading.\n - GAUGE: E.g. a temperature value.",
      "enum": [
        "COUNTER",
        "ABSOLUTE",
        "GAUGE"
      ],
      "type": "string"
    },
    "commonRegParamsRevision": {
      "default": "A",
      "enum": [
        "A",
        "B",
        "RP002_1_0_0",
        "RP002_1_0_1",
        "RP002_1_0_2",
        "RP002_1_0_3",
        "RP002_1_0_4"
      ],
      "type": "string"
    },
    "commonRegion": {
      "default": "EU868",
      "description": "- EU868: EU868\n - US915: US915\n - CN779: CN779\n - EU433: EU433\n - AU915: AU915\n - CN470: CN470\n - AS923: AS923\n - AS923_2: AS923 with -1.80 MHz frequency offset\n - AS923_3: AS923 with -6.60 MHz frequency offset\n - AS923_4: (AS923 with -5.90 MHz frequency offset).\n - KR920: KR920\n - IN865: IN865\n - RU864: RU864\n - ISM2400: ISM2400 (LoRaWAN 2.4 GHz)",
      "enum": [
        "EU868",
        "US915",
        "CN779",
        "EU433",
        "AU915",
        "CN470",
        "AS923",
        "AS923_2",
        "AS923_3",
        "AS923_4",
        "KR920",
        "IN865",
        "RU864",
        "ISM2400"
      ],
      "type": "string"
    },
    "protobufAny": {
      "additionalProperties": {},
      "properties": {
        "@type": {
          "type": "string"
        }
      },
      "type": "object"
    },
    "protobufNullValue": {
      "default": "NULL_VALUE",
      "description": "`NullValue` is a singleton enumeration to represent the null value for the\n`Value` type union.\n\nThe JSON representation for `NullValue` is JSON `null`.\n\n - NULL_VALUE: Null value.",
      "enum": [
        "NULL_VALUE"
      ],
      "type": "string"
    },
    "rpcStatus": {
      "properties": {
        "code": {
          "format": "int32",
          "type": "integer"
        },
        "details": {
          "items": {
            "$ref": "#/definitions/protobufAny"
          },
          "type": "array"
        },
        "message": {
          "type": "string"
        }
      },
      "type": "object"
    }
  }
}