{"openapi":"3.0.3","info":{"title":"SiteHive Public API","version":"1.0.0","description":"Access environmental monitoring data from your SiteHive sites.\n\n## Pagination\n\nList endpoints accept `limit` (default 50, max 200) and `offset` (default 0) and return a `pagination` object:\n\n- `hasNext` is `true` if another page is available.\n- `totalItems` (telemetry only) is the total number of items across all pages.\n\nTo read all pages, start at `offset=0` and increase `offset` by `limit` until `hasNext` is `false`."},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"JWT"}},"schemas":{"def-0":{"type":"object","required":["token","expiry"],"properties":{"token":{"type":"string","description":"Validated token for authenticating API requests.","example":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOjE2MTgsIm5iZiI6MTc2NTUxMzY2NCwiaWF0IjoxzNjY0LCJleHAiOjE3NjU1MTcyNjR9.UHzQ8mhXZMQ3vZFWj20esbFD7pPuppO6aB2CE0I"},"expiry":{"type":"number","description":"Unix timestamp in milliseconds indicating when the token expires.","example":1767925680822}},"description":"Represents a token used to authenticate API requests.","title":"AuthorizeResponse"},"def-1":{"type":"object","required":["id","serial","type","capabilities","calibrationAt","calibrationDueAt","monitoringPointAssignments"],"properties":{"id":{"type":"string","description":"Unique identifier for the device.","example":"a665a459cbbd"},"serial":{"type":"string","description":"Serial number of the device.","example":"HEX-1234"},"type":{"type":"string","description":"The type of device.","enum":["SITEHIVE","THIRD_PARTY"],"example":"SITEHIVE"},"capabilities":{"type":"array","items":{"type":"string","enum":["NOISE","DUST","VIBRATION","WEATHER"],"example":"NOISE"},"description":"List of measurement aspects that the device can record."},"calibrationAt":{"anyOf":[{"type":"string","format":"date","description":"ISO 8601 date when the device was last calibrated.","example":"2025-08-11"},{"type":"null"}]},"calibrationDueAt":{"anyOf":[{"type":"string","format":"date","description":"ISO 8601 date when the device calibration is due.","example":"2027-08-11"},{"type":"null"}]},"monitoringPointAssignments":{"type":"array","items":{"type":"object","required":["id","name","startDate","endDate"],"properties":{"id":{"type":"string","description":"Unique identifier for the monitoring point.","example":"a665a459cbbd"},"name":{"type":"string","description":"Name of the monitoring point.","example":"East Side Monitoring"},"startDate":{"type":"string","format":"date-time","description":"ISO 8601 UTC timestamp marking when the device assignment started.","example":"2025-08-11T00:15:00Z"},"endDate":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 UTC timestamp marking when the device assignment ended. Null if still active.","example":"2025-08-30T23:59:59Z"},{"type":"null"}]}},"description":"Assignment of the device to a specific monitoring point."},"description":"List of monitoring points where the device has been assigned, with assignment periods. If the device is currently unassigned, this array will be empty."}},"description":"A device that can be assigned to monitoring points to collect measurements.","title":"DeviceResponse"},"def-2":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string"},"message":{"type":"string"},"details":{"type":"string"}},"description":"Represents an error response from the API.","title":"ErrorResponse"},"def-3":{"type":"object","required":["startDate","endDate","category","exceedances","notes"],"properties":{"startDate":{"type":"string","format":"date-time","description":"ISO 8601 UTC timestamp indicating when the event or exceedance started.","example":"2025-08-11T00:15:00Z"},"endDate":{"type":"string","format":"date-time","description":"ISO 8601 UTC timestamp indicating when the event or exceedance ended.","example":"2025-08-11T02:15:00Z"},"category":{"anyOf":[{"type":"object","required":["status","classification"],"properties":{"status":{"type":"string","description":"Status of the event, e.g., 'Reportable' or 'Non Reportable'.","example":"Reportable"},"classification":{"type":"string","description":"Classification or type of event, e.g., 'Landscaping work'.","example":"Landscaping work"}},"description":"Optional categorization of the event or exceedance.\""},{"type":"null"}]},"exceedances":{"type":"array","items":{"type":"object","required":["monitoringPointId","ruleId"],"properties":{"monitoringPointId":{"type":"string","description":"Unique identifier of the monitoring point linked to this explanation.","example":"a665a459cbbd"},"ruleId":{"type":"string","description":"Unique identifier of the rule that was triggered.","example":"a665a459cbbd"}}},"description":"List of monitoring point and rule that are associated with this explanation."},"notes":{"type":"string","description":"Notes providing context or details about the explanation.","example":"Exceedance from battery changeover."}},"description":"Represents an explanation for a measurement exceedance or notable event at a monitoring point.","title":"ExplanationResponse"},"def-4":{"type":"object","required":["id","name","latitude","longitude","deviceAssignments"],"properties":{"id":{"type":"string","description":"Unique identifier for the monitoring point.","example":"c1f0e2c5c3b9d1a0"},"name":{"type":"string","description":"The name of the monitoring point.","example":"East Side Monitoring"},"latitude":{"type":"number","format":"float","description":"Latitude coordinate of the monitoring point in decimal degrees.","example":-33.456},"longitude":{"type":"number","format":"float","description":"Longitude coordinate of the monitoring point in decimal degrees.","example":164.4545},"deviceAssignments":{"type":"array","items":{"type":"object","required":["id","serial","startDate","endDate"],"properties":{"id":{"type":"string","description":"Unique identifier for the device.","example":"a665a459cbbd"},"serial":{"type":"string","description":"Serial number of the device.","example":"HEX-011"},"startDate":{"type":"string","format":"date-time","description":"ISO 8601 UTC timestamp marking when the device assignment started.","example":"2025-08-11T00:15:00Z"},"endDate":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 UTC timestamp marking when the device assignment ended. Null if still active.","example":"2025-08-30T23:59:59Z"},{"type":"null"}]}},"description":"A device assigned to the monitoring point."},"description":"List of devices assigned to this monitoring point with their assignment periods."}},"description":"A monitoring point at a site where devices are installed to collect measurements.","title":"MonitoringPointResponse"},"def-5":{"type":"object","required":["offset","limit","hasNext"],"properties":{"offset":{"type":"integer","description":"The starting index of the returned items in the full dataset.","example":0},"limit":{"type":"integer","description":"Maximum number of items returned in this response.","example":50},"hasNext":{"type":"boolean","description":"True if another page is available, false on the last page.","example":true}},"description":"Basic pagination information for a list response.","title":"PaginationResponse"},"def-6":{"type":"object","required":["offset","limit","hasNext","totalItems"],"properties":{"offset":{"type":"integer","description":"The starting index of the returned items in the full dataset.","example":0},"limit":{"type":"integer","description":"Maximum number of items returned in this response.","example":50},"hasNext":{"type":"boolean","description":"True if another page is available, false on the last page.","example":true},"totalItems":{"type":"integer","description":"Total number of items across all pages.","example":100}},"description":"Pagination information including the total number of items available.","title":"PaginationWithTotalResponse"},"def-7":{"type":"object","required":["id","name","aspect","startDate","endDate"],"properties":{"id":{"type":"string","description":"Unique identifier for the rule.","example":"a665a459cbbd"},"name":{"type":"string","description":"The name or title of the rule.","example":"Residential Structural Limit"},"aspect":{"type":"string","description":"The aspect of the rule, e.g., 'Noise'.","example":"Noise"},"startDate":{"type":"string","format":"date-time","description":"ISO 8601 UTC timestamp indicating when the rule became active.","example":"2025-08-11T00:15:00Z"},"endDate":{"anyOf":[{"type":"string","format":"date-time","description":"ISO 8601 UTC timestamp indicating when the rule ended or was deactivated. Null if still active.","example":"2025-08-30T23:59:59Z"},{"type":"null"}]}},"description":"Represents a rule that can be applied to a monitoring point to check for exceedances or events.","title":"RuleResponse"},"def-8":{"type":"object","required":["id","name","timezone","latitude","longitude"],"properties":{"id":{"type":"string","description":"Unique identifier for the site.","example":"5994471abb01112a."},"name":{"type":"string","description":"The name of the site.","example":"Sitehive Site One"},"timezone":{"type":"string","description":"IANA timezone of the site, used for timestamp conversions.","example":"Australia/Sydney"},"latitude":{"type":"number","description":"Latitude coordinate of the site in decimal degrees.","example":-33.456},"longitude":{"type":"number","description":"Longitude coordinate of the site in decimal degrees.","example":164.4545}},"description":"A physical location or project area where environmental monitoring takes place, containing multiple monitoring points for collecting measurements like noise and dust levels.","title":"SiteResponse"},"def-9":{"type":"object","required":["timestamp","parameters"],"properties":{"timestamp":{"type":"string","format":"date-time","description":"ISO 8601 UTC timestamp indicating when the telemetry was recorded.","example":"2025-08-11T00:15:00Z"},"parameters":{"type":"array","items":{"type":"object","required":["name","description","value"],"properties":{"name":{"type":"string","description":"Name of the measured parameter. The parameters available for each aspect are listed in the telemetry endpoint description.","example":"pm2_5mc"},"description":{"type":"string","description":"What the parameter measures, including its unit.","example":"PM2.5 mass concentration, in µg/m³."},"value":{"type":"number","description":"Value of the measured parameter.","example":0.481}}},"description":"List of measured parameters for this telemetry record."}},"description":"A telemetry record representing a measurement taken by a device at a monitoring point.","title":"TelemetryResponse"},"def-10":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","example":"Bad Request"},"message":{"type":"string"},"details":{"type":"string","example":"must have required property 'token'"}},"description":"Returned when the request payload, query parameters, or path parameters fail validation..","title":"BadRequestError"},"def-11":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","example":"Forbidden"},"message":{"type":"string","example":"User is not authorized to access this resource."}},"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","title":"ForbiddenError"},"def-12":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","example":"Unauthorized"},"message":{"type":"string","example":"The provided authentication token is invalid or has expired."}},"description":"Returned when a request fails authentication due to a missing, invalid, or expired bearer token.","title":"InvalidTokenError"},"def-13":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","example":"Not Found"},"message":{"type":"string","example":"Resource does not exist"}},"description":"Returned when a requested resource does not exist or cannot be located.","title":"NotFoundError"},"def-14":{"type":"object","required":["error","message"],"properties":{"error":{"type":"string","example":"Unauthorized"},"message":{"type":"string","example":"Unauthorized: Authentication required"}},"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","title":"UnauthorizedError"}}},"paths":{"/authorize":{"post":{"summary":"Authorize","tags":["Authorize"],"description":"Represents a validated token returned by Sitehive for authenticating API requests. The response includes both the token and its expiry timestamp. The token should be included in the Authorization header as a Bearer token when making requests.","requestBody":{"content":{"application/json":{"schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string","description":"Token provided by Sitehive to the client for authentication.","example":"2ba6d01f-b4b5-4721-a388-aa138f6fb94a"}}}}},"required":true},"responses":{"200":{"description":"Represents a token used to authenticate API requests.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-0"}}}},"400":{"description":"Returned when the request payload, query parameters, or path parameters fail validation..","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-10"}}}},"401":{"description":"Returned when a request fails authentication due to a missing, invalid, or expired bearer token.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-12"}}}}}}},"/sites":{"get":{"summary":"Get sites","tags":["Sites"],"description":"Returns a list of all sites available to the authenticated user.","parameters":[{"schema":{"type":"integer","default":50,"maximum":200,"minimum":1},"in":"query","name":"limit","required":false,"description":"Maximum number of items returned in this response. (max 200)"},{"schema":{"type":"integer","default":0,"minimum":0},"in":"query","name":"offset","required":false,"description":"Number of items to skip. Increase by limit to fetch the next page."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/def-8"}},"pagination":{"$ref":"#/components/schemas/def-5"}}}}}},"401":{"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-14"}}}},"403":{"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-11"}}}}}}},"/sites/{site_id}":{"get":{"summary":"Get site information.","tags":["Sites"],"description":"Returns information about a specific site identified by its `site_id`.","parameters":[{"schema":{"type":"string"},"in":"path","name":"site_id","required":true,"description":"Unique identifier of site that needs to be fetched."}],"responses":{"200":{"description":"A physical location or project area where environmental monitoring takes place, containing multiple monitoring points for collecting measurements like noise and dust levels.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-8"}}}},"401":{"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-14"}}}},"403":{"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-11"}}}},"404":{"description":"Returned when a requested resource does not exist or cannot be located.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-13"}}}}}}},"/sites/{site_id}/monitoring-points":{"get":{"summary":"Get monitoring points","tags":["Monitoring Points"],"description":"Returns a list of all monitoring points for a given site available to the authenticated user.","parameters":[{"schema":{"type":"integer","default":50,"maximum":200,"minimum":1},"in":"query","name":"limit","required":false,"description":"Maximum number of items returned in this response. (max 200)"},{"schema":{"type":"integer","default":0,"minimum":0},"in":"query","name":"offset","required":false,"description":"Number of items to skip. Increase by limit to fetch the next page."},{"schema":{"type":"string"},"in":"path","name":"site_id","required":true,"description":"Unique identifier of site that needs to be fetched."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/def-4"}},"pagination":{"$ref":"#/components/schemas/def-5"}}}}}},"401":{"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-14"}}}},"403":{"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-11"}}}}}}},"/sites/{site_id}/monitoring-points/{monitoring_point_id}":{"get":{"summary":"Get monitoring point information","tags":["Monitoring Points"],"description":"Returns information about a specific monitoring identified by its `monitoring_point_id`.","parameters":[{"schema":{"type":"string"},"in":"path","name":"site_id","required":true,"description":"Unique identifier of site that needs to be fetched."},{"schema":{"type":"string"},"in":"path","name":"monitoring_point_id","required":true,"description":"Unique identifier of the monitoring point."}],"responses":{"200":{"description":"A monitoring point at a site where devices are installed to collect measurements.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-4"}}}},"401":{"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-14"}}}},"403":{"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-11"}}}},"404":{"description":"Returned when a requested resource does not exist or cannot be located.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-13"}}}}}}},"/sites/{site_id}/devices":{"get":{"summary":"Get devices","tags":["Devices"],"description":"Returns a list of all devices for a given site available to the authenticated user.","parameters":[{"schema":{"type":"integer","default":50,"maximum":200,"minimum":1},"in":"query","name":"limit","required":false,"description":"Maximum number of items returned in this response. (max 200)"},{"schema":{"type":"integer","default":0,"minimum":0},"in":"query","name":"offset","required":false,"description":"Number of items to skip. Increase by limit to fetch the next page."},{"schema":{"type":"string"},"in":"path","name":"site_id","required":true,"description":"Unique identifier of site that needs to be fetched."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/def-1"}},"pagination":{"$ref":"#/components/schemas/def-5"}}}}}},"401":{"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-14"}}}},"403":{"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-11"}}}}}}},"/sites/{site_id}/devices/{device_id}":{"get":{"summary":"Get device information","tags":["Devices"],"description":"Returns information about a specific device identified by its `device_id`","parameters":[{"schema":{"type":"string"},"in":"path","name":"site_id","required":true,"description":"Unique identifier of site that needs to be fetched."},{"schema":{"type":"string"},"in":"path","name":"device_id","required":true,"description":"Unique identifier of device that needs to be fetched."}],"responses":{"200":{"description":"A device that can be assigned to monitoring points to collect measurements.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-1"}}}},"401":{"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-14"}}}},"403":{"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-11"}}}},"404":{"description":"Returned when a requested resource does not exist or cannot be located.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-13"}}}}}}},"/sites/{site_id}/telemetry":{"get":{"summary":"Get telemetry data","tags":["Telemetry"],"description":"Returns telemetry records for a monitoring point, ordered by timestamp. Paginated with limit and offset; pagination.totalItems gives the total record count.\n\nEach record holds the parameters measured for the requested aspect. A parameter is omitted from a record when the device did not report it.\n\n### NOISE\n\n| Parameter | Unit | Description |\n|---|---|---|\n| `laeq` | dB | A-weighted equivalent continuous sound level over the record interval (LAeq), in dB. |\n| `lan10` | dB | A-weighted sound level exceeded for 10% of the record interval (LA10), in dB. |\n| `lan90` | dB | A-weighted sound level exceeded for 90% of the record interval (LA90), in dB. |\n| `laMax` | dB | Maximum A-weighted sound level in the record interval (LAmax), in dB. |\n| `laMin` | dB | Minimum A-weighted sound level in the record interval (LAmin), in dB. |\n\n### DUST\n\n| Parameter | Unit | Description |\n|---|---|---|\n| `pm2_5mc` | µg/m³ | PM2.5 mass concentration, in µg/m³. |\n| `pm10mc` | µg/m³ | PM10 mass concentration, in µg/m³. |\n\n### VIBRATION\n\n| Parameter | Unit | Description |\n|---|---|---|\n| `xAccVDV^4` | (m/s^1.75)^4 | Fourth power of the X-axis vibration dose value for the record period, in (m/s^1.75)^4. Sum these values across records and take the fourth root to get the VDV. |\n| `yAccVDV^4` | (m/s^1.75)^4 | Fourth power of the Y-axis vibration dose value for the record period, in (m/s^1.75)^4. Sum these values across records and take the fourth root to get the VDV. |\n| `zAccVDV^4` | (m/s^1.75)^4 | Fourth power of the Z-axis vibration dose value for the record period, in (m/s^1.75)^4. Sum these values across records and take the fourth root to get the VDV. |\n| `vdvPeriod` | seconds | Length of the period the VDV values cover, in seconds. |\n| `xPeak` | mm/s | Peak particle velocity on the X axis, in mm/s. |\n| `yPeak` | mm/s | Peak particle velocity on the Y axis, in mm/s. |\n| `zPeak` | mm/s | Peak particle velocity on the Z axis, in mm/s. |\n| `xFreq` | Hz | Dominant frequency on the X axis, in Hz. |\n| `yFreq` | Hz | Dominant frequency on the Y axis, in Hz. |\n| `zFreq` | Hz | Dominant frequency on the Z axis, in Hz. |\n| `vSum` | mm/s | Peak vector sum of the X, Y and Z particle velocities, in mm/s. |\n\n### WEATHER\n\n| Parameter | Unit | Description |\n|---|---|---|\n| `rainfall` | mm | Rainfall during the record interval, in mm. |\n| `windSpeedMax` | km/h | Maximum wind speed over the record interval, in km/h. |\n| `windSpeedMin` | km/h | Minimum wind speed over the record interval, in km/h. |\n| `windSpeedAvg` | km/h | Average wind speed over the record interval, in km/h. |\n| `windDirection` | degrees | Wind direction, in degrees clockwise from north. |\n| `temperatureMax` | °C | Maximum air temperature over the record interval, in °C. |\n| `temperatureMin` | °C | Minimum air temperature over the record interval, in °C. |\n| `temperatureAvg` | °C | Average air temperature over the record interval, in °C. |\n| `humidityMax` | % | Maximum relative humidity over the record interval, in %. |\n| `humidityMin` | % | Minimum relative humidity over the record interval, in %. |\n| `humidityAvg` | % | Average relative humidity over the record interval, in %. |\n| `pressureMax` | hPa | Maximum barometric pressure over the record interval, in hPa. Only reported by weather stations that measure pressure. |\n| `pressureMin` | hPa | Minimum barometric pressure over the record interval, in hPa. Only reported by weather stations that measure pressure. |\n| `pressureAvg` | hPa | Average barometric pressure over the record interval, in hPa. Only reported by weather stations that measure pressure. |\n| `dewPoint` | °C | Dew point, in °C. |","parameters":[{"schema":{"type":"string"},"in":"query","name":"monitoring_point_id","required":true,"description":"Unique identifier of monitoring point that needs to be fetched."},{"schema":{"type":"string","enum":["NOISE","DUST","VIBRATION","WEATHER"]},"example":"DUST","in":"query","name":"aspect","required":true,"description":"The aspect to filter monitoring points by."},{"schema":{"type":"string","format":"date-time"},"example":"2025-08-01T00:15:00Z","in":"query","name":"start_date","required":true,"description":"The start date to filter results from. Must be in ISO 8601 UTC format (YYYY-MM-DDTHH:MM:SSZ). The range between start_date and end_date must be less than or equal to 1 day."},{"schema":{"type":"string","format":"date-time"},"example":"2025-08-02T00:15:00Z","in":"query","name":"end_date","required":true,"description":"The end date to filter results. Must be in ISO 8601 UTC format (YYYY-MM-DDTHH:MM:SSZ). The range between start_date and end_date must be less than or equal to 1 day."},{"schema":{"type":"integer","default":50,"maximum":200,"minimum":1},"in":"query","name":"limit","required":false,"description":"Maximum number of items returned in this response. (max 200)"},{"schema":{"type":"integer","default":0,"minimum":0},"in":"query","name":"offset","required":false,"description":"Number of items to skip. Increase by limit to fetch the next page."},{"schema":{"type":"string"},"in":"path","name":"site_id","required":true,"description":"Unique identifier of site that needs to be fetched."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/def-9"}},"pagination":{"$ref":"#/components/schemas/def-6"}}}}}},"401":{"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-14"}}}},"403":{"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-11"}}}}}}},"/sites/{site_id}/rules":{"get":{"summary":"Get rules","tags":["Rules"],"description":"Returns a list of all rules for a given site available to the authenticated user.","parameters":[{"schema":{"type":"integer","default":50,"maximum":200,"minimum":1},"in":"query","name":"limit","required":false,"description":"Maximum number of items returned in this response. (max 200)"},{"schema":{"type":"integer","default":0,"minimum":0},"in":"query","name":"offset","required":false,"description":"Number of items to skip. Increase by limit to fetch the next page."},{"schema":{"type":"string"},"in":"path","name":"site_id","required":true,"description":"Unique identifier of site that needs to be fetched."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/def-7"}},"pagination":{"$ref":"#/components/schemas/def-5"}}}}}},"401":{"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-14"}}}},"403":{"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-11"}}}}}}},"/sites/{site_id}/rules/{rule_id}":{"get":{"summary":"Get rule information","tags":["Rules"],"description":"Returns information about a specific rule identified by its `rule_id`","parameters":[{"schema":{"type":"string"},"in":"path","name":"site_id","required":true,"description":"Unique identifier of site that needs to be fetched."},{"schema":{"type":"string"},"in":"path","name":"rule_id","required":true,"description":"Unique identifier of rule that needs to be fetched."}],"responses":{"200":{"description":"Represents a rule that can be applied to a monitoring point to check for exceedances or events.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-7"}}}},"401":{"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-14"}}}},"403":{"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-11"}}}},"404":{"description":"Returned when a requested resource does not exist or cannot be located.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-13"}}}}}}},"/sites/{site_id}/explanations":{"get":{"summary":"Get explanations","tags":["Explanations"],"description":"Returns a list of explanations for events where measurements exceeded predefined thresholds for each monitoring point.","parameters":[{"schema":{"type":"string","format":"date-time"},"example":"2025-08-01T00:15:00Z","in":"query","name":"start_date","required":true,"description":"The start date to filter results from. Must be in ISO 8601 UTC format (YYYY-MM-DDTHH:MM:SSZ). The range between start_date and end_date must be less than or equal to 1 day."},{"schema":{"type":"string","format":"date-time"},"example":"2025-08-02T00:15:00Z","in":"query","name":"end_date","required":true,"description":"The end date to filter results. Must be in ISO 8601 UTC format (YYYY-MM-DDTHH:MM:SSZ). The range between start_date and end_date must be less than or equal to 1 day."},{"schema":{"type":"integer","default":50,"maximum":200,"minimum":1},"in":"query","name":"limit","required":false,"description":"Maximum number of items returned in this response. (max 200)"},{"schema":{"type":"integer","default":0,"minimum":0},"in":"query","name":"offset","required":false,"description":"Number of items to skip. Increase by limit to fetch the next page."},{"schema":{"type":"string"},"in":"path","name":"site_id","required":true,"description":"Unique identifier of site that needs to be fetched."}],"responses":{"200":{"description":"Default Response","content":{"application/json":{"schema":{"type":"object","required":["data","pagination"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/def-3"}},"pagination":{"$ref":"#/components/schemas/def-5"}}}}}},"401":{"description":"Returned when a request attempts to access a protected resource without providing authentication credentials.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-14"}}}},"403":{"description":"Returned when an authenticated request is denied due to insufficient permissions or access rights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/def-11"}}}}}}},"/ping":{"get":{"responses":{"200":{"description":"Default Response"}}}}},"security":[{"bearerAuth":[]}],"tags":[{"name":"Authorize"},{"name":"Sites"},{"name":"Monitoring Points"},{"name":"Devices"},{"name":"Telemetry"},{"name":"Rules"},{"name":"Explanations"}]}