{
  "openapi": "3.0.1",
  "servers": [{ "url": "https://apis.<domain>" }],
  "info": { "title": "connhex-reader", "version": "1.5.0" },
  "paths": {
    "/iot/reader/channels/{chanId}/messages": {
      "get": {
        "summary": "Retrieves channel messages",
        "description": "Retrieves a list of messages sent to a specific channel.\n\nRequired Permission:\n\n - Resource: ```core:channels:{id}```\n\n - Action: ```core:channels:subscribe```",
        "tags": ["Messages"],
        "parameters": [
          { "$ref": "#/components/parameters/ChanId" },
          { "$ref": "#/components/parameters/Limit" },
          { "$ref": "#/components/parameters/Offset" },
          { "$ref": "#/components/parameters/From" },
          { "$ref": "#/components/parameters/To" },
          { "$ref": "#/components/parameters/Publisher" },
          { "$ref": "#/components/parameters/Format" },
          { "$ref": "#/components/parameters/Subtopic" },
          { "$ref": "#/components/parameters/Name" },
          { "$ref": "#/components/parameters/Value" },
          { "$ref": "#/components/parameters/BoolValue" },
          { "$ref": "#/components/parameters/StringValue" },
          { "$ref": "#/components/parameters/DataValue" },
          { "$ref": "#/components/parameters/Ds" },
          { "$ref": "#/components/parameters/Dsf" },
          { "$ref": "#/components/parameters/Dsv" }
        ],
        "responses": {
          "200": { "$ref": "#/components/responses/MessagesPageRes" },
          "400": { "description": "Bad request." },
          "401": { "description": "Unauthorized." },
          "500": { "$ref": "#/components/responses/ServiceError" }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "MessagesPage": {
        "type": "object",
        "properties": {
          "total": {
            "type": "number",
            "description": "Total number of items that are present on the system."
          },
          "offset": {
            "type": "number",
            "description": "Number of items that were skipped during retrieval."
          },
          "limit": {
            "type": "number",
            "description": "Size of the subset that was retrieved."
          },
          "messages": {
            "type": "array",
            "minItems": 0,
            "uniqueItems": true,
            "items": {
              "type": "object",
              "properties": {
                "channel": {
                  "type": "integer",
                  "description": "Unique channel id."
                },
                "publisher": {
                  "type": "integer",
                  "description": "Unique publisher id."
                },
                "protocol": {
                  "type": "string",
                  "description": "Protocol name."
                },
                "name": {
                  "type": "string",
                  "description": "Measured parameter name."
                },
                "unit": {
                  "type": "string",
                  "description": "Value unit."
                },
                "value": {
                  "type": "number",
                  "description": "Measured value in number."
                },
                "stringValue": {
                  "type": "string",
                  "description": "Measured value in string format."
                },
                "boolValue": {
                  "type": "boolean",
                  "description": "Measured value in boolean format."
                },
                "dataValue": {
                  "type": "string",
                  "description": "Measured value in binary format."
                },
                "valueSum": {
                  "type": "number",
                  "description": "Sum value."
                },
                "time": {
                  "type": "number",
                  "description": "Time of measurement."
                },
                "updateTime": {
                  "type": "number",
                  "description": "Time of updating measurement."
                }
              }
            }
          }
        }
      }
    },
    "parameters": {
      "ChanId": {
        "name": "chanId",
        "description": "Unique channel identifier.",
        "in": "path",
        "schema": { "type": "string", "format": "uuid" },
        "required": true
      },
      "Limit": {
        "name": "limit",
        "description": "Size of the subset to retrieve.",
        "in": "query",
        "schema": {
          "type": "integer",
          "default": 10,
          "maximum": 1500,
          "minimum": 1
        },
        "required": false
      },
      "Offset": {
        "name": "offset",
        "description": "Number of items to skip during retrieval.",
        "in": "query",
        "schema": { "type": "integer", "default": 0, "minimum": 0 },
        "required": false
      },
      "From": {
        "name": "from",
        "description": "Message time in Unix epoch seconds. The integer part represents whole seconds; the fractional part provides sub-second precision.",
        "example": 1744243200.183767,
        "in": "query",
        "schema": { "type": "number" },
        "required": false
      },
      "To": {
        "name": "to",
        "description": "Message time in Unix epoch seconds. The integer part represents whole seconds; the fractional part provides sub-second precision.",
        "example": 1744243200.183767,
        "in": "query",
        "schema": { "type": "number" },
        "required": false
      },
      "Publisher": {
        "name": "publisher",
        "description": "Unique thing identifier (also known as \"Connhex ID\").",
        "in": "query",
        "schema": { "type": "string", "format": "uuid" },
        "required": false
      },
      "Format": {
        "name": "format",
        "description": "Message type. For more information, please check the official [CMP doc](https://connhex.com/docs/core/connhex-message-policy#components).",
        "in": "query",
        "schema": {
          "type": "string",
          "default": "messages",
          "enum": ["messages", "params", "infos", "metrics"],
          "format": "string"
        },
        "required": false
      },
      "Subtopic": {
        "name": "subtopic",
        "description": "Message subtopic.",
        "in": "query",
        "schema": { "type": "string", "format": "string" },
        "required": false
      },
      "Name": {
        "name": "name",
        "description": "SenML message name.\n\n_Only available for SenML messages_.",
        "in": "query",
        "schema": { "type": "string" },
        "required": false
      },
      "Value": {
        "name": "v",
        "description": "SenML message value.\n\n_Only available for SenML messages_.",
        "in": "query",
        "schema": { "type": "string" },
        "required": false
      },
      "BoolValue": {
        "name": "vb",
        "description": "SenML message bool value.\n\n_Only available for SenML messages_.",
        "in": "query",
        "schema": { "type": "boolean" },
        "required": false
      },
      "StringValue": {
        "name": "vs",
        "description": "SenML message string value.\n\n_Only available for SenML messages_.",
        "in": "query",
        "schema": { "type": "string" },
        "required": false
      },
      "DataValue": {
        "name": "vd",
        "description": "SenML message data value.\n\n_Only available for SenML messages_.",
        "in": "query",
        "schema": { "type": "string" },
        "required": false
      },
      "Comparator": {
        "name": "comparator",
        "description": "Value comparison operator.\n\n_Only available for SenML messages_.",
        "in": "query",
        "schema": {
          "type": "string",
          "default": "eq",
          "enum": ["eq", "lt", "le", "gt", "ge"]
        },
        "required": false
      },
      "Ds": {
        "name": "ds",
        "description": "Data decimation granularity. Format: `{number}{s|m|h|d|w|M|y}`.\n\n_Only available for SenML messages_.",
        "in": "query",
        "schema": { "type": "string" },
        "required": false
      },
      "Dsf": {
        "name": "dsf",
        "description": "Data decimation algorithm.\n\n_Only available for SenML messages_.",
        "in": "query",
        "schema": {
          "type": "string",
          "enum": ["max", "min", "avg", "sum", "stddev", "variance"]
        },
        "required": false
      },
      "Dsv": {
        "name": "dsv",
        "description": "Data decimation type. `v`: number, `vb`: boolean.\n\n_Only available for SenML messages_.",
        "in": "query",
        "schema": { "type": "string", "enum": ["v", "vb"] },
        "required": false
      }
    },
    "responses": {
      "MessagesPageRes": {
        "description": "Data retrieved.",
        "content": {
          "application/json": {
            "schema": { "$ref": "#/components/schemas/MessagesPage" }
          }
        }
      },
      "ServiceError": { "description": "Unexpected server error." }
    },
    "securitySchemes": {
      "$ref": "../../../common.json#/components/securitySchemes"
    }
  },
  "security": [{ "chx_auth_session": [] }, { "bearer": [] }]
}
