EcovoltEcovolt
Sign out
  • API Keys
  • Documentation
  • API Reference
Information
UsageHistory
Usage History - Device-Level Retrieval & Analytics
Usage History - Usage Retrieval (System/Tenant/Zone/Room)
MCB
MCB - Management
Environment Sensor - Management
Environment Sensor - Threshold Groups
DistributionBox
Distribution Box - Management
Schemas
powered by Zudoku
Ecovolt API - Sandbox (Read-Only) Endpoints
Ecovolt API - Sandbox (Read-Only) Endpoints

Schemas


MediaType

string · enum
Enum values:
image
video

Type of media asset (image or video)

ReleaseResponseBodyDto

releaseDescription
​string · required

Release Description for current release page

Example: We are excited to announce the release of version 1.2.0...
assetKey
​string · required

S3 object key for the release media asset

Example: releases/123e4567-e89b-12d3-a456-426614174000.mp4
assetType
​string · enum · required

Type of media asset (image or video)

Enum values:
image
video
Example: video
assetUrl
​string · required

Url to access the media asset

Example: https://cdn.example.com/releases/123e4567-e89b-12d3-a456-426614174000.mp4
ctaLabel
​string

Optional call-to-action button label

Example: Open Notification Settings
ctaUrl
​string

Optional call-to-action URL. Use {systemId} as a placeholder for the active system.

Example: /system/{systemId}/system-settings/notification-settings
ctaIsExternal
​boolean

Whether the CTA link should open in a new tab (external) or navigate within the app.

Example: false

ReleaseResponseDto

_id
​string · required

Unique identifier for the release

Example: 507f1f77bcf86cd799439011
releaseTitle
​string · required

Release Title for current global operation

Example: New Release v1.2.0
​object[] · required

Array of objects containing respective descriptions and media for the release.

ReleaseBodyDto

releaseDescription
​string · required

Release description for current release page

Example: We are excited to announce the release of version 1.2.0...
file
​string
existingAssetKey
​string

Existing S3 object key for the release media asset

ctaLabel
​string

Optional call-to-action button label

Example: Open Notification Settings
ctaUrl
​string

Optional call-to-action URL. Use {systemId} as a placeholder for the active system.

Example: /system/{systemId}/system-settings/notification-settings
ctaIsExternal
​boolean

Whether the CTA link should open in a new tab (external) or navigate within the app.

Example: false

ReleaseDto

releaseTitle
​string · required

Release Title for current global operation

Example: New Release v1.0.0
​object[] · required

Array of objects containing respective descriptions and media for the release.

CreateManufacturerApiKeyDto

label
​string · required

Human-readable label for this key

Example: Factory Line A

ManufacturerApiKeyCreatedResponseDto

_id
​string · required
label
​string · required
keyPrefix
​string · required

First 8 chars of the key (for identification only)

Example: mfr_a1b2
enabled
​boolean · required
createdAt
​string · date-time · required
updatedAt
​string · date-time · required
key
​string · required

Full API key — shown once only, store it securely

Example: mfr_a1b2c3d4-e5f6-7890-abcd-ef1234567890

ManufacturerApiKeyResponseDto

_id
​string · required
label
​string · required
keyPrefix
​string · required

First 8 chars of the key (for identification only)

Example: mfr_a1b2
enabled
​boolean · required
createdAt
​string · date-time · required
updatedAt
​string · date-time · required

DeviceType

string · enum
Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL

Type of device (PLUG, MCB, etc.)

UsageHistoryHour

_id
​string · required

Primary ID of the UsageHistoryHour

Example: 64b7f1e6f9c9d4e5b8a9f7c3
hour
​number · required

No. What Hour (E.g. 7 means 0700 - 0800)

Example: 7
onStatus
​string · enum · required

Status of the Plug (ON / OFF)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
actualDate
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
macId
​string · required

MAC ID of the device

Example: 1092384701928347
device
​string · required

Reference to the device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
wifiStrength
​number

WiFi signal strength at the time of the hourly record

Example: -65

UsageHistoryDay

_id
​string · required

Primary ID of the UsageHistoryDay

Example: 64b7f1e6f9c9d4e5b8a9f7c3
​object[] · required

Usage History of the device (Hourly)

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
macId
​string · required

MAC ID of the device

Example: 1092384701928347
device
​string · required

Reference to the device

Example: 64b7f1e6f9c9d4e5b8a9f7c3

UsageHistoryDayWithCostBreakdownDto

date
​string · required

No. Hour of the Usage History

Example: 2023-03-15
totalEnergyUsage
​number · required

Total Energy Usage in a Day (kWh)

Example: 12.48
cost
​number · required

Energy cost for this day in dollars. Zero (0) if no tariff rate is configured for this day.

Example: 23.1
totalEnergyUsageA
​number

Energy Usage on phase A in a Day (kWh)

Example: 4.1
totalEnergyUsageB
​number

Energy Usage on phase B in a Day (kWh)

Example: 4.6
totalEnergyUsageC
​number

Energy Usage on phase C in a Day (kWh)

Example: 3.78
activeEnergy
​number

Active Energy consumed in a Day (Wh)

Example: 12480
reactiveEnergy
​number

Reactive Energy consumed in a Day (VARh)

Example: 4320
apparentEnergy
​number

Apparent Energy consumed in a Day (VAh)

Example: 13200
tariffRate
​null | number

Tariff rate applied for this day in cents per kWh/L. Null if no tariff rate is configured.

Example: 10

UsageHistoryDayBreakdownDto

date
​string · required

No. Hour of the Usage History

Example: 2023-03-15
totalEnergyUsage
​number · required

Total Energy Usage in a Day (kWh)

Example: 12.48
totalEnergyUsageA
​number

Energy Usage on phase A in a Day (kWh)

Example: 4.1
totalEnergyUsageB
​number

Energy Usage on phase B in a Day (kWh)

Example: 4.6
totalEnergyUsageC
​number

Energy Usage on phase C in a Day (kWh)

Example: 3.78
activeEnergy
​number

Active Energy consumed in a Day (Wh)

Example: 12480
reactiveEnergy
​number

Reactive Energy consumed in a Day (VARh)

Example: 4320
apparentEnergy
​number

Apparent Energy consumed in a Day (VAh)

Example: 13200

UsageHistoryHourBreakdownDto

hour
​number · required

No. Hour of the Usage History

Example: 7
totalEnergyUsage
​number · required

Total Energy Usage in a Hour (kWh)

Example: 231
totalEnergyUsageA
​number

Energy Usage on phase A in a Hour (kWh)

Example: 0.18
totalEnergyUsageB
​number

Energy Usage on phase B in a Hour (kWh)

Example: 0.2
totalEnergyUsageC
​number

Energy Usage on phase C in a Hour (kWh)

Example: 0.14
activeEnergy
​number

Active Energy consumed in a Hour (Wh)

Example: 520
reactiveEnergy
​number

Reactive Energy consumed in a Hour (VARh)

Example: 180
apparentEnergy
​number

Apparent Energy consumed in a Hour (VAh)

Example: 550

UsageHistoryHourWithTariffResponseDto

​object[] · required

Array of hourly usage data

Example: [{"hour":0,"totalEnergyUsage":1.2},{"hour":1,"totalEnergyUsage":1.5}]
currentTariffRate
​null | number

Current tariff rate in cost per kWh. Null if no tariff rate is configured. Useful for frontend calculations.

Example: 0.25

DeviceStatus

string · enum
Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE

Status of the device (ON / OFF)

UsageHistoryEnergyRealtimeDto

onStatus
​string · enum · required

Status of the device (ON / OFF)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01T00:00:00.000Z
current
​number · required

Current in Amperes (A)

Example: 2.5
voltage
​number · required

Voltage in Volts (V)

Example: 230
powerFactor
​number · required

Power factor (0-1)

Example: 0.9
power
​number · required

Power in Watts (W)

Example: 517.5
voltageA
​number

Phase A voltage (V)

voltageB
​number

Phase B voltage (V)

voltageC
​number

Phase C voltage (V)

currentA
​number

Phase A current (A)

currentB
​number

Phase B current (A)

currentC
​number

Phase C current (A)

activePowerA
​number

Phase A active power (W)

activePowerB
​number

Phase B active power (W)

activePowerC
​number

Phase C active power (W)

reactivePowerA
​number

Phase A reactive power (VAR)

reactivePowerB
​number

Phase B reactive power (VAR)

reactivePowerC
​number

Phase C reactive power (VAR)

apparentPowerA
​number

Phase A apparent power (VA)

apparentPowerB
​number

Phase B apparent power (VA)

apparentPowerC
​number

Phase C apparent power (VA)

powerFactorA
​number

Phase A power factor (0-1)

powerFactorB
​number

Phase B power factor (0-1)

powerFactorC
​number

Phase C power factor (0-1)

frequency
​number

Line frequency (Hz)

rssi
​number

WiFi RSSI value at the time of the reading (dBm)

Example: -65

RateSource

string · enum
Enum values:
SYSTEM
TENANT
ZONE
ROOM
NATIONAL_DEFAULT

Scope level that supplied the rate. Null when no level of the scope chain has a rate and the national default was used.

PeriodCostResolution

string · enum
Enum values:
REALTIME
HOUR

Record tier the figure was integrated from

PeriodCostProjectionDto

dailyKWh
​number · required
dailyCost
​number · required
monthlyKWh
​number · required
monthlyCost
​number · required
yearlyKWh
​number · required
yearlyCost
​number · required

DevicePeriodCostResponseDto

kWh
​number · required

Energy consumed by the device over the selected period

Example: 1.84
cost
​number · required

Cost of the selected period, in dollars

Example: 0.55
costPerKWh
​number · required

Tariff rate applied, in cents per kWh

Example: 29.88
resolution
​string · enum · required

Record tier the figure was integrated from

Enum values:
REALTIME
HOUR
Example: REALTIME
windowSeconds
​number · required

Length of the selected period in seconds

Example: 28800
coveredSeconds
​number · required

Seconds of the period actually backed by data. Falls short of windowSeconds when the device was offline or reporting sparsely.

Example: 25200
coverageRatio
​number · required

coveredSeconds / windowSeconds, 0–1

Example: 0.875
sampleCount
​number · required

Number of source records in the period

Example: 476
​object · required

Projection assuming this rate of draw continues around the clock.

​object · required

Projection assuming this exact period repeats once per day — the figure to read as "savings if scheduled off".

rateSource
​string · enum

Scope level that supplied the rate. Null when no level of the scope chain has a rate and the national default was used.

Enum values:
SYSTEM
TENANT
ZONE
ROOM
NATIONAL_DEFAULT
Example: ZONE
avgPowerW
​number

Mean power across the covered part of the period, in watts. Realtime resolution only.

Example: 263.1
peakPowerW
​number

Highest instantaneous power in the period, in watts. Realtime resolution only.

Example: 1420.5

McbRealtimeDataPointDto

createdAt
​string · date-time · required
power
​number · required

Summed power at this timestamp in Watts (W)

Example: 200

McbRealtimeSeriesDto

measurementType
​string · required

MCB measurement type for this series, or "COMBINED" for the total across all types

Example: SSO
​object[] · required
max
​number

Maximum power value across all data points in this series (W). Only present for the COMBINED series.

Example: 500
average
​number

Average power value across all data points in this series (W). Only present for the COMBINED series.

Example: 250

McbMeasurementType

string · enum
Enum values:
SSO
LIGHTS_FANS
LIGHTS
FANS
AIRCON
POWER_OUTLETS
GENERAL
COMBINED

Measurement type, for MCBs only

DeviceRealtimeSeriesDto

deviceId
​string · required
deviceName
​string · required
deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
​object[] · required
max
​number · required

Peak power in the range (W)

average
​number · required

Mean power across the range (W)

measurementType
​string · enum

Measurement type, for MCBs only

Enum values:
SSO
LIGHTS_FANS
LIGHTS
FANS
AIRCON
POWER_OUTLETS
GENERAL
COMBINED

McbRealtimeResponseDto

​object[] · required

One time-series per MCB measurement type found in the room or zone, plus a COMBINED series that sums all types

​object[]

Per-device breakdown of the same range, for charting the selection split out. Present only on endpoints that provide it. A phase child rolls up into its parent clamp, since the rows belong to the clamp.

DevicesRealtimeRequestDto

deviceIds
​string[] · maxItems: 20 · required

Device ids to read. PLUG and MCB only — other types write no energy realtime rows. Max 20: each id widens a high-frequency time-series scan.

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]
from
​string · required

Range start

Example: 2026-09-01
till
​string · required

Range end

Example: 2026-09-02

RoomMcbAiInsightPossibleDeviceDto

device
​string · required
reason
​string · required

RoomMcbAiInsightResponseDto

summary
​string · required

One-liner summary of room energy behaviour

Example: This room shows signs of an overnight portable AC and a mini fridge drawing constant baseline power.
​object[] · required

List of predicted devices and why

DeviceEnergyDto

energy
​number · required

Total energy consumed by the device in watt-hours.

Example: 231

UsageWithCostResponseDto

totalEnergyUsage
​number · required

Total energy usage in kWh

Example: 125.5
totalCost
​null | number

Total cost based on current tariff rate. Null if no tariff rate is configured.

Example: 31.375
tariffRate
​null | number

Current tariff rate in cost per kWh. Null if no tariff rate is configured.

Example: 0.25

TelemetryHourSmartSwitchResponseDto

hour
​number · required

Hour of the day (0–23)

Example: 7
onStatus
​string · enum · required

Device on/off status for this hour

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
createdAt
​string · date-time · required

Record creation timestamp

Example: 2024-01-15T07:10:00.000Z
downTime
​number

Total downtime in milliseconds for this hour (3600000 = full hour down)

Example: 1800000
gangSwitchStatus
​number[]

Gang switch states reported by the device (array index = gang index, 1 = ON, 0 = OFF)

Example: [1,0,1]
actualDate
​string · date-time

Actual date this hourly record is for

Example: 2024-01-15T07:00:00.000Z

TelemetryAirconControlRealtimeResponseDto

onStatus
​string · enum · required

Device on/off status

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
createdAt
​string · date-time · required

Record creation timestamp

ambientTemperature
​number

Ambient temperature in Celsius

Example: 24.5
ambientHumidity
​number

Ambient humidity percentage

Example: 65
motionDetected
​boolean

Whether motion was detected (MAXWELL_ULTRA only)

Example: true
rssi
​number

WiFi RSSI value at the time of the reading (dBm)

Example: -65
occupancy
​number

Occupancy estimate. Absent when the device carries no people counter

Example: 7

TelemetryHourAirconControlResponseDto

hour
​number · required

Hour of the day (0–23)

Example: 7
onStatus
​string · enum · required

Device on/off status for this hour

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
createdAt
​string · date-time · required

Record creation timestamp

Example: 2024-01-15T07:10:00.000Z
downTime
​number

Total downtime in milliseconds for this hour (3600000 = full hour down)

Example: 1800000
ambientTemperature
​number

Ambient temperature in Celsius

Example: 24.5
ambientHumidity
​number

Ambient humidity percentage

Example: 65
motionDetected
​boolean

Whether motion was detected during this hour (MAXWELL_ULTRA only)

Example: true
actualDate
​string · date-time

Actual date this hourly record is for

Example: 2024-01-15T07:00:00.000Z
occupancyMedian
​number

Median occupancy over the hour. Prefer over the average — robust to walk-by bursts

Example: 6
occupancyAverage
​number

Mean occupancy over the hour, rounded

Example: 6
occupancyMin
​number

Minimum occupancy over the hour

Example: 0
occupancyMax
​number

Maximum occupancy over the hour

Example: 14
occupancySamples
​number

Settled occupancy figures that fed the hourly aggregate; a low count is a low-confidence hour

Example: 300

WifiHeatmapCellDto

hour
​number · required

Hour of day, 0-23

Example: 14
avgRssi
​number · required

Mean signal in this hour slot across the window, in dBm

Example: -67.4
minRssi
​number · required

Worst reading in this slot, in dBm — where a dropout actually starts

Example: -88
sampleHours
​number · required

Hourly snapshots that contributed. Low counts are weak evidence.

Example: 29

WifiHeatmapDeviceDto

deviceId
​string · required
name
​string · required
deviceType
​string · required
avgRssi
​number · required

Mean signal across the window, dBm

Example: -71.2
minRssi
​number · required
maxRssi
​number · required
sampleHours
​number · required

Hourly snapshots carrying a signal reading

Example: 690
missingHours
​number · required

Hours in the window with no hourly record at all. A device that stops reporting has no weak reading to show — the silence is the signal.

Example: 30
​object[] · required

Hour-of-day slots that carried data. Absent hours are omitted, not zeroed.

WifiHeatmapResponseDto

periodStart
​string · date-time · required
periodEnd
​string · date-time · required
windowHours
​number · required

Hours spanned by the window, the denominator for missingHours

Example: 720
deviceCount
​number · required

Devices in the system that reported any signal in the window

Example: 167
​object[] · required

Weakest average signal first, so dead spots sort to the top

truncated
​boolean

Present and true when devices were dropped by limit. Never silently truncated — raise limit or narrow the window.

Example: true

BoxplotDeviceType

string · enum
Enum values:
PLUG
MCB
DISTRIBUTION_BOX
ENV_SENSOR

DeviceBoxplotEntryDto

min
​number · required
q1
​number · required
median
​number · required
q3
​number · required
max
​number · required
hour
​number · required

Hour of the day (0–23)

Example: 14
deviceCount
​number · required

Number of distinct entities with data in this hour

Example: 5

DeviceBoxplotResponseDto

​object[] · required

Hourly box plot entries (only hours with data)

DeviceBoxStatsDto

min
​number · required
q1
​number · required
median
​number · required
q3
​number · required
max
​number · required

DeviceBreakdownEntryDto

deviceId
​string · required
deviceName
​string · required
value
​number · required

Aggregated value for this entity in the hour

Example: 0.42

DeviceDrilldownResponseDto

​object · required

Overall box plot statistics across all entities in the hour

​object[] · required

Per-entity breakdown

totalDevices
​number · required

TelemetryHourEnvironmentSensorResponseDto

hour
​number · required

Hour of the day this record covers (0–23, e.g. 7 = 0700–0800)

Example: 7
actualDate
​string · date-time

Date the hourly bucket belongs to

Example: 2024-01-15T07:00:00.000Z
createdAt
​string · date-time

Record creation timestamp

Example: 2024-01-15T08:00:00.000Z
wifiStrength
​number

WiFi signal strength at the time of the hourly record, in dBm

Example: -65
temperature
​number

Average temperature for the hour, in degrees Celsius

Example: 24
humidity
​number

Average humidity percentage for the hour

Example: 65
carbonDioxide
​number

Average CO2 for the hour, in ppm

Example: 400
lux
​number

Average light level for the hour, in lux (lx)

Example: 500
formaldehyde
​number

Average formaldehyde (HCHO) for the hour, in µg/m³

Example: 0.03
pm1
​number

Average PM1 for the hour, in µg/m³

Example: 1
pm2_5
​number

Average PM2.5 for the hour, in µg/m³

Example: 1
pm10
​number

Average PM10 for the hour, in µg/m³

Example: 1
totalVolatileOrganicCompounds
​number

Average total volatile organic compounds for the hour, in ppb

Example: 1
soundLevel
​number

Average sound level for the hour, in dB

Example: 1
motionDetected
​boolean

Whether motion was detected during the hour

Example: true

TelemetryEnvironmentSensorRealtimeResponseDto

createdAt
​string · date-time · required

Start timestamp of the downsampled bucket

Example: 2024-01-15T07:00:00.000Z
temperature
​number

Average temperature for the bucket, in degrees Celsius

Example: 24
humidity
​number

Average humidity percentage for the bucket

Example: 65
carbonDioxide
​number

Average CO2 for the bucket, in ppm

Example: 400
lux
​number

Average light level for the bucket, in lux (lx)

Example: 500
formaldehyde
​number

Average formaldehyde (HCHO) for the bucket, in µg/m³

Example: 0.03
pm1
​number

Average PM1 for the bucket, in µg/m³

Example: 1
pm2_5
​number

Average PM2.5 for the bucket, in µg/m³

Example: 1
pm10
​number

Average PM10 for the bucket, in µg/m³

Example: 1
totalVolatileOrganicCompounds
​number

Average total volatile organic compounds for the bucket, in ppb

Example: 1
soundLevel
​number

Average sound level for the bucket, in dB

Example: 1
motionDetected
​boolean

Whether any sample in the bucket detected motion

Example: true
rssi
​number

Average WiFi RSSI for the bucket (dBm)

Example: -65

TelemetryHourWaterMeterResponseDto

hour
​number · required

Hour of the day this record covers (0–23, e.g. 7 = 0700–0800)

Example: 7
onStatus
​string · enum · required

Device on/off status during this hour

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
netVolume
​number · required

Net water volume for this hour (L)

Example: 340
flowRate
​number · required

Average flow rate for this hour (m³/h)

Example: 5.7
velocity
​number · required

Average flow velocity for this hour (m/s)

Example: 1.12
soundSpeed
​number · required

Average speed of sound for this hour (m/s)

Example: 1489
signalQuality
​number · required

Average signal quality for this hour (no units)

Example: 82
energyFlowRate
​number

Average thermal energy flow rate for this hour (GJ/h)

Example: 0.05
energy
​number

Total thermal energy for this hour (GJ)

Example: 0.05
inletTemperature
​number

Average inlet water temperature for this hour (°C)

Example: 25
outletTemperature
​number

Average outlet water temperature for this hour (°C)

Example: 23.5
actualDate
​string · date-time

Date the hourly bucket belongs to

Example: 2024-01-15T07:00:00.000Z
createdAt
​string · date-time

Record creation timestamp

Example: 2024-01-15T08:00:00.000Z

TelemetryWaterMeterRealtimeResponseDto

onStatus
​string · enum · required

Device on/off status at the time of the reading

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
flowRate
​number · required

Flow rate at the time of the reading (m³/h)

Example: 12.4
velocity
​number · required

Flow velocity at the time of the reading (m/s)

Example: 1.25
soundSpeed
​number · required

Speed of sound in fluid at the time of the reading (m/s)

Example: 1490.5
signalQuality
​number · required

Ultrasonic signal quality (no units)

Example: 85
createdAt
​string · date-time · required

Record creation timestamp

Example: 2024-01-15T07:05:00.000Z
meterConnected
​boolean

Whether the meter is physically connected

Example: true
inletTemperature
​number

Inlet water temperature (°C)

Example: 25
outletTemperature
​number

Outlet water temperature (°C)

Example: 23.5
energyFlowRate
​number

Thermal energy flow rate (GJ/h)

Example: 0.05
rssi
​number

WiFi RSSI value at the time of the reading (dBm)

Example: -65

TelemetryDayWaterMeterResponseDto

netVolume
​number · required

Total net water volume for the day (L)

Example: 8150
flowRate
​number · required

Average flow rate for the day (m³/h)

Example: 5.7
velocity
​number · required

Average flow velocity for the day (m/s)

Example: 1.12
soundSpeed
​number · required

Average speed of sound for the day (m/s)

Example: 1489
signalQuality
​number · required

Average signal quality for the day (no units)

Example: 82
​object[] · required

Hourly rows this daily aggregate was rolled up from

energy
​number

Total thermal energy for the day (GJ)

Example: 1.2
energyFlowRate
​number

Average thermal energy flow rate for the day (GJ/h)

Example: 0.05
inletTemperature
​number

Average inlet water temperature for the day (°C)

Example: 25
outletTemperature
​number

Average outlet water temperature for the day (°C)

Example: 23.5
createdAt
​string · date-time

Start of the day this aggregate covers

Example: 2024-01-15T00:00:00.000Z
updatedAt
​string · date-time

Timestamp of the last update to this aggregate

Example: 2024-01-16T00:05:00.000Z

Role

string · enum
Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER

Administrator role defining access permissions (SUPERADMIN or ADMIN)

FrontendApp

string · enum
Enum values:
everest
base
docs
trek
emulator
beacon
bi
vista

Frontend app context for app-specific signup flows

SignUpDto

name
​string · required

Full name of the administrator

Example: John Smith
email
​string · required

Email address for the administrator account (must be unique)

Example: john.smith@ecovolt.com
password
​string

Account password (minimum 6 characters, optional for invited admins)

Example: SecurePass123
role
​string · enum

Administrator role defining access permissions (SUPERADMIN or ADMIN)

Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER
Example: ADMIN
app
​string · enum

Frontend app context for app-specific signup flows

Enum values:
everest
base
docs
trek
emulator
beacon
bi
vista
Example: base
unitName
​string

Unit name for B2C signup — used as the zone name for the user's space

Example: Block 123 #04-12
acceptedTerms
​boolean

Whether the user accepted the Terms & Conditions. Required (must be true) for base (B2C) self-signup.

Example: true
approved
​boolean

Whether the admin account is approved and can access the system

Example: true
associatedZone
​string

Optional zone ID to associate this admin with a specific zone account

Example: 64b7f1e6f9c9d4e5b8a9f7c4
associatedTenant
​string

Optional tenant ID to associate this admin with a specific tenant

Example: 64b7f1e6f9c9d4e5b8a9f7c3
associatedRoom
​string

Optional room ID to associate this admin with a specific room

Example: 64b7f1e6f9c9d4e5b8a9f7c2

LoginResponseDto

isSuccessful
​boolean · required

Indicates if the login was successful

Example: true
id
​string · required

User ID of the authenticated user

Example: 60f2e1f3f7f7f0002f00c7e9
mainSystemId
​string · required

Main system ID associated with the user

Example: 60f2e1f3f7f7f0002f00c7e9
requires2FA
​boolean · required

Indicates if the user has 2FA enabled and needs to complete 2FA verification

Example: false
token
​string

JWT access token. Returned to clients that carry their own credentials — native apps identifying as beacon, and any caller that sends no app. A web app that names itself via app receives this as an httpOnly cookie instead and gets no copy here, since a copy readable by JavaScript is what httpOnly exists to prevent. The exception is the pre-2FA step, whose short-lived 10-minute token is returned to every caller because it is not yet a session.

Example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
role
​string · enum

Role of the authenticated user

Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER
Example: ADMIN
email
​string

Email of the authenticated user

Example: admin@ecovolt.ai
associatedTenantId
​string

Associated tenant ID if user has TENANT role

Example: 60f2e1f3f7f7f0002f00c7e9
associatedUserId
​string

Associated user ID if user has USER role

Example: 60f2e1f3f7f7f0002f00c7e9
associatedRoomId
​string

Associated room ID if user has ROOM_ADMIN role

Example: 60f2e1f3f7f7f0002f00c7e9
refreshToken
​string

Refresh token used to obtain a new access token. Absent when 2FA verification is still pending, and absent for web callers, which receive it as an httpOnly cookie scoped to /api/auth instead.

Example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
expiresIn
​number

How many seconds the access token remains valid, counted from when this response was issued. Returned to every caller, including web ones that receive no token at all — a cookie client cannot read the token to find its exp, so this is how it knows when to refresh ahead of a 401. Relative rather than absolute, matching OAuth 2.0 expires_in, so a client whose clock disagrees with the server still refreshes at the right moment. A lifetime is not a credential, so exposing it costs nothing. Absent when the response carries no session (pending approval, or 2FA still to complete).

Example: 900

LoginDto

email
​string · required

Administrator email address used for authentication

Example: admin@ecovolt.com
password
​string · required

Administrator password (minimum 6 characters)

Example: SecurePass123
app
​string · enum

Frontend app identifier for role-based access control

Enum values:
everest
base
docs
trek
emulator
beacon
bi
vista
Example: everest

SignoutDto

refreshToken
​string

The refresh token to revoke alongside the access token. Optional so existing cookie/header callers keep working; when present it is blacklisted so it can no longer be exchanged.

Example: eyJhbGciOiJIUzI1NiIsInR5cCI6...

RefreshTokenDto

refreshToken
​string

The 30-day refresh token issued at login. Exchanged for a fresh access + refresh token pair. The presented token is revoked (single use). Optional: browser clients omit it and the token is read from the httpOnly refresh cookie instead.

Example: eyJhbGciOiJIUzI1NiIsInR5cCI6...

InviteDto

inviterId
​string · required

ID of the administrator sending the invitation

Example: 64b7f1e6f9c9d4e5b8a9f7c1
systemId
​string · required

System ID where the new admin will have access

Example: 64b7f1e6f9c9d4e5b8a9f7c2
name
​string · required

Full name of the person being invited

Example: Jane Doe
email
​string · required

Email address where the invitation will be sent

Example: jane.doe@ecovolt.com
role
​string · enum · required

Role to be assigned to the new administrator (SUPERADMIN or ADMIN)

Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER
Example: ADMIN
associatedZone
​string

Optional zone ID to link this admin account to an existing zone

Example: 64b7f1e6f9c9d4e5b8a9f7c4
associatedTenant
​string

Optional tenant ID to associate this admin with a specific tenant for billing

Example: 64b7f1e6f9c9d4e5b8a9f7c3
associatedRoom
​string

Optional room ID to associate this admin with a specific room

Example: 64b7f1e6f9c9d4e5b8a9f7c2

ReInviteDto

inviterId
​string · required

ID of the Admin that is inviting

Example: 1234567890abcdef12345678
systemId
​string · required

ID of the System

Example: 1234567890abcdef12345678
email
​string · required

Email of the Admin

Example: glenn@gmail.com

SignUpViaInviteDto

token
​string · required

Reset password token for the Admin

Example: reset-token-123
password
​string

Password of the Admin

Example: password
acceptedTerms
​boolean

Whether the user accepted the Terms & Conditions. Sent by the base (B2C) create-account page.

Example: true

RequestResetPasswordDto

email
​string · required

Email of the Admin

Example: glenn@gmail.com

ResetPasswordDto

token
​string · required

Reset password token for the Admin

Example: reset-token-123
newPassword
​string · required

New password for the Admin

Example: NewPassword123!

ValidateTokenResponseDto

message
​string · required
adminId
​string · required

GoogleTokenDto

credential
​string · required

Google Identity Services ID token (JWT credential) obtained client-side via the GIS button. Verified server-side against the configured Google client ID.

Example: eyJhbGciOiJSUzI1NiIsImtpZCI6...
app
​string · enum

Frontend app identifier for role-based access control

Enum values:
everest
base
docs
trek
emulator
beacon
bi
vista
Example: base

MicrosoftTokenDto

credential
​string · required

Microsoft Identity Platform id_token (JWT credential) obtained client-side via the native OAuth flow. Verified server-side against Microsoft’s JWKS for the pinned tenant.

Example: eyJhbGciOiJSUzI1NiIsImtpZCI6...
app
​string · enum

Frontend app identifier for role-based access control

Enum values:
everest
base
docs
trek
emulator
beacon
bi
vista
Example: beacon

Auth2FAResponseDto

issuer
​string · required

Issuer for the 2FA secret

Example: Ecovolt
label
​string · required

Label for the 2FA secret

Example: Ecovolt
secret
​string · required

2FA secret

Example: ABC123

Disable2FAResponseDto

message
​string · required

Success message

Example: 2FA disabled for 5 users in the system

ValidateTokenDto

token
​string · required

Disable2FASystemResponseDto

message
​string · required

Success message

Example: 2FA disabled for 5 users in the system
affectedUsers
​number · required

Number of users whose 2FA was disabled

Example: 5

AuditAction

string · enum
Enum values:
DEVICE_TOGGLE
DEVICE_RESET
SCHEDULE_SET
SCHEDULE_EDIT
SCHEDULE_DELETE
ACCOUNT_APPROVED
ACCOUNT_UNAPPROVED
NOTIFICATION_PREFERENCES_OVERRIDDEN

AuditOutcome

string · enum
Enum values:
SUCCESS
FAILURE

AuditTargetType

string · enum
Enum values:
DEVICE
EXTERNAL_DEVICE
SCHEDULE
ACCOUNT

StatusTriggerSource

string · enum
Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP

Trigger source for device actions

GetAuditLogDto

_id
​string · required

Primary ID of the audit log entry

Example: 64b7f1e6f9c9d4e5b8a9f7c3
action
​string · enum · required

The action that was performed

Enum values:
DEVICE_TOGGLE
DEVICE_RESET
SCHEDULE_SET
SCHEDULE_EDIT
SCHEDULE_DELETE
ACCOUNT_APPROVED
ACCOUNT_UNAPPROVED
NOTIFICATION_PREFERENCES_OVERRIDDEN
outcome
​string · enum · required

Whether the action succeeded or failed

Enum values:
SUCCESS
FAILURE
createdAt
​string · date-time · required

When the action occurred

Example: 2026-06-07T12:00:00Z
actorId
​string

Account that performed the action

Example: 64b7f1e6f9c9d4e5b8a9f7c3
actorName
​string

Display name of the acting account (resolved from actorId)

Example: Glenn Quah
actorRole
​string · enum

Role of the actor at the time of the action

Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER
systemId
​string

System the action was scoped to

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string

Name of the system the action was scoped to

Example: TEST SYSTEM
targetType
​string · enum

Type of resource the action targeted

Enum values:
DEVICE
EXTERNAL_DEVICE
SCHEDULE
ACCOUNT
targetId
​string

ID of the targeted resource

Example: 64b7f1e6f9c9d4e5b8a9f7c3
triggerSource
​string · enum

Trigger source for device actions

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
metadata
​object

Free-form contextual data; shape varies by action

Example: {"statusBefore":"OFF","statusAfter":"ON"}

GetAuditLogsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of audit log entries matching the query parameters

ChatRole

string · enum
Enum values:
system
user
assistant

Role of the message sender

ChatMessageDto

role
​string · enum · required

Role of the message sender

Enum values:
system
user
assistant
Example: user
content
​string · required

Content of the message

Example: What is Ecovolt?

ChatRequestDto

message
​string · required

The user's current message

Example: How do I authenticate with the API?
​object[] · required

Array of previous messages in the conversation (max 30 messages)

Example: [{"role":"user","content":"What is Ecovolt?"},{"role":"assistant","content":"Ecovolt is an energy monitoring platform..."}]

PlugCategoryResponseDto

_id
​string · required

Category ID

name
​string · required

Unique category key

Example: CHARGER
displayName
​string · required

Human-readable display name

Example: Charger
isBuiltIn
​boolean · required

Whether this is a built-in category

createdAt
​string · date-time · required

Creation timestamp

createdBy
​string

Admin who created this category

PlugCategoriesListResponseDto

​object[] · required
total
​number · required

CreatePlugCategoryDto

name
​string · required

Unique category key — must be UPPER_SNAKE_CASE

Example: STANDING_DESK
displayName
​string · required

Human-readable display name

Example: Standing Desk

UpdatePlugCategoryDto

displayName
​string

Human-readable display name

Example: Standing Desk

SurgeConfig

calculatedThresholdKwh
​number · required

Auto-calculated threshold (median) in kWh

Example: 15.5
defaultViolationCount
​number · required

Default number of violations to trigger flagging

Example: 3
defaultViolationWindow
​number · required

Default rolling window in days for violation counting

Example: 7
manualThresholdKwh
​number

Manual threshold override in kWh (if provided)

Example: 18
digestTime
​string

Local time of day (HH:mm, in the system timezone) the digest fires at. Anchors the every-N-days digest so it no longer inherits the moment the config was saved.

Example: 08:00
digestStartDate
​string

Local date (YYYY-MM-DD, system timezone) of the first digest run. Picks which day of the N-day cycle the digest lands on; defaults to the next occurrence of digestTime.

Example: 2026-09-15
sentinelPowerRangeRules
​array[]

Sentinel power range rules for suspected device classification

​object

Per-type-key overrides, keyed by the entity type key (e.g. TYPE_A). An entity whose type key has no entry here — including entities with no type key at all — uses the baseline above.

Example: {"TYPE_A":{"manualThresholdKwh":4},"TYPE_B":{"manualThresholdKwh":8},"TYPE_C":{"manualThresholdKwh":12}}

LocationObject

locationInput
​string · required

Location of the Tenant

Example: Punggol East Flyover, Punggol, Singapore 828649
type
​string · required

Type of the Tenant

Example: Point
coordinates
​number[] · required

Geolocation of the Tenant

Example: [103.7759,1.2966]

FeatureType

string · enum
Enum values:
ZONE_MANAGEMENT
ROOMS_MANAGEMENT
RELATIONSHIP_MAP
ADMIN_PANEL
TENANT_MANAGEMENT
SMART_PLUGS
AI_FEATURE
HEATMAP

Type of the feature

Feature

_id
​string · required

Primary ID of the feature

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

Name of the feature

featureType
​string · enum · required

Type of the feature

Enum values:
ZONE_MANAGEMENT
ROOMS_MANAGEMENT
RELATIONSHIP_MAP
ADMIN_PANEL
TENANT_MANAGEMENT
SMART_PLUGS
AI_FEATURE
HEATMAP
description
​string · required

Description of the feature

Example: Tenant Management of the system
createdAt
​string · date-time · required

Indicates the creation time of the feature

Example: 2026-09-25T12:46:43.033Z
updatedAt
​string · date-time · required

Indicates the last update time of the feature

Example: 2026-09-25T12:46:43.033Z

SubscriptionTier

_id
​string · required

The unique identifier of the subscription tier

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

The name of the subscription tier

Example: Premium
description
​string · required

The description of the subscription tier

Example: Access to all premium features
​object[] · required

The features included in the subscription tier

createdAt
​string · date-time · required

The date when the subscription tier was created

Example: 2023-08-01T12:00:00Z
updatedAt
​string · date-time · required

The date when the subscription tier was last updated

Example: 2023-08-01T12:00:00Z
isDeleted
​boolean · required

Indicates whether the subscription tier is deleted

Example: false
Default: false

SystemPermission

​object[] · required

Array of features that are currently enabled for this system

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
​object

Subscription tier that defines available features for the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
updatedAt
​string · date-time

Timestamp when the permission settings were last updated

Example: 2026-09-25T12:46:43.036Z
expiryDate
​string · date-time

Optional expiry date for the current permission settings

Example: 2027-09-25T12:46:43.036Z

SandboxApiGroup

string · enum
Enum values:
MCB
PLUG
ENVIRONMENT_SENSOR
WATER_METER
AIRCON_CONTROL
SMART_SWITCH
SPACE_ENERGY
WIFI

API groups that sandbox (DEVELOPER) API tokens may call on this System. Empty means none.

ScheduleExclusionType

string · enum
Enum values:
HOLIDAY
CUSTOM

Type of exclusion

CountryCode

string · enum
Enum values:
SG
PH
MY
ID

ISO country code (for holidays from API)

ExclusionMode

string · enum
Enum values:
FULL
TIMED

FULL: skip all schedules for the day. TIMED: skip recurring schedules but run devices within timeStart–timeEnd.

ScheduleExclusion

date
​string · required

ISO date format (YYYY-MM-DD)

Example: 2025-01-01
name
​string · required

Name of the exclusion day

Example: New Year's Day
type
​string · enum · required

Type of exclusion

Enum values:
HOLIDAY
CUSTOM
Example: HOLIDAY
mode
​string · enum · required

FULL: skip all schedules for the day. TIMED: skip recurring schedules but run devices within timeStart–timeEnd.

Enum values:
FULL
TIMED
Example: FULL
countryCode
​string · enum

ISO country code (for holidays from API)

Enum values:
SG
PH
MY
ID
Example: SG
timeStart
​string

Time (HH:mm) when devices turn ON. Only set when mode is TIMED.

Example: 13:00
timeEnd
​string

Time (HH:mm) when devices turn OFF. Only set when mode is TIMED.

Example: 18:00

SystemTimezone

string · enum
Enum values:
Asia/Singapore
Asia/Manila
Asia/Kuala_Lumpur
Asia/Jakarta

IANA timezone identifier for the system location. Used for scheduling and public holiday calculations.

EntityLabelPairDto

singular
​string · required

Singular form of the label

Example: Floor
plural
​string · required

Plural form of the label

Example: Floors

SystemEntityLabelsDto

​object

Custom label for the zone entity

​object

Custom label for the tenant entity

​object

Custom label for the room entity

System

_id
​string · required

Primary ID of the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system

Example: National University of Singapore
watchDogTimerRuleName
​string · required

Name of the Watch Dog Timer Rule for the system

Example: watchDogTimerRuleName
inActiveDevicesCronJobRuleName
​string · required

Name of the Inactive Devices Cron Job Rule for the system

Example: inActiveDevicesCronJobRuleName
remarks
​string · required

Remarks for the system

Example: Pilot program for energy monitoring
startPilotDate
​string · date-time · required

Start date of the pilot program

Example: 2024-01-01T00:00:00.000Z
endPilotDate
​string · date-time · required

End date of the pilot program

Example: 2024-12-31T23:59:59.999Z
realTimeToggleOn
​boolean · required

Real Time Toggle Status for the system

heartBeatInterval
​number · required

Heart Beat Interval for the system

​object · required

Locations of the Tenant

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
createdAdmin
​string · required

Admin which created the system (ObjectId reference)

Example: 64b7f1e6f9c9d4e5b8a9f7c3
admins
​string[] · required

System Admins of the system (ObjectId references)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
tenants
​string[] · required

Tenants of the system (ObjectId references)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
devices
​string[] · required

All IoT devices in the System (ObjectId references — Plugs, MCBs, Environment sensors, etc.)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
distributionBoxes
​string[] · required

All distribution boxes in the System (ObjectId references)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
​object · required

System permission settings including subscription tier, enabled features, and metadata

countryCode
​string · enum · required

ISO 3166-1 alpha-2 country code for the system. Determines which public holidays are available for scheduling.

Enum values:
SG
PH
MY
ID
Example: SG
timezone
​string · enum · required

IANA timezone identifier for the system location. Used for scheduling and public holiday calculations.

Enum values:
Asia/Singapore
Asia/Manila
Asia/Kuala_Lumpur
Asia/Jakarta
Example: Asia/Singapore
locked
​boolean · required

Whether the system is locked. A locked system is flagged by a SUPERADMIN (e.g. for non-payment or suspension). Toggle via PATCH /system/:systemId/lock.

Example: false
Default: false
sandboxApiGroups
​string[]

API groups that sandbox (DEVELOPER) API tokens may call on this System. Empty means none.

Enum values:
MCB
PLUG
ENVIRONMENT_SENSOR
WATER_METER
AIRCON_CONTROL
SMART_SWITCH
SPACE_ENERGY
WIFI
​object[]

Dates when recurring schedules will NOT execute

surgeMonitoringScheduleName
​string

Name of the surge monitoring daily check scheduled task rule for this system. If present, surge monitoring is enabled. If absent/undefined, monitoring is disabled.

Example: surge_monitoring_64b7f1e6f9c9d4e5b8a9f7c3_prod
surgeMonitoringDailyCheckTime
​string

Local time of day (HH:mm, in this system timezone) the daily surge check runs at. Defaults to 01:00 when unset.

Example: 01:00
surgeMonitoringDigestScheduleName
​string

Name of the surge monitoring digest scheduled task rule for this system

Example: surge_digest_64b7f1e6f9c9d4e5b8a9f7c3_prod
​object

Surge monitoring configuration by entity type (ROOM, TENANT, USER). Map keys are MonitoringEntityType enum values.

Example: {"ROOM":{"calculatedThresholdKwh":15.5,"manualThresholdKwh":18,"defaultViolationCount":3,"defaultViolationWindow":7}}
scheduleAdjustmentConfig
​object

Schedule adjustment configuration for this system. Controls automatic schedule adjustments based on user manual override patterns.

Example: {"enabled":true,"autoApplyEnabled":false,"occurrenceThreshold":5,"timeWindowMinutes":30,"minDeltaMinutes":1}
​object

Custom display labels for entity types (zone, tenant, room). Each entry has a singular and plural form. When absent, the frontend uses default names.

Tenant

_id
​string · required

Primary ID of the Tenant

Example: 64b7f1e6f9c9d4e5b8a9f7c3
tenantName
​string · required

Name of the Tenant

Example: Faculty of Engineering
remarks
​string · required

Remarks for the Plug

​object · required

Locations of the Tenant

level
​number · required

Level of the Tenant

Example: 7
energyUsage
​number · required

Energy Usage of the Tenant (Separated from the Tenants)

Example: 1000
​object · required

System of the Tenant

devices
​string[] · required

All IoT devices under the Tenant (ObjectId references — Plugs, MCBs, Environment sensors, etc.)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
distributionBoxes
​string[] · required

All distribution boxes under the Tenant (ObjectId references)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
zones
​string[] · required

Zones under the Tenant (ObjectId references)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
rooms
​string[] · required

List of Rooms assigned to the Tenant (ObjectId references)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
tenantEmail
​string

Email of the Admin

Example: glenn@gmail.com
tenantType
​string

Tenant type key — must match a valid tenant type for this system

Example: RETAIL

Zone

_id
​string · required

Primary ID of the Zone

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

Name of the Zone

Example: Glenn Quah Han Rong
email
​string · required

Email of the Zone

Example: glenn@gmail.com
remarks
​string · required

Remarks for the Zone

​object · required

Tenant tagged to zone

rooms
​string[] · required

List of Rooms assigned to the zone (ObjectId references)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
devices
​string[] · required

All IoT devices under the Zone (ObjectId references — Plugs, MCBs, Environment sensors, etc.)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
distributionBoxes
​string[] · required

All distribution boxes under the Zone (ObjectId references)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
zoneType
​string

Zone type key — must match a valid zone type for this system

Example: LABORATORY
floorPlanKey
​string

S3 key for the 2D floor plan image

Example: floor-plans/uuid.png
floorPlanUrl
​string

CDN URL for the 2D floor plan image

Example: https://cdn.ecovolt.ai/floor-plans/uuid.png
floorPlan
​string

3D floor plan design linked to this zone

floorPlanV2
​string

V2 floor plan canvas linked to this zone

Room

_id
​string · required

Primary ID of the Room

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

Name of the Room

Example: Living Room
remarks
​string · required

Remarks for the Room

devices
​string[] · required

All IoT devices in the Room (ObjectId references — Plugs, MCBs, Environment sensors, etc.)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
distributionBoxes
​string[] · required

All distribution boxes in the Room (ObjectId references)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
​object

System that the room belongs to (optional - derived from tenant if not provided)

​object

Zone tagged to room

​object

Tenant associated with the room (optional for single-tenant systems)

roomType
​string

Room type key — must match a valid room type for this system

Example: MEETING_ROOM
squareMeter
​number

Floor area of the room in square meters

Example: 25.5
floorPlanKey
​string

S3 key for the floor plan image

Example: floor-plans/abc123-def456.png
floorPlanUrl
​string

CDN URL for the floor plan image

Example: https://cdn.example.com/floor-plans/abc123-def456.png

QuietHours

enabled
​boolean · required

Whether Do Not Disturb is active for this account. On its own (no start/end) this suppresses every channel but in-app at all times; paired with start/end it scopes suppression to that window instead.

Example: true
start
​string

Quiet hours start time in HH:mm format (local to timezone). Omit alongside end for an always-on Do Not Disturb toggle instead of a scheduled window.

Example: 22:00
end
​string

Quiet hours end time in HH:mm format (local to timezone). Omit alongside start for an always-on Do Not Disturb toggle instead of a scheduled window.

Example: 07:00
timezone
​string · enum

Timezone the start/end times are evaluated in, from the supported set

Enum values:
Asia/Singapore
Asia/Manila
Asia/Kuala_Lumpur
Asia/Jakarta
Example: Asia/Singapore

NotificationPreferences

channels
​object

Which channels this account takes, across every notification type. A channel missing here falls back to NOTIFICATION_CHANNEL_DEFAULTS.

​object

Account-level Do Not Disturb. Suppresses every channel but in-app while active; in-app is never gated.

Admin

_id
​string · required

Primary ID of the Admin

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

Name of the Admin

Example: Glenn Quah Han Rong
email
​string · required

Email of the Admin (stored and matched in lowercase)

Example: glenn@gmail.com
role
​string · required

Role of the Admin (ENUM)

Example: SUPERADMIN
​object[] · required

Profile Image of the Admin

systems
​string[] · required

Systems available to use for the Admin (ObjectId references)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
approved
​boolean · required

Whether the Admin is approved

Example: true
twoFASecret
​string · required

The live 2FA secret. Its presence is what marks an account as enrolled — distinct from enable2FA, which only says 2FA is required.

Example: secret
enable2FA
​boolean · required

Indicates whether 2FA is enabled for the Admin

Example: true
createdAt
​string · date-time · required

Date when the Admin was created

Example: 2023-10-01T12:00:00Z
updatedAt
​string · date-time · required

Date when the Admin was last updated

Example: 2023-10-01T12:00:00Z
lockCount
​number · required

Number of failed login attempts for the Admin

Example: 3
password
​string

Password of the Admin

Example: password
pending
​boolean

Indicates whether the Admin's invitation is pending

Example: true
​object

Reference to the associated Room

​object

Reference to the associated Zone

​object

Reference to the associated Tenant

pendingTwoFASecret
​string

A 2FA secret that has been handed to the client but not yet proven by a valid code. Promoted to twoFASecret on first successful verification, so an abandoned setup leaves the account exactly as it was.

lastTwoFATimeStep
​number

RFC 6238 time step of the last 2FA code accepted for this account. Codes at or below it are refused, so a code observed in transit cannot be replayed for the remainder of its validity window.

passwordResetJti
​string

One-time id of the currently-valid password-reset token. Cleared once a reset succeeds so the token cannot be replayed.

sessionsValidFrom
​string · date-time

Cutoff for session validity. Any access or refresh token issued before this instant is rejected, which is how a password change evicts every existing session — including one held by an attacker. Unset means no cutoff has ever been applied.

acceptedTermsAt
​string · date-time

Timestamp when the Admin accepted the Terms & Conditions (set on base signup)

Example: 2023-10-01T12:00:00Z
​object

Everything this account chose about how it is notified — per-group channel settings and the Do Not Disturb window.

telegramChatId
​string

Telegram chat ID for this account's personal group. Paired by adding the bot to a group and sending "/connect ". When set, notifications are sent there.

Example: -1001234567890
telegramChatTitle
​string

Telegram group name/title for this account, as reported by Telegram at pairing time.

writingStylePromptedAt
​string · date-time

When this account was last asked to set up a writing style. Unset means they have never been asked.

CreateSystemDto

systemName
​string · required

Name of the system. Typically represents an organization, building, or facility using the Ecovolt platform.

Example: National University of Singapore
realTimeToggleOn
​boolean · required

Controls whether plugs in this system should send real-time energy data. When enabled, increases data transmission frequency.

Example: true
heartBeatInterval
​number · required

Interval in minutes between heartbeat signals from plugs. Determines how frequently plugs report their online status.

Example: 3
​object · required

Geographic location details of the system. Includes address, city, country, and coordinates for mapping purposes.

countryCode
​string · enum · required

ISO 3166-1 alpha-2 country code for the system. Determines which public holidays are available for scheduling.

Enum values:
SG
PH
MY
ID
Example: SG
timezone
​string · enum · required

System timezone used for scheduling and public holiday calculations. Should match the country code.

Enum values:
Asia/Singapore
Asia/Manila
Asia/Kuala_Lumpur
Asia/Jakarta
Example: Asia/Singapore
​object

Admin account assigned to manage this system. This field is auto-assigned and should not be provided manually.

subscriptionTier
​string

Unique identifier of the subscription tier to assign to this system. Determines available features and usage limits.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
costPerKWh
​number

Optional initial cost per kilowatt-hour (kWh) in cents. If provided, seeds the first tariff rate period for the system. If omitted, the system uses the national default (SP Group tariff) until a rate is configured. Example: 30.65 cents = $0.3065 per kWh.

Example: 30.65
remarks
​string

Additional notes or comments about the system. Useful for documenting special configurations or pilot program details.

Example: Pilot program for energy monitoring in campus buildings
startPilotDate
​string · date-time

Start date of the pilot program for this system. Used for tracking trial periods and generating time-based reports.

Example: 2024-01-01T00:00:00.000Z
endPilotDate
​string · date-time

End date of the pilot program for this system. After this date, the system may transition to a permanent subscription.

Example: 2025-12-31T23:59:59.999Z

GetSystemDto

_id
​string · required

Unique identifier of the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system

Example: National University of Singapore
realTimeToggleOn
​boolean · required

Real-time data toggle status for the system

Example: true
heartBeatInterval
​number · required

Heartbeat interval in minutes

Example: 5
numberOfAdmins
​number · required

Number of admins linked to the system

Example: 3
numberOfDevices
​number · required

Number of devices in the system

Example: 150
deviceOnCount
​number · required

Number of devices currently in ON status for this system.

Example: 80
deviceOffCount
​number · required

Number of devices currently in OFF status for this system.

Example: 50
deviceInactiveCount
​number · required

Number of devices currently in INACTIVE status for this system.

Example: 20
​object · required

Location details of the system

createdAt
​string · date-time · required

When the system was created

updatedAt
​string · date-time · required

When the system was last updated

deviceSpareCount
​number

Number of spare devices for this system.

Example: 3
​object

Admin who created the system

subscriptionTierName
​string

Name of the subscription tier assigned to this system

Example: Premium
subscriptionExpiryDate
​string · date-time

Expiry date of the system subscription

GetSystemsDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

List of systems

ScheduleAdjustmentConfigDto

enabled
​boolean · required

Whether schedule adjustment suggestions are enabled. If false, no suggestions will be generated.

Example: true
autoApplyEnabled
​boolean · required

Whether auto-apply is enabled after reaching threshold. If false, always require manual approval. When enabled, patterns are applied on the NEXT manual toggle after threshold.

Example: false
occurrenceThreshold
​number · min: 1 · max: 20 · required

Number of occurrences required before auto-apply. Examples: 3 = quick response, 5 = balanced, 10 = conservative

Example: 5
timeWindowMinutes
​number · min: 5 · max: 60 · required

Time window in minutes for grouping similar override times. Overrides within this window are considered the same pattern. Examples: 15 = strict, 30 = moderate, 45 = lenient

Example: 30
minDeltaMinutes
​number · min: 0 · max: 60 · required

Minimum schedule change in minutes for a suggestion to be surfaced. Suggestions that change the schedule by this many minutes or fewer are treated as no-ops and never created (e.g. turning OFF at the exact scheduled OFF time). Examples: 0 = only hide exact no-ops, 1 = default, 5 = stricter

Example: 1

GetSystemDetailDto

_id
​string · required

Unique identifier of the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system

Example: National University of Singapore
realTimeToggleOn
​boolean · required

Real-time data toggle status for the system

Example: true
heartBeatInterval
​number · required

Heartbeat interval in minutes

Example: 5
countryCode
​string · enum · required

ISO 3166-1 alpha-2 country code for the system. Determines which public holidays are available for scheduling.

Enum values:
SG
PH
MY
ID
Example: SG
timezone
​string · enum · required

IANA timezone identifier for the system location. Used for scheduling and public holiday calculations.

Enum values:
Asia/Singapore
Asia/Manila
Asia/Kuala_Lumpur
Asia/Jakarta
Example: Asia/Singapore
locked
​boolean · required

Whether the system is locked. A locked system is flagged by a SUPERADMIN (e.g. for non-payment or suspension).

Example: false
​object · required

System permission settings. For non-admin callers subscriptionTier is omitted — only featuresEnabled is returned, so the client can still gate UI on enabled features.

createdAt
​string · date-time · required

When the system was created

updatedAt
​string · date-time · required

When the system was last updated

​object

Custom display labels for entity types (zone, tenant, room). When absent, the frontend uses default names.

​object

Location details of the system. Admin-only — omitted for non-admin callers.

​object

Admin who created the system. Admin-only — omitted for non-admin callers.

admins
​string[]

System admins of the system (ObjectId references). Admin-only — omitted for non-admin callers.

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
tenants
​string[]

Tenants of the system (ObjectId references). Admin-only — omitted for non-admin callers.

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
devices
​string[]

All IoT devices in the system (ObjectId references). Admin-only — omitted for non-admin callers.

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
distributionBoxes
​string[]

All distribution boxes in the system (ObjectId references). Admin-only — omitted for non-admin callers.

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
systemEnergyReport
​string

System-level energy report reference. Admin-only — omitted for non-admin callers.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
remarks
​string

Remarks for the system. Admin-only.

Example: Pilot program for energy monitoring
startPilotDate
​string · date-time

Start date of the pilot program. Admin-only.

endPilotDate
​string · date-time

End date of the pilot program. Admin-only.

​object[]

Dates when recurring schedules will NOT execute. Admin-only.

watchDogTimerRuleName
​string

Name of the Watch Dog Timer Rule for the system. Admin-only (internal infrastructure identifier).

inActiveDevicesCronJobRuleName
​string

Name of the Inactive Devices Cron Job Rule for the system. Admin-only (internal infrastructure identifier).

surgeMonitoringScheduleName
​string

Name of the surge monitoring daily check scheduled task rule. Admin-only (internal infrastructure identifier).

surgeMonitoringDigestScheduleName
​string

Name of the surge monitoring digest scheduled task rule. Admin-only (internal infrastructure identifier).

​object

Surge monitoring configuration by entity type (ROOM, TENANT, USER). Admin-only.

​object

Schedule adjustment configuration for this system. Admin-only.

TenantEnergyUsageDto

tenantId
​string · required

Unique identifier of the tenant

Example: 64b7f1e6f9c9d4e5b8a9f7c1
tenantName
​string · required

Name of the tenant

Example: Faculty of Engineering
energyUsage
​number · required

Total energy usage in kilowatt-hours (kWh) for the specified period

Example: 125.45

GetTenantEnergyUsageResponseDto

systemId
​string · required

System ID for which tenant energy usage was calculated

Example: 64b7f1e6f9c9d4e5b8a9f7c1
days
​number · required

Number of days the energy usage was calculated over

Example: 7
startDate
​string · required

Start date of the energy usage period (ISO 8601 format)

Example: 2024-01-15T00:00:00.000Z
endDate
​string · required

End date of the energy usage period (ISO 8601 format)

Example: 2024-01-22T00:00:00.000Z
​object[] · required

List of tenants with their energy usage data

totalTenants
​number · required

Total number of tenants found in this system

Example: 5
totalEnergyUsage
​number · required

Total energy usage across all tenants in kWh

Example: 547.32

CreateTariffRateDto

costPerKWh
​number · min: 0 · required

Cost in cents per kWh

Example: 30.65
effectiveFrom
​string · required

Date when this tariff rate becomes effective (ISO 8601 format)

Example: 2024-01-01T00:00:00.000Z
notes
​string

Notes or reason for this tariff rate change

Example: Annual rate adjustment for 2024

TariffScope

string · enum
Enum values:
SYSTEM
TENANT
ZONE
ROOM

Scope level this rate applies to

GetTariffRatePeriodDto

_id
​string · required

Tariff rate period ID

Example: 507f1f77bcf86cd799439011
system
​string · required

System ID that this tariff rate applies to

Example: 507f1f77bcf86cd799439012
scopeType
​string · enum · required

Scope level this rate applies to

Enum values:
SYSTEM
TENANT
ZONE
ROOM
Example: SYSTEM
scopeId
​string · required

ID of the scope entity (system/tenant/zone/room). Equals system when scopeType is SYSTEM.

Example: 507f1f77bcf86cd799439012
costPerKWh
​number · required

Cost in cents per kWh

Example: 30.65
effectiveFrom
​string · date-time · required

Date when this tariff rate becomes effective

Example: 2024-01-01T00:00:00.000Z
createdAt
​string · date-time · required

Timestamp when this record was created

updatedAt
​string · date-time · required

Timestamp when this record was last updated

effectiveTo
​string · date-time

Date when this tariff rate expires (null means currently active)

Example: 2024-12-31T23:59:59.999Z
notes
​string

Notes or reason for this tariff rate change

Example: Annual rate adjustment for 2024
createdBy
​string

Admin who created this tariff rate

Example: 507f1f77bcf86cd799439013

GetTariffRateHistoryDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of tariff rate periods

UpdateTariffRateDto

costPerKWh
​number

Updated tariff rate in cents per kWh

Example: 32.5
effectiveFrom
​string

Updated start date for this tariff rate period

Example: 2024-01-01T00:00:00.000Z
effectiveTo
​null | string

Updated end date for this tariff rate period (null means currently active)

Example: 2024-12-31T23:59:59.999Z
notes
​string

Notes or reason for this tariff rate

Example: Updated: Annual rate adjustment for 2024 (revised)

GetEffectiveTariffRateDto

costPerKWh
​null | number · required

Effective rate in cents per kWh, or null if no rate is configured anywhere in the scope chain

Example: 40
rateSource
​string · enum · required

Where the effective rate came from: the most specific scope level with an active rate, or NATIONAL_DEFAULT when nothing is configured and the SP Group fallback applies. Null only if even the fallback is unavailable.

Enum values:
SYSTEM
TENANT
ZONE
ROOM
NATIONAL_DEFAULT
Example: ZONE
scopeId
​null | string · required

ID of the entity that owns the winning rate — the queried entity when it has its own rate, otherwise a broader ancestor. Null when no rate applies.

Example: 507f1f77bcf86cd799439013

PublicHolidayResponseDto

date
​string · required
name
​string · required
countryCode
​string · enum · required

ISO country code (for holidays from API)

Enum values:
SG
PH
MY
ID
Example: SG

CustomExclusionEntryDto

name
​string · required

Human-readable name for this exclusion

Example: Christmas Day
mode
​string · enum · required

FULL: skip all schedules for the day. TIMED: skip recurring schedules but run devices within timeStart–timeEnd.

Enum values:
FULL
TIMED
Example: FULL
date
​string

Single date in YYYY-MM-DD format. Cannot be used with startDate/endDate.

Example: 2026-12-25
startDate
​string

Range start in YYYY-MM-DD format. Must be used with endDate.

Example: 2026-12-27
endDate
​string

Range end in YYYY-MM-DD format. Must be used with startDate.

Example: 2026-12-31
type
​string · enum

Exclusion type. Defaults to CUSTOM if omitted.

Enum values:
HOLIDAY
CUSTOM
Example: CUSTOM
countryCode
​string

Country code for HOLIDAY entries (e.g. "SG"). Optional.

Example: SG
timeStart
​string

Required when mode is TIMED. Time (HH:mm, system timezone) when devices turn ON.

Example: 13:00
timeEnd
​string

Required when mode is TIMED. Time (HH:mm, system timezone) when devices turn OFF.

Example: 18:00

BulkAddCustomExclusionsDto

​object[] · required

List of exclusion entries. Each can be a full-day exclusion or a timed override.

replaceExistingOfType
​string · enum

If set, all existing exclusions of this type are removed before the new entries are inserted. Use HOLIDAY to sync public holidays without accumulating stale entries.

Enum values:
HOLIDAY
CUSTOM
Example: HOLIDAY

BulkAddCustomExclusionsResponseDto

exclusionsReplaced
​number · required

Number of existing exclusions removed (when replaceExistingOfType is set)

Example: 15
exclusionsAdded
​number · required

Number of new exclusion dates added

Example: 7
duplicatesSkipped
​number · required

Number of dates skipped because an exclusion already existed

Example: 1
timedOverridesApplied
​number · required

Number of TIMED entries processed

Example: 2
oneTimeTasksCreated
​number · required

Total one-time ON+OFF tasks created across all TIMED entries and devices

Example: 48
devicesProcessed
​number · required

Number of devices that received one-time tasks (relevant for TIMED entries)

Example: 12

RemoveExclusionResponseDto

message
​string · required
removedDate
​string · required

UpdateSystemDto

systemName
​string · required

Name of the system. Typically represents an organization, building, or facility using the Ecovolt platform.

Example: National University of Singapore
​object · required

Geographic location details of the system. Includes address, city, country, and coordinates for mapping purposes.

subscriptionTier
​string

Unique identifier of the subscription tier to assign to this system. Determines available features and usage limits.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
remarks
​string

Additional notes or comments about the system. Useful for documenting special configurations or pilot program details.

Example: Pilot program for energy monitoring in campus buildings
startPilotDate
​string

Start date of the pilot program for this system. Used for tracking trial periods and generating time-based reports.

Example: 2024-01-01T00:00:00.000Z
endPilotDate
​string

End date of the pilot program for this system. After this date, the system may transition to a permanent subscription.

Example: 2025-12-31T23:59:59.999Z
countryCode
​string · enum

ISO 3166-1 alpha-2 country code for the system. Determines which public holidays are available for scheduling.

Enum values:
SG
PH
MY
ID
Example: SG
timezone
​string · enum

System timezone used for scheduling and public holiday calculations. Should match the country code if both are provided.

Enum values:
Asia/Singapore
Asia/Manila
Asia/Kuala_Lumpur
Asia/Jakarta
Example: Asia/Singapore
​object

Custom display labels for entity types (zone, tenant, room). Each entry has a singular and plural form. When absent, the frontend falls back to default names.

HeartBeatConfigurationDto

toggleOn
​boolean · required

Controls whether plugs in this system should send real-time energy data. When enabled, increases data transmission frequency for live monitoring.

Example: true
heartBeatInterval
​number · required

Interval in minutes between heartbeat signals from plugs. Determines how frequently plugs report their online status to the system.

Example: 5

LinkAdminToSystemDto

adminId
​string · required

Unique identifier of the admin account to be linked to the system. This establishes a management relationship between the admin and the system.

Example: 64b7f1e6f9c9d4e5b8a9f7c1

LinkAdminResponseDto

​object · required

The system entity that was successfully linked to the admin account. Contains full system details including configuration and metadata.

​object · required

The admin entity that was successfully linked to the system. Contains full admin details including role and permissions.

UnlinkAdminResponseDto

​object · required

The system entity that was successfully unlinked from the admin account. Contains full system details including configuration and metadata.

​object · required

The admin entity that was successfully unlinked from the system. Contains full admin details including role and permissions.

UpdateSystemPermissionDto

subscriptionTier
​string

Unique identifier of the subscription tier to assign to this system. Changes the base feature set and limitations.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
featuresEnabled
​string[]

Array of feature identifiers to enable for this system. Overrides or extends the default features from the subscription tier.

Example: ["64b7f1e6f9c9d4e5b8a9f7c2","64b7f1e6f9c9d4e5b8a9f7c3"]
expiryDate
​string

Expiration date for the system permission. After this date, the system may lose access to certain features or services.

Example: 2025-12-31T23:59:59.999Z

SandboxApiGroupsResponseDto

groups
​string[] · required

API groups sandbox (DEVELOPER) API tokens may call on this System. Empty means none.

Enum values:
MCB
PLUG
ENVIRONMENT_SENSOR
WATER_METER
AIRCON_CONTROL
SMART_SWITCH
SPACE_ENERGY
WIFI
Example: ["MCB","ENVIRONMENT_SENSOR"]

UpdateSandboxApiGroupsDto

groups
​string[] · required

API groups sandbox (DEVELOPER) API tokens may call on this System. Replaces the whole list; an empty list disables sandbox API access.

Enum values:
MCB
PLUG
ENVIRONMENT_SENSOR
WATER_METER
AIRCON_CONTROL
SMART_SWITCH
SPACE_ENERGY
WIFI
Example: ["MCB","ENVIRONMENT_SENSOR"]

UpdateScheduleAdjustmentConfigDto

enabled
​boolean

Whether schedule adjustment suggestions are enabled

Example: true
autoApplyEnabled
​boolean

Whether auto-apply is enabled (applies on next manual toggle after threshold)

Example: false
occurrenceThreshold
​number · min: 1 · max: 20

Number of occurrences required before auto-apply (1-20)

Example: 5
timeWindowMinutes
​number · min: 5 · max: 60

Time window in minutes for grouping similar override times (5-60)

Example: 30
minDeltaMinutes
​number · min: 0 · max: 60

Minimum schedule change in minutes for a suggestion to be surfaced (0-60). Suggestions changing the schedule by this many minutes or fewer are skipped.

Example: 1

ToggleSystemLockDto

locked
​boolean · required

Set to true to lock the system, false to unlock it. Only accessible to SUPERADMIN users.

Example: true

ToggleSystemLockResponseDto

systemId
​string · required

System ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
locked
​boolean · required

Whether the system is now locked.

Example: true
message
​string · required

Confirmation message

Example: System Acme HQ locked.

CronJobType

string · enum
Enum values:
inactive-devices-snapshot
invoice-generation
hourly-update-watchdog
heartbeat-watchdog
calendar-ics-sync
calendar-webhook-renewal
forecast-nightly
forecast-retrain

Type of cron job to schedule

ScheduleCronJobRequestDto

jobType
​string · enum · required

Type of cron job to schedule

Enum values:
inactive-devices-snapshot
invoice-generation
hourly-update-watchdog
heartbeat-watchdog
calendar-ics-sync
calendar-webhook-renewal
forecast-nightly
forecast-retrain
Example: inactive-devices-snapshot

ScheduleCronJobResponseDto

jobType
​string · enum · required

Type of cron job

Enum values:
inactive-devices-snapshot
invoice-generation
hourly-update-watchdog
heartbeat-watchdog
calendar-ics-sync
calendar-webhook-renewal
forecast-nightly
forecast-retrain
Example: inactive-devices-snapshot
scheduleName
​string · required

AWS EventBridge schedule name

Example: inactive_devices_snapshot_daily_production
message
​string · required

Success message

Example: Cron job scheduled successfully

DeleteCronJobRequestDto

jobType
​string · enum · required

Type of cron job to delete

Enum values:
inactive-devices-snapshot
invoice-generation
hourly-update-watchdog
heartbeat-watchdog
calendar-ics-sync
calendar-webhook-renewal
forecast-nightly
forecast-retrain
Example: inactive-devices-snapshot

CronJobState

string · enum
Enum values:
ENABLED
DISABLED

Current state of the schedule (if exists)

CronJobStatusResponseDto

jobType
​string · enum · required

Type of cron job

Enum values:
inactive-devices-snapshot
invoice-generation
hourly-update-watchdog
heartbeat-watchdog
calendar-ics-sync
calendar-webhook-renewal
forecast-nightly
forecast-retrain
Example: inactive-devices-snapshot
isEnabled
​boolean · required

Whether the cron job is currently scheduled and enabled

Example: true
message
​string · required

Status message

Example: Cron job is enabled
scheduleName
​string

AWS EventBridge schedule name (if exists)

Example: inactive_devices_snapshot_daily_production
scheduleExpression
​string

Schedule expression (if exists)

Example: cron(0 16 * * ? *)
state
​string · enum

Current state of the schedule (if exists)

Enum values:
ENABLED
DISABLED
Example: ENABLED

PopulatedTenantDto

_id
​string · required
tenantName
​string · required

PopulatedUserDto

_id
​string · required
name
​string · required
email
​string · required

PopulatedRoomDto

_id
​string · required
name
​string · required

PopulatedZoneDto

_id
​string · required
name
​string · required

DeviceChipModel

string · enum
Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3

Hardware chip model identifier used in the device

PlugType

string · enum
Enum values:
SOCKET
SOAPBAR
ADAPTER

Hardware type classification of the plug device (PLUG only)

MCBType

string · enum
Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P

MCB type (MCB only)

McbPhase

string · enum
Enum values:
A
B
C

Set only when the list is requested with expandPhases=true and this row represents a single phase of a split-mode COIL3P MCB. In that mode realTimePower, realTimeCurrent, realTimeVoltage, totalEnergyUsage and powerFactor hold the values of this phase.

AirconControlMode

string · enum
Enum values:
COOL
HEAT
DRY
FAN
AUTO

Operating mode (AIRCON_CONTROL only)

AirconControlFan

string · enum
Enum values:
LOW
MEDIUM
HIGH
AUTO

Fan speed setting (AIRCON_CONTROL only)

AirconControlSwing

string · enum
Enum values:
ON
OFF
AUTO

Swing setting (AIRCON_CONTROL only)

AirconControlBrand

string · enum
Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP

Air conditioner brand (AIRCON_CONTROL only)

GangSwitchState

gangNumber
​number · required

Gang number (1-4)

Example: 1
onStatus
​string · enum · required

ON/OFF status of this gang switch

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: OFF
label
​string

Optional label/name for this gang switch

Example: Living Room Main Light

SwitchType

string · enum
Enum values:
UNREGISTERED
LIGHT
FAN
AIRCON

Type of appliance the switch controls (SMART_SWITCH only)

ScheduledActionType

string · enum
Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH

Action type to execute at scheduled time

OneTimeScheduleEntry

dateTime
​string · date-time · required

Scheduled date and time (ISO 8601 format)

Example: 2023-10-31T06:00:00Z
action
​string · enum · required

Action type to execute at scheduled time

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
Example: OFF
actionValue
​number

Optional value for actions that require it (e.g., temperature for SET_TEMPERATURE, brightness for SET_BRIGHTNESS)

Example: 24
ruleName
​string

EventBridge rule name for tracking and management

DailyScheduleEntry

time
​string

Scheduled time in HH:mm format

Example: 06:00
action
​string · enum

Action type to execute at scheduled time

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
Example: OFF
actionValue
​number

Optional value for actions that require it (e.g., temperature for SET_TEMPERATURE, brightness for SET_BRIGHTNESS)

Example: 24
ruleName
​string

EventBridge rule name for tracking and management

ScheduleExecutionMode

string · enum
Enum values:
CLOUD
ON_DEVICE

Where the weekly schedule executes. CLOUD = AWS EventBridge rules fired by the backend. ON_DEVICE = compiled into an MQTT timer payload stored in firmware, so it survives the device going offline. One-time schedules are always CLOUD.

ScheduleConfirmationState

string · enum
Enum values:
PENDING
CONFIRMED

Whether the device has acked the on-device schedule over MQTT. PENDING until it confirms. Only meaningful when executionMode is ON_DEVICE.

DeviceSchedule

​object[]

One-time scheduled tasks that execute once and auto-delete after execution

​object[]

Recurring schedule entries for Monday

​object[]

Recurring schedule entries for Tuesday

​object[]

Recurring schedule entries for Wednesday

​object[]

Recurring schedule entries for Thursday

​object[]

Recurring schedule entries for Friday

​object[]

Recurring schedule entries for Saturday

​object[]

Recurring schedule entries for Sunday

executionMode
​string · enum

Where the weekly schedule executes. CLOUD = AWS EventBridge rules fired by the backend. ON_DEVICE = compiled into an MQTT timer payload stored in firmware, so it survives the device going offline. One-time schedules are always CLOUD.

Enum values:
CLOUD
ON_DEVICE
confirmationState
​string · enum

Whether the device has acked the on-device schedule over MQTT. PENDING until it confirms. Only meaningful when executionMode is ON_DEVICE.

Enum values:
PENDING
CONFIRMED

DeviceThresholdsDto

​object

Limits sent to this device but not yet confirmed by its firmware. Keys are the threshold field names below. Present only while a save is outstanding: the device is offline, or its firmware does not echo confirmations. A value here is NOT being enforced by the hardware, and the corresponding field below still holds the last confirmed value (or is absent if there never was one).

thresholdEnabled
​boolean

Whether threshold alerting is switched on for this device. When false the values below are retained but no notification fires.

Example: true
notificationThresholdHour
​number

Sustained hours a reading must stay out of range before a notification is sent.

Example: 2
notificationCooldown
​number

Minimum time in MILLISECONDS between repeat notifications for the same device — the hardware works in ms. Schema default is 300000 (5 minutes).

Example: 300000
voltageMax
​number

Maximum voltage before an alert, in volts.

Example: 250
currentMax
​number

Maximum current before an alert, in amperes.

Example: 13
powerMax
​number

Maximum power before an alert, in watts.

Example: 3000
voltageAMin
​number

Phase A minimum voltage.

voltageBMin
​number

Phase B minimum voltage.

voltageCMin
​number

Phase C minimum voltage.

voltageAMax
​number

Phase A maximum voltage.

voltageBMax
​number

Phase B maximum voltage.

voltageCMax
​number

Phase C maximum voltage.

currentAMax
​number

Phase A maximum current.

currentBMax
​number

Phase B maximum current.

currentCMax
​number

Phase C maximum current.

powerAMax
​number

Phase A maximum power.

powerBMax
​number

Phase B maximum power.

powerCMax
​number

Phase C maximum power.

temperatureMin
​number

Minimum ambient temperature before an alert, in °C.

Example: 18
temperatureMax
​number

Maximum ambient temperature before an alert, in °C.

Example: 30
humidityMin
​number

Minimum relative humidity before an alert, in %.

Example: 40
humidityMax
​number

Maximum relative humidity before an alert, in %.

Example: 70
thresholdGroupName
​string

Name of the shared threshold group this environment sensor follows, when one is assigned. The group holds the full per-metric limits (CO₂, PM, VOC, lux, sound); this DTO carries only the sensor-level values.

Example: Level 3 Offices
flowRateMin
​number

Minimum flow rate before an alert.

flowRateMax
​number

Maximum flow rate before an alert.

inletTemperatureMin
​number

Minimum inlet temperature before an alert, in °C.

inletTemperatureMax
​number

Maximum inlet temperature before an alert, in °C.

outletTemperatureMin
​number

Minimum outlet temperature before an alert, in °C.

outletTemperatureMax
​number

Maximum outlet temperature before an alert, in °C.

leakThresholdFlowRate
​number

Flow rate that, if sustained, is treated as a leak and raises a leak alert.

DeviceDetailsDto

_id
​string · required

Unique device identifier

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceName
​string · required

Device name

Example: Office Plug 1
macId
​string · required

Device MAC address

Example: 1C:69:20:18:0A:BC
deviceType
​string · enum · required

Device type

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
onStatus
​string · enum · required

Current ON/OFF status

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
system
​string · required

System ID

Example: 64b7f1e6f9c9d4e5b8a9f7c1
createdAt
​string · date-time · required

Device creation timestamp

Example: 2024-01-15T10:30:00.000Z
updatedAt
​string · date-time · required

Last update timestamp

Example: 2024-01-15T14:30:00.000Z
lastSeen
​string · date-time · required

Last time the device was seen/reported

Example: 2024-01-15T14:30:00.000Z
deviceStatus
​string

Device status

Example: ACTIVE
systemName
​string

System name (only populated in SUPERADMIN /devices endpoint)

Example: National University of Singapore
​object

Tenant details (populated)

​object

User details (populated)

​object

Room details (populated)

​object

Zone details (populated)

deviceNumber
​number

Unique device number for identification

Example: 1
batchNumber
​number

Manufacturing batch number for tracking production groups

Example: 1
remarks
​string

Additional remarks or notes about the device

Example: Located near the window
location
​string

Physical location or address where the device is installed

Example: Room 101, Building A
chipModel
​string · enum

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string

Firmware version number currently running on the device

Example: 1.0.0
ssid
​string

Network SSID (Wi-Fi name) that the device is connected to

Example: IoT-Network-5G
wifiDesiredSsid
​string

Primary SSID the device was last told to join

Example: IoT-Network-5G
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join

Example: IoT-Network-5G-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join

Example: IoT-Network-5G-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them

Example: ["IoT-Network-5G","IoT-Network-5G-2","IoT-Network-5G-3"]
isLocked
​boolean

Locked status of the device

Example: false
inactivityNotificationEnabled
​boolean

Whether inactivity notifications are enabled for this device

Example: false
deviceModel
​string

Model name or identifier of the device connected to this plug (PLUG only)

Example: Dell XPS 15
deviceBrand
​string

Brand or manufacturer of the device connected to this plug (PLUG only)

Example: Dell
plugCategory
​string

Category classification for the connected device type (PLUG only). See GET /plug-category for valid values.

Example: CHARGER
plugType
​string · enum

Hardware type classification of the plug device (PLUG only)

Enum values:
SOCKET
SOAPBAR
ADAPTER
Example: ADAPTER
ecoguardPlug
​string

Ecoguard power-saving configuration settings reference ID (PLUG only)

Example: 64b7f1e6f9c9d4e5b8a9f7c6
ecoguardEnabled
​boolean

Whether EcoGuard is currently enabled for this plug (PLUG only)

Example: true
realTimePower
​number

Real-time power consumption in watts (PLUG only)

Example: 500
realTimeCurrent
​number

Real-time current in amperes (PLUG only)

Example: 2.5
realTimeVoltage
​number

Real-time voltage (PLUG only)

Example: 230
powerFactor
​number

Power factor (PLUG only)

Example: 0.95
totalEnergyUsage
​number

Total energy usage in watt-hours (PLUG only)

Example: 125000
ecoguardWatts
​number

Ecoguard power threshold in watts (PLUG only)

Example: 100
ecoguardMinutes
​number

Ecoguard time threshold in minutes (PLUG only)

Example: 30
ratedCurrent
​number

Rated current in amperes (MCB only)

Example: 32
mcbType
​string · enum

MCB type (MCB only)

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: BUILT_IN
tripStatus
​boolean

Trip status - whether the MCB has tripped (MCB only)

Example: false
distributionBox
​string

Distribution box ID (MCB only)

Example: 64b7f1e6f9c9d4e5b8a9f7d2
position
​number

Position in distribution box (MCB only)

Example: 1
isSingle
​boolean

Whether a COIL3P MCB is treated as one combined 3-phase load (true/undefined) or split into 3 independent single-phase circuits (false) (MCB only)

Example: true
phase
​string · enum

Set only when the list is requested with expandPhases=true and this row represents a single phase of a split-mode COIL3P MCB. In that mode realTimePower, realTimeCurrent, realTimeVoltage, totalEnergyUsage and powerFactor hold the values of this phase.

Enum values:
A
B
C
Example: A
phaseName
​string

User-defined name of this row's phase (expandPhases=true rows only)

Example: Kitchen
externalId
​string

Downstream address of a RIDGE-fronted unit on its gateway bus (EXTERNAL only). Such a row shares its gateway's deviceNumber, so this is what tells the units of one gateway apart — the pair reads as "1660:3", the way a phase leg reads "11/L1".

Example: 3
unitNumber
​number

Per-gateway number of a RIDGE-fronted unit (EXTERNAL only). Reads as "1660-3" with the gateway's deviceNumber; preferred over externalId for display.

Example: 3
isRidgeChild
​boolean

True when this row is a unit behind a RIDGE gateway rather than directly-connected hardware.

Example: false
realTimePowerA
​number

Real-time active power for phase A in watts (COIL3P MCB only)

Example: 120
realTimePowerB
​number

Real-time active power for phase B in watts (COIL3P MCB only)

Example: 130
realTimePowerC
​number

Real-time active power for phase C in watts (COIL3P MCB only)

Example: 110
realTimeCurrentA
​number

Real-time current for phase A in amperes (COIL3P MCB only)

Example: 1.2
realTimeCurrentB
​number

Real-time current for phase B in amperes (COIL3P MCB only)

Example: 1.3
realTimeCurrentC
​number

Real-time current for phase C in amperes (COIL3P MCB only)

Example: 1.1
realTimeVoltageA
​number

Real-time voltage for phase A in volts (COIL3P MCB only)

Example: 230
realTimeVoltageB
​number

Real-time voltage for phase B in volts (COIL3P MCB only)

Example: 231
realTimeVoltageC
​number

Real-time voltage for phase C in volts (COIL3P MCB only)

Example: 229
totalEnergyUsageA
​number

Total energy usage for phase A in kWh (COIL3P MCB only)

Example: 45.2
totalEnergyUsageB
​number

Total energy usage for phase B in kWh (COIL3P MCB only)

Example: 47.8
totalEnergyUsageC
​number

Total energy usage for phase C in kWh (COIL3P MCB only)

Example: 44.1
temperature
​number

Set temperature in Celsius (AIRCON_CONTROL only)

Example: 24
mode
​string · enum

Operating mode (AIRCON_CONTROL only)

Enum values:
COOL
HEAT
DRY
FAN
AUTO
Example: COOL
fan
​string · enum

Fan speed setting (AIRCON_CONTROL only)

Enum values:
LOW
MEDIUM
HIGH
AUTO
Example: AUTO
swing
​string · enum

Swing setting (AIRCON_CONTROL only)

Enum values:
ON
OFF
AUTO
Example: OFF
brand
​string · enum

Air conditioner brand (AIRCON_CONTROL only)

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN
isIRRemote
​boolean

Whether this device uses IR remote control (AIRCON_CONTROL only)

Example: true
numberOfGangs
​number · min: 1 · max: 4

Number of gangs/buttons on the switch (SMART_SWITCH only)

Example: 2
​object[]

Individual gang switch states with ON/OFF status (SMART_SWITCH only)

switchType
​string · enum

Type of appliance the switch controls (SMART_SWITCH only)

Enum values:
UNREGISTERED
LIGHT
FAN
AIRCON
Example: LIGHT
​object

Weekly and one-time schedule configuration for this device

scheduleId
​null | string

Id of the named Schedule this device currently follows. deviceSchedule is compiled from it. Absent or null when the device follows nothing.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
sensorData
​object

Environmental sensor data (ENV_SENSOR only)

​object

Alert thresholds configured for this device, gathered into one object. Which fields are populated depends on deviceType — see DeviceThresholdsDto. Omitted entirely when the device has no thresholds set.

GetDevicesResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of devices with their full details. Each device includes base fields plus type-specific fields based on deviceType.

DeviceHistoryItem

_id
​string · required

Unique identifier for the history entry

Example: 507f1f77bcf86cd799439011
onStatus
​string · enum · required

Status of the device (ON/OFF)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
triggerSource
​string · enum · required

Source that triggered the status change

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: MANUAL
createdAt
​string · date-time · required

Timestamp when the status change occurred

Example: 2024-01-15T10:30:00.000Z
temperature
​number

Temperature setting (Aircon Control only) - present when device is an aircon control

Example: 24
mode
​string · enum

Operation mode (Aircon Control only) - present when device is an aircon control

Enum values:
COOL
HEAT
DRY
FAN
AUTO
Example: COOL
fan
​string · enum

Fan speed (Aircon Control only) - present when device is an aircon control

Enum values:
LOW
MEDIUM
HIGH
AUTO
Example: AUTO
swing
​string · enum

Swing setting (Aircon Control only) - present when device is an aircon control

Enum values:
ON
OFF
AUTO
Example: OFF
brand
​string · enum

Brand of AC (Aircon Control only) - present when device is an aircon control

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN
​object[]

Gang switch states (Smart Switch only) - present when device is a smart switch, shows the state of each gang at the time of this history entry

Example: [{"gangNumber":1,"onStatus":"ON","label":"Main Light"},{"gangNumber":2,"onStatus":"OFF","label":"Accent Light"}]

GetDeviceHistoryDto

​object[] · required

Array of device history entries

total
​number · required

Total number of history entries

Example: 100

MultipleDevicesConfigurationDto

deviceType
​string · enum · required

Type of devices to configure

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
deviceIds
​string[] · required

Array of unique device identifiers from IoT devices to configure in batch

Example: ["1092384701928347","1092384701928348"]
ssid
​string

Primary network SSID (Wi-Fi name) to configure for all selected devices

Example: EcovoltHotspot
password
​string

Primary Wi-Fi network password to configure for all selected devices

Example: 123abc456
ssid2
​string

Secondary network SSID (Wi-Fi name) to configure for all selected devices

Example: EcovoltHotspot2
password2
​string

Secondary Wi-Fi network password to configure for all selected devices

Example: 123abc456
ssid3
​string

Tertiary network SSID (Wi-Fi name) to configure for all selected devices

Example: EcovoltHotspot3
password3
​string

Tertiary Wi-Fi network password to configure for all selected devices

Example: 123abc456
ssidPriority
​string[]

Ordered list of SSIDs by connection priority. The device will attempt to connect to these networks in the given order.

Example: ["EcovoltHotspot","EcovoltHotspot2","EcovoltHotspot3"]
systemName
​string

System name to assign to all selected devices for organizational grouping

Example: NUS
useShadow
​boolean

Deliver via the AWS IoT device shadow when the firmware supports it (default). Set false to force the legacy changeWifi publish for every device in this request, e.g. to roll back if shadow delivery misbehaves.

Default: true

DeviceConfigurationDto

deviceType
​string · enum · required

Type of device to configure (PLUG, MCB, ENV_SENSOR). Determines which device will receive the configuration.

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
ssid
​string

Primary network SSID (Wi-Fi name) that the device should connect to

Example: EcovoltHotspot
password
​string

Primary Wi-Fi network password

Example: 123abc456
ssid2
​string

Secondary network SSID (Wi-Fi name)

Example: EcovoltHotspot2
password2
​string

Secondary Wi-Fi network password

Example: 123abc456
ssid3
​string

Tertiary network SSID (Wi-Fi name)

Example: EcovoltHotspot3
password3
​string

Tertiary Wi-Fi network password

Example: 123abc456
ssidPriority
​string[]

Ordered list of SSIDs by connection priority. The device will attempt to connect to these networks in the given order.

Example: ["EcovoltHotspot","EcovoltHotspot2","EcovoltHotspot3"]
systemName
​string

Name of the system that the device belongs to for organizational grouping

Example: NUS
useShadow
​boolean

Deliver via the AWS IoT device shadow when the firmware supports it (default). Set false to force the legacy changeWifi publish for every device in this request, e.g. to roll back if shadow delivery misbehaves.

Default: true

DeviceErrorType

string · enum
Enum values:
Info
Warning
Error

ErrorLog

_id
​string · required

Error log document ID

errorType
​string · enum · required

Type or code of the error

Enum values:
Info
Warning
Error
Example: Error
errorTitle
​string · required

Type or code of the error

errorMessage
​string · required

Detailed error message

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
macId
​string · required

Device MAC Address

Example: AA:BB:CC:DD:EE:FF
deviceType
​string · enum · required

Type of device

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
deviceId
​string · required

Device ID

Example: 60f7c0b5b4d1c826d8f0e6b7
systemId
​string · required

Tagged System

externalDeviceId
​string

ExternalDevice this error belongs to, when the reporting device is a RIDGE gateway relaying a fault from one of the units it fronts. deviceId stays the gateway, so a per-gateway query still returns it.

Example: 64b7f1e6f9c9d4e5b8a9f7c9
externalId
​string

Downstream address of the faulting unit as the gateway reported it (iTM pointId / Daikin ac id). Retained even when no ExternalDevice row matched.

Example: 134

GetErrorHistoryDto

​object[] · required

Array of error log records for devices matching the query

total
​number · required

Total count of error logs available for pagination purposes

Example: 25

CreateWhiteListedDevicesDto

macIds
​string[] · required

Array of unique MAC address identifiers from IoT devices to add to the whitelist

Example: ["AA:BB:CC:DD:EE:FF","AA:BB:CC:DD:EE:FE"]
deviceType
​string · enum · required

Type of device

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
batchNumber
​number · required

Manufacturing batch number for tracking device production groups and quality control

Example: 1
chipModel
​string · enum · required

Hardware chip model identifier used in the devices (e.g., ESP32C2, ESP8266)

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number installed on the devices in semantic versioning format

Example: 1.0.0

WhiteList

_id
​string · required

Primary ID of the MacId

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

Mac ID of the device (from IoT device)

Example: AA:BB:CC:DD:EE:FF
deviceType
​string · enum · required

Type of device

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
batchNumber
​number · required

Batch Number of the device

Example: 2
chipModel
​string · enum · required

Chip Model of the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Version number of the device

Example: 1.0.0
deviceNumber
​number · required

Auto-incremented Device Number for whitelisted devices

Example: 1
adminCreated
​string · required

Name of the admin who created the whitelist entry

Example: Glenn
createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01

GetWhitelistedDevicesDto

​object[] · required

Array of devices that are approved and registered in the whitelist

total
​number · required

Total count of whitelisted devices for pagination and tracking

Example: 200

GetIsDeviceWhiteListedDto

isWhiteListed
​boolean · required

Boolean flag indicating whether the device is approved and present in the whitelist

Example: true

BulkRemoveWhitelistDto

ids
​string[] · required

Array of whitelist entry IDs to remove

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]

ManufacturerRegisterDeviceDto

macId
​string · required

MAC address of the device

Example: AA:BB:CC:DD:EE:FF
deviceType
​string · enum · required

Type of device being registered

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
batchNumber
​number · required

Manufacturing batch number

Example: 1
chipModel
​string · enum · required

Hardware chip model of the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number installed on the device

Example: 1.0.0
adminCreated
​string

Name of the manufacturer or person registering the device. Defaults to "Manufacturer" if not provided.

Example: Ah Kow Manufacturing

ManufacturerDeviceResponseDto

macId
​string · required

MAC address of the device

Example: AA:BB:CC:DD:EE:FF
deviceNumber
​number · required

Auto-assigned device number for this device

Example: 42
alreadyExisted
​boolean · required

True if the MAC was already registered and this was a lookup, false if newly registered

Example: false

ManufacturerPlugStatusDto

_id
​string · required

Device ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

MAC address of the device

Example: AA:BB:CC:DD:EE:FF
deviceNumber
​number · required

Unique device number for identification

Example: 42
onStatus
​string · enum · required

Current on/off status of the device

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON

ManufacturerSystemPlugsResponseDto

​object[] · required

List of plug devices in the system

total
​number · required

Total number of plug devices

Example: 10

ManufacturerDeviceStatusDto

_id
​string · required

Device ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

MAC address of the device

Example: AA:BB:CC:DD:EE:FF
deviceNumber
​number · required

Unique device number for identification

Example: 42
onStatus
​string · enum · required

Current on/off status of the device

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON

ManufacturerSystemDevicesResponseDto

​object[] · required

List of devices of the requested type in the system

total
​number · required

Total number of devices returned

Example: 10

MultipleDevicesChangeSystemDto

deviceIds
​string[] · required

Array of unique device identifiers (plugs or MCBs) to reassign to a different system

Example: ["1092384701928347","1092384701928348"]
newSystemId
​string · required

Unique identifier of the target system to reassign all selected devices to

Example: 64b7f1e6f9c9d4e5b8a9f7c3

UpdateMultipleDevicesRelationshipsDto

deviceIds
​string[] · required

Array of unique device identifiers to update relationships for

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
tenantId
​null | string

Unique identifier of the tenant to assign the devices to. Pass null to remove the tenant relationship.

Example: 64b7f1e6f9c9d4e5b8a9f7c5
zoneId
​null | string

Unique identifier of the zone to assign ownership of the devices to. Pass null to remove the zone relationship.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
roomId
​null | string

Unique identifier of the room to assign the devices to. Pass null to remove the room relationship.

Example: 64b7f1e6f9c9d4e5b8a9f7c4

UpdateDeviceBaseDto

deviceName
​string

Name of the device

Example: Living Room Light
location
​string

Physical location of the device

Example: Block 123, Unit 01-23
remarks
​string

Additional remarks or notes about the device

Example: Handle with care - critical equipment
tenantId
​string

Tenant ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c3
zoneId
​string

Zone ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c4
roomId
​string

Room ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c5
isLocked
​boolean

Whether the device is locked. When locked, the device cannot be toggled ON/OFF.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false

DeviceUpdateItem

deviceId
​string · required

MongoDB ID of the device to update

Example: 64b7f1e6f9c9d4e5b8a9f7c3
​object · required

Fields to update on the device

BulkUpdateDevicesDto

​object[] · required

Array of device update operations to perform in a single batch request

Example: [{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c3","data":{"deviceName":"Main Switch","location":"Lobby","remarks":"Critical"}}]

UpdateDevicesLockStatusDto

deviceIds
​string[] · required

Array of device IDs to lock or unlock

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]
isLocked
​boolean · required

Lock status to set. True to lock devices, false to unlock.

Example: true

FailedDeviceLockUpdateDto

deviceId
​string · required

Device ID that failed to update

Example: 64b7f1e6f9c9d4e5b8a9f7c3
reason
​string · required

Reason for failure

Example: Device not found

UpdateDevicesLockStatusResponseDto

successCount
​number · required

Number of devices successfully updated

Example: 5
failedCount
​number · required

Number of devices that failed to update

Example: 1
successfulDeviceIds
​string[] · required

List of device IDs that were successfully updated

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]
​object[] · required

List of devices that failed to update with reasons

UpdateDevicesSpareStatusDto

deviceIds
​string[] · required

Array of device IDs to mark as spare or non-spare

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]
isSpare
​boolean · required

Spare status to set. True to mark as spare, false to unmark.

Example: true

UpdateDevicesRelationshipTenantDto

deviceIds
​string[] · required

Array of unique device identifiers to update relationships for

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
zoneId
​string

Unique identifier of the zone to assign ownership of the devices to within the tenant

Example: 64b7f1e6f9c9d4e5b8a9f7c3
roomId
​string

Unique identifier of the room to assign the devices to for location tracking

Example: 64b7f1e6f9c9d4e5b8a9f7c4

UpdateDevicesRelationshipZoneDto

deviceIds
​string[] · required

Array of unique device identifiers to update room assignment for

Example: ["64b7f1e6f9c9d4e5b8a9f7c2","64b7f1e6f9c9d4e5b8a9f7c2"]
roomId
​string

Unique identifier of the room to assign the devices to for location tracking

Example: 64b7f1e6f9c9d4e5b8a9f7c4

MultipleDevicesCalibrationDto

deviceIds
​string[] · required

Array of unique device identifiers to apply calibration settings to

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
systemName
​string · required

Name of the system containing the devices to calibrate for batch processing

Example: NUS
deviceType
​string · enum · required

Type of device to calibrate (PLUG, MCB, ENV_SENSOR). Determines which devices will receive calibration data.

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
voltageMultiplier
​number · required

Calibration multiplier to adjust voltage sensor readings for accuracy correction

Example: 1.5
voltageOffset
​number · required

Calibration offset value in volts to adjust voltage sensor baseline readings

Example: 0.5
currentMultiplier
​number · required

Calibration multiplier to adjust current sensor readings for accuracy correction

Example: 1.2
currentOffset
​number · required

Calibration offset value in amperes to adjust current sensor baseline readings

Example: 0.2
powerMultiplier
​number · required

Calibration multiplier to adjust power measurement calculations for accuracy

Example: 1.1
powerOffset
​number · required

Calibration offset value in watts to adjust power measurement baseline

Example: 0.1

InactiveDeviceDto

_id
​string · required

Device document ID

Example: 507f1f77bcf86cd799439011
macId
​string · required

Device MAC ID (unique identifier)

Example: 28:56:2F:0E:58:C8
deviceNumber
​number · required

Device number identifier

Example: 1
deviceName
​string · required

Device display name

Example: Conference Room AC
deviceType
​string · enum · required

Type of device

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
lastSeen
​string · date-time · required

Last time the device sent a heartbeat (last seen timestamp)

Example: 2024-10-15T08:30:00.000Z
inactiveDuration
​number · required

Duration the device has been inactive in milliseconds

Example: 172800000
inactiveDurationFormatted
​string · required

Duration the device has been inactive in human-readable format

Example: 2 days, 3 hours
tenantId
​string

Tenant ID that owns this device

Example: 507f1f77bcf86cd799439011
tenantName
​string

Tenant name that owns this device

Example: Building A - Floor 3

GetInactiveDevicesDto

​object[] · required

Array of inactive devices with their details

total
​number · required

Total count of inactive devices found

Example: 15
retrievedAt
​string · date-time · required

Timestamp when this data was retrieved

Example: 2024-10-17T14:45:00.000Z

SaveInactiveSnapshotResponseDto

snapshotId
​string · required

Snapshot document ID

Example: 507f1f77bcf86cd799439011
systemId
​string · required

System ID this snapshot belongs to

Example: 507f1f77bcf86cd799439011
totalInactiveDevices
​number · required

Number of inactive devices captured in this snapshot

Example: 5
snapshotDate
​string · date-time · required

Timestamp when the snapshot was taken

Example: 2024-10-22T00:00:00.000Z
message
​string · required

Message confirming the snapshot was saved

Example: Inactive device snapshot saved successfully

InactiveDeviceSnapshot

_id
​string · required

Snapshot document ID

​object · required

System this snapshot belongs to

​object[] · required

Array of inactive devices with their details

total
​number · required

Total count of inactive devices

retrievedAt
​string · date-time · required

Timestamp when this data was retrieved

createdAt
​string · date-time · required

Timestamp when this snapshot was created

updatedAt
​string · date-time · required

Timestamp when this snapshot was last updated

referenceDate
​string · date-time

Optional reference date used for duration calculation

GetInactiveSnapshotsDto

​object[] · required

Array of inactive device snapshots

total
​number · required

Total count of snapshots found

Example: 10

HierarchyType

string · enum
Enum values:
SYSTEM
TENANT
USER
ROOM

DeviceCountDto

deviceCount
​number · required

Total number of devices registered in the system across all statuses

Example: 4
deviceOnCount
​number · required

Number of devices currently in ON status and actively consuming power

Example: 2
deviceOffCount
​number · required

Number of devices currently in OFF status and not consuming power

Example: 1
deviceInactiveCount
​number · required

Number of devices marked as inactive or not communicating with the system

Example: 1
deviceSpareCount
​number · required

Number of spare devices (excluded from total, on, off, and inactive counts)

Example: 1

DeviceTypeBreakdownDto

PLUG
​number · required

Number of PLUG devices in the system

Example: 15
MCB
​number · required

Number of MCB (Miniature Circuit Breaker) devices in the system

Example: 8
ENV_SENSOR
​number · required

Number of ENV_SENSOR (Environmental Sensor) devices in the system

Example: 3
SMART_SWITCH
​number · required

Number of SMART_SWITCH devices in the system

Example: 5
AIRCON_CONTROL
​number · required

Number of AIRCON_CONTROL (Air Conditioning Controller) devices in the system

Example: 4
WATER_METER
​number · required

Number of WATER_METER devices in the system

Example: 2
RIDGE
​number · required

Number of RIDGE gateways plus every external device they front

Example: 6
total
​number · required

Total number of devices in the system

Example: 37

ChangeDeviceSystemDto

newSystemId
​string · required

Unique identifier of the system to reassign the device to for organizational management

Example: 64b7f1e6f9c9d4e5b8a9f7c3

ToggleDeviceStatusDto

deviceId
​string · required

Unique identifier of the device to be toggled

Example: 64b7f1e6f9c9d4e5b8a9f7c3
onStatus
​string · enum

Desired power state. Use ON to turn the device on (all gangs for SmartSwitch), or OFF to turn it off (all gangs for SmartSwitch).

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON

DeviceConfig

Device

_id
​string · required

Primary ID of the Device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceType
​string · enum · required

Type of device (discriminator field)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
macId
​string · required

MAC ID of the Device (from IoT device)

Example: 1092384701928347
deviceName
​string · required

Name of the Device

Example: Living Room AC
deviceNumber
​number · required

Unique device number for identification

Example: 1
onStatus
​string · enum · required

Status of the Device (ON / OFF / INACTIVE / ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
location
​string · required

Physical location or address where the device is installed

Example: Room 101, Building A
remarks
​string · required

Remarks for the Device

batchNumber
​number · required

Manufacturing batch number for tracking production groups

Example: 1
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number currently running on the device

Example: 1.0.0
ssid
​string · required

Network SSID (Wi-Fi name) that the device is connected to

Example: IoT-Network-5G
​object · required

Tagged Tenant

​object · required

Tagged Zone

​object · required

Tagged Room

​object · required

Tagged System

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
lastSeen
​string · date-time · required

Last time the device was seen/reported

Example: 2021-09-01
isLocked
​boolean · required

Whether the device is locked. When locked, the device on/off status cannot be toggled.

Example: false
totalEnergyUsage
​number · required

Total cumulative energy usage in kWh

Example: 0
totalEnergySaved
​number · required

Total energy saved through optimization in kWh

Example: 0
autoUpdateAttempts
​number · required

Number of auto-update OTA attempts sent to this device

Example: 0
autoUpdateBlacklisted
​boolean · required

Whether device is blacklisted from auto-updates (max retries exceeded)

Example: false
manualUpdateBlacklist
​boolean · required

Whether device is manually blacklisted from auto-updates by admin

Example: false
inactivityNotificationEnabled
​boolean · required

Whether inactivity notifications are enabled for this device

Default: false
targetState
​string · enum

Pending desired on/off state commanded by backend (cloud / scheduled). Set when a toggle is issued; cleared when the device reports a matching state or a physical (MANUAL) press overrides it. Always ON or OFF when present.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when targetState was last written. Used to expire stale SCHEDULED intents (24hr TTL). CLOUD intents do not expire.

Example: 2026-05-25T08:00:00.000Z
targetSource
​string · enum

Origin of the pending targetState. Drives TTL behavior on reconcile. Only CLOUD / SCHEDULED are ever written here.

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD
deviceModel
​string

Model name or identifier of the device

Example: TP-Link HS110
deviceBrand
​string

Brand or manufacturer of the device

Example: TP-Link
wifiError
​string

Last WiFi shadow delta failure reported by the device (e.g. join_failed); cleared once it reports a successful join

Example: join_failed
wifiDesiredSsid
​string

Primary SSID the device was last told to join. Set at send time on both the shadow and legacy changeWifi paths; convergence is ssid matching any desired SSID.

Example: Corp-IoT
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them.

Example: ["Corp-IoT","Corp-IoT-2","Corp-IoT-3"]
config
​object

Settings as last reported by the device into its config shadow, one block per feature

pendingConfig
​object

Settings written to the config shadow but not yet reported back. A key the device reports at a different value was rejected

configRequestedAt
​string · date-time

When settings were last written to the config shadow

configReportedAt
​string · date-time

When the device last reported into its config shadow

rssi
​number

Latest WiFi signal strength reported by the device (dBm). Updated on each realtime MQTT report.

Example: -65
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a physical unit. Such rows have no real MAC, never report telemetry, and are excluded from firmware, OTA, provisioning and panel-slot views.

Example: false
isRidgeChild
​boolean

True when this row is a unit behind a RIDGE gateway rather than a directly-connected unit. Such rows have no real MAC, are never fleet-provisioned, and are excluded from firmware, OTA and liveness watchdogs — their gateway carries those.

Example: false
hasPhaseChildren
​boolean

True when this clamp has been split into per-phase children. Such a clamp is org-detached and excluded from energy and organisational views — its children carry those — while remaining the sole target for firmware, OTA and diagnostics.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
​object

Schedule configuration for the device. Contains recurring weekly schedules and one-time scheduled tasks.

scheduleId
​null | string

Id of the single Schedule (in the schedules collection) this device currently follows. deviceSchedule is compiled from that schedule. When null, the device follows nothing.

Example: 507f1f77bcf86cd799439011
realTimePower
​number

Real-time power consumption in watts

Example: 1500
realTimeCurrent
​number

Real-time current in amperes

Example: 6.5
lastAutoUpdateAttempt
​string · date-time

Timestamp of last auto-update OTA attempt

inactivityNotificationSentAt
​string · date-time

Timestamp when the last inactivity notification was sent for this device

thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
​object

Threshold limits sent to the device but not yet confirmed by its firmware. Keys match DeviceThresholdsDto. Present only while a save is outstanding — a key that persists here is not being enforced by the hardware.

​object

This device's alert thresholds gathered into one object. Which fields are populated depends on deviceType — see DeviceThresholdsDto. Absent when no thresholds are configured. The same values remain available as flat top-level fields.

BulkToggleDeviceDto

deviceIds
​string[] · required

Array of device IDs to toggle

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]
onStatus
​string · enum

Desired power state for all devices. Use ON to turn all devices on (all gangs for SmartSwitch), or OFF to turn all devices off (all gangs for SmartSwitch).

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON

DeviceResetScope

string · enum
Enum values:
USAGE_HISTORY
EVENT_HISTORY
ERROR_LOGS
RELATIONSHIPS
IDENTITY
SCHEDULES
ENERGY_COUNTERS
THRESHOLDS

Slices of device state to wipe, applied identically to every listed device.

BulkResetDevicesDto

deviceIds
​string[] · required

Devices to reset. Ids outside the system are reported back as notFound.

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]
scopes
​string[] · required

Slices of device state to wipe, applied identically to every listed device.

Enum values:
USAGE_HISTORY
EVENT_HISTORY
ERROR_LOGS
RELATIONSHIPS
IDENTITY
SCHEDULES
ENERGY_COUNTERS
THRESHOLDS
Example: ["USAGE_HISTORY","ERROR_LOGS"]

ResetDevicesResponseDto

requested
​number · required

Number of device IDs requested

reset
​number · required

Number of devices found in the system and reset

notFound
​string[] · required

Requested device IDs that were not found in the system

scopes
​string[] · required

Scopes that were applied

Enum values:
USAGE_HISTORY
EVENT_HISTORY
ERROR_LOGS
RELATIONSHIPS
IDENTITY
SCHEDULES
ENERGY_COUNTERS
THRESHOLDS

ResetDeviceDto

scopes
​string[] · required

Slices of device state to wipe. Only the listed scopes are touched; everything else is left alone.

Enum values:
USAGE_HISTORY
EVENT_HISTORY
ERROR_LOGS
RELATIONSHIPS
IDENTITY
SCHEDULES
ENERGY_COUNTERS
THRESHOLDS
Example: ["USAGE_HISTORY","ERROR_LOGS"]

BulkDeleteDeviceDto

deviceIds
​string[] · required

Array of device IDs to delete

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]

BulkManualBlacklistDto

deviceIds
​string[] · required

Array of device IDs to blacklist/unblacklist

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]
blacklist
​boolean · required

Whether to blacklist (true) or remove blacklist (false)

Example: true

BulkUnblacklistDto

deviceIds
​string[] · required

Array of device IDs to clear from all auto-update blacklists (auto + manual)

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]

EnvironmentType

string · enum
Enum values:
STAGING
PRODUCTION

Environment type to set for the devices. STAGING for staging environment, PRODUCTION for production environment.

ChangeEnvironmentDto

deviceIds
​string[] · required

Array of device IDs to change environment for

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]
setEnvironment
​string · enum · required

Environment type to set for the devices. STAGING for staging environment, PRODUCTION for production environment.

Enum values:
STAGING
PRODUCTION
Example: STAGING

BulkUpdateEnergyThresholdsDto

deviceIds
​string[] · required

IDs of energy devices (Plugs or MCBs) to update

voltageMax
​number

Max Threshold voltage reading in volts

Example: 240
currentMax
​number

Max Threshold current reading in amps

Example: 10
powerMax
​number

Max Threshold power reading in watts

Example: 100
notificationThresholdHour
​number

Hourly notification threshold — minimum hours between repeat notifications of the same type

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device. MCB only.

Example: true
voltageAMin
​number

Min threshold phase A voltage in volts (COIL3P only)

Example: 190
voltageBMin
​number

Min threshold phase B voltage in volts (COIL3P only)

Example: 190
voltageCMin
​number

Min threshold phase C voltage in volts (COIL3P only)

Example: 190
voltageAMax
​number

Max threshold phase A voltage in volts (COIL3P only)

Example: 240
voltageBMax
​number

Max threshold phase B voltage in volts (COIL3P only)

Example: 240
voltageCMax
​number

Max threshold phase C voltage in volts (COIL3P only)

Example: 240
currentAMax
​number

Max threshold phase A current in amps (COIL3P only)

Example: 16
currentBMax
​number

Max threshold phase B current in amps (COIL3P only)

Example: 16
currentCMax
​number

Max threshold phase C current in amps (COIL3P only)

Example: 16
powerAMax
​number

Max threshold phase A power in watts (COIL3P only)

Example: 3000
powerBMax
​number

Max threshold phase B power in watts (COIL3P only)

Example: 3000
powerCMax
​number

Max threshold phase C power in watts (COIL3P only)

Example: 3000

DeviceBulkEnvironmentThresholdsDto

deviceIds
​string[] · required

IDs of environment sensors to update

temperatureMin
​number

Min Threshold temperature reading in degrees Celsius

Example: 24
temperatureMax
​number

Max Threshold temperature reading in degrees Celsius

Example: 24
carbonDioxide
​number

Threshold CO2 reading in ppm

Example: 400
lux
​number

Threshold light level in lux (lx)

Example: 500
formaldehyde
​number

Threshold formaldehyde (HCHO) reading in µg/m³

Example: 0.03
humidity
​number

Threshold humidity percentage

Example: 24
pm1
​number

Threshold PM1 in µg/m³

Example: 1
pm2_5
​number

Threshold PM2.5 in µg/m³

Example: 1
pm10
​number

Threshold PM10 in µg/m³

Example: 1
totalVolatileOrganicCompounds
​number

Threshold Total Volatile Organic Compounds in ppb

Example: 1
soundLevel
​number

Threshold Sound Level in dB

Example: 1
motionDetected
​boolean

Motion detection status

Example: true
notificationThresholdHour
​number

Hourly notification threshold for the Environment Sensor

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device. MCB only.

Example: true

DeviceBulkWaterMeterThresholdsDto

deviceIds
​string[] · required

IDs of water meters to update

flowRateMax
​number

Max threshold flow rate (m³/h)

Example: 10
flowRateMin
​number

Min threshold flow rate (m³/h)

Example: 0
notificationThresholdHour
​number

Hourly notification threshold — minimum hours between repeat notifications of the same type

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device

Example: true
inletTemperatureMax
​number

Max threshold inlet temperature (°C)

Example: 60
inletTemperatureMin
​number

Min threshold inlet temperature (°C)

Example: 0
outletTemperatureMax
​number

Max threshold outlet temperature (°C)

Example: 60
outletTemperatureMin
​number

Min threshold outlet temperature (°C)

Example: 0

UpdateEnergyDeviceThresholdDto

voltageMax
​number

Max Threshold voltage reading in volts

Example: 240
currentMax
​number

Max Threshold current reading in amps

Example: 10
powerMax
​number

Max Threshold power reading in watts

Example: 100
notificationThresholdHour
​number

Hourly notification threshold — minimum hours between repeat notifications of the same type

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device. MCB only.

Example: true
voltageAMin
​number

Min threshold phase A voltage in volts (COIL3P only)

Example: 190
voltageBMin
​number

Min threshold phase B voltage in volts (COIL3P only)

Example: 190
voltageCMin
​number

Min threshold phase C voltage in volts (COIL3P only)

Example: 190
voltageAMax
​number

Max threshold phase A voltage in volts (COIL3P only)

Example: 240
voltageBMax
​number

Max threshold phase B voltage in volts (COIL3P only)

Example: 240
voltageCMax
​number

Max threshold phase C voltage in volts (COIL3P only)

Example: 240
currentAMax
​number

Max threshold phase A current in amps (COIL3P only)

Example: 16
currentBMax
​number

Max threshold phase B current in amps (COIL3P only)

Example: 16
currentCMax
​number

Max threshold phase C current in amps (COIL3P only)

Example: 16
powerAMax
​number

Max threshold phase A power in watts (COIL3P only)

Example: 3000
powerBMax
​number

Max threshold phase B power in watts (COIL3P only)

Example: 3000
powerCMax
​number

Max threshold phase C power in watts (COIL3P only)

Example: 3000

BulkUniqueEnergyThresholdItemDto

deviceId
​string · required

Device ID (Plug or MCB)

​object · required

BulkUniqueUpdateEnergyThresholdsDto

​object[] · required

Array of devices with their individual threshold values

UpdateEnvironmentSensorThresholdDto

temperatureMin
​number

Min Threshold temperature reading in degrees Celsius

Example: 24
temperatureMax
​number

Max Threshold temperature reading in degrees Celsius

Example: 24
carbonDioxide
​number

Threshold CO2 reading in ppm

Example: 400
lux
​number

Threshold light level in lux (lx)

Example: 500
formaldehyde
​number

Threshold formaldehyde (HCHO) reading in µg/m³

Example: 0.03
humidity
​number

Threshold humidity percentage

Example: 24
pm1
​number

Threshold PM1 in µg/m³

Example: 1
pm2_5
​number

Threshold PM2.5 in µg/m³

Example: 1
pm10
​number

Threshold PM10 in µg/m³

Example: 1
totalVolatileOrganicCompounds
​number

Threshold Total Volatile Organic Compounds in ppb

Example: 1
soundLevel
​number

Threshold Sound Level in dB

Example: 1
motionDetected
​boolean

Motion detection status

Example: true
notificationThresholdHour
​number

Hourly notification threshold for the Environment Sensor

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device. MCB only.

Example: true

BulkUniqueEnvSensorThresholdItemDto

deviceId
​string · required

Environment sensor device ID

​object · required

Threshold values for this device. Fields not supported by the sensor type are silently skipped.

BulkUniqueUpdateEnvSensorThresholdsDto

​object[] · required

Array of devices with their individual threshold values

UpdateWaterMeterThresholdDto

flowRateMax
​number

Max threshold flow rate (m³/h)

Example: 10
flowRateMin
​number

Min threshold flow rate (m³/h)

Example: 0
notificationThresholdHour
​number

Hourly notification threshold — minimum hours between repeat notifications of the same type

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device

Example: true
inletTemperatureMax
​number

Max threshold inlet temperature (°C)

Example: 60
inletTemperatureMin
​number

Min threshold inlet temperature (°C)

Example: 0
outletTemperatureMax
​number

Max threshold outlet temperature (°C)

Example: 60
outletTemperatureMin
​number

Min threshold outlet temperature (°C)

Example: 0

BulkUniqueWaterMeterThresholdItemDto

deviceId
​string · required

Water meter device ID

​object · required

BulkUniqueUpdateWaterMeterThresholdsDto

​object[] · required

Array of devices with their individual threshold values

EnergyThresholdBaselineDto

voltageMin
​number · required

Minimum voltage reading (V)

voltageMax
​number · required

Maximum voltage reading (V)

currentMin
​number · required

Minimum current reading (A)

currentMax
​number · required

Maximum current reading (A)

powerMin
​number · required

Minimum power reading (W)

powerMax
​number · required

Maximum power reading (W)

currentAMin
​number

Minimum phase-A current reading (A) — MCB only

currentAMax
​number

Maximum phase-A current reading (A) — MCB only

currentBMin
​number

Minimum phase-B current reading (A) — MCB only

currentBMax
​number

Maximum phase-B current reading (A) — MCB only

currentCMin
​number

Minimum phase-C current reading (A) — MCB only

currentCMax
​number

Maximum phase-C current reading (A) — MCB only

EnvironmentSensorThresholdBaselineDto

temperatureMin
​number

Minimum temperature reading (°C)

temperatureMax
​number

Maximum temperature reading (°C)

carbonDioxideMin
​number

Minimum CO2 reading (ppm)

carbonDioxideMax
​number

Maximum CO2 reading (ppm)

luxMin
​number

Minimum light level reading (lx)

luxMax
​number

Maximum light level reading (lx)

formaldehydeMin
​number

Minimum formaldehyde reading (µg/m³)

formaldehydeMax
​number

Maximum formaldehyde reading (µg/m³)

humidityMin
​number

Minimum humidity (%)

humidityMax
​number

Maximum humidity (%)

pm1Min
​number

Minimum PM1 reading (µg/m³)

pm1Max
​number

Maximum PM1 reading (µg/m³)

pm2_5Min
​number

Minimum PM2.5 reading (µg/m³)

pm2_5Max
​number

Maximum PM2.5 reading (µg/m³)

pm10Min
​number

Minimum PM10 reading (µg/m³)

pm10Max
​number

Maximum PM10 reading (µg/m³)

totalVolatileOrganicCompoundsMin
​number

Minimum TVOC reading (ppb)

totalVolatileOrganicCompoundsMax
​number

Maximum TVOC reading (ppb)

soundLevelMin
​number

Minimum sound level (dB)

soundLevelMax
​number

Maximum sound level (dB)

WaterMeterThresholdBaselineDto

flowRateMin
​number

Minimum flow rate (m³/h)

flowRateMax
​number

Maximum flow rate (m³/h)

ThresholdBaselineResponseDto

deviceId
​string · required

Device ID

deviceType
​string · required

Device type

periodStart
​string · date-time · required

Start date of the baseline period

periodEnd
​string · date-time · required

End date of the baseline period

dataPointCount
​number · required

Number of data points used to calculate the baseline

message
​string

Warning message when insufficient data (< 14 days) was available for the baseline calculation

Example: Only 3 days of data available. Baseline calculated from limited data.
​object

Energy device baseline (Plug/MCB)

​object

Environment sensor baseline

​object

Water meter baseline

BulkThresholdBaselineRequestDto

deviceIds
​string[] · required

IDs of devices to calculate threshold baselines for

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]

FailedThresholdBaselineDto

deviceId
​string · required

Device ID that failed to generate a baseline

Example: 64b7f1e6f9c9d4e5b8a9f7c3
reason
​string · required

Reason for failure

Example: Device not found in system

BulkThresholdBaselineResponseDto

successCount
​number · required

Number of devices for which baselines were successfully generated

Example: 5
failedCount
​number · required

Number of devices for which baseline generation failed

Example: 1
​object[] · required

Successfully generated baselines

​object[] · required

Devices that failed baseline generation with reasons

UpdateInactivityNotificationDto

enabled
​boolean · required

Enable or disable inactivity notifications for this device

Example: true

ClaimTokenResponseDto

claimToken
​string · required

Encrypted claim token for device

Example: a1b2c3d4e5f6...
claimUrl
​string · required

Full URL for claiming the device

Example: https://base.ecovolt.ai/claim/a1b2c3d4e5f6...

PrintQrRequestDto

macId
​string

MAC address of the device. Provide either macId or deviceNumber.

Example: AA:BB:CC:DD:EE:FF
deviceNumber
​number

Whitelist device number of the device. Provide either macId or deviceNumber.

Example: 42
deviceType
​string · enum

Type of device (unused for print lookup)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
batchNumber
​number

Manufacturing batch number (unused for print lookup)

Example: 1
chipModel
​string · enum

Hardware chip model (unused for print lookup)

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string

Firmware version number (unused for print lookup)

Example: 1.0.0
adminCreated
​string

Name of the requester (unused for print lookup)

Example: Manufacturer

PrintQrResponseDto

deviceNumber
​number · required

Auto-assigned device number for this device

Example: 42
macId
​string · required

MAC address of the device

Example: AA:BB:CC:DD:EE:FF
claimUrl
​string · required

Full URL for claiming the device — encode this as QR

Example: https://base.ecovolt.ai/claim/a1b2c3d4e5f6...

ClaimDeviceResponseDto

message
​string · required

Success message

Example: Device claimed successfully
deviceId
​string · required

Device ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceName
​string · required

Device name

Example: Smart Plug 1
deviceNumber
​number · required

Device number

Example: 42
deviceType
​string · enum · required

Device type

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
systemId
​string · required

System ID the device belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c1
zoneId
​string · required

Zone ID the device was assigned to

Example: 64b7f1e6f9c9d4e5b8a9f7c4
zoneName
​string · required

Zone name the device was assigned to

Example: Unit 01-01
tenantId
​string

Tenant ID the device was assigned to (if any)

Example: 64b7f1e6f9c9d4e5b8a9f7c2
tenantName
​string

Tenant name the device was assigned to (if any)

Example: Acme Corp

CreateNotificationDto

title
​string · required

Title of the notification

Example: New Notification
message
​string · required

Message of the notification

Example: Power outage in your area
system
​string · required

Notification for a specific System

type
​string · enum · required

Type of the notification

Enum values:
DEVICE_INACTIVITY_ALERT
POWER_SURGE
TEMP_SURGE
TEMP_DROP
LEAK_DETECTION
USAGE_SURGE
DEVICE_HEALTH_ANOMALY
CO2_SURGE
Example: DEVICE_INACTIVITY_ALERT
recieveType
​string · enum · required

Receive type of the notification

Enum values:
SYSTEM
EMAIL
SMS
PUSH
Example: EMAIL
device
​string

Notification for a specific Device (optional - if not provided, finds system-level admin)

Notification

_id
​string · required

Primary ID of the Notification

Example: 64b7f1e6f9c9d4e5b8a9f7c3
admin
​string · required

The account this copy of the notification belongs to. One document is written per recipient, so this is the audience, not an ownership hint.

title
​string · required

Title of the Notification

Example: System Maintenance
message
​string · required

Message of the Notification

Example: The system will be down for maintenance from 2 AM to 3 AM.
​object · required

Notification for a specific System

device
​string · required

Notification for a specific Device

type
​string · enum · required

Type of the Notification (ENUM)

Enum values:
DEVICE_INACTIVITY_ALERT
POWER_SURGE
TEMP_SURGE
TEMP_DROP
LEAK_DETECTION
USAGE_SURGE
DEVICE_HEALTH_ANOMALY
CO2_SURGE
Example: DEVICE_INACTIVITY_ALERT
recieveType
​string · enum · required

Type of the Notification (ENUM)

Enum values:
SYSTEM
EMAIL
SMS
PUSH
Example: EMAIL
isRead
​boolean · required

Whether the recipient has read this notification. Reading resolves it — there is no separate resolve step.

Example: true
eventKey
​string · required

Identity of the event this notification reports, identical across every recipient copy. Suppression asks whether the event fired, not whether some document exists.

Example: 64b7f1e6f9c9d4e5b8a9f7c3:POWER_SURGE
occurrenceId
​string · required

Identity of the fan-out batch this copy belongs to, identical across every recipient copy of the same occurrence. Unlike eventKey (stable across re-fires), this distinguishes one occurrence from the next so read-side dedup collapses recipient copies without collapsing history.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
createdAt
​string · date-time · required

Creation date of the Notification

Example: 2023-08-01T12:00:00Z
updatedAt
​string · date-time · required

Last update date of the Notification

Example: 2023-08-01T12:00:00Z

NotificationGroup

string · enum
Enum values:
PLUG_MCB_SURGE
ENVIRONMENT_SENSOR
WATER_METER
INACTIVE_DEVICES
SENTINEL_REPORT
DEVICE_HEALTH
AIRCON_CONTROL
RIDGE

SearchQueryResultDto

results
​array[] · required

Search results

total
​number · required

Total number of results

Example: 100

NotificationGroupsResponseDto

groups
​string[] · required

Groups that at least one of the caller visible notifications belongs to. Derived from the notification types actually stored, so a group with nothing in it never appears and the filter cannot offer a dead option.

Enum values:
PLUG_MCB_SURGE
ENVIRONMENT_SENSOR
WATER_METER
INACTIVE_DEVICES
SENTINEL_REPORT
DEVICE_HEALTH
AIRCON_CONTROL
RIDGE

ReadAllNotificationsResponseDto

readCount
​number · required

Number of notifications marked as read

Example: 12

BasicEmailNotificationDto

receiverEmail
​string · required

Email address of the receiver

Example: user@example.com
subject
​string · required

Subject of the email notification

Example: Password Reset Request
content
​string · required

Content of the email notification

Example: Please click the link to reset your password.

BusinessOrderDevice

string · enum
Enum values:
office-printer
office-meeting-pod
office-water-dispenser
office-coffee
office-air-purifier
office-desk
office-tv
office-av

Device type identifier

BusinessSelectedDeviceDto

deviceType
​string · enum · required

Device type identifier

Enum values:
office-printer
office-meeting-pod
office-water-dispenser
office-coffee
office-air-purifier
office-desk
office-tv
office-av
Example: office-printer
qty
​number · min: 1 · required

Number of units of this device

Example: 2

PublicWebEmailNotificationDto

firstName
​string · required

first name of the sender

Example: John
lastName
​string · required

last name of the sender

Example: Doe
phoneNumber
​string · required

phone number of the sender

Example: +1234567890
company
​string · required

company name of the sender

Example: Acme Corp
email
​string · required

Email address of the sender

Example: user@example.com
message
​string · required

Content of the email notification

Example: We are interested in energy solutions for our office.
​object[]

Business devices selected with quantities

selectedCategories
​string[]

Business categories selected

NewsletterSubscriberSource

string · enum
Enum values:
landing-page
other

Subscriber source

NewsletterSubscriberDto

email
​string · required

Subscriber email address

Example: user@example.com
name
​string

Subscriber name

Example: John Doe
subscribedFromSource
​string · enum

Subscriber source

Enum values:
landing-page
other
Example: landing-page

NewsletterSubscriberStatus

string · enum
Enum values:
SUBSCRIBED
UNSUBSCRIBED

Status of the newsletter subscriber

NewsletterSubscriberResponseDto

_id
​string · required

Unique identifier of the newsletter subscriber

Example: 64a7b2f5c9e77b6f4d8e4a2b
email
​string · required

Email of the newsletter subscriber

Example: ecovolt@example.com
status
​string · enum · required

Status of the newsletter subscriber

Enum values:
SUBSCRIBED
UNSUBSCRIBED
Example: SUBSCRIBED
name
​string

Name of the newsletter subscriber

Example: John Doe
subscribedFromIp
​string

IP address from which the user subscribed

Example: 192.168.1.1
subscribedFromSource
​string · enum

Source from which the user subscribed

Enum values:
landing-page
other
Example: landing-page
createdAt
​string · date-time

Timestamp when the subscriber was created

Example: 2024-07-01T10:00:00Z
updatedAt
​string · date-time

Timestamp when the subscriber was last updated

Example: 2024-07-01T10:00:00Z

EmailRecipientsType

string · enum
Enum values:
ALL_SUBSCRIBERS
ADMINS
MANUAL_SELECTION

Type of recipient list for the email campaign

ManualSelectionRecipientType

string · enum
Enum values:
Admin
NewsletterSubscriber

Type of recipient

ManualSelectionRecipientDto

recipientType
​string · enum · required

Type of recipient

Enum values:
Admin
NewsletterSubscriber
Example: NewsletterSubscriber
recipientId
​string · required

ID of the recipient

Example: 64b8c3d2e1f4a2b3c4d5e6f7

CreateEmailCampaignDto

name
​string · required

Name of the email campaign

Example: July 2024 Newsletter Campaign
templateId
​string · required

ID of the newsletter template to use for the email campaign

Example: 64a7b2f5c9e77b6f4d8e4a2b
recipientType
​string · enum · required

Type of recipient list for the email campaign

Enum values:
ALL_SUBSCRIBERS
ADMINS
MANUAL_SELECTION
Example: ALL_SUBSCRIBERS
subject
​string

Subject of the campaign email

Example: Exciting Updates in Our July Newsletter!
​object[]

List of manually selected recipients with their types (required if recipientType is MANUAL_SELECTION)

scheduledAt
​string

Scheduled send time for the email campaign in ISO 8601 format

Example: 2024-07-01T10:00:00Z

EmailCampaignStatus

string · enum
Enum values:
DRAFT
SCHEDULED
SENDING
SENT
FAILED
CANCELLED

Current status of the email campaign

EmailCampaign

_id
​string · required

Unique identifier of the email campaign

Example: 64a7b2f5c9e77b6f4d8e4a2b
name
​string · required

Name of the email campaign

Example: July Newsletter Campaign
sourceTemplate
​string · required

Reference to the original template used for this email campaign

Example: 64a7b2f5c9e77b6f4d8e4a2b
subject
​string · required

Subject of the campaign email

Example: Exciting Updates in Our July Newsletter!
designJson
​object · required

Copied JSON from template for campaign-specific email customization

Example: {"body":{"rows":[],"values":{"backgroundColor":"#ffffff","contentWidth":"600px"}}}
renderedHtml
​string · required

Rendered HTML content for this email campaign

Example: <html><body><h1>Welcome to our Newsletter</h1></body></html>
plainText
​string · required

Plain text version of the email campaign

Example: Welcome to our Newsletter
previewText
​string · required

Short text that appears in email preview before opening

Example: This is the preview text for the newsletter email.
recipientType
​string · enum · required

Type of recipients for the email campaign

Enum values:
ALL_SUBSCRIBERS
ADMINS
MANUAL_SELECTION
Example: ALL_SUBSCRIBERS
​object[] · required

List of manually selected recipients with their types (if recipientType is MANUAL_SELECTION)

status
​string · enum · required

Current status of the email campaign

Enum values:
DRAFT
SCHEDULED
SENDING
SENT
FAILED
CANCELLED
Example: DRAFT
scheduledAt
​string · date-time · required

Scheduled send time for the email campaign

Example: 2024-08-01T10:00:00Z
scheduleName
​string · required

AWS EventBridge Scheduler name for the scheduled campaign send

Example: oneoff_SEND_EMAIL_CAMP_64a7b2f5c9e77b6f4d8e4a2b_1234567890_deve
sentAt
​string · date-time · required

Time when the email campaign was sent

Example: 2024-08-01T10:00:00Z
totalRecipients
​number · required

Total number of recipients for the email campaign

Example: 1500
errorMessage
​string · required

Error message if campaign sending failed

Example: Campaign failed due to SMTP server error.
createdBy
​string · required

Admin who created the campaign

Example: 64a7b2f5c9e77b6f4d8e4a2b
updatedBy
​string · required

Admin who last updated the campaign

Example: 64a7b2f5c9e77b6f4d8e4a2b

SendEmailCampaignDto

campaignId
​string · required

ID of the email campaign to be sent

Example: 60f7c0b5b4d1c826d8f0e6b7
status
​string · enum · required

Current status of the email campaign

Enum values:
DRAFT
SCHEDULED
SENDING
SENT
FAILED
CANCELLED
Example: SCHEDULED
message
​string · required

Result message after attempting to send the email campaign

Example: Campaign scheduled successfully
totalRecipients
​number · required

Total number of recipients for the email campaign

Example: 1500

SendTestEmailRequestDto

testEmail
​string · required

Email address to send the test email to

Example: test@example.com
testName
​string

Name of the test recipient for personalization

Example: John Doe

GetEmailCampaignsDto

​object[] · required

List of email campaigns

total
​number · required

Total number of email campaigns

Example: 10

UpdateEmailCampaignDto

name
​string

Name of the email campaign

Example: July 2024 Newsletter Campaign - Updated
subject
​string

Subject of the campaign email

Example: Exciting Updates in Our July Newsletter!
recipientType
​string · enum

Type of recipient list for the email campaign

Enum values:
ALL_SUBSCRIBERS
ADMINS
MANUAL_SELECTION
Example: ALL_SUBSCRIBERS
​object[]

List of manually selected recipients with their types (used when recipientType is MANUAL_SELECTION)

designJson
​object

Unlayer design JSON for campaign-specific email customization

Example: {"body":{"rows":[],"values":{"backgroundColor":"#ffffff","contentWidth":"600px"}}}
renderedHtml
​string

Rendered HTML content of the email campaign

Example: <html><body><h1>Welcome</h1></body></html>
plainText
​string

Plain text version of the email campaign

Example: Welcome to our newsletter
previewText
​string

Short text that appears in email preview before opening

Example: Check out the latest news and updates!
scheduledAt
​null | string

Scheduled send time for the email campaign in ISO 8601 format. Set to null to convert SCHEDULED to DRAFT.

Example: 2024-07-01T10:00:00Z

EmailTemplateDto

name
​string · required

Name of the email template

Example: Monthly Newsletter Template
subject
​string · required

Subject of the email template

Example: Your Ecovolt Monthly Update!
designJson
​object · required

JSON structure of the email template

Example: {"body":{"rows":[],"values":{"backgroundColor":"#ffffff","contentWidth":"600px"}}}
description
​string

Description of the email template

Example: A template for our monthly newsletters
previewText
​string

Preview text for the email template

Example: Check out the latest news and updates!
renderedHtml
​string

Rendered HTML content of the email template

Example: <html><body><h1>Welcome</h1></body></html>
plainText
​string

Plain text version of the email template

Example: Welcome to our newsletter

EmailTemplateStatus

string · enum
Enum values:
DRAFT
PUBLISHED
ARCHIVED

Indicates status of the email template

EmailTemplate

_id
​string · required

Unique identifier of the email template

Example: 64a7b2f5c9e77b6f4d8e4a2b
name
​string · required

Name of the email template

Example: Weekly Update
description
​string · required

Description of the email template

Example: Template for the weekly Email updates
subject
​string · required

Subject of the email template

Example: Your Weekly News is Here!
designJson
​object · required

JSON from Unlayer editor

Example: {"body":{"rows":[],"values":{"backgroundColor":"#ffffff","contentWidth":"600px"}}}
renderedHtml
​string · required

Compiled HTML content of the email template

Example: <html><body><h1>Welcome to our Email</h1></body></html>
plainText
​string · required

Plain text version of the email template

Example: Welcome to our Email
previewText
​string · required

Short text that appears in email preview before opening

Example: This is the preview text for the Email email.
status
​string · enum · required

Indicates status of the email template

Enum values:
DRAFT
PUBLISHED
ARCHIVED
Example: DRAFT
thumbnailUrl
​string · required

Thumbnail image of the template for superadmin dashboard

Example: https://example.com/thumbnail-image.png
createdBy
​string · required

Admin who created the template

Example: 64a7b2f5c9e77b6f4d8e4a2b
updatedBy
​string · required

Admin who last updated the template

Example: 64a7b2f5c9e77b6f4d8e4a2b

GetEmailTemplatesDto

​object[] · required

List of email templates

total
​number · required

Total number of email templates

Example: 25

PreviewEmailTemplateDto

renderedHtml
​string · required

Rendered HTML preview of the email template

Example: <html><body><h1>Welcome to our Newsletter</h1></body></html>
plainText
​string

Plain text version of the email template preview

Example: Welcome to our Newsletter

UpdateEmailTemplateDto

name
​string

Name of the email template

Example: Monthly Newsletter Template
description
​string

Description of the email template

Example: A template for our monthly newsletters
subject
​string

Subject of the email template

Example: Your Ecovolt Monthly Update!
designJson
​object

JSON structure of the email template

Example: {"body":{"rows":[],"values":{"backgroundColor":"#ffffff","contentWidth":"600px"}}}
previewText
​string

Preview text for the email template

Example: Check out the latest news and updates!
renderedHtml
​string

Rendered HTML content of the email template

Example: <html><body><h1>Welcome</h1></body></html>
plainText
​string

Plain text version of the email template

Example: Welcome to our newsletter
status
​string · enum

Status of the email template

Enum values:
DRAFT
PUBLISHED
ARCHIVED
Example: DRAFT

CreateFirmwareDto

versionNumber
​string · required

Semantic version number for the firmware release. Must follow the format major.minor.patch (e.g., 1.0.0).

Example: 2.1.5
chipModel
​string · enum · required

Target chip model for this firmware build. Determines which plug devices can receive this firmware.

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
deviceType
​string · enum · required

Type of device this firmware is intended for (e.g., PLUG, MCB, ENV_SENSOR).

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
remarks
​string · required

Optional release notes or comments about this firmware version. Used to document changes and fixes.

Example: Bug fixes for power monitoring accuracy and stability improvements
file
​string · required
mcbType
​string · enum

MCB subtype the firmware targets. Required when deviceType === MCB; ignored otherwise.

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: COIL

ReuploadFirmwareDto

file
​string · required
remarks
​string

Optional updated release notes or comments about this firmware version. Used to document changes and fixes.

Example: Re-uploaded with critical security patch for authentication vulnerability

GetFirmwareResponseDto

_id
​string · required

Primary ID of the Firmware

Example: 64b7f1e6f9c9d4e5b8a9f7c3
adminCreated
​string · required

Name of the admin who created the firmware entry

Example: Glenn
versionNumber
​string · required

Firmware version number

Example: 1.0.0
chipModel
​string · enum · required

Chip Model of the Device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
deviceType
​string · enum · required

Type of device this firmware is intended for

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
createdAt
​string · date-time · required

Timestamp when the firmware was created

Example: 2024-01-15T10:30:00Z
updatedAt
​string · date-time · required

Timestamp when the firmware was last updated

Example: 2024-01-15T10:30:00Z
adminLastModified
​string

Name of the admin who last modified/re-uploaded the firmware

Example: Glenn
mcbType
​string · enum

MCB subtype this firmware targets. Set only when deviceType === MCB.

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: COIL
remarks
​string

Remarks or notes about the firmware

Example: Initial release with basic features

DeleteFirmwareByPrefixResponseDto

deleted
​number · required

Number of firmware records removed

Example: 12

SendOtaDto

deviceIds
​string[] · required

Array of unique plug identifiers to receive the OTA firmware update. Each plug will be notified via MQTT.

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
versionNumber
​string · required

Firmware version number to push to the specified devices. Must exist in the firmware repository.

Example: 2.1.5
chipModel
​string · enum · required

Target chip model for firmware compatibility validation. Ensures plugs receive compatible firmware.

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
deviceType
​string · enum · required

Type of device this firmware is intended for (e.g., PLUG, MCB, ENV_SENSOR).

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
mcbType
​string · enum

MCB subtype to match against the firmware record. Required when deviceType === MCB.

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: COIL
targetVersion
​string

Optional filter to verify plugs are running this specific firmware version before updating. Used for validation.

Example: 2.0.8
streaming
​boolean

Deliver the firmware as an AWS IoT Job with MQTT stream file delivery instead of pushing a download URL. Streaming needs no outbound HTTPS from the device and yields a trackable job id, but the device firmware must implement the IoT Jobs + streams client.

Example: false
Default: false

OtaDispatchMode

string · enum
Enum values:
STREAM
MQTT_URL

How the firmware was delivered

OtaDispatchResponseDto

mode
​string · enum · required

How the firmware was delivered

Enum values:
STREAM
MQTT_URL
Example: STREAM
jobId
​string

AWS IoT Job id. Streaming mode only — poll it for progress.

Example: ota-plug-all-2-1-5-1786958377275
streamId
​string

AWS IoT stream id carrying the firmware. Streaming mode only.

Example: ota-plug-all-2-1-5-1786958377275-stream
targetCount
​number

Number of devices targeted. Streaming mode only.

Example: 12

MassSendOtaRollbackDto

chipModel
​string · enum · required

Chip Model of the Plug

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
deviceType
​string · enum · required

Type of device this firmware is intended for (e.g., PLUG, MCB, ENV_SENSOR).

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG

SendOtaRollbackDto

deviceIds
​string[] · required

List of unique Plug IDs

Example: 1092384701928347
chipModel
​string · enum · required

Chip Model of the Plug

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
deviceType
​string · enum · required

Type of device this firmware is intended for (e.g., PLUG, MCB, ENV_SENSOR).

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG

GetFirmwareListDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of firmware objects containing version details, chip models, and metadata. Sorted by creation date. File information is excluded for security.

GenerateDownloadUrlResponseDto

url
​string · required

Clean OTA download URL without embedded token

Example: https://api.ecovolt.ai/firmware/download-ota-update?versionNumber=1.0.4&chipModel=ESP32C2&deviceType=PLUG
jwtToken
​string · required

JWT token for Authorization header (devices should send as Bearer token)

Example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

VersionDistributionDto

versionNumber
​string · required

Firmware version number

Example: 1.0.0
deviceCount
​number · required

Number of devices with this firmware version

Example: 25

ChipModelDistributionDto

chipModel
​string · enum · required

Chip model

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32
totalDevices
​number · required

Total number of devices for this chip model

Example: 50
​object[] · required

Distribution of firmware versions for this chip model

DeviceTypeFirmwareDistributionDto

deviceType
​string · enum · required

Device type

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
totalDevices
​number · required

Total number of devices for this device type

Example: 100
​object[] · required

Distribution of firmware versions grouped by chip model

GetFirmwareVersionDistributionDto

​object[] · required

Firmware version distribution grouped by device type

total
​number · required

Total number of device types

Example: 6

DeviceFirmwareInfoDto

_id
​string · required

Device ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

Device MAC ID

Example: 1092384701928347
deviceType
​string · enum · required

Device type

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
onStatus
​string · enum · required

Device status

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
systemName
​string · required

System name

Example: Main Building System
systemId
​string · required

System ID

Example: 64b7f1e6f9c9d4e5b8a9f7c4
deviceName
​string

Device name

Example: Living Room AC
deviceNumber
​number

Device number

Example: 1
chipModel
​string · enum

Chip model

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32
versionNumber
​string

Firmware version number

Example: 1.0.0
lastSeen
​string · date-time

Last time the device was seen/reported

Example: 2024-01-15T10:30:00.000Z
autoUpdateAttempts
​number

Number of auto-update attempts for this device

Example: 2
Default: 0
autoUpdateBlacklisted
​boolean

Whether the device is automatically blacklisted from auto-updates (max retries exceeded)

Example: false
Default: false
manualUpdateBlacklist
​boolean

Whether the device is manually blacklisted from auto-updates by admin

Example: false
Default: false

GetDeviceFirmwareListDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

List of devices with firmware information

CreateAutoUpdatePolicyDto

enabled
​boolean · required

Enable or disable the auto-update policy

Example: false
Default: false
deviceType
​string · enum · required

Target device type for auto-updates

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
chipModel
​string · enum · required

Target chip model for auto-updates

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32
targetVersion
​string · required

Target firmware version to auto-update devices to

Example: 2.0.0
mcbType
​string · enum

MCB subtype the policy targets. Required when deviceType === MCB; ignored otherwise.

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: COIL
sourceVersions
​string[]

List of source firmware versions to update FROM. If empty or not provided, updates all versions. If specified, only devices on these versions will be auto-updated.

Example: ["1.1.0","1.2.0"]
Default: []
streaming
​boolean

Deliver firmware as an AWS IoT Job + MQTT stream instead of pushing a download URL. One job covers the whole cohort — an offline device picks up its queued execution when it reconnects. Requires firmware that implements the IoT Jobs + streams client.

Example: false
Default: false
maxRetries
​number

Maximum number of OTA attempts per device before blacklisting

Example: 5
Default: 5

AutoUpdatePolicyResponseDto

_id
​string · required

Primary ID of the policy

Example: 64b7f1e6f9c9d4e5b8a9f7c3
enabled
​boolean · required

Enable or disable the auto-update policy

Example: true
deviceType
​string · enum · required

Target device type for auto-updates

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
chipModel
​string · enum · required

Target chip model for auto-updates

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32
targetVersion
​string · required

Target firmware version to auto-update devices to

Example: 2.0.0
streaming
​boolean · required

Whether the policy delivers firmware as an AWS IoT Job + MQTT stream instead of pushing a download URL.

Example: false
maxRetries
​number · required

Maximum number of OTA attempts per device before blacklisting

Example: 5
createdBy
​string · required

Admin email/ID who created this policy

Example: admin@example.com
lastModifiedBy
​string · required

Admin email/ID who last modified this policy

Example: admin@example.com
createdAt
​string · date-time · required

Timestamp when the policy was created

Example: 2024-01-15T10:30:00Z
updatedAt
​string · date-time · required

Timestamp when the policy was last updated

Example: 2024-01-15T10:30:00Z
sourceVersions
​string[]

List of source firmware versions to update FROM. If empty, updates all versions.

Example: ["1.1.0","1.2.0"]

AutoUpdateAffectedDeviceDto

_id
​string · required

Primary ID of the device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceName
​string · required

Device name

Example: Living Room Plug
macId
​string · required

Device MAC address

Example: AA:BB:CC:DD:EE:01
deviceType
​string · required

Device type

Example: PLUG
chipModel
​string · required

Chip model

Example: ESP32
versionNumber
​string · required

Current firmware version

Example: 1.9.2
autoUpdateAttempts
​number · required

Number of auto-update OTA attempts sent to this device

Example: 2
autoUpdateBlacklisted
​boolean · required

Whether device is blacklisted from further auto-update attempts

Example: false
​object · required

System information

lastAutoUpdateAttempt
​string · date-time

Timestamp of last auto-update OTA attempt

Example: 2024-01-15T08:45:00Z

AutoUpdateAffectedDevicesListDto

​object[] · required

List of devices affected by the auto-update policy

total
​number · required

Total number of devices matching the policy criteria

Example: 25
policyTargetVersion
​string · required

Target firmware version from the policy

Example: 2.0.0
needsUpdateCount
​number · required

Number of devices that need updates (version mismatch, not blacklisted)

Example: 18

CreateOtaJobDto

deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: MCB
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32
targetVersion
​string · required

Firmware version to roll out to

Example: 2.0.0
mcbType
​string · enum

MCB subtype. Required when deviceType === MCB.

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: COIL3P
sourceVersions
​string[]

Only target devices currently on these versions. Empty/omitted = all older versions.

Example: ["1.1.0","1.2.0"]
Default: []
deviceIds
​string[]

Restrict the rollout to these specific devices. Intersected with the type/chip/version filter — a listed device still needs the update to be targeted. Omitted = every matching device.

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
systemIds
​string[]

Restrict the rollout to devices in these systems. Omitted = every system. Intersected with the type/chip/version filter.

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
maxPerMinute
​number

Rollout rate cap (devices per minute).

Example: 20
Default: 20
abortThresholdPercentage
​number

Abort the rollout if this % of executions fail.

Example: 20
Default: 20

OtaJobResponseDto

jobId
​string · required

AWS IoT Job ID for the rollout

Example: ota-mcb-COIL3P-2.0.0-1737500000000
streamId
​string · required

AWS IoT Stream ID the firmware is delivered through (MQTT)

Example: ota-stream-mcb-2.0.0-1737500000000
targetCount
​number · required

Number of devices targeted by the rollout

Example: 42
fileSizeBytes
​number · required

Firmware size in bytes (streamed in blocks)

Example: 842192

OtaJobStatus

string · enum
Enum values:
SCHEDULED
IN_PROGRESS
COMPLETED
CANCELED
DELETION_IN_PROGRESS

OtaJobListItemDto

jobId
​string · required

AWS IoT Job ID

deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
targetVersion
​string · required
targetCount
​number · required

Devices targeted at creation

Example: 42
status
​string · enum · required
Enum values:
SCHEDULED
IN_PROGRESS
COMPLETED
CANCELED
DELETION_IN_PROGRESS
succeeded
​number · required

Executions succeeded (last reconcile)

Example: 30
failed
​number · required

Executions failed/timed out (last reconcile)

Example: 2
createdAt
​string · date-time · required

When the rollout was created

mcbType
​string · enum

MCB type (MCB only)

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P

GetOtaJobsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

OtaJobExecutionDto

thingName
​string · required

Target Thing name

Example: ecovolt_mcb_F0:F5:BD:89:D5:00
status
​string · enum · required

Execution status

Enum values:
QUEUED
IN_PROGRESS
SUCCEEDED
FAILED
TIMED_OUT
REJECTED
REMOVED
CANCELED
Example: SUCCEEDED
detail
​string

Raw device-reported progress from statusDetails, when the firmware publishes it. Only populated while the execution is IN_PROGRESS.

Example: 99.63%
progressPercent
​number

Download progress parsed from detail. Absent when the device does not report progress — render an indeterminate bar in that case.

Example: 99.63

OtaJobStatusDto

jobId
​string · required
status
​string · enum · required

Overall job status

Enum values:
IN_PROGRESS
CANCELED
COMPLETED
DELETION_IN_PROGRESS
SCHEDULED
Example: IN_PROGRESS
​object[] · required
total
​number · required

Total target devices

Example: 42
succeeded
​number · required

Executions that succeeded

Example: 30
failed
​number · required

Executions that failed / timed out / were rejected

Example: 2
queued
​number · required

Executions still queued — device has not picked the job up

Example: 8
inProgress
​number · required

Executions the device is currently running

Example: 2
percentComplete
​number · required

Percent of targets in a terminal state ((succeeded + failed) / total)

Example: 76

CreateTenantDto

tenantName
​string · required

Name of the tenant. Represents a department, unit, or organization within the system.

Example: Faculty of Engineering
adminCreation
​boolean · required

Flag indicating whether an tenant admin should be created, if so send invite.

tenantEmail
​string

Primary email address for tenant contact. Used for notifications and billing communications.

Example: engineering@university.edu
remarks
​string

Additional notes or comments about the tenant. Useful for documenting special arrangements or contact details.

Example: Main office located on 7th floor, contact person: John Doe
level
​number

Floor number where the tenant is primarily located. Used for organizing tenants within a building.

Example: 7
energyUsage
​number

Initial energy usage budget allocated to the tenant in kilowatt-hours. Used for tracking consumption against quotas.

Example: 1000
​object

Geographic location details of the tenant. Includes address, city, country, and coordinates for mapping purposes.

tenantType
​string

Tenant type key. Must be a valid type defined for this system via /entity-type/TENANT.

Example: RETAIL

GetTenantDto

_id
​string · required

Unique identifier of the tenant in the database.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
tenantName
​string · required

Name of the tenant. Represents a department, unit, or organization within the system.

Example: Faculty of Engineering
tenantEmail
​string · required

Primary email address for tenant contact. Used for notifications and billing communications.

Example: engineering@university.edu
deviceCount
​number · required

Total count of devices assigned to this tenant. Used for resource allocation tracking.

Example: 15
deviceOnCount
​number · required

Number of devices currently in ON status for this tenant.

Example: 8
deviceOffCount
​number · required

Number of devices currently in OFF status for this tenant.

Example: 5
deviceInactiveCount
​number · required

Number of devices currently in INACTIVE status for this tenant.

Example: 2
totalEnergyUsage
​number · required

Energy usage budget allocated to the tenant in kilowatt-hours. Tracks consumption against quotas.

Example: 1000
​object

Geographic location details of the tenant. Includes address, city, country, and coordinates.

level
​number

Floor number where the tenant is primarily located. Used for organizing tenants within a building.

Example: 7
deviceSpareCount
​number

Number of spare devices for this tenant.

Example: 3
rangeEnergyUsage
​number

Energy consumption over the from..till window in kWh, aggregated from daily usage history. Present only when both query params are supplied — unlike the cumulative totalEnergyUsage, this is windowed.

Example: 42.75
totalFlaggedCount
​number

Total number of rolling windows this tenant has been flagged. Represents how many different time periods the tenant exceeded thresholds.

Example: 3
totalViolationCount
​number

Total number of individual violations across all time. Sum of all daily violations ever recorded for this tenant.

Example: 15
isMonitoringDisabled
​boolean

Whether surge monitoring is disabled for this tenant. If true, the tenant will not be checked for energy threshold violations.

Example: false
suspectedDeviceTypes
​string[]

Device types suspected of causing surge violations for this tenant.

Example: ["PLUG","MCB"]
confirmedDeviceTypes
​string[]

Device types an operator has confirmed as the cause of surge violations for this tenant.

Example: ["Water Heater"]
tenantType
​string

Tenant type key

Example: RETAIL

GetTenantsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of tenant objects matching the query criteria

GetRoomDto

_id
​string · required

Unique identifier of the room in MongoDB ObjectId format.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
name
​string · required

Display name of the room as registered in the system.

Example: Living Room
deviceCount
​number · required

Total count of devices currently assigned to this room.

Example: 8
deviceOnCount
​number · required

Number of devices currently in ON status for this room.

Example: 4
deviceOffCount
​number · required

Number of devices currently in OFF status for this room.

Example: 3
deviceInactiveCount
​number · required

Number of devices currently in INACTIVE status for this room.

Example: 1
totalEnergyUsage
​number · required

Cumulative energy consumption from all devices in this room, measured in kilowatt-hours (kWh).

Example: 124.67
tenantId
​string

Unique identifier of the tenant organization that owns this room.

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantName
​string

Name of the tenant organization that owns this room. Included when tenant data is populated.

Example: Faculty of Engineering
zoneId
​string

Unique identifier of the zone that has access to this room.

Example: 64b7f1e6f9c9d4e5b8a9f7c5
zoneName
​string

Name of the zone that has access to this room. Included when zone data is populated.

Example: Zone A
remarks
​string

Optional administrative notes or comments about the room. Used for describing room purpose or equipment.

Example: Conference room with presentation equipment
deviceSpareCount
​number

Number of spare devices for this room.

Example: 3
rangeEnergyUsage
​number

Energy consumption over the from..till window in kWh, aggregated from daily usage history. Present only when both query params are supplied — unlike the cumulative totalEnergyUsage, this is windowed.

Example: 42.75
totalFlaggedCount
​number

Total number of rolling windows this room has been flagged. Represents how many different time periods the room exceeded thresholds.

Example: 5
totalViolationCount
​number

Total number of individual violations across all time. Sum of all daily violations ever recorded for this room.

Example: 22
isMonitoringDisabled
​boolean

Whether surge monitoring is disabled for this room. If true, the room will not be checked for energy threshold violations.

Example: false
squareMeter
​number

Floor area of the room in square meters.

Example: 25.5
energyIntensity
​number

Energy intensity over the past 30 days in kWh/m²/month. Null if the room has no squareMeter set.

Example: 10.8
suspectedDeviceTypes
​string[]

Device types suspected of causing surge violations for this room.

Example: ["PLUG","MCB"]
confirmedDeviceTypes
​string[]

Device types an operator has confirmed as the cause of surge violations for this room.

Example: ["Water Heater"]
roomType
​string

Room type key

Example: MEETING_ROOM

GetZoneDto

_id
​string · required

Unique identifier of the zone in MongoDB ObjectId format.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
name
​string · required

Full name of the zone as registered in the system.

Example: Zone A - Engineering Wing
email
​string · required

Email address of the zone used for authentication and notifications.

Example: zone-a@ecovolt.com
deviceCount
​number · required

Total count of devices currently assigned to this zone across all their rooms.

Example: 12
deviceOnCount
​number · required

Number of devices currently in ON status for this zone.

Example: 6
deviceOffCount
​number · required

Number of devices currently in OFF status for this zone.

Example: 4
deviceInactiveCount
​number · required

Number of devices currently in INACTIVE status for this zone.

Example: 2
totalEnergyUsage
​number · required

Cumulative energy consumption from all devices assigned to the zone, measured in kilowatt-hours (kWh).

Example: 124.67
remarks
​string

Optional administrative notes or comments about the zone. Used for internal tracking and context.

Example: Department head - Engineering
tenantName
​string

Name of the tenant organization that the zone belongs to. Included when tenant data is populated.

Example: Faculty of Engineering
tenantId
​string

Unique identifier of the tenant organization that the zone is associated with.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
deviceSpareCount
​number

Number of spare devices for this zone.

Example: 3
rangeEnergyUsage
​number

Energy consumption over the from..till window in kWh, aggregated from daily usage history. Present only when both query params are supplied — unlike the cumulative totalEnergyUsage, this is windowed.

Example: 42.75
​object[]

Array of room objects that the zone has access to. Included when room details are populated.

totalFlaggedCount
​number

Total number of rolling windows this zone has been flagged. Represents how many different time periods the zone exceeded thresholds.

Example: 2
totalViolationCount
​number

Total number of individual violations across all time. Sum of all daily violations ever recorded for this zone.

Example: 8
isMonitoringDisabled
​boolean

Whether surge monitoring is disabled for this zone. If true, the zone will not be checked for energy threshold violations.

Example: false
suspectedDeviceTypes
​string[]

Device types suspected of causing surge violations for this zone.

Example: ["PLUG","MCB"]
confirmedDeviceTypes
​string[]

Device types an operator has confirmed as the cause of surge violations for this zone.

Example: ["Water Heater"]
zoneType
​string

Zone type key

Example: LABORATORY

TenantRelationshipDto

_id
​string · required

Unique identifier of the tenant in the database.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
tenantName
​string · required

Name of the tenant. Represents a department, unit, or organization within the system.

Example: Faculty of Engineering
energyUsage
​number · required

Energy usage budget allocated to the tenant in kilowatt-hours. Tracks consumption against quotas.

Example: 1000
​object[] · required

Array of IoT devices assigned to this tenant. Includes all device types: smart plugs, MCBs, distribution boxes, etc.

​object[] · required

Array of rooms belonging to this tenant. Provides room hierarchy and organization.

​object[] · required

Array of zones assigned to this tenant. Includes zone accounts with access to tenant resources.

numberOfZones
​number · required

Total count of zones assigned to this tenant. Used for resource planning and statistics.

Example: 24
numberOfRooms
​number · required

Total count of rooms belonging to this tenant. Used for resource planning and statistics.

Example: 18
numberOfDevices
​number · required

Total count of IoT devices assigned to this tenant. Used for resource planning and statistics. Includes all device types: smart plugs, MCBs, distribution boxes, etc.

Example: 65

GetTenantsRelationshipDto

​object[] · required

Array of tenants with their complete relationship hierarchy including zones, rooms, and devices.

numberOfTenants
​number · required

Total count of tenants in the system. Useful for pagination and statistics.

Example: 12
numberOfZones
​number · required

Total count of zones across all tenants in the system. Useful for system-wide statistics.

Example: 145
numberOfRooms
​number · required

Total count of rooms across all tenants in the system. Useful for system-wide statistics.

Example: 87
numberOfDevices
​number · required

Total count of IoT devices across all tenants in the system. Useful for system-wide statistics. Includes all device types: smart plugs, MCBs, distribution boxes, etc.

Example: 342

RoomEnergyUsageDto

roomId
​string · required

Unique identifier of the room

Example: 64b7f1e6f9c9d4e5b8a9f7c1
roomName
​string · required

Name of the room

Example: Conference Room A
energyUsage
​number · required

Total energy usage in kilowatt-hours (kWh) for the specified period

Example: 125.45
isFlagged
​boolean · required

Whether the room is currently flagged by surge monitoring

Example: false
totalFlaggedCount
​number · required

Rolling windows in which the room exceeded its threshold

Example: 5
totalViolationCount
​number · required

Individual violations recorded for the room, all time

Example: 22
isMonitoringDisabled
​boolean · required

Whether surge monitoring is disabled for this room

Example: false
suspectedDeviceTypes
​string[]

Device types suspected of causing surge violations

Example: ["PLUG","MCB"]
confirmedDeviceTypes
​string[]

Device types an operator has confirmed as the cause

Example: ["Water Heater"]

GetRoomEnergyUsageResponseDto

tenantId
​string · required

Tenant ID for which energy usage was calculated

Example: 64b7f1e6f9c9d4e5b8a9f7c1
days
​number · required

Number of days the energy usage was calculated over

Example: 7
startDate
​string · required

Start date of the energy usage period (ISO 8601 format)

Example: 2024-01-15T00:00:00.000Z
endDate
​string · required

End date of the energy usage period (ISO 8601 format)

Example: 2024-01-22T00:00:00.000Z
​object[] · required

List of rooms with their energy usage data

totalRooms
​number · required

Total number of rooms found for this tenant

Example: 5
totalEnergyUsage
​number · required

Total energy usage across all rooms in kWh

Example: 547.32

UpdateTenantDto

tenantName
​string · required

Name of the tenant. Represents a department, unit, or organization within the system.

Example: Faculty of Engineering
tenantEmail
​string · required

Primary email address for tenant contact. Used for notifications and billing communications.

Example: engineering@university.edu
​object · required

Geographic location details of the tenant. Includes address, city, country, and coordinates for mapping purposes.

remarks
​string

Additional notes or comments about the tenant. Useful for documenting special arrangements or contact details.

Example: Main office located on 7th floor, contact person: John Doe
level
​number

Floor number where the tenant is primarily located. Used for organizing tenants within a building.

Example: 7
tenantType
​string

Tenant type key. Must be a valid type defined for this system via /entity-type/TENANT.

Example: RETAIL

SurgeConfigTypeOverride

calculatedThresholdKwh
​number

Auto-calculated threshold (kWh) for this type key

Example: 8
manualThresholdKwh
​number

Manual threshold override (kWh) for this type key — wins over calculatedThresholdKwh

Example: 4
sentinelPowerRangeRules
​array[]

Sentinel power range rules for this type key. Replaces the baseline rules entirely when set.

MonitoringEntityType

string · enum
Enum values:
ROOM
TENANT
ZONE

Type of entity to start usage surge analysis for

StartAnalysisDto

entityType
​string · enum · required

Type of entity to start usage surge analysis for

Enum values:
ROOM
TENANT
ZONE
Example: ROOM
startDate
​string · required

Start date for historical analysis (YYYY-MM-DD format). Must be at least 7 days before end date.

Example: 2026-01-01
endDate
​string · required

End date for historical analysis (YYYY-MM-DD format). Must be at least 7 days after start date.

Example: 2026-01-14
initialFlagThreshold
​number · required

Minimum number of violations required to flag an entity as initially problematic during analysis

Example: 10

McbMeasurementTypeBreakdown

measurementType
​string · enum · required

MCB measurement type classification

Enum values:
SSO
LIGHTS_FANS
LIGHTS
FANS
AIRCON
POWER_OUTLETS
GENERAL
COMBINED
Example: AIRCON
energyKwh
​number · required

Total energy consumption in kWh for this measurement type

Example: 123.45
costAmount
​number · required

Total cost amount for this measurement type

Example: 35.18

EntityEnergyBreakdown

​object[] · required

Energy breakdown by MCB measurement type

totalEnergyKwh
​number · required

Total energy consumption across all measurement types (kWh)

Example: 456.78
totalCost
​number · required

Total cost across all measurement types ($)

Example: 130.18
periodDays
​number · required

Number of days in the analysis period

Example: 7
dailyAverageKwh
​number · required

Daily average energy consumption (kWh)

Example: 65.25
predictedMonthlyKwh
​number · required

Predicted monthly energy consumption (kWh)

Example: 1957.5
predictedMonthlyCost
​number · required

Predicted monthly cost ($)

Example: 558.39

EntityAnalysisDetailDto

entityId
​string · required

Entity ID

Example: 65a1b2c3d4e5f6a7b8c9d0e1
entityName
​string · required

Entity name

Example: Conference Room A
averageDailyUsageKwh
​number · required

Average daily usage during analysis period (kWh)

Example: 12.5
totalUsageKwh
​number · required

Total usage during analysis period (kWh)

Example: 175
validDaysCount
​number · required

Number of days with valid data in analysis period

Example: 14
exceededThreshold
​boolean · required

Whether this entity exceeded the threshold during analysis

Example: false
exceedanceCount
​number · required

Number of times threshold was exceeded during analysis period

Example: 0
predictedMonthlyKwh
​number · required

Predicted monthly usage (kWh) based on average daily usage

Example: 375
predictedYearlyKwh
​number · required

Predicted yearly usage (kWh) based on average daily usage

Example: 4562.5
predictedMonthlyCost
​number · required

Predicted monthly cost based on tariff

Example: 75
predictedYearlyCost
​number · required

Predicted yearly cost based on tariff

Example: 912.5
​object · required

Energy breakdown by MCB measurement type

typeKey
​string

The entity's own type key (Room.roomType / Tenant.tenantType / Zone.zoneType). Omitted when the entity has none.

Example: MEETING_ROOM

ThresholdSource

string · enum
Enum values:
TYPE
BASELINE

TYPE when the threshold was calculated from this type key alone; BASELINE when the group had too few entities with valid data and the system-wide threshold was used instead.

TypeKeyAnalysisDto

calculatedThresholdKwh
​number · required

Threshold in kWh for this type key. Feed this into POST /config/:entityType as a per-type override.

Example: 8.4
thresholdSource
​string · enum · required

TYPE when the threshold was calculated from this type key alone; BASELINE when the group had too few entities with valid data and the system-wide threshold was used instead.

Enum values:
TYPE
BASELINE
Example: TYPE
entitiesAnalyzed
​number · required

Number of entities of this type key with valid usage data

Example: 12
initialFlaggedCount
​number · required

Number of entities of this type key flagged against this type key threshold

Example: 2
​object[] · required

Detailed analysis for each entity of this type key

typeKey
​string

Entity type key this slice covers (e.g. a Room.roomType). Omitted for entities with no type key configured.

Example: MEETING_ROOM
​object

Energy breakdown aggregated across this type key

AnalysisStartResponseDto

success
​boolean · required

Operation success status

message
​string · required

Confirmation message

Example: Analysis completed using historical data from 2026-01-01 to 2026-01-14
calculatedThresholdKwh
​number · required

Calculated threshold in kWh across all entities of this entity type (the baseline). Per-type thresholds are in byTypeKey.

Example: 15.5
entitiesAnalyzed
​number · required

Number of entities analyzed

Example: 42
initialFlaggedCount
​number · required

Number of initially flagged entities

Example: 3
​object[] · required

Detailed analysis for every entity analysed, across all type keys

​object[] · required

Analysis split by the entities' own type keys. Entities with no type key are grouped in a single slice with typeKey omitted.

​object

System-wide energy breakdown by MCB measurement type

SentinelPowerRangeRuleDto

id
​string · required

Unique rule identifier (UUID)

Example: a1b2c3d4-...
label
​string · required

Human-readable label for the suspected device type

Example: Suspected Fridge
minWatts
​number · required

Minimum power threshold in Watts (inclusive)

Example: 50
maxWatts
​number · required

Maximum power threshold in Watts (inclusive)

Example: 125
minDurationMinutes
​number · required

Minimum cumulative minutes device must sustain power in range on a violation day to be classified

Example: 120

TypeThresholdOverrideDto

typeKey
​string · required

Entity type key this override applies to — must be a configured type for this system and entity kind

Example: TYPE_A
calculatedThresholdKwh
​number

Auto-calculated threshold (kWh) for this type key

Example: 8
manualThresholdKwh
​number

Manual threshold override (kWh) for this type key — wins over calculatedThresholdKwh

Example: 4
​object[]

Sentinel power range rules for this type key. Replaces the baseline rules entirely when set.

CreateSurgeConfigDto

calculatedThresholdKwh
​number · required

Calculated threshold (median) in kWh

Example: 15.5
digestTime
​string · required

Local time of day (HH:mm, system timezone) the digest fires at.

Example: 08:00
digestStartDate
​string · required

Local date (YYYY-MM-DD, system timezone) the digest cycle starts from. Fixes which day of the N-day cycle the digest lands on, so editing the config later does not re-phase it.

Example: 2026-09-15
manualThresholdKwh
​number

Manual threshold override (kWh) - takes precedence over calculated threshold

Example: 18
defaultViolationCount
​number

Default violation count to trigger flag

Example: 3
defaultViolationWindow
​number

Default rolling window in days

Example: 7
​object[]

Sentinel power range rules for suspected device classification

​object[]

Per-type-key threshold overrides. Each entry gives one entity type key (e.g. a room type) its own threshold, and optionally its own sentinel rules. Feed the byTypeKey slices returned by the analysis endpoint straight in here so each type is monitored against its own threshold. Entities whose type key has no entry — including entities with no type key set — use the entity-type baseline threshold.

SurgeConfigResponseDto

success
​boolean · required

Operation success status

entityType
​string · enum · required

Entity type

Enum values:
ROOM
TENANT
ZONE
message
​string · required

Success or informational message

​object · required

Updated configuration

digestScheduleWarning
​string

Present when the configuration was saved but its cloud digest schedule could not be rebuilt. The entity type will send no digest until surge monitoring is re-enabled — surface this to the operator.

SurgeConfigLookupResponseDto

success
​boolean · required

Operation success status

entityType
​string · enum · required

Entity type

Enum values:
ROOM
TENANT
ZONE
configured
​boolean · required

Whether a configuration exists for this entity type. When false, config is null and surge monitoring is not set up for this entity type.

message
​string · required

Success or informational message

config
​null | object · required

Current configuration, or null when never configured

UpdateSurgeScheduleDto

dailyCheckTime
​string

Local time of day (HH:mm, system timezone) the daily surge check runs at. Defaults to 01:00.

Example: 01:00

SurgeScheduleResponseDto

success
​boolean · required

Operation success status

dailyCheckTime
​string · required

Local time of day the daily surge check now runs at

Example: 01:00
timezone
​string · required

IANA timezone the schedule times are interpreted in

Example: Asia/Singapore
scheduleName
​string

Name of the recreated daily check schedule. Absent when surge monitoring is not enabled yet — the time is stored and applied when monitoring is enabled.

Example: surge_monitoring_64b7f1e6f9c9d4e5b8a9f7c3_prod

UpdateSystemSurgeConfigDto

calculatedThresholdKwh
​number

Auto-calculated threshold (median) in kWh - can be manually adjusted

Example: 15.5
manualThresholdKwh
​number

Manual threshold override (kWh) - takes precedence over calculated threshold

Example: 18
defaultViolationCount
​number

Default violation count to trigger flag

Example: 3
defaultViolationWindow
​number

Default rolling window in days

Example: 7
digestTime
​string

Local time of day (HH:mm, system timezone) the digest fires at. Must end up set together with digestStartDate — setting only one is rejected.

Example: 08:00
digestStartDate
​string

Local date (YYYY-MM-DD, system timezone) of the first digest run. Fixes which day of the N-day cycle the digest lands on. Must end up set together with digestTime — setting only one is rejected.

Example: 2026-09-15
​object[]

Sentinel power range rules for suspected device classification. Full replacement when present — omit to leave the existing rules untouched, send an empty array to clear them.

​object[]

Per-type-key threshold overrides. Each entry gives one entity type key (e.g. a room type) its own threshold, and optionally its own sentinel rules. Entities whose type key has no entry — including entities with no type key set — keep using the entity-type baseline threshold. Full replacement when present — omit to leave the existing overrides untouched, send an empty array to clear them.

EntityMetadata

tenantId
​string

Tenant ID

Example: 65a1b2c3d4e5f6a7b8c9d0e1
tenantName
​string

Tenant name

Example: Acme Corporation
zoneId
​string

Zone ID

Example: 65a1b2c3d4e5f6a7b8c9d0e2
zoneName
​string

Zone name

Example: Zone A

ViolationResponseDto

_id
​string · required

Violation ID

entityType
​string · enum · required

Entity type

Enum values:
ROOM
TENANT
ZONE
entityId
​string · required

Entity ID

entityName
​string · required

Entity name

date
​string · date-time · required

Violation date

dailyUsageKwh
​number · required

Actual daily usage (kWh)

thresholdKwh
​number · required

Threshold that was exceeded (kWh) — the entity's effective threshold at the time of the violation, so a type-key override is already reflected

exceedanceKwh
​number · required

Amount exceeded (kWh)

exceedancePercent
​number · required

Percentage exceeded (%)

isFlagged
​boolean · required

Whether violation triggered alert

entityTypeKey
​string

Entity's own type key (Room.roomType / Tenant.tenantType / Zone.zoneType) — undefined when it has none

Example: MEETING_ROOM
supersededAt
​string · date-time

Set when a counters reset soft-deleted this violation. The row is still listed so the history stays inspectable, but it no longer contributes to any count, flag state or digest total — render it as struck through / greyed out.

​object

Additional contextual metadata

ViolationsListResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

List of violations

LatestViolationDto

date
​string · date-time · required

Date of latest violation

dailyUsageKwh
​number · required

Daily usage in kWh

thresholdKwh
​number · required

Threshold in kWh

exceedanceKwh
​number · required

Exceedance in kWh

exceedancePercent
​number · required

Exceedance percentage

ViolationMetadata

entityName
​string

Entity name (room/tenant/zone)

tenantId
​string

Tenant ID if applicable

tenantName
​string

Tenant name if applicable

userId
​string

Zone ID if applicable

zoneName
​string

Zone name if applicable

FlaggedEntityDto

entityId
​string · required

Entity ID

entityName
​string · required

Entity name

entityType
​string · enum · required

Entity type

Enum values:
ROOM
TENANT
ZONE
violationCount
​number · required

Total violation count

currentPeriodViolationCount
​number · required

Current period violation count

totalFlaggedCount
​number · required

Total times this entity has been flagged

thresholdKwh
​number · required

The entity's current effective threshold in kWh — active entity adjustment, else its type-key override, else the entity-type baseline

firstViolationDate
​string · date-time · required

Date of first violation

lastViolationDate
​string · date-time · required

Date of last violation

​object · required

Latest violation details

allViolationDates
​string[] · required

All violation dates

entityTypeKey
​string

Entity's own type key (e.g. room type) — undefined when it has none

Example: TYPE_A
​object

Additional violation metadata

FlaggedEntitiesResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

List of flagged entities

ResetAllViolationsDto

entityType
​string · enum

Scope the reset to a single policy (entity type). Omit to reset ALL policies (rooms, tenants, and zones) for the system.

Enum values:
ROOM
TENANT
ZONE

ResetAllViolationsResponseDto

success
​boolean · required

Operation success status

deletedViolations
​number · required

Number of violation records deleted

trackersReset
​number · required

Number of entity trackers reset (unflagged)

message
​string · required

Confirmation message

entityType
​string · enum

Policy the reset was scoped to. Absent when all policies were reset.

Enum values:
ROOM
TENANT
ZONE

DisabledEntityDto

entityId
​string · required

Entity ID

entityName
​string · required

Entity name

entityType
​string · enum · required

Entity type

Enum values:
ROOM
TENANT
ZONE
disabledAt
​string · date-time · required

When monitoring was disabled for this entity

totalFlaggedCount
​number · required

Times the entity was flagged before monitoring was disabled

reason
​string

Why monitoring was disabled

DisabledEntitiesResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
success
​boolean · required

Success status

​object[] · required

List of disabled entities

entityType
​string · enum

Entity type filter applied

Enum values:
ROOM
TENANT
ZONE

ToggleMonitoringDto

isEnabled
​boolean · required

Whether to enable monitoring (true) or disable it (false)

Example: false
reason
​string

Reason for enabling/disabling monitoring for this entity

Example: Approved high-power usage for medical equipment

MonitoringStatusResponseDto

success
​boolean · required

Operation success status

entityType
​string · enum · required

Entity type

Enum values:
ROOM
TENANT
ZONE
entityId
​string · required

Entity ID

isMonitoringDisabled
​boolean · required

Whether entity monitoring is currently disabled

message
​string · required

Confirmation message

UpdateConfirmedDevicesDto

confirmedDeviceTypes
​string[] · required

Full list of operator-confirmed device types for this entity. Replaces the existing list — send an empty array to clear it.

Example: ["Water Heater","Aircon"]

ConfirmedDevicesResponseDto

success
​boolean · required

Operation success status

entityType
​string · enum · required

Entity type

Enum values:
ROOM
TENANT
ZONE
entityId
​string · required

Entity ID

confirmedDeviceTypes
​string[] · required

Confirmed device types now stored for this entity

Example: ["Water Heater","Aircon"]
message
​string · required

Confirmation message

ResetViolationsDto

deleteViolationRecords
​boolean

Whether to delete all violation records from database (default: false). If false, only counters are reset but historical records are preserved.

Default: false

ResetCounters

totalFlaggedCount
​number · required

Total flagged count before reset

currentPeriodViolationCount
​number · required

Current period violation count before reset

ResetViolationsResponseDto

success
​boolean · required

Success status

entityType
​string · enum · required

Entity type

Enum values:
ROOM
TENANT
ZONE
entityId
​string · required

Entity ID

​object · required

Counter values before reset

deletedViolations
​number · required

Number of violation records deleted

message
​string · required

Success message

EntityEnergyBreakdownResponseDto

entityId
​string · required

Entity ID

Example: 65a1b2c3d4e5f6a7b8c9d0e1
entityName
​string · required

Entity name

Example: Conference Room A
entityType
​string · enum · required

Entity type

Enum values:
ROOM
TENANT
ZONE
Example: ROOM
startDate
​string · date-time · required

Analysis period start date

endDate
​string · date-time · required

Analysis period end date

​object · required

MCB measurement type breakdown with cost analysis

EntityCheckResultDto

entityId
​string · required

Entity ID

entityName
​string · required

Entity name

entityType
​string · enum · required

Type of entity

Enum values:
ROOM
TENANT
ZONE
dailyUsageKwh
​number · required

Daily usage in kWh

thresholdKwh
​number · required

Threshold in kWh

violated
​boolean · required

Whether this entity violated the threshold

currentPeriodViolationCount
​number · required

Current period violation count after check

totalFlaggedCount
​number · required

Total lifetime flagged count after check

entityTypeKey
​string

Entity's own type key (e.g. room type) — drives which threshold was applied

Example: TYPE_A

DailySurgeCheckResultDto

systemId
​string · required

System ID that was checked

checkDate
​string · date-time · required

Check date

totalEntitiesChecked
​number · required

Total entities checked across all types

totalViolationsDetected
​number · required

Total violations detected across all types

​object[] · required

Detailed results for each entity checked

summaryByType
​object · required

Summary by entity type

Example: {"ROOM":{"checked":10,"violated":2},"TENANT":{"checked":5,"violated":1},"USER":{"checked":20,"violated":3}}

FlaggedEntityDigestResultDto

entityId
​string · required

Entity ID

entityName
​string · required

Entity name

currentPeriodViolationCount
​number · required

Current period violation count

totalFlaggedCount
​number · required

Total lifetime flagged count

thresholdKwh
​number · required

Threshold in kWh

lastViolationDate
​string · date-time · required

Last violation date

SurgeDigestResultDto

systemId
​string · required

System ID

entityType
​string · enum · required

Entity type for this digest

Enum values:
ROOM
TENANT
ZONE
startDate
​string · date-time · required

Rolling window period start date

endDate
​string · date-time · required

Rolling window period end date

rollingWindowDays
​number · required

Rolling window in days

totalFlaggedEntities
​number · required

Total flagged entities in this digest

totalViolations
​number · required

Total violations across all flagged entities

​object[] · required

List of flagged entities included in digest

notificationCount
​number · required

How many recipients this digest was written to — one notification document each

EntityTypeKind

string · enum
Enum values:
ROOM
TENANT
ZONE

EntityTypeResponseDto

_id
​string · required

Entity type ID

name
​string · required

Unique type key

Example: MEETING_ROOM
displayName
​string · required

Human-readable display name

Example: Meeting Room
system
​string · required

System ID this type belongs to

createdAt
​string · date-time · required

Creation timestamp

createdBy
​string

Admin who created this type

EntityTypeListResponseDto

​object[] · required
total
​number · required

CreateEntityTypeDto

name
​string · required

Unique type key — must be UPPER_SNAKE_CASE, unique within the system

Example: MEETING_ROOM
displayName
​string · required

Human-readable display name

Example: Meeting Room

UpdateEntityTypeDto

displayName
​string · required

Human-readable display name

Example: Meeting Room

SingleScheduleEntryDto

action
​string · enum · required

Action type to perform at the scheduled date-time(s). For simple ON/OFF or complex actions like SET_TEMPERATURE.

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
Example: OFF
dateTime
​string · date-time

Single scheduled date and time in ISO 8601 format when the one-time action should execute. Cannot be used with startDateTime/endDateTime. Must be a future timestamp.

Example: 2024-12-31T06:00:00Z
startDateTime
​string · date-time

Start date and time of the schedule range in ISO 8601 format. Must be used with endDateTime. Cannot be used with dateTime. Creates daily timers between start and end dates (inclusive) at the specified time.

Example: 2024-12-20T06:00:00Z
endDateTime
​string · date-time

End date and time of the schedule range in ISO 8601 format. Must be used with startDateTime. Cannot be used with dateTime. Creates daily timers between start and end dates (inclusive) at the specified time.

Example: 2024-12-31T06:00:00Z
actionValue
​number

Optional value for actions that require it (e.g., temperature value for SET_TEMPERATURE, brightness for SET_BRIGHTNESS). Required for certain action types.

Example: 24
ruleName
​string

AWS EventBridge rule name associated with this schedule entry. Used for managing and updating the schedule.

Example: device-64b7f1e6-timer-abc123

DailyScheduleEntryDto

time
​string · required

Time when the scheduled action should occur in 24-hour format (HH:MM). Applied to recurring weekly schedules.

Example: 06:00
action
​string · enum · required

Action type to perform at the scheduled time. For simple ON/OFF or complex actions like SET_TEMPERATURE.

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
Example: OFF
actionValue
​number

Optional value for actions that require it (e.g., temperature value for SET_TEMPERATURE, brightness for SET_BRIGHTNESS). Required for certain action types.

Example: 24

DeviceWeeklyScheduleDto

​object[]

Array of one-time scheduled actions that occur at specific date-times. These schedules execute once and are automatically removed.

​object[]

Array of scheduled actions for Monday. These execute weekly at specified times.

​object[]

Array of scheduled actions for Tuesday. These execute weekly at specified times.

​object[]

Array of scheduled actions for Wednesday. These execute weekly at specified times.

​object[]

Array of scheduled actions for Thursday. These execute weekly at specified times.

​object[]

Array of scheduled actions for Friday. These execute weekly at specified times.

​object[]

Array of scheduled actions for Saturday. These execute weekly at specified times.

​object[]

Array of scheduled actions for Sunday. These execute weekly at specified times.

FollowScheduleDto

scheduleId
​null | string

Id of the Schedule the device should follow, or null to follow nothing.

Example: 507f1f77bcf86cd799439011

DayOfWeek

string · enum
Enum values:
monday
tuesday
wednesday
thursday
friday
saturday
sunday

Day of the week this time range applies to

DayTimeRange

day
​string · enum · required

Day of the week this time range applies to

Enum values:
monday
tuesday
wednesday
thursday
friday
saturday
sunday
Example: monday
startTime
​string

Start time (device turns ON) in HH:mm format. Absent for an OFF-only entry.

Example: 08:00
endTime
​string

End time (device turns OFF) in HH:mm format. Absent for an ON-only entry.

Example: 18:00
action
​string · enum

Action to run at this entry's time, for actions beyond plain ON/OFF (e.g. SET_TEMPERATURE, SET_MODE, SET_BRIGHTNESS). Only valid on a single-point entry (startTime or endTime, not both); defaults to ON/OFF when absent.

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
​

Value for actions that require one (e.g. temperature for SET_TEMPERATURE, brightness for SET_BRIGHTNESS, mode for SET_MODE).

Example: 24

Schedule

_id
​string · required

Primary ID of the Schedule

Example: 64b7f1e6f9c9d4e5b8a9f7c3
system
​string · required

System this schedule belongs to

name
​string · required

User-provided name

Example: Office hours
​object[] · required

Per-day ON/OFF time ranges. A day may have multiple ranges; days absent have no schedule.

executionMode
​string · enum

Where this schedule executes on every device that follows it. CLOUD = AWS EventBridge rules fired by the backend (device must be online). ON_DEVICE = compiled into an MQTT timer payload stored in firmware, so it keeps running while the device is offline. Followers inherit this, and changing it re-applies the schedule to all of them. A follower whose subtype cannot store firmware timers falls back to CLOUD.

Enum values:
CLOUD
ON_DEVICE
tenantId
​string

Tenant this schedule is scoped to (shared-schedule tag).

zoneId
​string

Zone this schedule is scoped to (shared-schedule tag).

roomId
​string

Room this schedule is scoped to (shared-schedule tag).

createdBy
​string

Account that created this schedule. Null for schedules created via an API token or a system process.

DeviceSchedulingOptionsDto

followedScheduleId
​null | string · required

Id of the Schedule this device currently follows, or null if it follows nothing.

Example: 507f1f77bcf86cd799439011
​object[] · required

All schedules visible to this device by scope.

executionMode
​string · enum · required

Where this device’s weekly schedule executes. CLOUD when the backend fires it via EventBridge, ON_DEVICE when firmware runs it from a stored MQTT timer payload. Taken from the followed schedule while the device follows one (the schedule owns the mode), otherwise from the device’s own stored schedule; CLOUD for a device with no schedule yet. Always reflects the mode actually in effect — if the schedule asks for ON_DEVICE but this subtype cannot store timers, this reads CLOUD and fellBackToCloud is true.

Enum values:
CLOUD
ON_DEVICE
supportsOnDeviceSchedule
​boolean · required

Whether this device’s firmware can run an on-device schedule at all. When false the frontend must hide the on-device option — POST .../offline-timer rejects with 400.

Example: true
confirmationState
​string · enum · required

Ack state of the on-device schedule: PENDING until the device confirms receipt over MQTT. Null when executionMode is CLOUD.

Enum values:
PENDING
CONFIRMED
fellBackToCloud
​boolean · required

True when the followed schedule asks for ON_DEVICE but this device’s subtype cannot store firmware timers, so it is being run from the cloud instead. The frontend should show the schedule as online-only for this device.

Example: false

DayTimeRangeDto

day
​string · enum · required

Day of the week this time range applies to

Enum values:
monday
tuesday
wednesday
thursday
friday
saturday
sunday
Example: monday
startTime
​string

Start time (device turns ON) in HH:mm format. Omit for an OFF-only entry.

Example: 08:00
endTime
​string

End time (device turns OFF) in HH:mm format. Omit for an ON-only entry.

Example: 18:00
action
​string · enum

Action to run at this entry's time, for actions beyond plain ON/OFF (e.g. SET_TEMPERATURE, SET_MODE, SET_BRIGHTNESS). Only valid on a single-point entry (startTime or endTime, not both); defaults to ON/OFF when absent.

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
​

Value for actions that require one (e.g. temperature for SET_TEMPERATURE, brightness for SET_BRIGHTNESS, mode for SET_MODE). Required when action is one of those types.

Example: 24

ScheduleInputDto

name
​string · required

User-provided name

Example: Office hours
​object[] · required

Per-day ON/OFF time ranges. A day may have multiple ranges; days absent have no schedule.

executionMode
​string · enum

Where this schedule executes on every device that follows it. CLOUD (default) = EventBridge rules fired by the backend. ON_DEVICE = stored in firmware over MQTT so it survives the device going offline. Followers whose subtype cannot store firmware timers fall back to CLOUD.

Enum values:
CLOUD
ON_DEVICE
Default: CLOUD
tenantId
​string

Tenant this schedule is scoped to

Example: 507f1f77bcf86cd799439011
zoneId
​string

Zone this schedule is scoped to

Example: 507f1f77bcf86cd799439012
roomId
​string

Room this schedule is scoped to

Example: 507f1f77bcf86cd799439013

DeviceSingleScheduleDto

​object[]

Array of one-time scheduled actions with specific date-times. These schedules execute once and are automatically removed after execution.

EditDeviceSingleTimerDto

ruleName
​string · required

AWS EventBridge rule name of the one-time timer to edit. Used to identify which schedule to update.

Example: device-64b7f1e6-timer-abc123
dateTime
​string · date-time · required

Updated scheduled date and time for the timer in ISO 8601 format. Must be a future timestamp.

Example: 2024-12-31T18:00:00Z
action
​string · enum · required

Updated action type to perform at the scheduled time. Replaces the existing action in the timer.

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
Example: ON
actionValue
​number

Optional value for actions that require it (e.g., temperature value for SET_TEMPERATURE, brightness for SET_BRIGHTNESS). Required for certain action types.

Example: 24

DeleteDeviceSingleTimerDto

ruleName
​string · required

AWS EventBridge rule name of the one-time timer to delete. Used to identify which schedule to remove.

Example: device-64b7f1e6-timer-abc123

MergeMode

string · enum
Enum values:
replace
merge
append

Defines how schedules should be merged. REPLACE: Clear all existing schedules and set new ones (default). MERGE: Add new schedules to existing ones, updating duplicates. APPEND: Add new schedules without modifying existing ones.

MassDevicesScheduleDto

deviceIds
​string[] · required

Array of unique device identifiers to apply the schedule configuration to. Each device will receive the same schedule.

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
​object

Schedule configuration containing weekly recurring and one-time schedules to apply to multiple devices.

mergeMode
​string · enum

Defines how schedules should be merged. REPLACE: Clear all existing schedules and set new ones (default). MERGE: Add new schedules to existing ones, updating duplicates. APPEND: Add new schedules without modifying existing ones.

Enum values:
replace
merge
append
Example: merge
Default: replace
executionMode
​string · enum

Where the weekly schedule executes on each device. CLOUD (default): EventBridge rules fired by the backend. ON_DEVICE: compiled into an MQTT timer stored in firmware so it survives the device going offline — only ON/OFF actions are allowed, one-time schedules stay cloud-only, mergeMode must be REPLACE, and every target device type must support on-device schedules.

Enum values:
CLOUD
ON_DEVICE
Example: ON_DEVICE
Default: CLOUD

MassDevicesSingleScheduleDto

deviceIds
​string[] · required

Array of unique device identifiers to apply the one-time schedules to. Each device will receive the same schedule.

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
​object[]

Array of one-time scheduled actions with specific date-times to apply to multiple devices.

DeviceScheduleInfo

ruleName
​string · required

AWS EventBridge rule name associated with this device schedule. Used for identifying and managing the schedule.

Example: device-64b7f1e6-timer-abc123
deviceId
​string · required

Unique identifier of the device in MongoDB ObjectId format.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
deviceName
​string · required

Display name of the device for identification purposes in the UI.

Example: Living Room Smart Plug

MassEditDeviceSingleTimerDto

​object[] · required

Array of device details with EventBridge rule names for the one-time timers to batch edit. All specified timers will be updated with the same new schedule.

Example: [{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c1","deviceName":"Living Room TV Plug","ruleName":"device-64b7f1e6-timer-abc123"},{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c2","deviceName":"Kitchen Appliance Plug","ruleName":"device-64b7f1e6-timer-def456"}]
newDateTime
​string · date-time · required

New scheduled date and time to apply to all specified timers. Must be a future timestamp in ISO 8601 format.

Example: 2024-12-31T20:00:00Z
newAction
​string · enum · required

New action type to apply to all specified timers at the scheduled time. Replaces existing actions.

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
Example: OFF
newActionValue
​number

Optional value for the new action (e.g., temperature for SET_TEMPERATURE, brightness for SET_BRIGHTNESS). Required for certain action types.

Example: 24

MassEditDeviceWeeklyTimerDto

​object[] · required

Array of device details with EventBridge rule names for the recurring weekly timers to batch edit. All specified timers will be updated.

Example: [{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c1","deviceName":"Living Room TV Plug","ruleName":"device-64b7f1e6-weekly-abc123"},{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c2","deviceName":"Kitchen Appliance Plug","ruleName":"device-64b7f1e6-weekly-def456"}]
newTime
​string · required

New time in 24-hour format (HH:MM) to apply to all specified weekly timers. Must be valid time between 00:00 and 23:59.

Example: 20:00
newAction
​string · enum · required

New action type to apply to all specified weekly timers at the scheduled time. Replaces existing actions.

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
Example: OFF
currentTime
​string

Current time (HH:MM) of the timers being edited. Required when any target device runs its schedule in firmware (executionMode ON_DEVICE): those entries have no EventBridge ruleName, so they are matched by their existing time instead. Ignored for cloud timers, which are matched by ruleName.

Example: 19:00
newActionValue
​number

Optional value for the new action (e.g., temperature for SET_TEMPERATURE, brightness for SET_BRIGHTNESS). Required for certain action types.

Example: 24
daysOfWeek
​string[]

Optional filter to only edit timers on specific days of the week. If provided, only rules matching these days will be updated. If omitted, all provided rules will be updated (backward compatible).

Enum values:
monday
tuesday
wednesday
thursday
friday
saturday
sunday
Example: ["monday","wednesday","friday"]

MassDeleteDeviceTimerDto

​object[] · required

Array of device details with EventBridge rule names for the timers to batch delete. Supports both one-time and recurring weekly schedules.

Example: [{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c1","deviceName":"Living Room TV Plug","ruleName":"device-64b7f1e6-timer-abc123"},{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c2","deviceName":"Kitchen Appliance MCB","ruleName":"device-64b7f1e6-weekly-def456"}]

GroupedRecurringSchedule

time
​string · required

Scheduled time in 24-hour format (HH:MM) when the recurring action executes. Shared by all devices in this group.

Example: 06:00
action
​string · enum · required

Action type to perform at the scheduled time. All devices in this group will execute the same action.

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
Example: ON
daysOfWeek
​string[] · required

Array of weekday names when this recurring schedule is active. Schedule repeats weekly on these days.

Example: ["monday","tuesday","wednesday"]
deviceCount
​number · required

Total number of devices that share this identical recurring schedule pattern.

Example: 50
​object[] · required

Array of device details with their EventBridge rule names. Each device has this same recurring schedule configured.

Example: [{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c1","deviceName":"Living Room TV Plug","ruleName":"device-64b7f1e6-schedule-abc123"},{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c2","deviceName":"Kitchen MCB","ruleName":"device-64b7f1e6-schedule-def456"}]
actionValue
​number

Optional value for actions that require it (e.g., temperature, brightness). All devices in this group will use the same value.

Example: 24

GroupedOneTimeSchedule

dateTime
​string · date-time · required

Scheduled date and time when this one-time action will execute. Shared by all devices in this group.

Example: 2024-12-31T18:00:00Z
action
​string · enum · required

Action type to perform at the scheduled date-time. All devices in this group will execute the same action.

Enum values:
ON
OFF
SET_TEMPERATURE
SET_BRIGHTNESS
SET_MODE
TOGGLE_SMART_SWITCH
Example: OFF
deviceCount
​number · required

Total number of devices that share this identical one-time schedule configuration.

Example: 10
​object[] · required

Array of device details with their EventBridge rule names. Each device has this same one-time schedule configured.

Example: [{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c1","deviceName":"Living Room TV Plug","ruleName":"device-64b7f1e6-timer-abc123"},{"deviceId":"64b7f1e6f9c9d4e5b8a9f7c2","deviceName":"Kitchen Appliance MCB","ruleName":"device-64b7f1e6-timer-def456"}]
actionValue
​number

Optional value for actions that require it (e.g., temperature, brightness). All devices in this group will use the same value.

Example: 24

GetSystemGroupedSchedulesDto

​object[] · required

Array of recurring weekly schedules grouped by time and action. Shows which devices share the same recurring schedule pattern.

​object[] · required

Array of one-time schedules grouped by date-time and action. Shows which devices share the same one-time schedule.

totalDevices
​number · required

Total count of all schedulable devices in the system (includes devices with and without schedules). Only counts device types that support scheduling.

Example: 100
devicesWithSchedules
​number · required

Count of devices that have at least one active schedule configured. Used to calculate scheduling adoption rate.

Example: 75

SortOrder

string · enum
Enum values:
asc
desc

SuggestionFilter

string · enum
Enum values:
ready
all

SuggestionSource

string · enum
Enum values:
manual_override
ascent

ScheduleAdjustmentStatus

string · enum
Enum values:
monitoring
ready_for_review
ready_for_auto_apply
pending
accepted
rejected
auto_applied
auto_apply_failed

AdjustmentType

string · enum
Enum values:
extend_start
extend_end
fill_gap
add_block
shrink_block
split_block
full_schedule

Type of adjustment suggested

OverrideAction

string · enum
Enum values:
ON
OFF

Override-only. What the user did. Unset on ASCENT rows.

ScheduleMapDto

​object[] · required

Monday schedule entries

​object[] · required

Tuesday schedule entries

​object[] · required

Wednesday schedule entries

​object[] · required

Thursday schedule entries

​object[] · required

Friday schedule entries

​object[] · required

Saturday schedule entries

​object[] · required

Sunday schedule entries

RecommendationTier

string · enum
Enum values:
rule-based
clustering
llm

ASCENT-only. Which analysis tier produced the schedule. Only RULE_BASED rows are eligible for auto-apply, so this explains why an otherwise-confident suggestion still needs review.

ScheduleAdjustmentSuggestionDto

_id
​string · required

Suggestion ID

Example: 65a1b2c3d4e5f6a7b8c9d0e1
device
​string · required

Device ID

Example: 65a1b2c3d4e5f6a7b8c9d0e2
deviceType
​string · enum · required

Device type

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
source
​string · enum · required

What produced this suggestion. MANUAL_OVERRIDE rows carry the override fields below and describe a boundary change; ASCENT rows come from the weekly telemetry pass, use adjustmentType FULL_SCHEDULE, and leave every override field unset.

Enum values:
manual_override
ascent
Example: manual_override
system
​string · required

System ID

Example: 65a1b2c3d4e5f6a7b8c9d0e3
adjustmentType
​string · enum · required

Type of adjustment suggested

Enum values:
extend_start
extend_end
fill_gap
add_block
shrink_block
split_block
full_schedule
Example: extend_start
affectedDays
​string[] · required

Which day(s) this adjustment applies to. For ASCENT rows this lists only the weekdays whose entries actually changed, not all seven.

Enum values:
monday
tuesday
wednesday
thursday
friday
saturday
sunday
Example: ["monday","tuesday","wednesday","thursday","friday"]
​object · required

Current schedule before adjustment

​object · required

Suggested adjusted schedule

status
​string · enum · required

Status of this suggestion

Enum values:
monitoring
ready_for_review
ready_for_auto_apply
pending
accepted
rejected
auto_applied
auto_apply_failed
Example: monitoring
confidenceScore
​number · required

Confidence score 0-1. MANUAL_OVERRIDE derives it from occurrence count and time range; ASCENT uses the pattern confidence it scored the device at.

Example: 0.85
createdAt
​string · date-time · required

When this suggestion was created

Example: 2024-02-08T08:12:00.000Z
updatedAt
​string · date-time · required

When this suggestion was last updated

Example: 2024-02-13T08:18:00.000Z
deviceName
​string

Device name

Example: Living Room AC
deviceNumber
​number

Device number

Example: 12
roomName
​string

Room name the device belongs to

Example: Living Room
overrideTime
​string

Override-only. Time when the user triggered this override. Unset on ASCENT rows.

Example: 08:15
overrideAction
​string · enum

Override-only. What the user did. Unset on ASCENT rows.

Enum values:
ON
OFF
Example: ON
reviewedAt
​string · date-time

When user responded to this

Example: 2024-02-13T10:30:00.000Z
reviewedByUser
​string

User who reviewed this

Example: 65a1b2c3d4e5f6a7b8c9d0e4
occurrenceCount
​number

Override-only. Number of times this pattern was detected. Unset on ASCENT rows.

Example: 5
firstOccurrence
​string · date-time

First time this pattern was detected. On ASCENT rows this is the run timestamp.

Example: 2024-02-08T08:12:00.000Z
lastOccurrence
​string · date-time

Most recent time this pattern was detected. On ASCENT rows this is the run timestamp.

Example: 2024-02-13T08:18:00.000Z
occurrenceTimes
​string[]

Override-only. All override times that contributed to this pattern. Empty on ASCENT rows.

Example: ["08:12","08:17","08:20","08:15","08:18"]
earliestOverrideTime
​string

Override-only. Earliest time from all occurrences. Unset on ASCENT rows.

Example: 08:12
latestOverrideTime
​string

Override-only. Latest time from all occurrences. Unset on ASCENT rows.

Example: 08:20
timeRangeMinutes
​number

Override-only. Time range in minutes (latest - earliest). Unset on ASCENT rows.

Example: 8
deltaMinutes
​number

Signed ON-minutes change if the suggestion is applied. Positive = suggested schedule has less ON time (e.g. turn off earlier); negative = more ON time (e.g. turn on earlier).

Example: 45
tier
​string · enum

ASCENT-only. Which analysis tier produced the schedule. Only RULE_BASED rows are eligible for auto-apply, so this explains why an otherwise-confident suggestion still needs review.

Enum values:
rule-based
clustering
llm
reasons
​string[]

Human-readable justification for the confidence score. On ASCENT rows: Ascent's confidence reasons plus its rule-based flags. Show these next to the score — a bare percentage is not actionable.

Example: ["28 days analysed, 15-min slots","Clear daily pattern","Weekends off","Confidence 82%"]

SuggestionStatusCountsDto

monitoring
​number · required
readyForReview
​number · required
readyForAutoApply
​number · required
accepted
​number · required
rejected
​number · required
autoApplied
​number · required
autoApplyFailed
​number · required

GetSystemSuggestionsResponseDto

​object[] · required

Every suggestion matching the filters, newest first unless sorted. Narrow with status, filter, source, deviceId or search.

total
​number · required

Rows returned

Example: 42
​object · required

Totals per status across the whole filtered set

GetDeviceSuggestionsResponseDto

total
​number · required

Total number of suggestions

Example: 3
​object[] · required

List of suggestions for the device

AcceptSuggestionRequestDto

days
​string[]

Days to apply. Days listed are taken from the suggested schedule; days omitted keep their current schedule untouched and are never emptied. Omit to apply every affected day.

Enum values:
monday
tuesday
wednesday
thursday
friday
saturday
sunday
Example: ["monday","tuesday"]

AcceptSuggestionResponseDto

message
​string · required

Success message

Example: Suggestion accepted and applied successfully
​object · required

The accepted suggestion

deviceId
​string · required

Device ID

deviceName
​string · required

Device name

RejectSuggestionResponseDto

message
​string · required

Success message

Example: Suggestion rejected successfully
​object · required

The rejected suggestion

BulkSuggestionsRequestDto

suggestionIds
​string[] · required

Suggestion IDs to process

Example: ["65a1b2c3d4e5f6a7b8c9d0e1","65a1b2c3d4e5f6a7b8c9d0e2"]
​object

Days to apply, keyed by suggestion ID. Days listed are taken from the suggested schedule; days omitted keep their current schedule untouched and are never emptied. A suggestion missing from this map applies all of its affected days. Accept-only — ignored by bulk-reject.

Example: {"65a1b2c3d4e5f6a7b8c9d0e1":["monday","tuesday"]}

BulkSuggestionFailureDto

suggestionId
​string · required

Suggestion ID that failed to process

Example: 65a1b2c3d4e5f6a7b8c9d0e1
reason
​string · required

Failure reason

Example: Suggestion 65a1b2c3d4e5f6a7b8c9d0e1 not found

BulkSuggestionsResponseDto

message
​string · required

Summary message

Example: 3 suggestion(s) accepted, 1 failed
processedCount
​number · required

Number of suggestions successfully processed

Example: 3
​object[] · required

Suggestions that could not be processed

InvoiceItemDto

product
​string · required

Reference to the product ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
quantity
​number · required

Quantity purchased

Example: 3

CreateInvoiceDto

dueDate
​string · required

Due date for the invoice

Example: 2026-01-05T12:00:00Z
​object[] · required

Array of invoice line items

systemId
​string

System ID associated with the invoice

Example: 64b7f1e6f9c9d4e5b8a9f7c3
tenantId
​string

Tenant ID associated with the invoice

Example: 64b7f1e6f9c9d4e5b8a9f7c3
invoiceDate
​string

Invoice date (defaults to current date)

Example: 2025-12-05T12:00:00Z
taxRate
​number

Tax rate as a percentage (e.g., 10 for 10%)

Example: 10
discountAmount
​number

Discount amount applied to the invoice

Example: 10
notes
​string

Additional notes

Example: Thank you for your business

BillingType

string · enum
Enum values:
TENANT
ZONE
USER

InvoiceStatus

string · enum
Enum values:
PENDING
PAID
OVERDUE
CANCELED

Current payment status

Product

_id
​string · required

The unique identifier of the subscription tier

Example: 64b7f1e6f9c9d4e5b8a9f7c3
price
​number · required

Price of product

Example: 9.99
name
​string · enum · required

Name of product

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
description
​string · required

Description of the product

Example: A smart plug that can be controlled remotely
createdAt
​string · date-time · required

The date when the product was created

Example: 2023-08-01T12:00:00Z
updatedAt
​string · date-time · required

The date when the product was last updated

Example: 2023-08-01T12:00:00Z

SystemInvoiceItem

​object · required

Reference to the product

Example: 64b7f1e6f9c9d4e5b8a9f7c3
quantity
​number · required

Quantity purchased

Example: 3

SystemInvoice

_id
​string · required
billingType
​string · enum · required
Enum values:
TENANT
ZONE
USER
Example: TENANT
​object · required
invoiceNumber
​string · required

Unique invoice number for tracking and reference

Example: INV-2026-01-001
invoiceDate
​string · date-time · required

Invoice date

Example: 2026-01-01T00:00:00Z
dueDate
​string · date-time · required

Due date for payment

Example: 2026-01-31T23:59:59Z
subtotal
​number · required

Subtotal before tax

Example: 100
taxRate
​number · required

Tax rate percentage

Example: 9
tax
​number · required

Tax amount (subtotal x taxRate / 100)

Example: 9
total
​number · required

Final total amount

Example: 109
status
​string · enum · required

Current payment status

Enum values:
PENDING
PAID
OVERDUE
CANCELED
Example: PENDING
isDeleted
​boolean · required

Soft delete flag

Example: false
createdAt
​string · date-time · required
updatedAt
​string · date-time · required
​object[] · required

Array of invoice line items

discount
​number · required

Discount amount

Example: 10
notes
​string · required

Additional notes

Example: Thank you for your business
​object
zone
​string
user
​string

UpdateInvoiceDiscountDto

discountAmount
​number · required

Discount amount to be applied to the invoice

Example: 50

UpdateInvoiceStatusDto

status
​string · enum · required

New status of the invoice

Enum values:
PENDING
PAID
OVERDUE
CANCELED
Example: PAID

UpdateInvoiceNotesDto

notes
​string · maxLength: 1000 · required

Notes for the invoice

Example: Payment received via bank transfer. Reference: TXN123456

InvoiceItemInput

product
​string · required

Reference to the product ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
quantity
​number · required

Quantity purchased

Example: 5

UpdateInvoiceItemsDto

​object[] · required

Array of invoice items to replace the existing items list. Each item requires a product ID and quantity.

Example: [{"product":"64b7f1e6f9c9d4e5b8a9f7c3","quantity":5},{"product":"64b7f1e6f9c9d4e5b8a9f7c4","quantity":10}]

TriggerInvoiceGenerationDto

systemId
​string · required

System ID to generate invoice for

Example: 64b7f1e6f9c9d4e5b8a9f7c3
from
​string · date-time · required

Start of billing period

Example: 2025-11-01T00:00:00Z
to
​string · date-time · required

End of billing period

Example: 2025-11-30T23:59:59Z
taxRate
​number

Tax rate percentage (0-100)

Example: 8
Default: 0

GenerateInvoiceResultDto

systemId
​string · required

System ID for which the invoice was generated

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

System name

Example: National University of Singapore
success
​boolean · required

Whether invoice generation was successful

Example: true
plugCount
​number · required

Number of plugs billed

Example: 10
apiCallCount
​number · required

Number of API calls billed

Example: 500
​object

Generated invoice (if successful)

error
​string

Error message (if failed)

Example: No billable items found for this system

TriggerBulkInvoiceGenerationDto

taxRate
​number

Tax rate percentage (0-100)

Example: 8
Default: 0

BulkInvoiceGenerationResultDto

totalSystems
​number · required

Total number of systems processed

Example: 10
​object[] · required

Results for each system

billingPeriodStart
​string · date-time · required

Billing period start date

Example: 2025-11-01T00:00:00Z
billingPeriodEnd
​string · date-time · required

Billing period end date

Example: 2025-11-30T23:59:59Z
executedAt
​string · date-time · required

Timestamp when the cron job ran

Example: 2025-12-01T00:00:00Z

CreateBillingConfigDto

billingType
​string · enum · required
Enum values:
TENANT
ZONE
USER
Example: TENANT
tariffRate
​number · required

Price per kWh

Example: 0.25
billingDay
​number · required

Day of month to auto-generate invoice (1-28)

Example: 1
billingEmail
​string · required

Email address for invoice PDF delivery

Example: billing@acme.com
tenantId
​string

Tenant ID (required if billingType is TENANT)

Example: 64b7f1e6f9c9d4e5b8a9f7c3
zoneId
​string

Zone ID (required if billingType is ZONE)

Example: 64b7f1e6f9c9d4e5b8a9f7c3
userId
​string

User ID (required if billingType is USER)

Example: 64b7f1e6f9c9d4e5b8a9f7c3
replyTo
​string

Reply-to email for invoice emails. Replies go to this address.

Example: admin@ecovolt.ai

UpdateBillingConfigDto

tariffRate
​number
billingDay
​number
billingEmail
​string
replyTo
​string

Reply-to email for invoice emails. Replies go to this address.

Example: admin@ecovolt.ai
isActive
​boolean

BillingConfig

_id
​string · required
billingType
​string · enum · required
Enum values:
TENANT
ZONE
USER
Example: TENANT
system
​string · required
tariffRate
​number · required

Price per kWh

Example: 0.25
billingDay
​number · required

Day of month (1-28) to auto-generate invoice

Example: 1
billingEmail
​string · required

Email address to receive the invoice PDF

Example: billing@acme.com
isActive
​boolean · required
isDeleted
​boolean · required
createdAt
​string · date-time · required
updatedAt
​string · date-time · required
tenant
​string
zone
​string
user
​string
replyTo
​string

Reply-to email for invoice emails. Replies go to this address.

Example: admin@ecovolt.ai
scheduleName
​string

AWS EventBridge schedule name for automated monthly billing

Example: monthly_billing_tenant_64b7f1e6_day_15_prod

EnergyInvoice

_id
​string · required
billingType
​string · enum · required
Enum values:
TENANT
ZONE
USER
Example: TENANT
​object · required
invoiceNumber
​string · required

Unique invoice number for tracking and reference

Example: INV-2026-01-001
invoiceDate
​string · date-time · required

Invoice date

Example: 2026-01-01T00:00:00Z
dueDate
​string · date-time · required

Due date for payment

Example: 2026-01-31T23:59:59Z
subtotal
​number · required

Subtotal before tax

Example: 100
taxRate
​number · required

Tax rate percentage

Example: 9
tax
​number · required

Tax amount (subtotal x taxRate / 100)

Example: 9
total
​number · required

Final total amount

Example: 109
status
​string · enum · required

Current payment status

Enum values:
PENDING
PAID
OVERDUE
CANCELED
Example: PENDING
isDeleted
​boolean · required

Soft delete flag

Example: false
createdAt
​string · date-time · required
updatedAt
​string · date-time · required
billingPeriodFrom
​string · date-time · required

Billing period start date

Example: 2026-01-01T00:00:00Z
billingPeriodTo
​string · date-time · required

Billing period end date

Example: 2026-01-31T23:59:59Z
totalKwh
​number · required

Total energy consumption in kWh during billing period

Example: 150.5
tariffRate
​number · required

Tariff rate applied at time of billing (price per kWh)

Example: 0.25
currency
​string · required

Currency code (automatically derived from system country code)

Example: SGD
emailSent
​boolean · required

Whether invoice email with PDF attachment was successfully sent

Example: false
​object
zone
​string
user
​string

TriggerBillingDto

entityId
​string · required

ID of the entity to bill (tenant ID, zone ID, or user ID)

Example: 64b7f1e6f9c9d4e5b8a9f7c3
billingPeriodFrom
​string · required

Start of billing period (ISO date)

Example: 2026-01-01
billingPeriodTo
​string · required

End of billing period (ISO date)

Example: 2026-01-31
dueDate
​string · required

Invoice due date (ISO date).

Example: 2026-02-28
taxRate
​number

Tax rate percentage (0 = no tax)

Example: 9
Default: 0
replyTo
​string

Reply-to email address for the invoice. Replies go to this address.

Example: admin@ecovolt.ai

TriggerBillingResponseDto

entityId
​string · required

ID of the entity (tenant/zone/user) that was billed

Example: 64b7f1e6f9c9d4e5b8a9f7c3
entityName
​string · required

Name of the entity that was billed

Example: Acme Corporation
success
​boolean · required

Whether the billing operation was successful

Example: true
totalKwh
​number

Total energy consumption in kWh for the billing period

Example: 150.5
totalAmount
​number

Total amount billed in the configured currency

Example: 41.01
emailSent
​boolean

Whether the invoice email was sent successfully

Example: true
error
​string

Error message if the operation failed

Example: No usage data found for billing period

CreateProductDto

name
​string · required

Name of the product

Example: Smart Plug
price
​number · required

Price of the product

Example: 9.99
description
​string

Description of the product

Example: A smart plug that can be controlled remotely

UpdateProductDto

name
​string

Name of the product

Example: Smart Plug Pro
description
​string

Description of the product

Example: An upgraded smart plug with additional features
price
​number

Price of the product

Example: 12.99

ApiTokenAudience

string · enum
Enum values:
system
tenant
consumer

Audience of the token. System reaches every API-token endpoint; Tenant is restricted to tenant-scoped endpoints and below; Consumer to consumer-scoped (zone and below) endpoints. Capped at the creating account's own level — ADMIN/SUPERADMIN may mint System, TENANT at most Tenant, USER at most Consumer; requesting higher is a 403. Omit to get that cap.

CreateApiTokenDto

audience
​string · enum

Audience of the token. System reaches every API-token endpoint; Tenant is restricted to tenant-scoped endpoints and below; Consumer to consumer-scoped (zone and below) endpoints. Capped at the creating account's own level — ADMIN/SUPERADMIN may mint System, TENANT at most Tenant, USER at most Consumer; requesting higher is a 403. Omit to get that cap.

Enum values:
system
tenant
consumer
regenerate
​boolean

Replace the caller's existing token for this system instead of returning 409. The old token stops working immediately; usage history is kept.

Default: false

ApiTokenResponseDto

token
​string · required

Api token string for accessing external APIs

Example: 5cb691c114052d0746daade10116a04b0bf16853364843984ed5022ad08001a12d0e1aae72e285bb8a187e28a24dd7f326ef6d28204f7fbbe96d08dfbc4368b90097b5f3f315458e7f83c9ff0a5405565bcb04d19dfd9fc6d2c3d709f73ca43c

GetSystemDetailsDto

_id
​string · required

Unique identifier of the system in the database.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
systemName
​string

Name of the system. Typically represents an organization, building, or facility using the Ecovolt platform. Only returned to SUPERADMIN callers.

Example: National University of Singapore
numberOfDevices
​number

Total number of devices in the system. Only returned to SUPERADMIN callers.

Example: 12
deviceOnCount
​number

Number of devices currently reporting ON. Only returned to SUPERADMIN callers.

Example: 7
deviceOffCount
​number

Number of devices currently reporting OFF. Only returned to SUPERADMIN callers.

Example: 3
deviceInactiveCount
​number

Number of devices that are currently inactive. Only returned to SUPERADMIN callers.

Example: 2

GetAdminDto

_id
​string · required

Unique identifier of the admin account in the database.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
name
​string · required

Full name of the admin user. Used for identification and display purposes.

Example: Glenn Quah Han Rong
email
​string · required

Email address of the admin user. Used for authentication and notifications.

Example: glenn@ecovolt.com
role
​string · enum · required

Administrative role determining the level of access and permissions within the system.

Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER
Example: SUPERADMIN
​object[] · required

Array of systems that are linked to and managed by this admin. Includes full system details for each linked system.

approved
​boolean · required

Indicates whether the admin account has been approved by a superadmin.

Example: true
createdAt
​string · date-time · required

Timestamp when the admin account was created in the system.

Example: 2024-10-15T08:30:00Z
updatedAt
​string · date-time · required

Timestamp when the admin account was last modified.

Example: 2024-10-15T14:45:00Z
pending
​boolean · required

Indicates whether the admin account is awaiting approval. True if not yet approved.

Example: false
mainSystemId
​string · required

Main system ID, typically the first system in the systems array. Used as the default system for the admin.

Example: 64b7f1e6f9c9d4e5b8a9f7c4
associatedUserId
​string

Reference to the associated User ID if this admin account is linked to a specific user.

Example: 64b7f1e6f9c9d4e5b8a9f7c5
associatedTenantId
​string

Reference to the associated Tenant ID if this admin account is linked to a specific tenant.

Example: 64b7f1e6f9c9d4e5b8a9f7c6
associatedRoomId
​string

Reference to the associated Room ID if this admin account is linked to a specific room.

Example: 64b7f1e6f9c9d4e5b8a9f7c7
enable2FA
​boolean

Indicates whether two-factor authentication is enabled for this admin account.

Example: false

ApiTokenGeneratedByResponseDto

​object · required

Indicates API token has been generated by Admin

Example: true

ApiTokenUsageDto

_id
​string · required

Primary ID of the ApiTokenUsage

Example: 64b7f1e6f9c9d4e5b8a9f7c3
url
​string · required

URL accessed using the API token

Example: /api/v1/plug/system/60b7f1e6f9c9d4e5b8a9f7c3
method
​string · enum · required

HTTP method used with the API token

Enum values:
GET
POST
PUT
DELETE
PATCH
HEAD
OPTIONS
createdAt
​string · date-time · required

Date when the usage was recorded

Example: 2023-10-01T12:00:00Z
updatedAt
​string · date-time · required

Date when the usage was last updated

Example: 2023-10-01T12:00:00Z

ApiTokenUsageSearchResultDto

​object[] · required

Array of API token usage records

total
​number · required

Total number of matching records

Example: 150

GetApiTokenDto

_id
​string · required

Primary ID of the API token

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemId
​string · required

System ID associated with the API token

Example: 64b7f1e6f9c9d4e5b8a9f7c4

GetApiTokenWithUsageDto

_id
​string · required

Primary ID of the API token

Example: 64b7f1e6f9c9d4e5b8a9f7c3
​object · required

Admin associated with the API token

systemId
​string · required

System ID associated with the API token

Example: 64b7f1e6f9c9d4e5b8a9f7c4
systemName
​string · required

System name associated with the API token

Example: Production System
audience
​string · enum · required

Audience of the token — how far it reaches. Capped at the creating account's role, so it is not implied by admin.role alone (an ADMIN may deliberately mint below their ceiling).

Enum values:
system
tenant
consumer
Example: system
usageCount
​number · required

Number of times this API token has been used

Example: 42
createdAt
​string · date-time · required

Date when the API token was created

Example: 2023-10-01T12:00:00Z
updatedAt
​string · date-time · required

Date when the API token was last updated

Example: 2023-10-01T12:00:00Z

GetAdminsDto

​object[] · required

Array of admin accounts retrieved from the system. Includes all admin details and metadata.

total
​number · required

Total count of admin accounts in the database. Used for pagination calculations.

Example: 25

UpdateProfileDto

name
​string

Full name of the account holder.

Example: Glenn Quah Han Rong
email
​string

Email address of the account holder.

Example: glenn@ecovolt.com
currentPassword
​string

Current password, required to confirm a password change. Must be provided together with newPassword.

Example: OldSecurePass123!
newPassword
​string

New password for the account. Must be at least 6 characters long and will be hashed before storage. Must be provided together with currentPassword.

Example: NewSecurePass123!

NotificationChannelSettingsDto

email
​boolean

Enable or disable email notifications for this group

sms
​boolean

Enable or disable SMS notifications for this group

push
​boolean

Enable or disable push notifications for this group

telegram
​boolean

Enable or disable Telegram notifications for this group. Has no effect until the account has paired a personal Telegram chat.

QuietHoursDto

enabled
​boolean · required

Whether Do Not Disturb is active for this account. On its own (no start/end) this suppresses every channel but in-app at all times; paired with start/end it scopes suppression to that window instead.

Example: true
start
​string

Quiet hours start time in HH:mm format (local to timezone). Omit alongside end for an always-on Do Not Disturb toggle instead of a scheduled window.

Example: 22:00
end
​string

Quiet hours end time in HH:mm format (local to timezone). Omit alongside start for an always-on Do Not Disturb toggle instead of a scheduled window.

Example: 07:00
timezone
​string · enum

Timezone start/end are evaluated in, from the supported set. Only meaningful when both start and end are set.

Enum values:
Asia/Singapore
Asia/Manila
Asia/Kuala_Lumpur
Asia/Jakarta
Example: Asia/Singapore

NotificationPreferencesResponseDto

​object · required

Effective channel settings, always fully populated — a channel the account has never touched is returned at its default, so the client never has to reproduce the default rule.

​object · required

Effective Do Not Disturb setting, disabled when the account has never set one.

UpdateNotificationPreferencesDto

​object

Channels to enable or disable. Merged per channel, so omitting one leaves it as it was.

​object

Do Not Disturb setting. Replaced wholesale rather than merged — disabling drops the window so re-enabling never resurrects a forgotten schedule.

GetSessionDto

sid
​string · required

Session id. Pass to DELETE /admins/me/sessions/:sid to sign this device out.

Example: 3f6c1b8e-0f2a-4c31-9a7d-1e5b2c8d4f60
lastUsedAt
​string · date-time · required

When this session last rotated its tokens — its most recent activity, to roughly the access-token lifetime.

createdAt
​string · date-time · required

When the session was opened

isCurrent
​boolean · required

True for the session that made this request, so the UI can label it "This device" and warn before signing it out.

Example: true
app
​string · enum

Frontend the session was opened from. Absent for a client that did not name itself.

Enum values:
everest
base
docs
trek
emulator
beacon
bi
vista
userAgent
​string

User-Agent the session was last seen from. Identifies browser and OS for web clients; native clients send a transport UA that names no device.

Example: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7)
ipAddress
​string

Client IP the session was last seen from. Stored raw; resolve to a location at display time.

Example: 203.0.113.42

UpdateAdminRoleDto

role
​string · required

The new administrative role to assign to the admin. Determines the level of access and permissions within the system.

Example: ADMIN
associatedZone
​string

Optional zone ID to associate this admin with a specific zone account

Example: 64b7f1e6f9c9d4e5b8a9f7c4
associatedTenant
​string

Optional tenant ID to associate this admin with a specific tenant

Example: 64b7f1e6f9c9d4e5b8a9f7c3
associatedRoom
​string

Optional room ID to associate this admin with a specific room

Example: 64b7f1e6f9c9d4e5b8a9f7c2

UpdateAdminDto

name
​string

Full name of the admin user. Used for identification and display purposes within the system.

Example: Glenn Quah Han Rong
email
​string

Email address of the admin user. Used for authentication and system notifications.

Example: glenn@ecovolt.com
password
​string

New password for the admin account. Must be at least 6 characters long and will be hashed before storage.

Example: SecurePass123!
role
​string

Administrative role determining the level of access and permissions within the system.

Example: SUPERADMIN

LinkSystemToAdminDto

systemId
​string · required

Unique identifier of the system to be linked to the admin account. This establishes a management relationship between the admin and the system.

Example: 64b7f1e6f9c9d4e5b8a9f7c1

UnlinkSystemToAdminDto

systemId
​string · required

Unique identifier of the system to be unlinked from the admin account. This removes the management relationship between the admin and the system.

Example: 64b7f1e6f9c9d4e5b8a9f7c1

CreateZoneDto

name
​string · required

Full name of the zone to be registered in the system. This will be displayed across the application.

Example: Zone A - Engineering Wing
adminCreation
​boolean · required

Flag indicating whether an tenant admin should be created, if so send invite.

email
​string

Unique email address for the zone account. Required when adminCreation is true. Must not already exist in the system and will be used for authentication.

Example: zone-a@gmail.com
remarks
​string

Optional administrative notes or comments about the zone. Used for internal documentation and context.

Example: Department head - Engineering
zoneType
​string

Zone type key. Must be a valid type defined for this system via /entity-type/ZONE.

Example: LABORATORY

LinkMultiplePlugsDto

plugIds
​string[] · required

Array of plug identifiers to link to the zone. Used when assigning multiple plugs to a zone at once.

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]

GetZonesResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of zone objects matching the query criteria

UpdateZoneDto

name
​string

Updated full name for the zone. This will replace the existing name in the system.

Example: Zone B - Updated Wing
email
​string

Updated email address for the zone. Must be unique and not already in use by another account.

Example: updated-zone@example.com
tenantId
​string

Updated tenant identifier to reassign the zone to a different organization.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
remarks
​string

Updated administrative notes or comments about the zone. Replaces existing remarks if provided.

Example: Promoted to senior engineer
zoneType
​string

Zone type key. Must be a valid type defined for this system via /entity-type/ZONE.

Example: LABORATORY

MigratePlugDto

targetPlugId
​string · required

The ID of the target plug

sourcePlugId
​string · required

The ID of the source plug

hasPreviousSetup
​boolean

Indicates if the source plug has previous setup

EcoguardPlug

_id
​string · required

Primary ID of the EcoGuard

Example: 64b7f1e6f9c9d4e5b8a9f7c3
ecoguardEnabled
​boolean · required

Ecoguard Timer

Example: true
ecoguardTimer
​number · required

Idle Timeout Duration of the Ecoguard (Minutes)

ecoguardIdleThreshold
​number · required

Ecoguard Idle Threshold

Example: 60000

Plug

_id
​string · required

Primary ID of the Device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceType
​string · enum · required

Type of device (discriminator field)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
macId
​string · required

MAC ID of the Device (from IoT device)

Example: 1092384701928347
deviceName
​string · required

Name of the Device

Example: Living Room AC
deviceNumber
​number · required

Unique device number for identification

Example: 1
onStatus
​string · enum · required

Status of the Device (ON / OFF / INACTIVE / ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
location
​string · required

Physical location or address where the device is installed

Example: Room 101, Building A
remarks
​string · required

Remarks for the Device

batchNumber
​number · required

Manufacturing batch number for tracking production groups

Example: 1
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number currently running on the device

Example: 1.0.0
ssid
​string · required

Network SSID (Wi-Fi name) that the device is connected to

Example: IoT-Network-5G
​object · required

Tagged Tenant

​object · required

Tagged Zone

​object · required

Tagged Room

​object · required

Tagged System

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
lastSeen
​string · date-time · required

Last time the device was seen/reported

Example: 2021-09-01
isLocked
​boolean · required

Whether the device is locked. When locked, the device on/off status cannot be toggled.

Example: false
totalEnergyUsage
​number · required

Total cumulative energy usage in kWh

Example: 0
totalEnergySaved
​number · required

Total energy saved through optimization in kWh

Example: 0
autoUpdateAttempts
​number · required

Number of auto-update OTA attempts sent to this device

Example: 0
autoUpdateBlacklisted
​boolean · required

Whether device is blacklisted from auto-updates (max retries exceeded)

Example: false
manualUpdateBlacklist
​boolean · required

Whether device is manually blacklisted from auto-updates by admin

Example: false
inactivityNotificationEnabled
​boolean · required

Whether inactivity notifications are enabled for this device

Default: false
plugCategory
​string · required

Plug category name. See GET /plug-category for all valid values.

Example: CHARGER
Default: UNREGISTERED
plugType
​string · enum · required

Type of Plug

Enum values:
SOCKET
SOAPBAR
ADAPTER
Example: ADAPTER
energyUsageRecommendationReport
​string · required

Energy Usage Recommendation Report

Example: 64b7f1e6f9c9d4e5b8a9f7c3
​object · required

Ecoguard of the system

Example: 30
migratedTo
​string · required

Plug to which this plug has been migrated

Example: 64b7f1e6f9c9d4e5b8a9f7c3
targetState
​string · enum

Pending desired on/off state commanded by backend (cloud / scheduled). Set when a toggle is issued; cleared when the device reports a matching state or a physical (MANUAL) press overrides it. Always ON or OFF when present.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when targetState was last written. Used to expire stale SCHEDULED intents (24hr TTL). CLOUD intents do not expire.

Example: 2026-05-25T08:00:00.000Z
targetSource
​string · enum

Origin of the pending targetState. Drives TTL behavior on reconcile. Only CLOUD / SCHEDULED are ever written here.

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD
deviceModel
​string

Model of the device plugged into this smart plug

Example: Dell XPS 15
deviceBrand
​string

Brand of the device plugged into this smart plug

Example: Dell
wifiError
​string

Last WiFi shadow delta failure reported by the device (e.g. join_failed); cleared once it reports a successful join

Example: join_failed
wifiDesiredSsid
​string

Primary SSID the device was last told to join. Set at send time on both the shadow and legacy changeWifi paths; convergence is ssid matching any desired SSID.

Example: Corp-IoT
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them.

Example: ["Corp-IoT","Corp-IoT-2","Corp-IoT-3"]
config
​object

Settings as last reported by the device into its config shadow, one block per feature

pendingConfig
​object

Settings written to the config shadow but not yet reported back. A key the device reports at a different value was rejected

configRequestedAt
​string · date-time

When settings were last written to the config shadow

configReportedAt
​string · date-time

When the device last reported into its config shadow

rssi
​number

Latest WiFi signal strength reported by the device (dBm). Updated on each realtime MQTT report.

Example: -65
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a physical unit. Such rows have no real MAC, never report telemetry, and are excluded from firmware, OTA, provisioning and panel-slot views.

Example: false
isRidgeChild
​boolean

True when this row is a unit behind a RIDGE gateway rather than a directly-connected unit. Such rows have no real MAC, are never fleet-provisioned, and are excluded from firmware, OTA and liveness watchdogs — their gateway carries those.

Example: false
hasPhaseChildren
​boolean

True when this clamp has been split into per-phase children. Such a clamp is org-detached and excluded from energy and organisational views — its children carry those — while remaining the sole target for firmware, OTA and diagnostics.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
​object

Schedule configuration for the device. Contains recurring weekly schedules and one-time scheduled tasks.

scheduleId
​null | string

Id of the single Schedule (in the schedules collection) this device currently follows. deviceSchedule is compiled from that schedule. When null, the device follows nothing.

Example: 507f1f77bcf86cd799439011
realTimePower
​number

Real-time power consumption in watts

Example: 1500
realTimeCurrent
​number

Real-time current in amperes

Example: 6.5
lastAutoUpdateAttempt
​string · date-time

Timestamp of last auto-update OTA attempt

inactivityNotificationSentAt
​string · date-time

Timestamp when the last inactivity notification was sent for this device

thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
​object

Threshold limits sent to the device but not yet confirmed by its firmware. Keys match DeviceThresholdsDto. Present only while a save is outstanding — a key that persists here is not being enforced by the hardware.

​object

This device's alert thresholds gathered into one object. Which fields are populated depends on deviceType — see DeviceThresholdsDto. Absent when no thresholds are configured. The same values remain available as flat top-level fields.

voltageMax
​number

Max Threshold voltage reading in volts

Example: 240
currentMax
​number

Max Threshold current reading in amps

Example: 10
powerMax
​number

Max Threshold power reading in watts

Example: 100
notificationThresholdHour
​number

Hourly notification threshold — minimum hours between repeat notifications of the same type

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000

PlugUpdateItem

plugId
​string · required

MongoDB ID of the plug to update

Example: 64b7f1e6f9c9d4e5b8a9f7c3
plugCategory
​string

Category of the device connected to this plug. See GET /plug-category for valid values.

Example: CHARGER
deviceBrand
​string

Brand of the device connected to this plug

Example: Novita
deviceModel
​string

Model of the device connected to this plug

Example: ND-195
remarks
​string

Additional remarks or notes about the plug

Example: Water dispenser appliance

BulkUpdatePlugsDto

​object[] · required

Array of plug update operations to perform in a single batch

Example: [{"plugId":"64b7f1e6f9c9d4e5b8a9f7c3","plugCategory":"CHARGER","deviceBrand":"Novita","deviceModel":"ND-195","remarks":"Water dispenser appliance"}]

AiCategorizePlugsRequestDto

plugIds
​string[] · minItems: 1 · maxItems: 100 · required

Array of plug IDs to categorize using AI

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]

UpdatePlugDto

deviceName
​string

Name of the device

Example: Living Room Light
location
​string

Physical location of the device

Example: Block 123, Unit 01-23
remarks
​string

Additional remarks or notes about the device

Example: Handle with care - critical equipment
tenantId
​string

Tenant ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c3
zoneId
​string

Zone ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c4
roomId
​string

Room ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c5
isLocked
​boolean

Whether the device is locked. When locked, the device cannot be toggled ON/OFF.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
plugType
​string

Type of Plug

Example: SOAPBAR
plugCategory
​string

Type of Plug Category

Example: CHARGER
deviceModel
​string

Model identifier of the Plug

Example: TP-Link HS110
deviceBrand
​string

Brand of the Plug device

Example: TP-Link
batchNumber
​number

Batch Number of the Plug

Example: 23

FilteredPlugDto

_id
​string · required

Unique database identifier of the device document in the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

Unique identifier assigned to the device by the IoT hardware (MAC ID)

Example: 1092384701928347
deviceName
​string · required

Friendly name for the device for easy identification

Example: Living Room AC
onStatus
​string · enum · required

Current operational status of the device (ON, OFF, INACTIVE, or ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
totalEnergyUsage
​number · required

Cumulative total energy consumption in kilowatt-hours (kWh) since device installation

Example: 500
tenantId
​string · required

Unique identifier of the tenant organization that owns this device

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantName
​string · required

Name of the tenant organization that owns this device

Example: Faculty of Engineering
zoneId
​string · required

Unique identifier of the zone that this device is assigned to

Example: 64b7f1e6f9c9d4e5b8a9f7c5
zoneName
​string · required

Name of the zone that this device is assigned to

Example: Zone A
roomId
​string · required

Unique identifier of the room where this device is physically located

Example: 64b7f1e6f9c9d4e5b8a9f7c6
roomName
​string · required

Name of the room where this device is physically located

Example: Room 101
dbId
​string · required

Unique identifier of the distribution box that this device is connected to (for MCBs)

Example: 64b7f1e6f9c9d4e5b8a9f7c7
dbName
​string · required

Name of the distribution box that this device is connected to (for MCBs)

Example: Main Distribution Box
systemId
​string · required

Unique identifier of the system that this device belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system that this device belongs to

Example: NUS Engineering Building
realTimePower
​number · required

Real-time power consumption in watts (W) measured by the device

Example: 115
realTimeCurrent
​number · required

Real-time current draw in amperes (A) measured by the device

Example: 0.5
ssid
​string · required

Network SSID (Wi-Fi name) that the device is currently connected to

Example: XH001
plugType
​string · enum · required

Hardware type classification of the plug device (e.g., ADAPTER, EXTENSION)

Enum values:
SOCKET
SOAPBAR
ADAPTER
Example: ADAPTER
plugCategory
​string · required

Category classification for the connected device type. See GET /plug-category for valid values.

Example: CHARGER
targetState
​string · enum

Pending desired on/off state commanded by backend. Present when a toggle was issued but the device has not yet acknowledged (e.g. issued while INACTIVE). Frontend can derive a "Pending" indicator when this differs from onStatus.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when the pending targetState was last written.

Example: 2026-05-25T08:00:00.000Z
deviceNumber
​number

Auto-incremented sequential number for tracking device registration order

Example: 3
batchNumber
​number

Manufacturing batch number for tracking production groups and quality control

Example: 23
chipModel
​string · enum

Hardware chip model identifier used in the device (e.g., ESP32C2, ESP8266)

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
versionNumber
​string

Firmware version number currently running on the device

Example: 1.0.0
wifiDesiredSsid
​string

Primary SSID the device was last told to join

Example: XH001
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join

Example: XH001-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join

Example: XH001-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them

Example: ["XH001","XH001-2","XH001-3"]
​object

Weekly and one-time schedule configuration for automated device control

scheduleId
​null | string

Id of the named Schedule this device currently follows. deviceSchedule is compiled from it. Absent or null when the device follows nothing.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
lastSeen
​string · date-time

Timestamp when the device last communicated with the system

Example: 2024-10-15T12:30:00.000Z
isLocked
​boolean

Lock status indicating if the device is locked

Example: false
inactivityNotificationEnabled
​boolean

Whether inactivity notifications are enabled for this device

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device

Example: true
​object

Alert thresholds configured for this device, gathered into one object. Which fields are populated depends on the device type — see DeviceThresholdsDto. Omitted entirely when nothing is set.

rangeEnergyUsage
​number

Energy usage in kWh over the from..till window, aggregated from daily usage history. Present only when both query params are supplied — unlike the cumulative totalEnergyUsage, this is windowed.

Example: 42.75
​object

Ecoguard power-saving feature configuration and settings for this plug

GetPlugsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of plug device objects matching the query criteria

PlugCategoryEnergyBreakdownDto

plugCategory
​string · required

Category classification of the plug device. See GET /plug-category for valid values.

Example: CHARGER
totalEnergyUsage
​number · required

Total energy usage (kWh) for all plugs in this category

Example: 342.5

PlugCategoriesBreakdownDto

plugCategory
​string · required

Category classification of the plug device. See GET /plug-category for valid values.

Example: CHARGER
count
​number · required

Total count of plugs belonging to this specific category in the system

Example: 23

CreateEcoguardPlugDto

ecoguardEnabled
​boolean · required

Enable or disable the Ecoguard automatic power-off feature for idle detection. When enabled, the plug monitors power consumption.

Example: true
ecoguardTimer
​number · required

Duration in minutes before the plug automatically turns off after detecting idle power usage. Applied when power stays below threshold.

Example: 30
ecoguardIdleThreshold
​number · required

Power consumption threshold in watts that defines idle state. When usage falls below this value, the idle timer starts counting.

Example: 5

BreakerCurve

string · enum
Enum values:
B
C
D

Trip curve stamped on the breaker

CoilClampPositionDto

x
​number · required

Absolute X coordinate of a CT clamp on the digital twin canvas

Example: 320.5
y
​number · required

Absolute Y coordinate of a CT clamp on the digital twin canvas

Example: 410.5

SandboxDevice

id
​string · required

Unique identifier for the sandbox device

Example: sandbox-device-1
type
​string · enum · required

Type of sandbox device

Enum values:
DUMB_MCB
RCCB
RCBO
MCCB
ISOLATOR
SPD
PLANNED_SMART
Example: DUMB_MCB
name
​string · required

User-defined name for the device

Example: Kitchen Lights
digitalTwinX
​number · required

X position on the digital twin canvas

Example: 400
rowLine
​number · required

Row line position (1-6)

Example: 2
poles
​number

Number of poles. Sets the module width for everything except an MCCB.

Example: 2
widthModules
​number

How many DIN modules wide the device body is, at 18mm per module. Equals poles for every modular device; an MCCB is sized by frame instead, so it carries its own value. Drives the rendered width on the digital twin.

Example: 2
curve
​string · enum

Trip curve stamped on the breaker

Enum values:
B
C
D
Example: C
confidence
​number

How sure the reading was when this device came from a digitised photo, 0 to 1. Absent on hand-placed devices.

Example: 0.82
ratedCurrent
​number

Rated current in amperes

Example: 16
ratedVoltage
​number

Rated voltage in volts

Example: 230
mcbType
​string · enum

MCB type (for DUMB_MCB devices)

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: BUILT_IN
leakageCurrent
​number

Leakage current in milliamperes (for RCCB devices)

Example: 30
color
​string

Custom color for visual identification

Example: #94a3b8
​object[]

Absolute canvas positions of the 3 CT clamps, for a PLANNED_SMART device standing in for a Wattson Pro. Mirrors MCB.coilClampPositions so a planned hub is wired up on the canvas the same way a real one is.

notes
​string

Additional notes about the device

Example: Connected to kitchen circuit

WireConnection

deviceId
​string · required

Device ID (MCB._id or SandboxDevice.id)

Example: sandbox-device-1
deviceType
​string · enum · required

Type of device being connected

Enum values:
SMART_MCB
DUMB_MCB
RCCB
RCBO
MCCB
ISOLATOR
SPD
PLANNED_SMART
Example: DUMB_MCB
side
​string · enum · required

Side of the device where the connection is made

Enum values:
LEFT
RIGHT
TOP
BOTTOM
Example: LEFT

SandboxWire

id
​string · required

Unique identifier for the wire connection

Example: wire-1
​object · required

Source connection point

​object · required

Target connection point

color
​string

Wire color (hex code)

Example: #fbbf24
Default: #fbbf24
thickness
​number

Wire thickness in pixels

Example: 3
Default: 3
label
​string

Optional label for the wire

Example: Phase 1

DistributionBox

_id
​string · required

Primary ID of the Distribution Box

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

Name/identifier of the Distribution Box

Example: Main DB Box - Floor 1
system
​string · required

System to which this distribution box belongs

Example: 64b7f1e6f9c9d4e5b8a9f7c3
createdAt
​string · date-time · required

Date and time when the distribution box was created

updatedAt
​string · date-time · required

Date and time when the distribution box was last updated

boxNumber
​number

Unique box number for identification within a system

Example: 1
numberOfRows
​number

Number of rows in the distribution box

Example: 1
mcbs
​string[]

Array of MCB IDs or partially populated MCB objects (_id, deviceName, macId, onStatus)

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
hasMainBreaker
​boolean

Whether the distribution box has a main circuit breaker

Example: true
mainBreakerRating
​number

Main breaker rating in amperes (if hasMainBreaker is true)

Example: 63
location
​string

Physical location where the distribution box is installed

Example: Ground Floor, Electrical Room
remarks
​string

Additional remarks or notes about the distribution box

Example: Main distribution panel installed in 2024
tenant
​string

Tenant to which this distribution box belongs

Example: 64b7f1e6f9c9d4e5b8a9f7c4
zone
​string

Zone to which this distribution box belongs

Example: 64b7f1e6f9c9d4e5b8a9f7c5
room
​string

Room where this distribution box is located

Example: 64b7f1e6f9c9d4e5b8a9f7c6
​object[]

Array of sandbox (non-smart) devices in the distribution box

​object[]

Array of wire connections between devices in the distribution box

digitalTwinWidth
​number

Width of the digital twin canvas in pixels

Example: 1200
digitalTwinHeight
​number

Height of the digital twin canvas in pixels

Example: 800
singleLineDiagramKey
​string

S3 key for the single line diagram image

Example: single-line-diagrams/abc123-def456.png
singleLineDiagramUrl
​string

CDN URL for the single line diagram image

Example: https://cdn.example.com/single-line-diagrams/abc123-def456.png
dbPhotoKey
​string

S3 key for the distribution box photo

Example: distribution-box-photos/abc123-def456.png
dbPhotoUrl
​string

CDN URL for the distribution box photo

Example: https://cdn.example.com/distribution-box-photos/abc123-def456.png

MCB

_id
​string · required

Primary ID of the Device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceType
​string · enum · required

Type of device (discriminator field)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
macId
​string · required

MAC ID of the Device (from IoT device)

Example: 1092384701928347
deviceName
​string · required

Name of the Device

Example: Living Room AC
deviceNumber
​number · required

Unique device number for identification

Example: 1
onStatus
​string · enum · required

Status of the Device (ON / OFF / INACTIVE / ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
location
​string · required

Physical location or address where the device is installed

Example: Room 101, Building A
remarks
​string · required

Remarks for the Device

batchNumber
​number · required

Manufacturing batch number for tracking production groups

Example: 1
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number currently running on the device

Example: 1.0.0
ssid
​string · required

Network SSID (Wi-Fi name) that the device is connected to

Example: IoT-Network-5G
​object · required

Tagged Tenant

​object · required

Tagged Zone

​object · required

Tagged Room

​object · required

Tagged System

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
lastSeen
​string · date-time · required

Last time the device was seen/reported

Example: 2021-09-01
isLocked
​boolean · required

Whether the device is locked. When locked, the device on/off status cannot be toggled.

Example: false
totalEnergyUsage
​number · required

Total cumulative energy usage in kWh

Example: 0
totalEnergySaved
​number · required

Total energy saved through optimization in kWh

Example: 0
autoUpdateAttempts
​number · required

Number of auto-update OTA attempts sent to this device

Example: 0
autoUpdateBlacklisted
​boolean · required

Whether device is blacklisted from auto-updates (max retries exceeded)

Example: false
manualUpdateBlacklist
​boolean · required

Whether device is manually blacklisted from auto-updates by admin

Example: false
inactivityNotificationEnabled
​boolean · required

Whether inactivity notifications are enabled for this device

Default: false
mcbType
​string · enum · required

Type of MCB

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: COIL
ratedCurrent
​number · required

Rated current capacity in amperes

Example: 16
ratedVoltage
​number · required

Rated voltage in volts

Example: 230
realTimeVoltage
​number · required

Real-time voltage in volts

Example: 230
powerFactor
​number · required

Power factor (0-1)

Example: 0.95
​object · required

Parent distribution box containing this MCB

isReversePower
​boolean · required

Whether power/current readings should be reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isAReversePower
​boolean · required

Whether power/current readings should be reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isBReversePower
​boolean · required

Whether power/current readings should be reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isCReversePower
​boolean · required

Whether power/current readings should be reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
targetState
​string · enum

Pending desired on/off state commanded by backend (cloud / scheduled). Set when a toggle is issued; cleared when the device reports a matching state or a physical (MANUAL) press overrides it. Always ON or OFF when present.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when targetState was last written. Used to expire stale SCHEDULED intents (24hr TTL). CLOUD intents do not expire.

Example: 2026-05-25T08:00:00.000Z
targetSource
​string · enum

Origin of the pending targetState. Drives TTL behavior on reconcile. Only CLOUD / SCHEDULED are ever written here.

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD
deviceModel
​string

Model name or identifier of the device

Example: TP-Link HS110
deviceBrand
​string

Brand or manufacturer of the device

Example: TP-Link
wifiError
​string

Last WiFi shadow delta failure reported by the device (e.g. join_failed); cleared once it reports a successful join

Example: join_failed
wifiDesiredSsid
​string

Primary SSID the device was last told to join. Set at send time on both the shadow and legacy changeWifi paths; convergence is ssid matching any desired SSID.

Example: Corp-IoT
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them.

Example: ["Corp-IoT","Corp-IoT-2","Corp-IoT-3"]
config
​object

Settings as last reported by the device into its config shadow, one block per feature

pendingConfig
​object

Settings written to the config shadow but not yet reported back. A key the device reports at a different value was rejected

configRequestedAt
​string · date-time

When settings were last written to the config shadow

configReportedAt
​string · date-time

When the device last reported into its config shadow

rssi
​number

Latest WiFi signal strength reported by the device (dBm). Updated on each realtime MQTT report.

Example: -65
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a physical unit. Such rows have no real MAC, never report telemetry, and are excluded from firmware, OTA, provisioning and panel-slot views.

Example: false
isRidgeChild
​boolean

True when this row is a unit behind a RIDGE gateway rather than a directly-connected unit. Such rows have no real MAC, are never fleet-provisioned, and are excluded from firmware, OTA and liveness watchdogs — their gateway carries those.

Example: false
hasPhaseChildren
​boolean

True when this clamp has been split into per-phase children. Such a clamp is org-detached and excluded from energy and organisational views — its children carry those — while remaining the sole target for firmware, OTA and diagnostics.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
​object

Schedule configuration for the device. Contains recurring weekly schedules and one-time scheduled tasks.

scheduleId
​null | string

Id of the single Schedule (in the schedules collection) this device currently follows. deviceSchedule is compiled from that schedule. When null, the device follows nothing.

Example: 507f1f77bcf86cd799439011
realTimePower
​number

Real-time power consumption in watts

Example: 1500
realTimeCurrent
​number

Real-time current in amperes

Example: 6.5
lastAutoUpdateAttempt
​string · date-time

Timestamp of last auto-update OTA attempt

inactivityNotificationSentAt
​string · date-time

Timestamp when the last inactivity notification was sent for this device

thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
​object

Threshold limits sent to the device but not yet confirmed by its firmware. Keys match DeviceThresholdsDto. Present only while a save is outstanding — a key that persists here is not being enforced by the hardware.

​object

This device's alert thresholds gathered into one object. Which fields are populated depends on deviceType — see DeviceThresholdsDto. Absent when no thresholds are configured. The same values remain available as flat top-level fields.

measurementType
​string · enum

Type of load/circuit being measured by this MCB

Enum values:
SSO
LIGHTS_FANS
LIGHTS
FANS
AIRCON
POWER_OUTLETS
GENERAL
COMBINED
Example: SSO
digitalTwinX
​number

X coordinate for digital twin SVG positioning

Example: 150.5
digitalTwinY
​number

Y coordinate for digital twin SVG positioning (free-placed devices such as coils)

Example: 130.5
​object[]

Absolute canvas positions of the 3 CT clamps (COIL3P devices only)

coilRotation
​number

Rotation of the coil body in the digital twin, in degrees (e.g. 0, 90, 180, 270).

Example: 90
rowLine
​number

Row line number (1-6) the MCB is connected to

Example: 1
slotNumber
​number

Slot/position number on the busbar

Example: 3
voltageMax
​number

Max Threshold voltage reading in volts

Example: 240
currentMax
​number

Max Threshold current reading in amps

Example: 10
powerMax
​number

Max Threshold power reading in watts

Example: 100
notificationThresholdHour
​number

Hourly notification threshold — minimum hours between repeat notifications of the same type

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
isSingle
​boolean

COIL3P only. How the clamp is wired: false (default) = 3 x 1P, three independent circuits shown as three rows with per-phase readings and eligible for a phase split; true = one combined circuit shown as a single row, with thresholds ganged across all three phases.

Default: false
voltageAMin
​number

Min threshold phase A voltage in volts (COIL3P only)

Example: 190
voltageBMin
​number

Min threshold phase B voltage in volts (COIL3P only)

Example: 190
voltageCMin
​number

Min threshold phase C voltage in volts (COIL3P only)

Example: 190
voltageAMax
​number

Max threshold phase A voltage in volts (COIL3P only)

Example: 240
voltageBMax
​number

Max threshold phase B voltage in volts (COIL3P only)

Example: 240
voltageCMax
​number

Max threshold phase C voltage in volts (COIL3P only)

Example: 240
currentAMax
​number

Max threshold phase A current in amps (COIL3P only)

Example: 16
currentBMax
​number

Max threshold phase B current in amps (COIL3P only)

Example: 16
currentCMax
​number

Max threshold phase C current in amps (COIL3P only)

Example: 16
powerAMax
​number

Max threshold phase A power in watts (COIL3P only)

Example: 3000
powerBMax
​number

Max threshold phase B power in watts (COIL3P only)

Example: 3000
powerCMax
​number

Max threshold phase C power in watts (COIL3P only)

Example: 3000
phaseLabels
​string[]

COIL3P only. Optional labels for phases A, B and C (in order). Max 3 entries.

Example: ["Lighting","Sockets","Aircon"]
phaseParent
​string

Phase children only. The COIL3P clamp this row represents one phase of. The clamp owns the MAC, the telemetry and the firmware; this row owns only the organisational assignment.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
phase
​string · enum

Phase children only. Which phase of the parent clamp this row draws its readings from.

Enum values:
A
B
C
Example: A
splitAt
​string · date-time

Phase children only. Audit record of when this leg's document was created. Nothing filters on it: a COIL3P writes its per-phase columns on every message whatever its wiring, so a leg owns its column for the whole of the parent's history, including rows predating the split.

Example: 2026-08-05T00:00:00.000Z
realTimePowerA
​number

Phase A real-time power (W)

realTimePowerB
​number

Phase B real-time power (W)

realTimePowerC
​number

Phase C real-time power (W)

realTimeVoltageA
​number

Phase A real-time voltage (V)

realTimeVoltageB
​number

Phase B real-time voltage (V)

realTimeVoltageC
​number

Phase C real-time voltage (V)

realTimeCurrentA
​number

Phase A real-time current (A)

realTimeCurrentB
​number

Phase B real-time current (A)

realTimeCurrentC
​number

Phase C real-time current (A)

totalEnergyUsageA
​number

Phase A cumulative energy usage (kWh)

totalEnergyUsageB
​number

Phase B cumulative energy usage (kWh)

totalEnergyUsageC
​number

Phase C cumulative energy usage (kWh)

powerFactorA
​number

Phase A power factor (0-1)

powerFactorB
​number

Phase B power factor (0-1)

powerFactorC
​number

Phase C power factor (0-1)

FilteredMcbDto

_id
​string · required

Unique database identifier of the device document in the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

Unique identifier assigned to the device by the IoT hardware (MAC ID)

Example: 1092384701928347
deviceName
​string · required

Friendly name for the device for easy identification

Example: Living Room AC
onStatus
​string · enum · required

Current operational status of the device (ON, OFF, INACTIVE, or ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
totalEnergyUsage
​number · required

Cumulative total energy consumption in kilowatt-hours (kWh) since device installation

Example: 500
tenantId
​string · required

Unique identifier of the tenant organization that owns this device

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantName
​string · required

Name of the tenant organization that owns this device

Example: Faculty of Engineering
zoneId
​string · required

Unique identifier of the zone that this device is assigned to

Example: 64b7f1e6f9c9d4e5b8a9f7c5
zoneName
​string · required

Name of the zone that this device is assigned to

Example: Zone A
roomId
​string · required

Unique identifier of the room where this device is physically located

Example: 64b7f1e6f9c9d4e5b8a9f7c6
roomName
​string · required

Name of the room where this device is physically located

Example: Room 101
dbId
​string · required

Unique identifier of the distribution box that this device is connected to (for MCBs)

Example: 64b7f1e6f9c9d4e5b8a9f7c7
dbName
​string · required

Name of the distribution box that this device is connected to (for MCBs)

Example: Main Distribution Box
systemId
​string · required

Unique identifier of the system that this device belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system that this device belongs to

Example: NUS Engineering Building
realTimePower
​number · required

Real-time power consumption in watts (W) measured by the device

Example: 115
realTimeCurrent
​number · required

Real-time current draw in amperes (A) measured by the device

Example: 0.5
ssid
​string · required

Network SSID (Wi-Fi name) that the device is currently connected to

Example: XH001
mcbType
​string · enum · required

Type of MCB (trip curve type)

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: BUILT_IN
ratedCurrent
​number · required

Rated current capacity in amperes

Example: 16
targetState
​string · enum

Pending desired on/off state commanded by backend. Present when a toggle was issued but the device has not yet acknowledged (e.g. issued while INACTIVE). Frontend can derive a "Pending" indicator when this differs from onStatus.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when the pending targetState was last written.

Example: 2026-05-25T08:00:00.000Z
deviceNumber
​number

Auto-incremented sequential number for tracking device registration order

Example: 3
batchNumber
​number

Manufacturing batch number for tracking production groups and quality control

Example: 23
chipModel
​string · enum

Hardware chip model identifier used in the device (e.g., ESP32C2, ESP8266)

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
versionNumber
​string

Firmware version number currently running on the device

Example: 1.0.0
wifiDesiredSsid
​string

Primary SSID the device was last told to join

Example: XH001
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join

Example: XH001-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join

Example: XH001-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them

Example: ["XH001","XH001-2","XH001-3"]
​object

Weekly and one-time schedule configuration for automated device control

scheduleId
​null | string

Id of the named Schedule this device currently follows. deviceSchedule is compiled from it. Absent or null when the device follows nothing.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
lastSeen
​string · date-time

Timestamp when the device last communicated with the system

Example: 2024-10-15T12:30:00.000Z
isLocked
​boolean

Lock status indicating if the device is locked

Example: false
inactivityNotificationEnabled
​boolean

Whether inactivity notifications are enabled for this device

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Example: true
Default: false
​object

Alert thresholds configured for this device, gathered into one object. Which fields are populated depends on the device type — see DeviceThresholdsDto. Omitted entirely when nothing is set.

rangeEnergyUsage
​number

Energy usage in kWh over the from..till window, aggregated from daily usage history. Present only when both query params are supplied — unlike the cumulative totalEnergyUsage, this is windowed.

Example: 42.75
measurementType
​string · enum

Type of load/circuit being measured by this MCB

Enum values:
SSO
LIGHTS_FANS
LIGHTS
FANS
AIRCON
POWER_OUTLETS
GENERAL
COMBINED
Example: SSO
ratedVoltage
​number

Rated voltage in volts

Example: 230
realTimeVoltage
​number

Real-time voltage in volts

Example: 230
powerFactor
​number

Power factor (0-1)

Example: 0.95
digitalTwinX
​number

X coordinate for digital twin SVG positioning

Example: 150.5
digitalTwinY
​number

Y coordinate for digital twin SVG positioning (free-placed devices such as coils)

Example: 130.5
​object[]

Absolute canvas positions of the 3 CT clamps (COIL3P devices only)

coilRotation
​number

Rotation of the coil body in the digital twin, in degrees (e.g. 0, 90, 180, 270).

Example: 90
rowLine
​number

Row line number (1-6) the MCB is connected to

Example: 1
slotNumber
​number

Slot/position number on the busbar

Example: 3
isReversePower
​boolean

Whether power/current readings are reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isAReversePower
​boolean

Whether power/current readings are reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isBReversePower
​boolean

Whether power/current readings are reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isCReversePower
​boolean

Whether power/current readings are reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isSingle
​boolean

COIL3P only. How the clamp is wired. false = 3 x 1P, three independent circuits, each shown as its own row with per-phase readings; true = one combined three-phase circuit shown as a single row, with one threshold shared by all three phases.

Example: false
Default: false
phaseLabels
​string[]

COIL3P only. Optional labels for phases A, B and C (in order).

Example: ["Lighting","Sockets","Aircon"]
realTimePowerA
​number

Phase A real-time power (W)

realTimePowerB
​number

Phase B real-time power (W)

realTimePowerC
​number

Phase C real-time power (W)

realTimeVoltageA
​number

Phase A real-time voltage (V)

realTimeVoltageB
​number

Phase B real-time voltage (V)

realTimeVoltageC
​number

Phase C real-time voltage (V)

realTimeCurrentA
​number

Phase A real-time current (A)

realTimeCurrentB
​number

Phase B real-time current (A)

realTimeCurrentC
​number

Phase C real-time current (A)

totalEnergyUsageA
​number

Phase A cumulative energy usage (kWh)

totalEnergyUsageB
​number

Phase B cumulative energy usage (kWh)

totalEnergyUsageC
​number

Phase C cumulative energy usage (kWh)

powerFactorA
​number

Phase A power factor (0-1)

powerFactorB
​number

Phase B power factor (0-1)

powerFactorC
​number

Phase C power factor (0-1)

phase
​string · enum

Set only when the list is requested with expandPhases=true and this row represents a single phase of a COIL3P device. In that mode realTimePower, realTimeCurrent, realTimeVoltage, totalEnergyUsage and powerFactor hold the values of this phase.

Enum values:
A
B
C
Example: A
phaseParent
​string

Set when this row is one phase of a split COIL3P. The hardware settings — rated current, thresholds, reverse-power, firmware, panel position — belong to the clamp at this id, not to the leg; only the name and the Room / Zone / Tenant assignment are the leg's own.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a whole device.

Example: false
phaseName
​string

User-defined name of this row's phase (expandPhases=true rows only)

Example: Kitchen

GetMCBsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

List of MCBs with organizational hierarchy details

MCBNameSuggestionDto

mcbId
​string · required

MCB ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
suggestedName
​string · required

Suggested device name composed of Distribution Box name, Room name, and Measurement type

Example: DB-4-7U-5 | 4/7/E | Lights & Fans
distributionBoxName
​string

Distribution Box name

Example: DB-4-7U-5
roomName
​string

Room name

Example: 4/7/E
zoneName
​string

Zone name

Example: Zone A
tenantName
​string

Tenant name

Example: Tenant A
deviceNumber
​number

Device number

Example: 1

GetBulkMCBNamesResponseDto

​object[] · required

Array of MCB IDs with their suggested names

MCBNameUpdateDto

mcbId
​string · required

MCB ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceName
​string · required

New device name to save

Example: DB-4-7U-5 | 4/7/E | Lights & Fans

SaveBulkMCBNamesDto

​object[] · required

Array of MCB ID and name pairs to save

Example: [{"mcbId":"64b7f1e6f9c9d4e5b8a9f7c3","deviceName":"DB-4-7U-5 | 4/7/E | Lights & Fans"},{"mcbId":"64b7f1e6f9c9d4e5b8a9f7c4","deviceName":"DB-4-7U-5 | 4/7/E | Aircon"}]

MCBUpdateDto

mcbId
​string · required

MCB ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
ratedCurrent
​number

Rated current capacity in amperes (1-100)

Example: 16
ratedVoltage
​number

Rated voltage in volts

Example: 230
mcbType
​string · enum

Type of MCB

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: COIL
measurementType
​string · enum

Type of load/circuit being measured by this MCB

Enum values:
SSO
LIGHTS_FANS
LIGHTS
FANS
AIRCON
POWER_OUTLETS
GENERAL
COMBINED
Example: SSO

MassUpdateMCBDto

​object[] · required

Array of MCB updates

Example: [{"mcbId":"64b7f1e6f9c9d4e5b8a9f7c3","ratedCurrent":16,"ratedVoltage":230,"mcbType":"COIL","measurementType":"SSO"},{"mcbId":"64b7f1e6f9c9d4e5b8a9f7c4","ratedCurrent":32,"mcbType":"COIL"}]

UpdateMCBDto

deviceName
​string

Name of the device

Example: Living Room Light
location
​string

Physical location of the device

Example: Block 123, Unit 01-23
remarks
​string

Additional remarks or notes about the device

Example: Handle with care - critical equipment
tenantId
​string

Tenant ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c3
zoneId
​string

Zone ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c4
roomId
​string

Room ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c5
isLocked
​boolean

Whether the device is locked. When locked, the device cannot be toggled ON/OFF.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
deviceNumber
​number

Unique device number for identification

Example: 1
mcbType
​string · enum

Type of MCB (trip curve type)

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: BUILT_IN
measurementType
​string · enum

Measurement type classification for energy usage categorization

Enum values:
SSO
LIGHTS_FANS
LIGHTS
FANS
AIRCON
POWER_OUTLETS
GENERAL
COMBINED
Example: AIRCON
onStatus
​string · enum

Status of the MCB

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
ratedCurrent
​number

Rated current capacity in amperes

Example: 16
ratedVoltage
​number

Rated voltage in volts

Example: 230
distributionBoxId
​string

Distribution Box ID containing this MCB

digitalTwinX
​number

X coordinate for digital twin SVG positioning

Example: 150.5
coilRotation
​number

Rotation of the coil body in the digital twin, in degrees (e.g. 0, 90, 180, 270).

Example: 90
rowLine
​number

Row line number (1-6) the MCB is connected to

Example: 1
slotNumber
​number

Slot/position number on the busbar

Example: 3
isSingle
​boolean

COIL3P only. How the clamp is wired. false = 3 x 1P, three independent circuits, each shown as its own row with per-phase readings and thresholds set independently; true = one combined three-phase circuit shown as a single row, with the same threshold applied to all three phases and every phase marked in use.

Example: false
phaseLabels
​string[]

COIL3P only. Optional labels for phases A, B and C (in order). Max 3 entries.

Example: ["Lighting","Sockets","Aircon"]

MassMoveMCBsDistributionBoxDto

mcbIds
​string[] · required

Array of MCB IDs to move to the new distribution box

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
newDistributionBoxId
​string

ID of the new distribution box to move the MCBs to. If null or undefined, MCBs will be unassigned from their current distribution box.

Example: 64b7f1e6f9c9d4e5b8a9f7c3

PhaseAssignmentDto

phase
​string · enum · required

Which phase of the clamp this assignment covers

Enum values:
A
B
C
Example: A
roomId
​string

Room this phase feeds. At least one of roomId / zoneId / tenantId must be supplied, otherwise the phase has no location and its energy is attributed nowhere.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
zoneId
​string

Zone this phase feeds

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantId
​string

Tenant this phase is billed to

Example: 64b7f1e6f9c9d4e5b8a9f7c5
deviceName
​string

Display name for this phase. Defaults to the clamp's own per-phase name, or ' - '.

Example: Kitchen
isSpare
​boolean

Mark this leg as spare — the clamp is installed but nothing is wired to this phase. A spare leg still exists as a device so it can be assigned later, but is excluded from device counts, energy views and analytics. Clear it with PATCH /mcb/:systemId/:legId { isSpare: false } once the circuit is connected.

Default: false

SplitMcbPhasesDto

​object[] · required

One entry per phase to break out. Supply only the phases that are physically wired — a clamp with two live phases yields two children, not three. Each phase may appear at most once.

PhaseSplitIntegrityDto

parentsStillAttached
​string[] · required

Split clamps that still carry an organisational ref. Each one is counted alongside its own children, so its energy appears twice. The most serious of the three — it reaches invoices silently.

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
orphanedChildren
​string[] · required

Active phase children whose parent clamp is missing or no longer marked as split. Their history cannot be projected, so they report zero.

Example: []
childrenWithoutLocation
​string[] · required

Active phase children with no room, zone or tenant, so their energy is attributed to no location. Informational only — it does not affect healthy, because a clamp that was never assigned produces unassigned children too, which is a pre-existing data gap rather than a fault in the split.

Example: []
healthy
​boolean · required

True when no split clamp is still attached and no child is orphaned — the two states that corrupt reported energy. childrenWithoutLocation is excluded deliberately; see its description.

Example: true

MCBPositionDto

mcbId
​string · required

MCB ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
rowLine
​number · required

Row line number (1-6) the MCB is connected to

Example: 1
digitalTwinX
​number

X coordinate for digital twin SVG positioning

Example: 150.5
digitalTwinY
​number

Y coordinate for digital twin SVG positioning (free-placed devices such as coils)

Example: 130.5
slotNumber
​number

Slot/position number on the busbar

Example: 3
​object[]

Absolute canvas positions of the 3 CT clamps (COIL3P devices only)

coilRotation
​number

Rotation of the coil body in the digital twin, in degrees (e.g. 0, 90, 180, 270).

Example: 90

BulkUpdateMCBPositionsDto

​object[] · required

Array of MCB positions to update

Example: [{"mcbId":"64b7f1e6f9c9d4e5b8a9f7c3","digitalTwinX":150.5,"rowLine":1,"slotNumber":3},{"mcbId":"64b7f1e6f9c9d4e5b8a9f7c4","digitalTwinX":250.5,"rowLine":2,"slotNumber":4}]

SetReversePowerDto

isReversePower
​boolean · required

Whether to enable reverse power mode. When true, negative power/current values are converted to positive (absolute values).

Example: true
isAReversePower
​boolean · required

Whether to enable reverse power mode. When true, negative power/current values are converted to positive (absolute values).

Example: true
isBReversePower
​boolean · required

Whether to enable reverse power mode. When true, negative power/current values are converted to positive (absolute values).

Example: true
isCReversePower
​boolean · required

Whether to enable reverse power mode. When true, negative power/current values are converted to positive (absolute values).

Example: true

SetReversePowerResponseDto

mcbId
​string · required

The MCB ID that was updated

Example: 507f1f77bcf86cd799439011
isReversePower
​boolean · required

The new reverse power status

Example: true
isAReversePower
​boolean · required

The new reverse power status

Example: true
isBReversePower
​boolean · required

The new reverse power status

Example: true
isCReversePower
​boolean · required

The new reverse power status

Example: true
hourlyRecordsConverted
​number · required

Number of hourly usage history records converted to absolute values

Example: 24
dailyRecordsConverted
​number · required

Number of daily usage history records converted to absolute values

Example: 7

PeopleCounterConfig

enabled
​boolean

Whether the BLE people counter is scanning. Enabling takes effect only on the next device boot, so a pending enable reports false until then, as does a unit whose BLE radio failed to start

Example: true
rssiGate
​number

Room boundary in dBm (-100..-20); weaker devices are treated as past the wall. Must be calibrated per site

Example: -50
connectDuration
​number

Seconds a BLE device must stay inside the gate before it is counted as connected (10..3600)

Example: 30
disconnectDuration
​number

Seconds a BLE device must be unseen before it is counted as disconnected (5..3600)

Example: 20
debugModeEnabled
​boolean

Whether the device publishes the BLE devices it sees on the generic debug topic (feature: peopleCounter)

Example: false

AirconControlConfig

​object

AirconControlIrType

string · enum
Enum values:
AIRCON
FAN

Type of IR device being controlled (AIRCON or FAN)

AirconControlFanBrand

string · enum
Enum values:
KDK_U48FP
KDK_U60FW
U60FWS
KDK_T60AW
T60AWS

Brand of the fan unit (only applicable when irType is FAN)

AirconControlSeriesType

string · enum
Enum values:
MAXWELL
MAXWELL_PRO
MAXWELL_ULTRA

Series type — MAXWELL (control only), MAXWELL_PRO (control + ambient temp/humidity sensing), or MAXWELL_ULTRA (control + ambient temp/humidity + motion sensing)

AirconControl

_id
​string · required

Primary ID of the Device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceType
​string · enum · required

Type of device (discriminator field)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
macId
​string · required

MAC ID of the Device (from IoT device)

Example: 1092384701928347
deviceName
​string · required

Name of the Device

Example: Living Room AC
deviceNumber
​number · required

Unique device number for identification

Example: 1
onStatus
​string · enum · required

Status of the Device (ON / OFF / INACTIVE / ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
location
​string · required

Physical location or address where the device is installed

Example: Room 101, Building A
remarks
​string · required

Remarks for the Device

batchNumber
​number · required

Manufacturing batch number for tracking production groups

Example: 1
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number currently running on the device

Example: 1.0.0
ssid
​string · required

Network SSID (Wi-Fi name) that the device is connected to

Example: IoT-Network-5G
​object · required

Tagged Tenant

​object · required

Tagged Zone

​object · required

Tagged Room

​object · required

Tagged System

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
lastSeen
​string · date-time · required

Last time the device was seen/reported

Example: 2021-09-01
isLocked
​boolean · required

Whether the device is locked. When locked, the device on/off status cannot be toggled.

Example: false
totalEnergyUsage
​number · required

Total cumulative energy usage in kWh

Example: 0
totalEnergySaved
​number · required

Total energy saved through optimization in kWh

Example: 0
autoUpdateAttempts
​number · required

Number of auto-update OTA attempts sent to this device

Example: 0
autoUpdateBlacklisted
​boolean · required

Whether device is blacklisted from auto-updates (max retries exceeded)

Example: false
manualUpdateBlacklist
​boolean · required

Whether device is manually blacklisted from auto-updates by admin

Example: false
inactivityNotificationEnabled
​boolean · required

Whether inactivity notifications are enabled for this device

Default: false
isIRRemote
​boolean · required

Whether this is an IR remote (true) or wired control (false)

Example: true
irType
​string · enum · required

Type of IR device being controlled (AIRCON or FAN)

Enum values:
AIRCON
FAN
Example: AIRCON
Default: AIRCON
temperature
​number · required

Temperature setting in degrees Celsius

Example: 24
targetState
​string · enum

Pending desired on/off state commanded by backend (cloud / scheduled). Set when a toggle is issued; cleared when the device reports a matching state or a physical (MANUAL) press overrides it. Always ON or OFF when present.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when targetState was last written. Used to expire stale SCHEDULED intents (24hr TTL). CLOUD intents do not expire.

Example: 2026-05-25T08:00:00.000Z
targetSource
​string · enum

Origin of the pending targetState. Drives TTL behavior on reconcile. Only CLOUD / SCHEDULED are ever written here.

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD
deviceModel
​string

Model name or identifier of the device

Example: TP-Link HS110
deviceBrand
​string

Brand or manufacturer of the device

Example: TP-Link
wifiError
​string

Last WiFi shadow delta failure reported by the device (e.g. join_failed); cleared once it reports a successful join

Example: join_failed
wifiDesiredSsid
​string

Primary SSID the device was last told to join. Set at send time on both the shadow and legacy changeWifi paths; convergence is ssid matching any desired SSID.

Example: Corp-IoT
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them.

Example: ["Corp-IoT","Corp-IoT-2","Corp-IoT-3"]
​object

Settings as last reported by the device into its config shadow

​object

Settings written to the config shadow but not yet reported back. A key the device reports at a different value was rejected — except peopleCounter.enabled: true, which only confirms on the next boot

configRequestedAt
​string · date-time

When settings were last written to the config shadow

configReportedAt
​string · date-time

When the device last reported into its config shadow

rssi
​number

Latest WiFi signal strength reported by the device (dBm). Updated on each realtime MQTT report.

Example: -65
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a physical unit. Such rows have no real MAC, never report telemetry, and are excluded from firmware, OTA, provisioning and panel-slot views.

Example: false
isRidgeChild
​boolean

True when this row is a unit behind a RIDGE gateway rather than a directly-connected unit. Such rows have no real MAC, are never fleet-provisioned, and are excluded from firmware, OTA and liveness watchdogs — their gateway carries those.

Example: false
hasPhaseChildren
​boolean

True when this clamp has been split into per-phase children. Such a clamp is org-detached and excluded from energy and organisational views — its children carry those — while remaining the sole target for firmware, OTA and diagnostics.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
​object

Schedule configuration for the device. Contains recurring weekly schedules and one-time scheduled tasks.

scheduleId
​null | string

Id of the single Schedule (in the schedules collection) this device currently follows. deviceSchedule is compiled from that schedule. When null, the device follows nothing.

Example: 507f1f77bcf86cd799439011
realTimePower
​number

Real-time power consumption in watts

Example: 1500
realTimeCurrent
​number

Real-time current in amperes

Example: 6.5
lastAutoUpdateAttempt
​string · date-time

Timestamp of last auto-update OTA attempt

inactivityNotificationSentAt
​string · date-time

Timestamp when the last inactivity notification was sent for this device

thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
​object

Threshold limits sent to the device but not yet confirmed by its firmware. Keys match DeviceThresholdsDto. Present only while a save is outstanding — a key that persists here is not being enforced by the hardware.

​object

This device's alert thresholds gathered into one object. Which fields are populated depends on deviceType — see DeviceThresholdsDto. Absent when no thresholds are configured. The same values remain available as flat top-level fields.

fanBrand
​string · enum

Brand of the fan unit (only applicable when irType is FAN)

Enum values:
KDK_U48FP
KDK_U60FW
U60FWS
KDK_T60AW
T60AWS
Example: KDK_T60AW
fanSpeed
​number

Fan speed setting (only applicable when irType is FAN)

Example: 1
brand
​string · enum

Brand of the AC unit being controlled

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN
modelNumber
​string

Manufacturer model number (e.g. FTKM50QV1M). Required for consumption estimation via AirconModelSpec lookup. Stored uppercased and trimmed.

Example: FTKM50QV1M
mode
​string · enum

AC operation mode (COOL, HEAT, DRY, FAN, AUTO)

Enum values:
COOL
HEAT
DRY
FAN
AUTO
Example: COOL
fan
​string · enum

Fan speed setting (LOW, MEDIUM, HIGH, AUTO)

Enum values:
LOW
MEDIUM
HIGH
AUTO
Example: AUTO
swing
​string · enum

Swing/oscillation setting (ON, OFF, AUTO)

Enum values:
ON
OFF
AUTO
Example: OFF
temperatureMin
​number

Min ambient temperature threshold in Celsius for alerts

Example: 18
temperatureMax
​number

Max ambient temperature threshold in Celsius for alerts

Example: 30
humidityMin
​number

Min ambient humidity threshold percentage for alerts

Example: 30
humidityMax
​number

Max ambient humidity threshold percentage for alerts

Example: 80
notificationThresholdHour
​number

Minimum hours between repeated notifications for the same alert type

Example: 4
Default: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
seriesType
​string · enum

Series type — MAXWELL (control only), MAXWELL_PRO (control + ambient temp/humidity sensing), or MAXWELL_ULTRA (control + ambient temp/humidity + motion sensing)

Enum values:
MAXWELL
MAXWELL_PRO
MAXWELL_ULTRA
Example: MAXWELL
Default: MAXWELL
realTimeMotionDetected
​null | boolean

Latest real-time motion detection reading from the device (MAXWELL_ULTRA only)

Example: false
realTimeOccupancy
​null | number

Latest occupancy estimate from the BLE people counter. null when the last report carried no occupancy — never 0 by default

Example: 7

FilteredAirconControlDto

_id
​string · required

Unique database identifier of the device document in the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

Unique identifier assigned to the device by the IoT hardware (MAC ID)

Example: 1092384701928347
deviceName
​string · required

Friendly name for the device for easy identification

Example: Living Room AC
onStatus
​string · enum · required

Current operational status of the device (ON, OFF, INACTIVE, or ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
totalEnergyUsage
​number · required

Cumulative total energy consumption in kilowatt-hours (kWh) since device installation

Example: 500
tenantId
​string · required

Unique identifier of the tenant organization that owns this device

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantName
​string · required

Name of the tenant organization that owns this device

Example: Faculty of Engineering
zoneId
​string · required

Unique identifier of the zone that this device is assigned to

Example: 64b7f1e6f9c9d4e5b8a9f7c5
zoneName
​string · required

Name of the zone that this device is assigned to

Example: Zone A
roomId
​string · required

Unique identifier of the room where this device is physically located

Example: 64b7f1e6f9c9d4e5b8a9f7c6
roomName
​string · required

Name of the room where this device is physically located

Example: Room 101
dbId
​string · required

Unique identifier of the distribution box that this device is connected to (for MCBs)

Example: 64b7f1e6f9c9d4e5b8a9f7c7
dbName
​string · required

Name of the distribution box that this device is connected to (for MCBs)

Example: Main Distribution Box
systemId
​string · required

Unique identifier of the system that this device belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system that this device belongs to

Example: NUS Engineering Building
realTimePower
​number · required

Real-time power consumption in watts (W) measured by the device

Example: 115
realTimeCurrent
​number · required

Real-time current draw in amperes (A) measured by the device

Example: 0.5
ssid
​string · required

Network SSID (Wi-Fi name) that the device is currently connected to

Example: XH001
isIRRemote
​boolean · required

Whether this is an IR remote (true) or wired control (false)

Example: true
irType
​string · enum · required

Type of IR device being controlled (AIRCON or FAN)

Enum values:
AIRCON
FAN
Example: AIRCON
Default: AIRCON
temperature
​number · required

Target temperature setting in degrees Celsius

Example: 24
targetState
​string · enum

Pending desired on/off state commanded by backend. Present when a toggle was issued but the device has not yet acknowledged (e.g. issued while INACTIVE). Frontend can derive a "Pending" indicator when this differs from onStatus.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when the pending targetState was last written.

Example: 2026-05-25T08:00:00.000Z
deviceNumber
​number

Auto-incremented sequential number for tracking device registration order

Example: 3
batchNumber
​number

Manufacturing batch number for tracking production groups and quality control

Example: 23
chipModel
​string · enum

Hardware chip model identifier used in the device (e.g., ESP32C2, ESP8266)

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
versionNumber
​string

Firmware version number currently running on the device

Example: 1.0.0
wifiDesiredSsid
​string

Primary SSID the device was last told to join

Example: XH001
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join

Example: XH001-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join

Example: XH001-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them

Example: ["XH001","XH001-2","XH001-3"]
​object

Weekly and one-time schedule configuration for automated device control

scheduleId
​null | string

Id of the named Schedule this device currently follows. deviceSchedule is compiled from it. Absent or null when the device follows nothing.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
lastSeen
​string · date-time

Timestamp when the device last communicated with the system

Example: 2024-10-15T12:30:00.000Z
isLocked
​boolean

Lock status indicating if the device is locked

Example: false
inactivityNotificationEnabled
​boolean

Whether inactivity notifications are enabled for this device

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device

Example: true
​object

Alert thresholds configured for this device, gathered into one object. Which fields are populated depends on the device type — see DeviceThresholdsDto. Omitted entirely when nothing is set.

fanBrand
​string · enum

Brand of the fan unit (only applicable when irType is FAN)

Enum values:
KDK_U48FP
KDK_U60FW
U60FWS
KDK_T60AW
T60AWS
Example: KDK_T60AW
fanSpeed
​number

Fan speed setting (only applicable when irType is FAN)

Example: 1
brand
​string · enum

Brand of the AC unit being controlled

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN
modelNumber
​string

Manufacturer model number (e.g. FTKM50QV1M). Used with brand for consumption estimation via AirconModelSpec lookup.

Example: FTKM50QV1M
mode
​string · enum

AC operation mode (COOL, HEAT, DRY, FAN, AUTO)

Enum values:
COOL
HEAT
DRY
FAN
AUTO
Example: COOL
fan
​string · enum

Fan speed setting (LOW, MEDIUM, HIGH, AUTO)

Enum values:
LOW
MEDIUM
HIGH
AUTO
Example: AUTO
swing
​string · enum

Swing/oscillation setting (ON, OFF, AUTO)

Enum values:
ON
OFF
AUTO
Example: OFF
seriesType
​string · enum

Series type — MAXWELL (control only), MAXWELL_PRO (control + ambient temp/humidity sensing), or MAXWELL_ULTRA (control + ambient temp/humidity + motion sensing)

Enum values:
MAXWELL
MAXWELL_PRO
MAXWELL_ULTRA
Example: MAXWELL
realTimeMotionDetected
​null | boolean

Latest real-time motion detection reading from the device (MAXWELL_ULTRA only)

Example: false
realTimeOccupancy
​null | number

Latest occupancy estimate from the people counter. null or absent means no reading, not an empty room

Example: 7
​object

Settings as last reported by the device into its config shadow

​object

Settings written to the config shadow but not yet reported back

configRequestedAt
​string · date-time

When settings were last written to the config shadow

configReportedAt
​string · date-time

When the device last reported into its config shadow

GetAirconControlsDto

​object[] · required

List of aircon control devices with organizational hierarchy details

total
​number · required

Total number of aircon control devices

Example: 10
page
​number · required

Current page number

Example: 1
size
​number · required

Number of items per page

Example: 10

UpdateAirconControlDto

deviceName
​string

Name of the device

Example: Living Room Light
location
​string

Physical location of the device

Example: Block 123, Unit 01-23
remarks
​string

Additional remarks or notes about the device

Example: Handle with care - critical equipment
tenantId
​string

Tenant ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c3
zoneId
​string

Zone ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c4
roomId
​string

Room ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c5
isLocked
​boolean

Whether the device is locked. When locked, the device cannot be toggled ON/OFF.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
isIRRemote
​boolean

Whether this is an IR remote (true) or wired control (false)

Example: true
brandType
​string · enum

Brand of the AC unit being controlled

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN
modelNumber
​string

Manufacturer model number used to look up rated power for consumption estimation (e.g. FTKM50QV1M).

Example: FTKM50QV1M
irType
​string · enum

Type of IR device being controlled (AIRCON or FAN)

Enum values:
AIRCON
FAN
Example: AIRCON
fanBrand
​string · enum

Brand of the fan unit (only applicable when irType is FAN)

Enum values:
KDK_U48FP
KDK_U60FW
U60FWS
KDK_T60AW
T60AWS
Example: KDK_T60AW
fanSpeed
​number

Fan speed setting (only applicable when irType is FAN)

Example: 1

ControlAirconDto

value
​number
onStatus
​string · enum

Power state of the AC (ON/OFF/INACTIVE)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
temperature
​number · min: 16 · max: 30

Target temperature setting in degrees Celsius

Example: 24
mode
​string · enum

AC operation mode (COOL, HEAT, DRY, FAN, AUTO)

Enum values:
COOL
HEAT
DRY
FAN
AUTO
Example: COOL
fan
​string · enum

Fan speed setting (LOW, MEDIUM, HIGH, AUTO)

Enum values:
LOW
MEDIUM
HIGH
AUTO
Example: AUTO
swing
​string · enum

Swing/oscillation setting (ON, OFF, AUTO)

Enum values:
ON
OFF
AUTO
Example: OFF
fanSpeed
​number

Fan speed setting (only applicable when irType is FAN)

Example: 1
brandType
​string · enum

Brand of the AC unit (only applicable when irType is AIRCON)

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN

UpdateAirconControlThresholdDto

temperatureMin
​number

Min ambient temperature threshold in Celsius

Example: 18
temperatureMax
​number

Max ambient temperature threshold in Celsius

Example: 30
humidityMin
​number

Min ambient humidity threshold percentage

Example: 30
humidityMax
​number

Max ambient humidity threshold percentage

Example: 80
notificationThresholdHour
​number

Minimum hours between repeated notifications for the same alert type

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device. MCB only.

Example: true

UpdatePeopleCounterConfigDto

enabled
​boolean

Disabling stops scanning immediately; enabling takes effect only on the next device boot

Example: true
rssiGate
​number · min: -100 · max: -20

Room boundary in dBm; weaker devices are treated as past the wall. Must be calibrated per site

Example: -48
connectDuration
​number · min: 10 · max: 3600

Seconds a BLE device must stay inside the gate before it is counted as connected. Must stay above the 8 s walk-by bar. Device default 30

Example: 30
disconnectDuration
​number · min: 5 · max: 3600

Seconds a BLE device must be unseen before it is counted as disconnected. Device default 20

Example: 20
debugModeEnabled
​boolean

Publish the BLE devices the counter sees, with RSSI, on the generic debug topic for calibrating rssiGate. Stays on, reboots included, until set back to false

Example: true

MassUpdateBrandAirconDto

ids
​string[] · required

Array of Aircon Control IDs to update

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]
brandType
​string · enum · required

Brand to assign to all specified devices

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN

BulkControlAirconDto

ids
​string[] · required

Array of Aircon Control IDs to control

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]
onStatus
​string · enum

Power state of the AC (ON/OFF/INACTIVE)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
temperature
​number · min: 16 · max: 30

Target temperature setting in degrees Celsius

Example: 24
mode
​string · enum

AC operation mode (COOL, HEAT, DRY, FAN, AUTO)

Enum values:
COOL
HEAT
DRY
FAN
AUTO
Example: COOL
fan
​string · enum

Fan speed setting (LOW, MEDIUM, HIGH, AUTO)

Enum values:
LOW
MEDIUM
HIGH
AUTO
Example: AUTO
swing
​string · enum

Swing/oscillation setting (ON, OFF, AUTO)

Enum values:
ON
OFF
AUTO
Example: OFF
fanSpeed
​number

Fan speed setting (only applicable when irType is FAN)

Example: 1
brandType
​string · enum

Brand of the AC unit (only applicable when irType is AIRCON)

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN

EstimateAirconConsumptionDto

startDate
​string · required

Start of the date range (ISO 8601). Inclusive.

Example: 2026-05-01T00:00:00.000Z
endDate
​string · required

End of the date range (ISO 8601). Inclusive.

Example: 2026-05-27T23:59:59.999Z

AirconConsumptionByModeDto

kwh
​number · required

Total kWh accumulated while in this mode

Example: 8.4
hours
​number · required

Total runtime hours while in this mode

Example: 9.2

AirconAmbientSource

string · enum
Enum values:
SENSOR
FALLBACK

Where the ambient temperature came from

AirconConsumptionIntervalDto

start
​string · date-time · required
end
​string · date-time · required
mode
​string · enum · required

Operating mode (AIRCON_CONTROL only)

Enum values:
COOL
HEAT
DRY
FAN
AUTO
Example: COOL
temperatureC
​number · required
fan
​string · enum · required

Fan speed setting (AIRCON_CONTROL only)

Enum values:
LOW
MEDIUM
HIGH
AUTO
Example: AUTO
hours
​number · required

Duration in hours

Example: 0.533
powerKw
​number · required

Estimated instantaneous power draw in kW

Example: 1.05
kwh
​number · required

Estimated energy consumed during this interval in kWh

Example: 0.56

AirconConsumptionEstimateDto

airconId
​string · required
brand
​string · enum · required

Air conditioner brand (AIRCON_CONTROL only)

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN
modelNumber
​string · required
ratedInputPowerKw
​number · required

Rated input power (kW) used as the load reference

Example: 1.42
startDate
​string · date-time · required
endDate
​string · date-time · required
ambientTempC
​number · required

Ambient temperature used in the load-factor calc

Example: 30
ambientSource
​string · enum · required

Where the ambient temperature came from

Enum values:
SENSOR
FALLBACK
Example: FALLBACK
totalKwh
​number · required
totalRuntimeHours
​number · required
​object · required

kWh and runtime hours broken down by AirconControlMode. Keys are mode names (COOL, DRY, FAN, AUTO, HEAT). Values are AirconConsumptionByModeDto.

​object[] · required

Per-interval breakdown used to build the totals

accuracyNote
​string · required

Disclaimer on accuracy

Example: Estimate ±20-30% — derived from settings history × rated input power × heuristic load factor. Install a circuit-level meter (MCB) for billing-grade accuracy.
tariffCentsPerKwh
​number

Current system tariff in cents/kWh used to compute cost. Omitted if no active tariff rate is set on the system.

Example: 28.5
costSgd
​number

Total cost in SGD = totalKwh × (tariffCentsPerKwh / 100). Omitted when no active tariff rate is set on the system.

Example: 3.97

CreateRoomDto

name
​string · required

Display name for the room. This will be used to identify the room throughout the system.

Example: Living Room
squareMeter
​number

Floor area of the room in square meters.

Example: 25.5
remarks
​string

Optional administrative notes or comments about the room. Used for describing the room purpose or equipment.

Example: Conference room with presentation equipment
systemId
​string

Unique identifier of the system that this room belongs to. Automatically populated from URL parameter.

Example: 64b7f1e6f9c9d4e5b8a9f7c0
tenantId
​string

Optional identifier of the tenant organization that owns this room. Can be omitted for single-tenant systems.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
zoneId
​string

Optional identifier of the zone to assign this room to. If provided, the room will be accessible by this zone.

Example: 64b7f1e6f9c9d4e5b8a9f7c2
roomType
​string

Room type key. Must be a valid type defined for this system via /entity-type/ROOM.

Example: MEETING_ROOM

GetRoomsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of room objects matching the query parameters. Each room includes plug count and total energy usage.

UpdateRoomDto

name
​string

Updated display name for the room. This will replace the existing room name.

Example: Conference Room A
zoneId
​string

Updated zone identifier to reassign room access to a different zone.

Example: 64b7f1e6f9c9d4e5b8a9f7c1
tenantId
​string

Updated tenant identifier to reassign the room to a different organization.

Example: 64b7f1e6f9c9d4e5b8a9f7c2
squareMeter
​null | number

Updated floor area of the room in square meters. Pass null to clear the existing value.

Example: 25.5
remarks
​string

Updated administrative notes or comments about the room. Replaces existing remarks if provided.

Example: Updated with new equipment
roomType
​string

Room type key. Must be a valid type defined for this system via /entity-type/ROOM.

Example: MEETING_ROOM

AirconModelSpecDto

_id
​string · required
brand
​string · enum · required

Air conditioner brand (AIRCON_CONTROL only)

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN
modelNumber
​string · required
ratedCoolingKw
​number · required
ratedInputPowerKw
​number · required
verifiedAt
​string · date-time · required
createdAt
​string · date-time · required
updatedAt
​string · date-time · required
cspf
​number
annualKwhSg
​number
notes
​string

AirconModelSpecsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Aircon model spec rows matching the query

CreateAirconModelSpecDto

brand
​string · enum · required

Air conditioner brand (AIRCON_CONTROL only)

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN
modelNumber
​string · required

Manufacturer model number. Server uppercases + trims.

Example: FTKM50QV1M
ratedCoolingKw
​number · required
ratedInputPowerKw
​number · required
cspf
​number
annualKwhSg
​number
verifiedAt
​string · date-time

When this row was verified. Defaults to now if omitted.

Example: 2026-05-27T00:00:00.000Z
notes
​string

UpdateAirconModelSpecDto

brand
​string · enum

Air conditioner brand (AIRCON_CONTROL only)

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN
modelNumber
​string

Manufacturer model number. Server uppercases + trims.

Example: FTKM50QV1M
ratedCoolingKw
​number
ratedInputPowerKw
​number
cspf
​number
annualKwhSg
​number
verifiedAt
​string · date-time

When this row was verified. Defaults to now if omitted.

Example: 2026-05-27T00:00:00.000Z
notes
​string

RidgeIntegrationType

string · enum
Enum values:
UNASSIGNED
DAIKIN
GENERIC_BACNET

RidgeCommunicationType

string · enum
Enum values:
UNASSIGNED
DAIKIN_BACNET
BACNET_GENERIC
ITM
MODBUS_TCP
MODBUS_RTU
KNX

RidgeUnitStatusCountsDto

on
​number · required

Units reporting power ON

Example: 12
off
​number · required

Units reporting power OFF

Example: 8
inactive
​number · required

Units the gateway cannot reach, or that have not reported power yet

Example: 1
total
​number · required

Every unit the gateway fronts

Example: 21

FilteredRidgeDto

_id
​string · required

Unique database identifier of the device document in the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

Unique identifier assigned to the device by the IoT hardware (MAC ID)

Example: 1092384701928347
deviceName
​string · required

Friendly name for the device for easy identification

Example: Living Room AC
onStatus
​string · enum · required

Current operational status of the device (ON, OFF, INACTIVE, or ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
totalEnergyUsage
​number · required

Cumulative total energy consumption in kilowatt-hours (kWh) since device installation

Example: 500
tenantId
​string · required

Unique identifier of the tenant organization that owns this device

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantName
​string · required

Name of the tenant organization that owns this device

Example: Faculty of Engineering
zoneId
​string · required

Unique identifier of the zone that this device is assigned to

Example: 64b7f1e6f9c9d4e5b8a9f7c5
zoneName
​string · required

Name of the zone that this device is assigned to

Example: Zone A
roomId
​string · required

Unique identifier of the room where this device is physically located

Example: 64b7f1e6f9c9d4e5b8a9f7c6
roomName
​string · required

Name of the room where this device is physically located

Example: Room 101
dbId
​string · required

Unique identifier of the distribution box that this device is connected to (for MCBs)

Example: 64b7f1e6f9c9d4e5b8a9f7c7
dbName
​string · required

Name of the distribution box that this device is connected to (for MCBs)

Example: Main Distribution Box
systemId
​string · required

Unique identifier of the system that this device belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system that this device belongs to

Example: NUS Engineering Building
realTimePower
​number · required

Real-time power consumption in watts (W) measured by the device

Example: 115
realTimeCurrent
​number · required

Real-time current draw in amperes (A) measured by the device

Example: 0.5
ssid
​string · required

Network SSID (Wi-Fi name) that the device is currently connected to

Example: XH001
integrationType
​string · enum · required

The kind of external integration this gateway fronts

Enum values:
UNASSIGNED
DAIKIN
GENERIC_BACNET
Example: DAIKIN
communicationType
​string · enum · required

Downstream transport protocol the gateway uses to reach its external devices

Enum values:
UNASSIGNED
DAIKIN_BACNET
BACNET_GENERIC
ITM
MODBUS_TCP
MODBUS_RTU
KNX
Example: DAIKIN_BACNET
targetState
​string · enum

Pending desired on/off state commanded by backend. Present when a toggle was issued but the device has not yet acknowledged (e.g. issued while INACTIVE). Frontend can derive a "Pending" indicator when this differs from onStatus.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when the pending targetState was last written.

Example: 2026-05-25T08:00:00.000Z
deviceNumber
​number

Auto-incremented sequential number for tracking device registration order

Example: 3
batchNumber
​number

Manufacturing batch number for tracking production groups and quality control

Example: 23
chipModel
​string · enum

Hardware chip model identifier used in the device (e.g., ESP32C2, ESP8266)

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
versionNumber
​string

Firmware version number currently running on the device

Example: 1.0.0
wifiDesiredSsid
​string

Primary SSID the device was last told to join

Example: XH001
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join

Example: XH001-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join

Example: XH001-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them

Example: ["XH001","XH001-2","XH001-3"]
​object

Weekly and one-time schedule configuration for automated device control

scheduleId
​null | string

Id of the named Schedule this device currently follows. deviceSchedule is compiled from it. Absent or null when the device follows nothing.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
lastSeen
​string · date-time

Timestamp when the device last communicated with the system

Example: 2024-10-15T12:30:00.000Z
isLocked
​boolean

Lock status indicating if the device is locked

Example: false
inactivityNotificationEnabled
​boolean

Whether inactivity notifications are enabled for this device

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device

Example: true
​object

Alert thresholds configured for this device, gathered into one object. Which fields are populated depends on the device type — see DeviceThresholdsDto. Omitted entirely when nothing is set.

configuration
​object

Per-integration connection configuration. Shape depends on integrationType.

Example: {"deviceInstance":121,"portCount":4,"host":"192.168.1.10"}
properties
​object

Downstream member dictionary (member number → object spec).

​object

ON / OFF / INACTIVE breakdown of the external devices this gateway fronts

GetRidgesDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of RIDGE gateways matching the query parameters

RidgeControllerInfo

version
​number

iTM protocol version reported by the controller

Example: 2
tempUnit
​string

Temperature unit the controller reports setpoints/temps in

Example: C
mac
​string

MAC address of the controller itself (not the RIDGE gateway macId)

Example: 00804F85A717
firmware
​string

Controller firmware version string

Example: Ver1.27.00

Ridge

_id
​string · required

Primary ID of the Device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceType
​string · enum · required

Type of device (discriminator field)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
macId
​string · required

MAC ID of the Device (from IoT device)

Example: 1092384701928347
deviceName
​string · required

Name of the Device

Example: Living Room AC
deviceNumber
​number · required

Unique device number for identification

Example: 1
onStatus
​string · enum · required

Status of the Device (ON / OFF / INACTIVE / ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
location
​string · required

Physical location or address where the device is installed

Example: Room 101, Building A
remarks
​string · required

Remarks for the Device

batchNumber
​number · required

Manufacturing batch number for tracking production groups

Example: 1
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number currently running on the device

Example: 1.0.0
ssid
​string · required

Network SSID (Wi-Fi name) that the device is connected to

Example: IoT-Network-5G
​object · required

Tagged Tenant

​object · required

Tagged Zone

​object · required

Tagged Room

​object · required

Tagged System

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
lastSeen
​string · date-time · required

Last time the device was seen/reported

Example: 2021-09-01
isLocked
​boolean · required

Whether the device is locked. When locked, the device on/off status cannot be toggled.

Example: false
totalEnergyUsage
​number · required

Total cumulative energy usage in kWh

Example: 0
totalEnergySaved
​number · required

Total energy saved through optimization in kWh

Example: 0
autoUpdateAttempts
​number · required

Number of auto-update OTA attempts sent to this device

Example: 0
autoUpdateBlacklisted
​boolean · required

Whether device is blacklisted from auto-updates (max retries exceeded)

Example: false
manualUpdateBlacklist
​boolean · required

Whether device is manually blacklisted from auto-updates by admin

Example: false
inactivityNotificationEnabled
​boolean · required

Whether inactivity notifications are enabled for this device

Default: false
integrationType
​string · enum · required

The kind of external integration this gateway fronts

Enum values:
UNASSIGNED
DAIKIN
GENERIC_BACNET
Example: DAIKIN
communicationType
​string · enum · required

Downstream transport protocol the gateway uses to reach its external devices

Enum values:
UNASSIGNED
DAIKIN_BACNET
BACNET_GENERIC
ITM
MODBUS_TCP
MODBUS_RTU
KNX
Example: DAIKIN_BACNET
targetState
​string · enum

Pending desired on/off state commanded by backend (cloud / scheduled). Set when a toggle is issued; cleared when the device reports a matching state or a physical (MANUAL) press overrides it. Always ON or OFF when present.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when targetState was last written. Used to expire stale SCHEDULED intents (24hr TTL). CLOUD intents do not expire.

Example: 2026-05-25T08:00:00.000Z
targetSource
​string · enum

Origin of the pending targetState. Drives TTL behavior on reconcile. Only CLOUD / SCHEDULED are ever written here.

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD
deviceModel
​string

Model name or identifier of the device

Example: TP-Link HS110
deviceBrand
​string

Brand or manufacturer of the device

Example: TP-Link
wifiError
​string

Last WiFi shadow delta failure reported by the device (e.g. join_failed); cleared once it reports a successful join

Example: join_failed
wifiDesiredSsid
​string

Primary SSID the device was last told to join. Set at send time on both the shadow and legacy changeWifi paths; convergence is ssid matching any desired SSID.

Example: Corp-IoT
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them.

Example: ["Corp-IoT","Corp-IoT-2","Corp-IoT-3"]
config
​object

Settings as last reported by the device into its config shadow, one block per feature

pendingConfig
​object

Settings written to the config shadow but not yet reported back. A key the device reports at a different value was rejected

configRequestedAt
​string · date-time

When settings were last written to the config shadow

configReportedAt
​string · date-time

When the device last reported into its config shadow

rssi
​number

Latest WiFi signal strength reported by the device (dBm). Updated on each realtime MQTT report.

Example: -65
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a physical unit. Such rows have no real MAC, never report telemetry, and are excluded from firmware, OTA, provisioning and panel-slot views.

Example: false
isRidgeChild
​boolean

True when this row is a unit behind a RIDGE gateway rather than a directly-connected unit. Such rows have no real MAC, are never fleet-provisioned, and are excluded from firmware, OTA and liveness watchdogs — their gateway carries those.

Example: false
hasPhaseChildren
​boolean

True when this clamp has been split into per-phase children. Such a clamp is org-detached and excluded from energy and organisational views — its children carry those — while remaining the sole target for firmware, OTA and diagnostics.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
​object

Schedule configuration for the device. Contains recurring weekly schedules and one-time scheduled tasks.

scheduleId
​null | string

Id of the single Schedule (in the schedules collection) this device currently follows. deviceSchedule is compiled from that schedule. When null, the device follows nothing.

Example: 507f1f77bcf86cd799439011
realTimePower
​number

Real-time power consumption in watts

Example: 1500
realTimeCurrent
​number

Real-time current in amperes

Example: 6.5
lastAutoUpdateAttempt
​string · date-time

Timestamp of last auto-update OTA attempt

inactivityNotificationSentAt
​string · date-time

Timestamp when the last inactivity notification was sent for this device

thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
​object

Threshold limits sent to the device but not yet confirmed by its firmware. Keys match DeviceThresholdsDto. Present only while a save is outstanding — a key that persists here is not being enforced by the hardware.

​object

This device's alert thresholds gathered into one object. Which fields are populated depends on deviceType — see DeviceThresholdsDto. Absent when no thresholds are configured. The same values remain available as flat top-level fields.

configuration
​object

Per-integration connection configuration (e.g. Daikin: BACnet deviceInstance, port count, host). Shape depends on integrationType.

Example: {"deviceInstance":121,"portCount":4,"host":"192.168.1.10"}
properties
​object

Downstream object/member dictionary for the integration (member number → object type, R/W, value encodings). Seeded from the adapter spec; firmware-reported tables win.

Example: {"members":{"1":{"name":"StartStopCommand","objectType":"binaryOutput","rw":"W","values":{"inactive":"stop","active":"operation"}}}}
subscriptionGeneration
​number

Monotonic generation of the watch set last published to the gateway. Every subscription packet carries it, so the firmware can tell a fresh set from a replay of an older one. Incremented on every publish.

Example: 3
​object

Identity the downstream controller reported in its last discovery session (iTM systemInfo). Absent on BACnet gateways.

lastUnitNumber
​number

Highest unitNumber handed to a unit behind this gateway. Only ever incremented, so a deleted unit's number is never reused.

Example: 12

CreateRidgeDto

macId
​string · required

Unique identifier assigned to the device by the IoT hardware (MAC ID)

Example: 1092384701928347
onStatus
​string · enum · required

Initial operational status of the device when created

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: INACTIVE
integrationType
​string · enum · required

The kind of external integration this gateway fronts

Enum values:
UNASSIGNED
DAIKIN
GENERIC_BACNET
Example: DAIKIN
communicationType
​string · enum · required

Downstream transport protocol the gateway uses to reach its external devices

Enum values:
UNASSIGNED
DAIKIN_BACNET
BACNET_GENERIC
ITM
MODBUS_TCP
MODBUS_RTU
KNX
Example: DAIKIN_BACNET
deviceName
​string

Friendly name for the device for easy identification

Example: Living Room Device
configuration
​object

Per-integration connection configuration (e.g. Daikin: BACnet deviceInstance, port count, host). Shape depends on integrationType.

Example: {"deviceInstance":121,"portCount":4,"host":"192.168.1.10"}
properties
​object

Downstream member dictionary (member number → object spec). Omit to seed from the adapter defaults for the integration.

UpdateRidgeDto

integrationType
​string · enum

Integration the gateway fronts (assign after an UNASSIGNED auto-provision)

Enum values:
UNASSIGNED
DAIKIN
GENERIC_BACNET
Example: DAIKIN
communicationType
​string · enum

Downstream transport (assign after an UNASSIGNED auto-provision)

Enum values:
UNASSIGNED
DAIKIN_BACNET
BACNET_GENERIC
ITM
MODBUS_TCP
MODBUS_RTU
KNX
Example: DAIKIN_BACNET
deviceName
​string

Friendly name for the gateway

Example: Level 3 Daikin Gateway
location
​string

Physical location of the gateway

Example: Riser Room 3
remarks
​string

Admin notes

Example: Fronts AHU units on ports 1-2
isLocked
​boolean

Whether the gateway is locked from control

Example: false
configuration
​object

Per-integration connection configuration (e.g. Daikin: BACnet deviceInstance, port count, host). Shape depends on integrationType.

Example: {"deviceInstance":121,"portCount":4,"host":"192.168.1.10"}
properties
​object

Downstream member dictionary (member number → object spec).

SyncRidgeConfigurationDto

username
​string

iTM HTTP auth username. Relayed to the gateway, never stored cloud-side.

Example: svm
password
​string

iTM HTTP auth password. Relayed to the gateway, never stored cloud-side.

Example: svm

RidgeControlFieldSettingDto

key
​string · required

Command key this entry positions — matches ExternalDeviceCommand.key

Example: power
visible
​boolean · required

Whether the control UI surfaces this command as a primary control

Example: true

GetRidgeControlLayoutDto

systemId
​string · required

The system the layout belongs to

integrationType
​string · enum · required

The integration type the layout applies to

Enum values:
UNASSIGNED
DAIKIN
GENERIC_BACNET
Example: DAIKIN
​object[] · required

Ordered control fields with their visibility

isDefault
​boolean · required

True when no layout has been saved and the integration default is returned

Example: false
offTargetThresholdC
​number

How far room temperature may sit from setpoint before a unit is reported as not holding target (°C). Absent when the system has not configured one.

Example: 1.5

UpdateRidgeControlLayoutDto

​object[] · required

Ordered control fields with their visibility

offTargetThresholdC
​number · min: 0.5 · max: 10

How far room temperature may sit from setpoint before a unit is reported as not holding target (°C). Omit to leave the system on the client default.

Example: 1.5

ExternalDeviceType

string · enum
Enum values:
AHU
FCU
VRV
CHILLER
ENERGY_METER
WATER_METER
BTU_METER
LIGHTING

ExternalDeviceCategory

string · enum
Enum values:
HVAC
METER
LIGHTING
VALVE
PUMP
SENSOR

DaikinMode

number · enum
Enum values:
1
2
3
4
5

AC mode (1=cool, 2=heat, 3=fan, 4=auto, 5=dry)

DaikinFanRate

number · enum
Enum values:
1
2
3
4

Fan rate (1=low, 2=high, 3=middle, 4=auto)

DaikinHvacControlDto

power
​boolean

Power the unit on (true) or off (false)

Example: true
setpoint
​number · min: 14 · max: 32

Setpoint temperature in °C. The integration narrows this per mode (Daikin: cool 18–32, heat 14–28; rejected in auto).

Example: 23
mode
​number · enum

AC mode (1=cool, 2=heat, 3=fan, 4=auto, 5=dry)

Enum values:
1
2
3
4
5
Example: 1
fan
​number · enum

Fan rate (1=low, 2=high, 3=middle, 4=auto)

Enum values:
1
2
3
4
Example: 4
lockPower
​boolean

Lock (true) or unlock (false) the wired remote power button

Example: false
lockMode
​boolean

Lock (true) or unlock (false) the wired remote mode selector

Example: false
lockSetpoint
​boolean

Lock (true) or unlock (false) the wired remote setpoint adjust

Example: false
forcedOff
​boolean

Forced system stop (true) or clear (false) — port-master units only (ac 0/64/128/192). Units stay OFF after clear.

Example: false
filterReset
​boolean

Reset the dirty-filter sign

Example: false
forcedThermoOff
​boolean

Force the thermostat off (true) or clear (false)

Example: false
energySaving
​boolean

Enable (true) or clear (false) energy-saving operation

Example: false
airDirection
​number

Louver / air-direction position. The valid positions are model-specific, so no range is enforced here — a position the unit does not support is rejected by the unit.

Example: 1

ExternalDeviceOneTimeScheduleEntry

dateTime
​string · date-time · required

When to apply the control (ISO 8601)

Example: 2026-06-15T01:00:00.000Z
​object · required

Full control snapshot to apply at the scheduled time

ruleName
​string

EventBridge rule name for tracking and management

ExternalDeviceDailyScheduleEntry

time
​string · required

Local time in HH:mm to apply the control

Example: 09:00
​object · required

Full control snapshot to apply at the scheduled time

ruleName
​string

EventBridge rule name for tracking and management

ExternalDeviceSchedule

​object[]
​object[]
​object[]
​object[]
​object[]
​object[]
​object[]
​object[]

ExternalDeviceDto

_id
​string · required

Database ID

Example: 64b7f1e6f9c9d4e5b8a9f7c9
ridgeId
​string · required

Parent RIDGE gateway ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemId
​string · required

System the parent gateway belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c1
externalId
​string · required

Opaque downstream address on the gateway bus (e.g. Daikin "ac" 0–255, Modbus address) — NOT this document id

Example: 3
tenantId
​string

Tenant this unit serves, if assigned

Example: 64b7f1e6f9c9d4e5b8a9f7c2
zoneId
​string

Zone this unit serves, if assigned

Example: 64b7f1e6f9c9d4e5b8a9f7c4
roomId
​string

Room this unit conditions, if assigned

Example: 64b7f1e6f9c9d4e5b8a9f7c3
unitNumber
​number

Our 1-based number for this unit within its gateway, shown as "-". Absent only until the unit is numbered.

Example: 3
pointType
​number

iTM point type from discovery (101 = indoor unit). Absent on BACnet gateways.

Example: 101
deviceName
​string

Friendly name

Example: Level 3 AHU
remarks
​string

Free-text remarks about this external device

Example: Noisy compressor, flagged for maintenance
equipmentType
​string · enum

Specific equipment class of the external device

Enum values:
AHU
FCU
VRV
CHILLER
ENERGY_METER
WATER_METER
BTU_METER
LIGHTING
Example: FCU
category
​string · enum

Broad equipment category, derived from equipmentType. Decides which control contract applies.

Enum values:
HVAC
METER
LIGHTING
VALVE
PUMP
SENSOR
Example: HVAC
properties
​object

Integration-specific configuration

state
​object

Last-known state snapshot

lastUpdate
​string · date-time

When the state was last updated

Example: 2026-06-09T12:00:00.000Z
watched
​boolean

Whether the parent gateway actively polls this unit (iTM watch list)

Example: true
​object

Recurring + one-time control schedule for this device

GetExternalDevicesDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of external devices matching the query parameters

CreateExternalDeviceDto

externalId
​string · required

Opaque downstream address on the gateway bus (e.g. Daikin "ac" 0–255, Modbus address)

Example: 3
deviceName
​string

Friendly name for the external device

Example: Level 3 AHU
equipmentType
​string · enum

Equipment category of the external device

Enum values:
AHU
FCU
VRV
CHILLER
ENERGY_METER
WATER_METER
BTU_METER
LIGHTING
Example: FCU
properties
​object

Integration-specific per-device configuration. Shape depends on the integration.

Example: {"isPortMaster":false}
remarks
​string

Free-text remarks about this external device

Example: Noisy compressor, flagged for maintenance

UpdateExternalDeviceDto

deviceName
​string

Friendly name for the external device

Example: Level 3 AHU
equipmentType
​string · enum

Equipment category of the external device

Enum values:
AHU
FCU
VRV
CHILLER
ENERGY_METER
WATER_METER
BTU_METER
LIGHTING
Example: FCU
properties
​object

Integration-specific per-device configuration. Shape depends on the integration.

Example: {"isPortMaster":false}
remarks
​string

Free-text remarks about this external device

Example: Noisy compressor, flagged for maintenance
watched
​boolean

Whether the parent gateway actively polls this unit (iTM watch list). Toggling this changes the watch set sent on the next gateway config push.

Example: true
roomId
​null | string

Place this unit in a room. Its zone and tenant are derived from the room, so send at most one of roomId / zoneId / tenantId. Must belong to the same system as the parent gateway. Pass null to clear the room only.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
zoneId
​null | string

Place this unit in a zone. Its tenant is derived from the zone and any room assignment is cleared. Pass null to clear the zone and room.

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantId
​null | string

Place this unit under a tenant directly. Clears any zone and room assignment. Pass null to clear the whole placement.

Example: 64b7f1e6f9c9d4e5b8a9f7c2

ExternalDeviceCommandDirection

string · enum
Enum values:
READ
WRITE
READWRITE

Whether the command is readable, writable, or both

ExternalDeviceCommandValueType

string · enum
Enum values:
BOOL
NUMBER
ENUM
STRING

Value shape the command accepts / reports

ExternalDeviceCommandDto

key
​string · required

Stable code to control / read by

Example: setpoint
direction
​string · enum · required

Whether the command is readable, writable, or both

Enum values:
READ
WRITE
READWRITE
Example: READWRITE
name
​string

Human-friendly label as discovery reported it

Example: Supply Air Setpoint
valueType
​string · enum

Value shape the command accepts / reports

Enum values:
BOOL
NUMBER
ENUM
STRING
Example: NUMBER
values
​object

Allowed values — an enum map (raw → label) or a numeric range { min, max }

Example: {"min":18,"max":32}
pointType
​number

Point / equipment type this command applies to (iTM pointType)

Example: 101

ExternalDeviceCommandWriteDto

key
​string · required

Command key from the unit's catalog. Semantic where the protocol makes the meaning unambiguous ("energy", "setpoint"), otherwise the object address ("analogValue:1").

Example: setpoint
​required

Value to write. Validated against the command row: BOOL takes a boolean, NUMBER a number within the advertised range.

Example: 23

ExternalDeviceCommandControlDto

​object[] · required

Writes to apply, all in one command to the gateway

BulkControlExternalDeviceDto

externalDeviceIds
​string[] · required

External device ids to apply this control request to

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
​object · required

Control snapshot applied to every listed unit. Omitted fields are left untouched.

BulkControlFailureDto

externalDeviceId
​string · required

External device id that failed

reason
​string · required

Why the control request could not be relayed

BulkControlResultDto

successful
​string[] · required

External device ids whose writes were published to a gateway

​object[] · required
publishedCommands
​number · required

Number of MQTT commands published — one per gateway with targets in this request

Example: 1

ExternalDeviceOneTimeScheduleEntryDto

dateTime
​string · date-time · required

When to apply the control (ISO 8601, must be in the future)

Example: 2026-06-15T01:00:00.000Z
​object · required

Full control snapshot to apply at the scheduled time

ExternalDeviceScheduleEntryDto

time
​string · required

Local time in HH:mm

Example: 09:00
​object · required

Full control snapshot to apply at the scheduled time

SetExternalDeviceScheduleDto

​object[]

One-time control entries (execute once, then auto-remove)

​object[]
​object[]
​object[]
​object[]
​object[]
​object[]
​object[]

ExternalDevicePendingControl

commandId
​string · required

Id the gateway echoes on its command result

Example: b0f1c2d3-4e5f-6789-abcd-ef0123456789
source
​string · enum · required

Who issued the command

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD
keys
​string[] · required

State keys the command writes and has not yet seen reported

Example: ["power","setpoint"]
at
​string · date-time · required

When the command was published

Example: 2026-06-09T12:00:00.000Z
confirmedAt
​string · date-time

When the gateway reported the command applied

Example: 2026-06-09T12:00:02.000Z

ExternalDevice

_id
​string · required

Primary ID of the Device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceType
​string · enum · required

Type of device (discriminator field)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
macId
​string · required

MAC ID of the Device (from IoT device)

Example: 1092384701928347
deviceName
​string · required

Name of the Device

Example: Living Room AC
deviceNumber
​number · required

Unique device number for identification

Example: 1
onStatus
​string · enum · required

Status of the Device (ON / OFF / INACTIVE / ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
location
​string · required

Physical location or address where the device is installed

Example: Room 101, Building A
batchNumber
​number · required

Manufacturing batch number for tracking production groups

Example: 1
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number currently running on the device

Example: 1.0.0
ssid
​string · required

Network SSID (Wi-Fi name) that the device is connected to

Example: IoT-Network-5G
​object · required

Tagged Tenant

​object · required

Tagged Zone

​object · required

Tagged Room

​object · required

Tagged System

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
lastSeen
​string · date-time · required

Last time the device was seen/reported

Example: 2021-09-01
isLocked
​boolean · required

Whether the device is locked. When locked, the device on/off status cannot be toggled.

Example: false
totalEnergyUsage
​number · required

Total cumulative energy usage in kWh

Example: 0
totalEnergySaved
​number · required

Total energy saved through optimization in kWh

Example: 0
autoUpdateAttempts
​number · required

Number of auto-update OTA attempts sent to this device

Example: 0
autoUpdateBlacklisted
​boolean · required

Whether device is blacklisted from auto-updates (max retries exceeded)

Example: false
manualUpdateBlacklist
​boolean · required

Whether device is manually blacklisted from auto-updates by admin

Example: false
inactivityNotificationEnabled
​boolean · required

Whether inactivity notifications are enabled for this device

Default: false
ridgeParent
​string · required

Parent RIDGE gateway that fronts this device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
externalId
​string · required

Opaque downstream address (e.g. Daikin "ac" id, Modbus address)

Example: 3
targetState
​string · enum

Pending desired on/off state commanded by backend (cloud / scheduled). Set when a toggle is issued; cleared when the device reports a matching state or a physical (MANUAL) press overrides it. Always ON or OFF when present.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when targetState was last written. Used to expire stale SCHEDULED intents (24hr TTL). CLOUD intents do not expire.

Example: 2026-05-25T08:00:00.000Z
targetSource
​string · enum

Origin of the pending targetState. Drives TTL behavior on reconcile. Only CLOUD / SCHEDULED are ever written here.

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD
remarks
​string

Free-text remarks about this external device

Example: Noisy compressor, flagged for maintenance
deviceModel
​string

Model name or identifier of the device

Example: TP-Link HS110
deviceBrand
​string

Brand or manufacturer of the device

Example: TP-Link
wifiError
​string

Last WiFi shadow delta failure reported by the device (e.g. join_failed); cleared once it reports a successful join

Example: join_failed
wifiDesiredSsid
​string

Primary SSID the device was last told to join. Set at send time on both the shadow and legacy changeWifi paths; convergence is ssid matching any desired SSID.

Example: Corp-IoT
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them.

Example: ["Corp-IoT","Corp-IoT-2","Corp-IoT-3"]
config
​object

Settings as last reported by the device into its config shadow, one block per feature

pendingConfig
​object

Settings written to the config shadow but not yet reported back. A key the device reports at a different value was rejected

configRequestedAt
​string · date-time

When settings were last written to the config shadow

configReportedAt
​string · date-time

When the device last reported into its config shadow

rssi
​number

Latest WiFi signal strength reported by the device (dBm). Updated on each realtime MQTT report.

Example: -65
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a physical unit. Such rows have no real MAC, never report telemetry, and are excluded from firmware, OTA, provisioning and panel-slot views.

Example: false
isRidgeChild
​boolean

True when this row is a unit behind a RIDGE gateway rather than a directly-connected unit. Such rows have no real MAC, are never fleet-provisioned, and are excluded from firmware, OTA and liveness watchdogs — their gateway carries those.

Example: false
hasPhaseChildren
​boolean

True when this clamp has been split into per-phase children. Such a clamp is org-detached and excluded from energy and organisational views — its children carry those — while remaining the sole target for firmware, OTA and diagnostics.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
​object

Schedule configuration for the device. Contains recurring weekly schedules and one-time scheduled tasks.

scheduleId
​null | string

Id of the single Schedule (in the schedules collection) this device currently follows. deviceSchedule is compiled from that schedule. When null, the device follows nothing.

Example: 507f1f77bcf86cd799439011
realTimePower
​number

Real-time power consumption in watts

Example: 1500
realTimeCurrent
​number

Real-time current in amperes

Example: 6.5
lastAutoUpdateAttempt
​string · date-time

Timestamp of last auto-update OTA attempt

inactivityNotificationSentAt
​string · date-time

Timestamp when the last inactivity notification was sent for this device

thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
​object

Threshold limits sent to the device but not yet confirmed by its firmware. Keys match DeviceThresholdsDto. Present only while a save is outstanding — a key that persists here is not being enforced by the hardware.

​object

This device's alert thresholds gathered into one object. Which fields are populated depends on deviceType — see DeviceThresholdsDto. Absent when no thresholds are configured. The same values remain available as flat top-level fields.

unitNumber
​number

Our number for this unit, 1-based and unique within its gateway. Assigned once when the unit is first provisioned and never reassigned; a deleted unit leaves a gap. Unlike externalId, which the gateway dictates, this is readable and sequential.

Example: 3
pointType
​number

iTM point type reported at discovery (101 = indoor unit). Together with the pointId (stored as externalId) this identifies one equipment point. Absent on BACnet gateways.

Example: 101
equipmentType
​string · enum

Equipment class of the unit. Distinct from the base deviceType, which is always EXTERNAL for these rows.

Enum values:
AHU
FCU
VRV
CHILLER
ENERGY_METER
WATER_METER
BTU_METER
LIGHTING
Example: FCU
watched
​boolean

Whether the parent gateway actively polls this unit (iTM watch list). The gateway config push derives its point list from the watched units; when none are watched the gateway polls every discovered point (commissioning).

Example: true
properties
​object

Integration-specific configuration. Shape depends on the integration.

state
​object

Last-known state snapshot. Shape depends on the integration.

lastUpdate
​string · date-time

When the state was last updated

Example: 2026-06-09T12:00:00.000Z
​object

Recurring weekly + one-time control schedule for this device. Each entry applies a full control snapshot.

​object

Cloud command awaiting confirmation in a realtime report

BulkApplyExternalDeviceScheduleDto

externalDeviceIds
​string[] · required

External device ids to apply this schedule to

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
​object · required

Schedule applied to every listed unit, replacing whatever each one has (PUT semantics).

BulkScheduleFailureDto

externalDeviceId
​string · required

External device id that failed

reason
​string · required

Why the schedule could not be applied

BulkApplyScheduleResultDto

successful
​string[] · required

External device ids the schedule was applied to

​object[] · required

ExternalDeviceHistoryDto

_id
​string · required

Database ID

Example: 64b7f1e6f9c9d4e5b8a9f7d1
externalDeviceId
​string · required

External device this snapshot belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c9
state
​object · required

State snapshot at this point in time

createdAt
​string · date-time · required

When the snapshot row was written

Example: 2026-06-09T12:00:01.000Z
recordedAt
​string · date-time

When the gateway observed this state

Example: 2026-06-09T12:00:00.000Z
triggerSource
​string · enum

Who changed the unit, when this snapshot changed a control field. MANUAL means no cloud command explains the change (wall remote, BMS). Absent otherwise.

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: MANUAL
changedKeys
​string[]

Control fields this snapshot changed

Example: ["power"]

GetExternalDeviceHistoryDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of state snapshots in the requested date range

EnvironmentSensorType

string · enum
Enum values:
FRIDGE_SENSOR
IAQ4
IAQ9

Type of the environment sensor device (e.g., IAQ4, IAQ9)

EnvironmentSensor

_id
​string · required

Primary ID of the Device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceType
​string · enum · required

Type of device (discriminator field)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
macId
​string · required

MAC ID of the Device (from IoT device)

Example: 1092384701928347
deviceName
​string · required

Name of the Device

Example: Living Room AC
deviceNumber
​number · required

Unique device number for identification

Example: 1
onStatus
​string · enum · required

Status of the Device (ON / OFF / INACTIVE / ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
location
​string · required

Physical location or address where the device is installed

Example: Room 101, Building A
remarks
​string · required

Remarks for the Device

batchNumber
​number · required

Manufacturing batch number for tracking production groups

Example: 1
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number currently running on the device

Example: 1.0.0
ssid
​string · required

Network SSID (Wi-Fi name) that the device is connected to

Example: IoT-Network-5G
​object · required

Tagged Tenant

​object · required

Tagged Zone

​object · required

Tagged Room

​object · required

Tagged System

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
lastSeen
​string · date-time · required

Last time the device was seen/reported

Example: 2021-09-01
isLocked
​boolean · required

Whether the device is locked. When locked, the device on/off status cannot be toggled.

Example: false
totalEnergyUsage
​number · required

Total cumulative energy usage in kWh

Example: 0
totalEnergySaved
​number · required

Total energy saved through optimization in kWh

Example: 0
autoUpdateAttempts
​number · required

Number of auto-update OTA attempts sent to this device

Example: 0
autoUpdateBlacklisted
​boolean · required

Whether device is blacklisted from auto-updates (max retries exceeded)

Example: false
manualUpdateBlacklist
​boolean · required

Whether device is manually blacklisted from auto-updates by admin

Example: false
inactivityNotificationEnabled
​boolean · required

Whether inactivity notifications are enabled for this device

Default: false
environmentSensorType
​string · enum · required

Type of the environment sensor device (e.g., IAQ4, IAQ9)

Enum values:
FRIDGE_SENSOR
IAQ4
IAQ9
Example: IAQ4
notificationThresholdHour
​number · required

Hourly notification threshold for the Environment Sensor

Example: 4
carbonDioxide
​number · required

Threshold CO2 reading in ppm

Example: 400
lux
​number · required

Threshold light level in lux (lx)

Example: 500
formaldehyde
​number · required

Threshold formaldehyde (HCHO) reading in µg/m³

Example: 0.03
temperatureMin
​number · required

Min Threshold temperature reading in degrees Celsius

Example: 24
temperatureMax
​number · required

MaxThreshold temperature reading in degrees Celsius

Example: 24
humidity
​number · required

Threshold humidity percentage

Example: 24
pm1
​number · required

Threshold PM1 in µg/m³

Example: 1
pm2_5
​number · required

Threshold PM2.5 in µg/m³

Example: 1
pm10
​number · required

Threshold PM10 in µg/m³

Example: 1
totalVolatileOrganicCompounds
​number · required

Threshold Total Volatile Organic Compounds in ppb

Example: 1
soundLevel
​number · required

Threshold Sound Level in dB

Example: 1
motionDetected
​boolean · required

Motion detection status

Example: true
thresholdGroupName
​null | string · required

Name of the threshold group this sensor belongs to

Example: Office Sensors
realTimeTemperature
​null | number · required

Real-time Temperature reading in degrees Celsius

Example: 24
realTimeCarbonDioxide
​null | number · required

Real-time CarbonDioxide reading in ppm

Example: 24
realTimeHumidity
​null | number · required

Real-time Humidity reading in percentage

Example: 24
realTimePm1
​null | number · required

Real-time PM1 reading in µg/m³

Example: 24
realTimePm2_5
​null | number · required

Real-time PM2.5 reading in µg/m³

Example: 24
realTimePm10
​null | number · required

Real-time PM10 reading in µg/m³

Example: 24
realTimeTotalVolatileOrganicCompounds
​null | number · required

Real-time TotalVolatileOrganicCompounds reading in ppb

Example: 24
realTimeSoundLevel
​null | number · required

Real-time SoundLevel reading in dB

Example: 24
realTimeMotionDetected
​null | boolean · required

Real-time MotionDetected reading

Example: true
realTimeLux
​null | number · required

Real-time Lux reading in lux

Example: 24
realTimeFormaldehyde
​null | number · required

Real-time Formaldehyde reading in ppm

Example: 24
targetState
​string · enum

Pending desired on/off state commanded by backend (cloud / scheduled). Set when a toggle is issued; cleared when the device reports a matching state or a physical (MANUAL) press overrides it. Always ON or OFF when present.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when targetState was last written. Used to expire stale SCHEDULED intents (24hr TTL). CLOUD intents do not expire.

Example: 2026-05-25T08:00:00.000Z
targetSource
​string · enum

Origin of the pending targetState. Drives TTL behavior on reconcile. Only CLOUD / SCHEDULED are ever written here.

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD
deviceModel
​string

Model name or identifier of the device

Example: TP-Link HS110
deviceBrand
​string

Brand or manufacturer of the device

Example: TP-Link
wifiError
​string

Last WiFi shadow delta failure reported by the device (e.g. join_failed); cleared once it reports a successful join

Example: join_failed
wifiDesiredSsid
​string

Primary SSID the device was last told to join. Set at send time on both the shadow and legacy changeWifi paths; convergence is ssid matching any desired SSID.

Example: Corp-IoT
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them.

Example: ["Corp-IoT","Corp-IoT-2","Corp-IoT-3"]
config
​object

Settings as last reported by the device into its config shadow, one block per feature

pendingConfig
​object

Settings written to the config shadow but not yet reported back. A key the device reports at a different value was rejected

configRequestedAt
​string · date-time

When settings were last written to the config shadow

configReportedAt
​string · date-time

When the device last reported into its config shadow

rssi
​number

Latest WiFi signal strength reported by the device (dBm). Updated on each realtime MQTT report.

Example: -65
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a physical unit. Such rows have no real MAC, never report telemetry, and are excluded from firmware, OTA, provisioning and panel-slot views.

Example: false
isRidgeChild
​boolean

True when this row is a unit behind a RIDGE gateway rather than a directly-connected unit. Such rows have no real MAC, are never fleet-provisioned, and are excluded from firmware, OTA and liveness watchdogs — their gateway carries those.

Example: false
hasPhaseChildren
​boolean

True when this clamp has been split into per-phase children. Such a clamp is org-detached and excluded from energy and organisational views — its children carry those — while remaining the sole target for firmware, OTA and diagnostics.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
​object

Schedule configuration for the device. Contains recurring weekly schedules and one-time scheduled tasks.

scheduleId
​null | string

Id of the single Schedule (in the schedules collection) this device currently follows. deviceSchedule is compiled from that schedule. When null, the device follows nothing.

Example: 507f1f77bcf86cd799439011
realTimePower
​number

Real-time power consumption in watts

Example: 1500
realTimeCurrent
​number

Real-time current in amperes

Example: 6.5
lastAutoUpdateAttempt
​string · date-time

Timestamp of last auto-update OTA attempt

inactivityNotificationSentAt
​string · date-time

Timestamp when the last inactivity notification was sent for this device

thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
​object

Threshold limits sent to the device but not yet confirmed by its firmware. Keys match DeviceThresholdsDto. Present only while a save is outstanding — a key that persists here is not being enforced by the hardware.

​object

This device's alert thresholds gathered into one object. Which fields are populated depends on deviceType — see DeviceThresholdsDto. Absent when no thresholds are configured. The same values remain available as flat top-level fields.

notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000

FilteredEnvironmentSensorDto

_id
​string · required

Unique database identifier of the device document in the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

Unique identifier assigned to the device by the IoT hardware (MAC ID)

Example: 1092384701928347
deviceName
​string · required

Friendly name for the device for easy identification

Example: Living Room AC
onStatus
​string · enum · required

Current operational status of the device (ON, OFF, INACTIVE, or ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
totalEnergyUsage
​number · required

Cumulative total energy consumption in kilowatt-hours (kWh) since device installation

Example: 500
tenantId
​string · required

Unique identifier of the tenant organization that owns this device

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantName
​string · required

Name of the tenant organization that owns this device

Example: Faculty of Engineering
zoneId
​string · required

Unique identifier of the zone that this device is assigned to

Example: 64b7f1e6f9c9d4e5b8a9f7c5
zoneName
​string · required

Name of the zone that this device is assigned to

Example: Zone A
roomId
​string · required

Unique identifier of the room where this device is physically located

Example: 64b7f1e6f9c9d4e5b8a9f7c6
roomName
​string · required

Name of the room where this device is physically located

Example: Room 101
dbId
​string · required

Unique identifier of the distribution box that this device is connected to (for MCBs)

Example: 64b7f1e6f9c9d4e5b8a9f7c7
dbName
​string · required

Name of the distribution box that this device is connected to (for MCBs)

Example: Main Distribution Box
systemId
​string · required

Unique identifier of the system that this device belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system that this device belongs to

Example: NUS Engineering Building
realTimePower
​number · required

Real-time power consumption in watts (W) measured by the device

Example: 115
realTimeCurrent
​number · required

Real-time current draw in amperes (A) measured by the device

Example: 0.5
ssid
​string · required

Network SSID (Wi-Fi name) that the device is currently connected to

Example: XH001
temperatureMin
​number · required

Minimum threshold temperature reading in degrees Celsius

Example: 18
temperatureMax
​number · required

Maximum threshold temperature reading in degrees Celsius

Example: 26
targetState
​string · enum

Pending desired on/off state commanded by backend. Present when a toggle was issued but the device has not yet acknowledged (e.g. issued while INACTIVE). Frontend can derive a "Pending" indicator when this differs from onStatus.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when the pending targetState was last written.

Example: 2026-05-25T08:00:00.000Z
deviceNumber
​number

Auto-incremented sequential number for tracking device registration order

Example: 3
batchNumber
​number

Manufacturing batch number for tracking production groups and quality control

Example: 23
chipModel
​string · enum

Hardware chip model identifier used in the device (e.g., ESP32C2, ESP8266)

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
versionNumber
​string

Firmware version number currently running on the device

Example: 1.0.0
wifiDesiredSsid
​string

Primary SSID the device was last told to join

Example: XH001
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join

Example: XH001-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join

Example: XH001-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them

Example: ["XH001","XH001-2","XH001-3"]
​object

Weekly and one-time schedule configuration for automated device control

scheduleId
​null | string

Id of the named Schedule this device currently follows. deviceSchedule is compiled from it. Absent or null when the device follows nothing.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
lastSeen
​string · date-time

Timestamp when the device last communicated with the system

Example: 2024-10-15T12:30:00.000Z
isLocked
​boolean

Lock status indicating if the device is locked

Example: false
inactivityNotificationEnabled
​boolean

Whether inactivity notifications are enabled for this device

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device

Example: true
​object

Alert thresholds configured for this device, gathered into one object. Which fields are populated depends on the device type — see DeviceThresholdsDto. Omitted entirely when nothing is set.

environmentSensorType
​string · enum

Type of environment sensor (IAQ4, IAQ9, or temperature sensor)

Enum values:
FRIDGE_SENSOR
IAQ4
IAQ9
Example: IAQ4
temperature
​number

Current temperature reading in degrees Celsius

Example: 24.5
carbonDioxide
​number

Threshold CO2 reading in ppm

Example: 800
lux
​number

Threshold light level in lux (lx)

Example: 500
formaldehyde
​number

Threshold formaldehyde (HCHO) reading in ppm

Example: 0.08
humidity
​number

Threshold humidity percentage

Example: 60
pm1
​number

Threshold PM1 in µg/m³

Example: 25
pm2_5
​number

Threshold PM2.5 in µg/m³

Example: 35
pm10
​number

Threshold PM10 in µg/m³

Example: 50
totalVolatileOrganicCompounds
​number

Threshold Total Volatile Organic Compounds in ppm

Example: 0.5
soundLevel
​number

Threshold Sound Level in dB

Example: 70
motionDetected
​boolean

Motion detection status

Example: false
thresholdGroupName
​string

Name of the threshold group this sensor belongs to

Example: Office Sensors
realTimeCarbonDioxide
​null | number

Real-time CO2 reading in ppm

Example: 650
realTimeLux
​null | number

Real-time light level in lux (lx)

Example: 300
realTimeFormaldehyde
​null | number

Real-time formaldehyde (HCHO) reading in ppm

Example: 0.02
realTimeHumidity
​null | number

Real-time humidity percentage

Example: 55
realTimePm1
​null | number

Real-time PM1 in µg/m³

Example: 5
realTimePm2_5
​null | number

Real-time PM2.5 in µg/m³

Example: 12
realTimePm10
​null | number

Real-time PM10 in µg/m³

Example: 25
realTimeTotalVolatileOrganicCompounds
​null | number

Real-time Total Volatile Organic Compounds in ppm

Example: 0.3
realTimeSoundLevel
​null | number

Real-time Sound Level in dB

Example: 45
realTimeMotionDetected
​null | boolean

Real-time motion detection status

Example: false

GetEnvironmentSensorsDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

List of environment sensor devices

UpdateEnvironmentSensorDeviceDto

onStatus
​string · enum · required

Operational status of the environment sensor device

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
deviceName
​string

Name of the device

Example: Living Room Light
location
​string

Physical location of the device

Example: Block 123, Unit 01-23
remarks
​string

Additional remarks or notes about the device

Example: Handle with care - critical equipment
tenantId
​string

Tenant ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c3
zoneId
​string

Zone ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c4
roomId
​string

Room ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c5
isLocked
​boolean

Whether the device is locked. When locked, the device cannot be toggled ON/OFF.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false

BulkUpdateEnvironmentSensorThresholdsDto

environmentSensorIds
​string[] · required

IDs of environment sensors to update

carbonDioxide
​number

Threshold CO2 reading in ppm

Example: 400
lux
​number

Threshold light level in lux (lx)

Example: 500
formaldehyde
​number

Threshold formaldehyde (HCHO) in µg/m³

Example: 0.03
temperatureMin
​number

Min Threshold temperature in °C

Example: 18
temperatureMax
​number

Max Threshold temperature in °C

Example: 26
humidity
​number

Threshold humidity percentage

Example: 60
pm1
​number

Threshold PM1 in µg/m³

Example: 25
pm2_5
​number

Threshold PM2.5 in µg/m³

Example: 15
pm10
​number

Threshold PM10 in µg/m³

Example: 35
totalVolatileOrganicCompounds
​number

Threshold Total Volatile Organic Compounds in ppb

Example: 1
soundLevel
​number

Threshold Sound Level in dB

Example: 70
motionDetected
​boolean

Motion detection enabled

Example: true
thresholdEnabled
​boolean

Whether threshold notifications are enabled

Example: true
notificationThresholdHour
​number

Hourly notification threshold — minimum hours between repeat notifications

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000

RecommendedThresholdBandsDto

temperatureMin
​number

Outer low temperature bound (°C)

Example: 22
temperatureWarnMin
​number

Inner comfort low temperature bound (°C)

Example: 24
temperatureWarnMax
​number

Inner comfort high temperature bound (°C)

Example: 26
temperatureMax
​number

Outer high temperature bound (°C)

Example: 28
humidityMin
​number

Outer low humidity bound (%)

Example: 30
humidityWarnMin
​number

Inner comfort low humidity bound (%)

Example: 40
humidityWarnMax
​number

Inner comfort high humidity bound (%)

Example: 60
humidity
​number

Outer high humidity bound (%)

Example: 70
carbonDioxideWarn
​number

CO2 good cutoff (ppm)

Example: 700
carbonDioxide
​number

CO2 poor cutoff (ppm)

Example: 1000
pm1Warn
​number

PM1 good cutoff (µg/m³)

Example: 10
pm1
​number

PM1 poor cutoff (µg/m³)

Example: 25
pm2_5Warn
​number

PM2.5 good cutoff (µg/m³)

Example: 9
pm2_5
​number

PM2.5 poor cutoff (µg/m³)

Example: 35.4
pm10Warn
​number

PM10 good cutoff (µg/m³)

Example: 54
pm10
​number

PM10 poor cutoff (µg/m³)

Example: 154
formaldehydeWarn
​number

Formaldehyde good cutoff (µg/m³)

Example: 0.05
formaldehyde
​number

Formaldehyde poor cutoff (µg/m³)

Example: 0.1
totalVolatileOrganicCompoundsWarn
​number

TVOC good cutoff (ppb)

Example: 0.3
totalVolatileOrganicCompounds
​number

TVOC poor cutoff (ppb)

Example: 0.6
soundLevelWarn
​number

Sound level good cutoff (dB)

Example: 50
soundLevel
​number

Sound level poor cutoff (dB)

Example: 65

EnvironmentSensorThresholdGroup

_id
​string · required

Primary ID of the Threshold Group

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

User-defined group name

Example: Office Sensors
systemId
​string · required

System this group belongs to

Example: 507f1f77bcf86cd799439011
environmentSensorType
​string · enum · required

Type of environment sensors in this group

Enum values:
FRIDGE_SENSOR
IAQ4
IAQ9
Example: IAQ4
sensorIds
​string[] · required

Sensors assigned to this group

Example: ["507f1f77bcf86cd799439011"]
temperatureMin
​number

Min temperature threshold in degrees Celsius

Example: 18
temperatureMax
​number

Max temperature threshold in degrees Celsius

Example: 28
temperatureWarnMin
​number

Inner comfort lower temperature bound (good cutoff). Band: good within [temperatureWarnMin, temperatureWarnMax]; moderate within [temperatureMin, temperatureMax]; else poor. Display-only — not pushed to device.

Example: 24
temperatureWarnMax
​number

Inner comfort upper temperature bound (good cutoff). See temperatureWarnMin. Display-only — not pushed to device.

Example: 26
humidity
​number

Max humidity threshold percentage (outer high / poor cutoff)

Example: 70
humidityMin
​number

Min humidity threshold percentage (outer low / poor cutoff). Below this is poor. Display-only — not pushed to device.

Example: 30
humidityWarnMin
​number

Inner comfort lower humidity bound (good cutoff). Band: good within [humidityWarnMin, humidityWarnMax]; moderate within [humidityMin, humidity]; else poor. Display-only — not pushed to device.

Example: 40
humidityWarnMax
​number

Inner comfort upper humidity bound (good cutoff). See humidityWarnMin. Display-only — not pushed to device.

Example: 60
carbonDioxide
​number

Max CO2 threshold in ppm (poor cutoff)

Example: 1000
carbonDioxideWarn
​number

CO2 good cutoff in ppm. Band: good ≤ warn; moderate ≤ carbonDioxide; else poor. Display-only — not pushed to device.

Example: 700
lux
​number

Max light level threshold in lux (lx)

Example: 1000
formaldehyde
​number

Max formaldehyde (HCHO) threshold in ppm (poor cutoff)

Example: 0.08
formaldehydeWarn
​number

Formaldehyde good cutoff in ppm. Band: good ≤ warn; moderate ≤ formaldehyde; else poor. Display-only — not pushed to device.

Example: 0.05
pm1
​number

Max PM1 threshold in µg/m³ (poor cutoff)

Example: 25
pm1Warn
​number

PM1 good cutoff in µg/m³. Band: good ≤ warn; moderate ≤ pm1; else poor. Display-only — not pushed to device.

Example: 10
pm2_5
​number

Max PM2.5 threshold in µg/m³ (poor cutoff)

Example: 35
pm2_5Warn
​number

PM2.5 good cutoff in µg/m³. Band: good ≤ warn; moderate ≤ pm2_5; else poor. Display-only — not pushed to device.

Example: 9
pm10
​number

Max PM10 threshold in µg/m³ (poor cutoff)

Example: 150
pm10Warn
​number

PM10 good cutoff in µg/m³. Band: good ≤ warn; moderate ≤ pm10; else poor. Display-only — not pushed to device.

Example: 54
totalVolatileOrganicCompounds
​number

Max TVOC threshold in ppb (poor cutoff)

Example: 0.5
totalVolatileOrganicCompoundsWarn
​number

TVOC good cutoff in ppb. Band: good ≤ warn; moderate ≤ totalVolatileOrganicCompounds; else poor. Display-only — not pushed to device.

Example: 0.3
soundLevel
​number

Max sound level threshold in dB (poor cutoff)

Example: 65
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
soundLevelWarn
​number

Sound level good cutoff in dB. Band: good ≤ warn; moderate ≤ soundLevel; else poor. Display-only — not pushed to device.

Example: 50

CreateEnvironmentSensorThresholdGroupDto

name
​string · required

User-defined group name

Example: Office Sensors
environmentSensorType
​string · enum · required

Type of environment sensors in this group

Enum values:
FRIDGE_SENSOR
IAQ4
IAQ9
Example: IAQ4
sensorIds
​string[]

Sensor IDs to assign to this group. Each sensor must match the group's environmentSensorType. Sensors are automatically removed from their previous group.

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]
temperatureMin
​number

Min temperature threshold in degrees Celsius

Example: 18
temperatureMax
​number

Max temperature threshold in degrees Celsius

Example: 28
temperatureWarnMin
​number

Inner comfort lower temperature bound (good cutoff)

Example: 24
temperatureWarnMax
​number

Inner comfort upper temperature bound (good cutoff)

Example: 26
humidity
​number

Max humidity threshold percentage (outer high / poor cutoff)

Example: 70
humidityMin
​number

Min humidity threshold percentage (outer low / poor cutoff)

Example: 30
humidityWarnMin
​number

Inner comfort lower humidity bound (good cutoff)

Example: 40
humidityWarnMax
​number

Inner comfort upper humidity bound (good cutoff)

Example: 60
carbonDioxide
​number

Max CO2 threshold in ppm (poor cutoff)

Example: 1000
carbonDioxideWarn
​number

CO2 good cutoff in ppm

Example: 700
lux
​number

Max light level threshold in lux (lx)

Example: 1000
formaldehyde
​number

Max formaldehyde (HCHO) threshold in ppm (poor cutoff)

Example: 0.08
formaldehydeWarn
​number

Formaldehyde good cutoff in ppm

Example: 0.05
pm1
​number

Max PM1 threshold in µg/m³ (poor cutoff)

Example: 25
pm1Warn
​number

PM1 good cutoff in µg/m³

Example: 10
pm2_5
​number

Max PM2.5 threshold in µg/m³ (poor cutoff)

Example: 35
pm2_5Warn
​number

PM2.5 good cutoff in µg/m³

Example: 9
pm10
​number

Max PM10 threshold in µg/m³ (poor cutoff)

Example: 150
pm10Warn
​number

PM10 good cutoff in µg/m³

Example: 54
totalVolatileOrganicCompounds
​number

Max TVOC threshold in ppb (poor cutoff)

Example: 0.5
totalVolatileOrganicCompoundsWarn
​number

TVOC good cutoff in ppb

Example: 0.3
soundLevel
​number

Max sound level threshold in dB (poor cutoff)

Example: 65
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
soundLevelWarn
​number

Sound level good cutoff in dB

Example: 50

UpdateEnvironmentSensorThresholdGroupDto

name
​string

Updated group name

Example: Office Sensors Updated
sensorIds
​string[]

Full list of sensor IDs to assign to this group (replaces existing assignments). Each sensor must match the group's environmentSensorType. Sensors are automatically removed from their previous group.

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]
temperatureMin
​number

Min temperature threshold in degrees Celsius

Example: 18
temperatureMax
​number

Max temperature threshold in degrees Celsius

Example: 28
temperatureWarnMin
​number

Inner comfort lower temperature bound (good cutoff)

Example: 24
temperatureWarnMax
​number

Inner comfort upper temperature bound (good cutoff)

Example: 26
humidity
​number

Max humidity threshold percentage (outer high / poor cutoff)

Example: 70
humidityMin
​number

Min humidity threshold percentage (outer low / poor cutoff)

Example: 30
humidityWarnMin
​number

Inner comfort lower humidity bound (good cutoff)

Example: 40
humidityWarnMax
​number

Inner comfort upper humidity bound (good cutoff)

Example: 60
carbonDioxide
​number

Max CO2 threshold in ppm (poor cutoff)

Example: 1000
carbonDioxideWarn
​number

CO2 good cutoff in ppm

Example: 700
lux
​number

Max light level threshold in lux (lx)

Example: 1000
formaldehyde
​number

Max formaldehyde (HCHO) threshold in ppm (poor cutoff)

Example: 0.08
formaldehydeWarn
​number

Formaldehyde good cutoff in ppm

Example: 0.05
pm1
​number

Max PM1 threshold in µg/m³ (poor cutoff)

Example: 25
pm1Warn
​number

PM1 good cutoff in µg/m³

Example: 10
pm2_5
​number

Max PM2.5 threshold in µg/m³ (poor cutoff)

Example: 35
pm2_5Warn
​number

PM2.5 good cutoff in µg/m³

Example: 9
pm10
​number

Max PM10 threshold in µg/m³ (poor cutoff)

Example: 150
pm10Warn
​number

PM10 good cutoff in µg/m³

Example: 54
totalVolatileOrganicCompounds
​number

Max TVOC threshold in ppb (poor cutoff)

Example: 0.5
totalVolatileOrganicCompoundsWarn
​number

TVOC good cutoff in ppb

Example: 0.3
soundLevel
​number

Max sound level threshold in dB (poor cutoff)

Example: 65
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000
soundLevelWarn
​number

Sound level good cutoff in dB

Example: 50

PendingUpdateDto

jobId
​string · required

Active OTA job the device matches

targetVersion
​string · required

Version the rollout will bring it to

Example: 2.1.0

FilteredSmartSwitchDto

_id
​string · required

Unique database identifier of the device document in the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

Unique identifier assigned to the device by the IoT hardware (MAC ID)

Example: 1092384701928347
deviceName
​string · required

Friendly name for the device for easy identification

Example: Living Room AC
onStatus
​string · enum · required

Current operational status of the device (ON, OFF, INACTIVE, or ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
totalEnergyUsage
​number · required

Cumulative total energy consumption in kilowatt-hours (kWh) since device installation

Example: 500
tenantId
​string · required

Unique identifier of the tenant organization that owns this device

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantName
​string · required

Name of the tenant organization that owns this device

Example: Faculty of Engineering
zoneId
​string · required

Unique identifier of the zone that this device is assigned to

Example: 64b7f1e6f9c9d4e5b8a9f7c5
zoneName
​string · required

Name of the zone that this device is assigned to

Example: Zone A
roomId
​string · required

Unique identifier of the room where this device is physically located

Example: 64b7f1e6f9c9d4e5b8a9f7c6
roomName
​string · required

Name of the room where this device is physically located

Example: Room 101
dbId
​string · required

Unique identifier of the distribution box that this device is connected to (for MCBs)

Example: 64b7f1e6f9c9d4e5b8a9f7c7
dbName
​string · required

Name of the distribution box that this device is connected to (for MCBs)

Example: Main Distribution Box
systemId
​string · required

Unique identifier of the system that this device belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system that this device belongs to

Example: NUS Engineering Building
realTimePower
​number · required

Real-time power consumption in watts (W) measured by the device

Example: 115
realTimeCurrent
​number · required

Real-time current draw in amperes (A) measured by the device

Example: 0.5
ssid
​string · required

Network SSID (Wi-Fi name) that the device is currently connected to

Example: XH001
switchType
​string · enum · required

Type of appliance the switch controls (LIGHT, FAN, AIRCON, or UNREGISTERED)

Enum values:
UNREGISTERED
LIGHT
FAN
AIRCON
Example: LIGHT
numberOfGangs
​number · min: 1 · max: 4 · required

Number of gangs/buttons on the switch (1-4)

Example: 2
​object[] · required

Array of gang switch states - each gang has its own independent on/off state

Example: [{"gangNumber":1,"onStatus":"OFF","label":"Main Light"},{"gangNumber":2,"onStatus":"OFF","label":"Accent Light"}]
targetState
​string · enum

Pending desired on/off state commanded by backend. Present when a toggle was issued but the device has not yet acknowledged (e.g. issued while INACTIVE). Frontend can derive a "Pending" indicator when this differs from onStatus.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when the pending targetState was last written.

Example: 2026-05-25T08:00:00.000Z
deviceNumber
​number

Auto-incremented sequential number for tracking device registration order

Example: 3
batchNumber
​number

Manufacturing batch number for tracking production groups and quality control

Example: 23
chipModel
​string · enum

Hardware chip model identifier used in the device (e.g., ESP32C2, ESP8266)

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
versionNumber
​string

Firmware version number currently running on the device

Example: 1.0.0
wifiDesiredSsid
​string

Primary SSID the device was last told to join

Example: XH001
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join

Example: XH001-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join

Example: XH001-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them

Example: ["XH001","XH001-2","XH001-3"]
​object

Weekly and one-time schedule configuration for automated device control

scheduleId
​null | string

Id of the named Schedule this device currently follows. deviceSchedule is compiled from it. Absent or null when the device follows nothing.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
lastSeen
​string · date-time

Timestamp when the device last communicated with the system

Example: 2024-10-15T12:30:00.000Z
isLocked
​boolean

Lock status indicating if the device is locked

Example: false
inactivityNotificationEnabled
​boolean

Whether inactivity notifications are enabled for this device

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device

Example: true
​object

Alert thresholds configured for this device, gathered into one object. Which fields are populated depends on the device type — see DeviceThresholdsDto. Omitted entirely when nothing is set.

​object

Active OTA rollout this smart switch matches and still needs (Mongo-derived, not live progress). Absent if no rollout targets its current version.

GetSmartSwitchesDto

​object[] · required

List of Smart Switches with organizational hierarchy details

total
​number · required

Total number of Smart Switches

Example: 42
page
​number · required

Current page number

Example: 1
size
​number · required

Number of items per page

Example: 10

UpdateSmartSwitchDto

deviceName
​string

Name of the device

Example: Living Room Light
location
​string

Physical location of the device

Example: Block 123, Unit 01-23
remarks
​string

Additional remarks or notes about the device

Example: Handle with care - critical equipment
tenantId
​string

Tenant ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c3
zoneId
​string

Zone ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c4
roomId
​string

Room ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c5
isLocked
​boolean

Whether the device is locked. When locked, the device cannot be toggled ON/OFF.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
onStatus
​string · enum

Status of the Smart Switch

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
switchType
​string · enum

Type of appliance the switch controls

Enum values:
UNREGISTERED
LIGHT
FAN
AIRCON
Example: LIGHT
numberOfGangs
​number · min: 1 · max: 4

Number of gangs/buttons on the switch (1-4)

Example: 2

SmartSwitch

_id
​string · required

Primary ID of the Device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceType
​string · enum · required

Type of device (discriminator field)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
macId
​string · required

MAC ID of the Device (from IoT device)

Example: 1092384701928347
deviceName
​string · required

Name of the Device

Example: Living Room AC
deviceNumber
​number · required

Unique device number for identification

Example: 1
onStatus
​string · enum · required

Status of the Device (ON / OFF / INACTIVE / ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
location
​string · required

Physical location or address where the device is installed

Example: Room 101, Building A
remarks
​string · required

Remarks for the Device

batchNumber
​number · required

Manufacturing batch number for tracking production groups

Example: 1
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number currently running on the device

Example: 1.0.0
ssid
​string · required

Network SSID (Wi-Fi name) that the device is connected to

Example: IoT-Network-5G
​object · required

Tagged Tenant

​object · required

Tagged Zone

​object · required

Tagged Room

​object · required

Tagged System

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
lastSeen
​string · date-time · required

Last time the device was seen/reported

Example: 2021-09-01
isLocked
​boolean · required

Whether the device is locked. When locked, the device on/off status cannot be toggled.

Example: false
totalEnergyUsage
​number · required

Total cumulative energy usage in kWh

Example: 0
totalEnergySaved
​number · required

Total energy saved through optimization in kWh

Example: 0
autoUpdateAttempts
​number · required

Number of auto-update OTA attempts sent to this device

Example: 0
autoUpdateBlacklisted
​boolean · required

Whether device is blacklisted from auto-updates (max retries exceeded)

Example: false
manualUpdateBlacklist
​boolean · required

Whether device is manually blacklisted from auto-updates by admin

Example: false
inactivityNotificationEnabled
​boolean · required

Whether inactivity notifications are enabled for this device

Default: false
switchType
​string · enum · required

Type of appliance the switch controls (LIGHT, FAN, AIRCON, or UNREGISTERED)

Enum values:
UNREGISTERED
LIGHT
FAN
AIRCON
Example: LIGHT
numberOfGangs
​number · min: 1 · max: 4 · required

Number of gangs/buttons on the switch (1-4)

Example: 2
​object[] · required

Array of gang switch states - each gang has its own independent on/off state

Example: [{"gangNumber":1,"onStatus":"OFF","label":"Main Light"},{"gangNumber":2,"onStatus":"OFF","label":"Accent Light"}]
targetState
​string · enum

Pending desired on/off state commanded by backend (cloud / scheduled). Set when a toggle is issued; cleared when the device reports a matching state or a physical (MANUAL) press overrides it. Always ON or OFF when present.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when targetState was last written. Used to expire stale SCHEDULED intents (24hr TTL). CLOUD intents do not expire.

Example: 2026-05-25T08:00:00.000Z
targetSource
​string · enum

Origin of the pending targetState. Drives TTL behavior on reconcile. Only CLOUD / SCHEDULED are ever written here.

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD
deviceModel
​string

Model name or identifier of the device

Example: TP-Link HS110
deviceBrand
​string

Brand or manufacturer of the device

Example: TP-Link
wifiError
​string

Last WiFi shadow delta failure reported by the device (e.g. join_failed); cleared once it reports a successful join

Example: join_failed
wifiDesiredSsid
​string

Primary SSID the device was last told to join. Set at send time on both the shadow and legacy changeWifi paths; convergence is ssid matching any desired SSID.

Example: Corp-IoT
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them.

Example: ["Corp-IoT","Corp-IoT-2","Corp-IoT-3"]
config
​object

Settings as last reported by the device into its config shadow, one block per feature

pendingConfig
​object

Settings written to the config shadow but not yet reported back. A key the device reports at a different value was rejected

configRequestedAt
​string · date-time

When settings were last written to the config shadow

configReportedAt
​string · date-time

When the device last reported into its config shadow

rssi
​number

Latest WiFi signal strength reported by the device (dBm). Updated on each realtime MQTT report.

Example: -65
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a physical unit. Such rows have no real MAC, never report telemetry, and are excluded from firmware, OTA, provisioning and panel-slot views.

Example: false
isRidgeChild
​boolean

True when this row is a unit behind a RIDGE gateway rather than a directly-connected unit. Such rows have no real MAC, are never fleet-provisioned, and are excluded from firmware, OTA and liveness watchdogs — their gateway carries those.

Example: false
hasPhaseChildren
​boolean

True when this clamp has been split into per-phase children. Such a clamp is org-detached and excluded from energy and organisational views — its children carry those — while remaining the sole target for firmware, OTA and diagnostics.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
​object

Schedule configuration for the device. Contains recurring weekly schedules and one-time scheduled tasks.

scheduleId
​null | string

Id of the single Schedule (in the schedules collection) this device currently follows. deviceSchedule is compiled from that schedule. When null, the device follows nothing.

Example: 507f1f77bcf86cd799439011
realTimePower
​number

Real-time power consumption in watts

Example: 1500
realTimeCurrent
​number

Real-time current in amperes

Example: 6.5
lastAutoUpdateAttempt
​string · date-time

Timestamp of last auto-update OTA attempt

inactivityNotificationSentAt
​string · date-time

Timestamp when the last inactivity notification was sent for this device

thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
​object

Threshold limits sent to the device but not yet confirmed by its firmware. Keys match DeviceThresholdsDto. Present only while a save is outstanding — a key that persists here is not being enforced by the hardware.

​object

This device's alert thresholds gathered into one object. Which fields are populated depends on deviceType — see DeviceThresholdsDto. Absent when no thresholds are configured. The same values remain available as flat top-level fields.

ControlSmartSwitchDto

gangStates
​number[] · required

Array of binary gang switch states where 1 = ON and 0 = OFF. Array index corresponds to gang number (e.g., [1, 0, 0, 1] means gang 1 ON, gang 2 OFF, gang 3 OFF, gang 4 ON)

Example: [1,0,0,1]
triggerSource
​string · enum

Source that triggered the control command

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD

BulkControlSmartSwitchDto

ids
​string[] · required

Array of Smart Switch IDs to control

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]
onStatus
​string · enum

Desired power state for all gangs on all Smart Switches. Use ON to turn all gangs on, or OFF to turn all gangs off.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON

CreateDistributionBoxDto

name
​string · required

Name/identifier of the Distribution Box

Example: Main DB Box - Floor 1
systemId
​string · required

System ID to which this Distribution Box belongs

Example: 64b7f1e6f9c9d4e5b8a9f7c3
numberOfRows
​number

Number of rows in the distribution box

Example: 1
hasMainBreaker
​boolean

Whether the distribution box has main circuit breaker

Example: true
mainBreakerRating
​number

Main breaker rating in amperes (if hasMainBreaker is true)

Example: 63
tenantId
​string

Tenant ID to which this Distribution Box belongs

zoneId
​string

Zone ID to which this Distribution Box belongs

roomId
​string

Room ID to which this Distribution Box belongs

mcbIds
​string[]

Array of MCB IDs to be assigned to this distribution box

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]
location
​string

Location of the Distribution Box

Example: Ground Floor, Electrical Room
remarks
​string

Remarks for the Distribution Box

digitalTwinWidth
​number

Width of the digital twin canvas in pixels

Example: 1200
digitalTwinHeight
​number

Height of the digital twin canvas in pixels

Example: 800

GetDistributionBoxesDto

​object[] · required

Array of Distribution Boxes

total
​number · required

Total number of Distribution Boxes

Example: 100
page
​number · required

Current page number

Example: 1
size
​number · required

Number of items per page

Example: 10

SandboxDeviceInputDto

id
​string · required

Unique identifier for the sandbox device

Example: sandbox-device-1
type
​string · enum · required

Type of sandbox device

Enum values:
DUMB_MCB
RCCB
RCBO
MCCB
ISOLATOR
SPD
PLANNED_SMART
Example: DUMB_MCB
name
​string · required

User-defined name for the device

Example: Kitchen Lights
digitalTwinX
​number · required

X position on the digital twin canvas

Example: 400
rowLine
​number · required

Row line position (1-6)

Example: 2
poles
​number

Number of poles. Sets the module width for everything except an MCCB.

Example: 2
widthModules
​number

How many DIN modules wide the device body is, at 18mm per module. Equals poles for every modular device; an MCCB is sized by frame instead, so it carries its own value.

Example: 2
curve
​string · enum

Trip curve stamped on the breaker

Enum values:
B
C
D
Example: C
confidence
​number

How sure the reading was when this device came from a digitised photo, 0 to 1. Omit for hand-placed devices.

Example: 0.82
ratedCurrent
​number

Rated current in amperes

Example: 16
ratedVoltage
​number

Rated voltage in volts

Example: 230
mcbType
​string · enum

MCB type (for DUMB_MCB devices)

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: BUILT_IN
leakageCurrent
​number

Leakage current in milliamperes (for RCCB devices)

Example: 30
color
​string

Custom color for visual identification (hex code)

Example: #94a3b8
​object[]

Absolute canvas positions of the 3 CT clamps, for a PLANNED_SMART device standing in for a Wattson Pro.

notes
​string

Additional notes about the device

Example: Connected to kitchen circuit

WireConnectionDto

deviceId
​string · required

Device ID (MCB._id or SandboxDevice.id)

Example: sandbox-device-1
deviceType
​string · enum · required

Type of device being connected

Enum values:
SMART_MCB
DUMB_MCB
RCCB
RCBO
MCCB
ISOLATOR
SPD
PLANNED_SMART
Example: DUMB_MCB
side
​string · enum · required

Side of the device where the connection is made

Enum values:
LEFT
RIGHT
TOP
BOTTOM
Example: LEFT

SandboxWireInputDto

id
​string · required

Unique identifier for the wire connection

Example: wire-1
​object · required

Source connection point

​object · required

Target connection point

color
​string

Wire color (hex code)

Example: #fbbf24
Default: #fbbf24
thickness
​number

Wire thickness in pixels

Example: 3
Default: 3
label
​string

Optional label for the wire

Example: Phase 1

UpdateDistributionBoxDto

name
​string

Name/identifier of the Distribution Box

Example: Main DB Box - Floor 2
numberOfRows
​number

Number of rows in the distribution box

Example: 1
hasMainBreaker
​boolean

Whether the distribution box has main circuit breaker

Example: true
mainBreakerRating
​number

Main breaker rating in amperes (if hasMainBreaker is true)

Example: 63
tenantId
​string

Tenant ID to which this Distribution Box belongs

zoneId
​string

Zone ID to which this Distribution Box belongs

roomId
​string

Room ID to which this Distribution Box belongs

mcbIds
​string[]

Array of MCB IDs to be assigned to this distribution box

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]
location
​string

Location of the Distribution Box

Example: Ground Floor, Electrical Room
remarks
​string

Remarks for the Distribution Box

​object[]

Array of sandbox (non-smart) devices in the distribution box

​object[]

Array of wire connections between devices in the distribution box

digitalTwinWidth
​number

Width of the digital twin canvas in pixels

Example: 1200
digitalTwinHeight
​number

Height of the digital twin canvas in pixels

Example: 800

AddMCBToDistributionBoxDto

mcbId
​string · required

MCB ID to add to the distribution box

Example: 64b7f1e6f9c9d4e5b8a9f7c3

RemoveMCBFromDistributionBoxDto

mcbId
​string · required

MCB ID to remove from the distribution box

Example: 64b7f1e6f9c9d4e5b8a9f7c3

GetDistributionBoxMcbDto

_id
​string · required

Unique database identifier of the device document in the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

Unique identifier assigned to the device by the IoT hardware (MAC ID)

Example: 1092384701928347
deviceName
​string · required

Friendly name for the device for easy identification

Example: Living Room AC
onStatus
​string · enum · required

Current operational status of the device (ON, OFF, INACTIVE, or ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
totalEnergyUsage
​number · required

Cumulative total energy consumption in kilowatt-hours (kWh) since device installation

Example: 500
tenantId
​string · required

Unique identifier of the tenant organization that owns this device

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantName
​string · required

Name of the tenant organization that owns this device

Example: Faculty of Engineering
zoneId
​string · required

Unique identifier of the zone that this device is assigned to

Example: 64b7f1e6f9c9d4e5b8a9f7c5
zoneName
​string · required

Name of the zone that this device is assigned to

Example: Zone A
roomId
​string · required

Unique identifier of the room where this device is physically located

Example: 64b7f1e6f9c9d4e5b8a9f7c6
roomName
​string · required

Name of the room where this device is physically located

Example: Room 101
dbId
​string · required

Unique identifier of the distribution box that this device is connected to (for MCBs)

Example: 64b7f1e6f9c9d4e5b8a9f7c7
dbName
​string · required

Name of the distribution box that this device is connected to (for MCBs)

Example: Main Distribution Box
systemId
​string · required

Unique identifier of the system that this device belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system that this device belongs to

Example: NUS Engineering Building
realTimePower
​number · required

Real-time power consumption in watts (W) measured by the device

Example: 115
realTimeCurrent
​number · required

Real-time current draw in amperes (A) measured by the device

Example: 0.5
ssid
​string · required

Network SSID (Wi-Fi name) that the device is currently connected to

Example: XH001
mcbType
​string · enum · required

Type of MCB (trip curve type)

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: BUILT_IN
ratedCurrent
​number · required

Rated current capacity in amperes

Example: 16
targetState
​string · enum

Pending desired on/off state commanded by backend. Present when a toggle was issued but the device has not yet acknowledged (e.g. issued while INACTIVE). Frontend can derive a "Pending" indicator when this differs from onStatus.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when the pending targetState was last written.

Example: 2026-05-25T08:00:00.000Z
deviceNumber
​number

Auto-incremented sequential number for tracking device registration order

Example: 3
batchNumber
​number

Manufacturing batch number for tracking production groups and quality control

Example: 23
chipModel
​string · enum

Hardware chip model identifier used in the device (e.g., ESP32C2, ESP8266)

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
versionNumber
​string

Firmware version number currently running on the device

Example: 1.0.0
wifiDesiredSsid
​string

Primary SSID the device was last told to join

Example: XH001
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join

Example: XH001-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join

Example: XH001-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them

Example: ["XH001","XH001-2","XH001-3"]
​object

Weekly and one-time schedule configuration for automated device control

scheduleId
​null | string

Id of the named Schedule this device currently follows. deviceSchedule is compiled from it. Absent or null when the device follows nothing.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
lastSeen
​string · date-time

Timestamp when the device last communicated with the system

Example: 2024-10-15T12:30:00.000Z
isLocked
​boolean

Lock status indicating if the device is locked

Example: false
inactivityNotificationEnabled
​boolean

Whether inactivity notifications are enabled for this device

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Example: true
Default: false
​object

Alert thresholds configured for this device, gathered into one object. Which fields are populated depends on the device type — see DeviceThresholdsDto. Omitted entirely when nothing is set.

rangeEnergyUsage
​number

Energy usage in kWh over the from..till window, aggregated from daily usage history. Present only when both query params are supplied — unlike the cumulative totalEnergyUsage, this is windowed.

Example: 42.75
measurementType
​string · enum

Type of load/circuit being measured by this MCB

Enum values:
SSO
LIGHTS_FANS
LIGHTS
FANS
AIRCON
POWER_OUTLETS
GENERAL
COMBINED
Example: SSO
ratedVoltage
​number

Rated voltage in volts

Example: 230
realTimeVoltage
​number

Real-time voltage in volts

Example: 230
powerFactor
​number

Power factor (0-1)

Example: 0.95
digitalTwinX
​number

X coordinate for digital twin SVG positioning

Example: 150.5
digitalTwinY
​number

Y coordinate for digital twin SVG positioning (free-placed devices such as coils)

Example: 130.5
​object[]

Absolute canvas positions of the 3 CT clamps (COIL3P devices only)

coilRotation
​number

Rotation of the coil body in the digital twin, in degrees (e.g. 0, 90, 180, 270).

Example: 90
rowLine
​number

Row line number (1-6) the MCB is connected to

Example: 1
slotNumber
​number

Slot/position number on the busbar

Example: 3
isReversePower
​boolean

Whether power/current readings are reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isAReversePower
​boolean

Whether power/current readings are reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isBReversePower
​boolean

Whether power/current readings are reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isCReversePower
​boolean

Whether power/current readings are reversed (made absolute). When true, negative values are converted to positive.

Example: false
Default: false
isSingle
​boolean

COIL3P only. How the clamp is wired. false = 3 x 1P, three independent circuits, each shown as its own row with per-phase readings; true = one combined three-phase circuit shown as a single row, with one threshold shared by all three phases.

Example: false
Default: false
phaseLabels
​string[]

COIL3P only. Optional labels for phases A, B and C (in order).

Example: ["Lighting","Sockets","Aircon"]
realTimePowerA
​number

Phase A real-time power (W)

realTimePowerB
​number

Phase B real-time power (W)

realTimePowerC
​number

Phase C real-time power (W)

realTimeVoltageA
​number

Phase A real-time voltage (V)

realTimeVoltageB
​number

Phase B real-time voltage (V)

realTimeVoltageC
​number

Phase C real-time voltage (V)

realTimeCurrentA
​number

Phase A real-time current (A)

realTimeCurrentB
​number

Phase B real-time current (A)

realTimeCurrentC
​number

Phase C real-time current (A)

totalEnergyUsageA
​number

Phase A cumulative energy usage (kWh)

totalEnergyUsageB
​number

Phase B cumulative energy usage (kWh)

totalEnergyUsageC
​number

Phase C cumulative energy usage (kWh)

powerFactorA
​number

Phase A power factor (0-1)

powerFactorB
​number

Phase B power factor (0-1)

powerFactorC
​number

Phase C power factor (0-1)

phase
​string · enum

Set only when the list is requested with expandPhases=true and this row represents a single phase of a COIL3P device. In that mode realTimePower, realTimeCurrent, realTimeVoltage, totalEnergyUsage and powerFactor hold the values of this phase.

Enum values:
A
B
C
Example: A
phaseParent
​string

Set when this row is one phase of a split COIL3P. The hardware settings — rated current, thresholds, reverse-power, firmware, panel position — belong to the clamp at this id, not to the leg; only the name and the Room / Zone / Tenant assignment are the leg's own.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a whole device.

Example: false
phaseName
​string

User-defined name of this row's phase (expandPhases=true rows only)

Example: Kitchen

GetMCBEnergyUsageDto

mcbId
​string · required

MCB ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceName
​string · required

MCB name

Example: Living Room AC MCB
totalEnergyUsage
​number · required

Total energy usage in kWh

Example: 125.5
realTimePower
​number

Real-time power consumption in watts

Example: 1500
realTimeCurrent
​number

Real-time current in amperes

Example: 6.5

GetDistributionBoxEnergyUsageDto

distributionBoxId
​string · required

Distribution Box ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

Distribution Box name

Example: Main DB Box - Floor 1
totalEnergyUsage
​number · required

Total energy usage in kWh (sum of all MCBs)

Example: 1250.75
mcbCount
​number · required

Number of MCBs in this distribution box

Example: 12
​object[] · required

Individual MCB energy usage details

GetAggregatedDistributionBoxEnergyUsageDto

totalEnergyUsage
​number · required

Total aggregated energy usage in kWh

Example: 5250.75
distributionBoxCount
​number · required

Number of distribution boxes included

Example: 5
​object[] · required

Individual distribution box energy usage details

CreateSandboxDeviceDto

type
​string · enum · required

Type of sandbox device

Enum values:
DUMB_MCB
RCCB
RCBO
MCCB
ISOLATOR
SPD
PLANNED_SMART
Example: DUMB_MCB
name
​string · required

User-defined name for the device

Example: Kitchen Lights
digitalTwinX
​number · required

X position on the digital twin canvas

Example: 400
rowLine
​number · required

Row line position (1-6)

Example: 2
ratedCurrent
​number

Rated current in amperes

Example: 16
ratedVoltage
​number

Rated voltage in volts

Example: 230
mcbType
​string · enum

MCB type (for DUMB_MCB devices)

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: BUILT_IN
leakageCurrent
​number

Leakage current in milliamperes (for RCCB devices)

Example: 30
color
​string

Custom color for visual identification (hex code)

Example: #94a3b8
notes
​string

Additional notes about the device

Example: Connected to kitchen circuit

UpdateSandboxDeviceDto

type
​string · enum

Type of sandbox device

Enum values:
DUMB_MCB
RCCB
RCBO
MCCB
ISOLATOR
SPD
PLANNED_SMART
Example: DUMB_MCB
name
​string

User-defined name for the device

Example: Kitchen Lights
digitalTwinX
​number

X position on the digital twin canvas

Example: 400
rowLine
​number

Row line position (1-6)

Example: 2
ratedCurrent
​number

Rated current in amperes

Example: 16
ratedVoltage
​number

Rated voltage in volts

Example: 230
mcbType
​string · enum

MCB type (for DUMB_MCB devices)

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: BUILT_IN
leakageCurrent
​number

Leakage current in milliamperes (for RCCB devices)

Example: 30
color
​string

Custom color for visual identification (hex code)

Example: #94a3b8
notes
​string

Additional notes about the device

Example: Connected to kitchen circuit

ReplaceSandboxDeviceWithMcbDto

mcbId
​string · required

ID of the registered MCB that has been installed in place of the planned device

Example: 64b7f1e6f9c9d4e5b8a9f7c3

CreateSandboxWireDto

​object · required

Source connection point

​object · required

Target connection point

color
​string

Wire color (hex code)

Example: #fbbf24
Default: #fbbf24
thickness
​number

Wire thickness in pixels

Example: 3
Default: 3
label
​string

Optional label for the wire

Example: Phase 1

UpdateSandboxWireDto

​object

Source connection point

​object

Target connection point

color
​string

Wire color (hex code)

Example: #fbbf24
thickness
​number

Wire thickness in pixels

Example: 3
label
​string

Optional label for the wire

Example: Phase 1

UpdateSandboxElementsDto

​object[] · required

Array of all sandbox devices (replaces existing)

​object[] · required

Array of all sandbox wires (replaces existing)

DeviceTypeForWire

string · enum
Enum values:
SMART_MCB
DUMB_MCB
RCCB
RCBO
MCCB
ISOLATOR
SPD
PLANNED_SMART

What the device was detected as. SMART_MCB means an Ecovolt breaker, which the client binds to an already-registered MCB rather than creating.

DeviceRole

string · enum
Enum values:
INCOMER
RCD_GROUP
WAY

How the device is fed. The wiring on a real board is mostly hidden behind the busbar, so roles are read off the photo and the wires derived from them.

TwinDeviceDto

id
​string · required

Temporary identifier for this detected device, unique within the response. Wires reference it; the client replaces it with a real MCB id or a generated sandbox device id on save.

Example: ai-device-3
type
​string · enum · required

What the device was detected as. SMART_MCB means an Ecovolt breaker, which the client binds to an already-registered MCB rather than creating.

Enum values:
SMART_MCB
DUMB_MCB
RCCB
RCBO
MCCB
ISOLATOR
SPD
PLANNED_SMART
Example: DUMB_MCB
name
​string · required

Name read off the breaker label or directory card

Example: Kitchen Lights
digitalTwinX
​number · required

X position on the digital twin canvas, snapped to the rail

Example: 420
rowLine
​number · required

Row line position (1-6), counted top to bottom

Example: 2
slotNumber
​number · required

Module slot the device occupies on its row, left to right

Example: 3
role
​string · enum · required

How the device is fed. The wiring on a real board is mostly hidden behind the busbar, so roles are read off the photo and the wires derived from them.

Enum values:
INCOMER
RCD_GROUP
WAY
Example: WAY
widthModules
​number · required

How many DIN modules wide the device body is, at 18mm per module. Equals poles for every modular device; an MCCB is sized by frame instead.

Example: 1
poles
​number · required

Number of poles

Example: 1
confidence
​number · required

Detection confidence from 0 to 1. Anything below ~0.6 is worth flagging in the UI for the user to verify against the photo.

Example: 0.82
ratedCurrent
​number

Rated current in amperes, if legible

Example: 16
ratedVoltage
​number

Rated voltage in volts, if legible

Example: 230
mcbType
​string · enum

MCB type (manual devices only)

Enum values:
UNREGISTERED
SWITCH
BUILT_IN
COIL
COIL3P
Example: SWITCH
curve
​string · enum

Trip curve stamped on the breaker, if legible

Enum values:
B
C
D
Example: C
leakageCurrent
​number

Leakage current in milliamperes (residual current devices)

Example: 30
color
​string

Colour for visual identification

Example: #64748b
notes
​string

What the model read, when it is worth keeping as a note

Example: Label partially obscured

GenerateDigitalTwinResponseDto

numberOfRows
​number · required

Number of DIN rails detected on the board

Example: 3
digitalTwinWidth
​number · required

Suggested canvas width in pixels

Example: 1620
digitalTwinHeight
​number · required

Suggested canvas height in pixels

Example: 1880
​object[] · required

Every breaker detected, smart and manual alike, already snapped to the rail

​object[] · required

Proposed wiring between detected devices, referencing TwinDeviceDto ids

CreateSurgeOverrideDto

name
​string · required

Display name

Example: Boost 8 kWh
applicableEntityTypes
​string[] · required

Entity types this override can be applied to

Enum values:
ROOM
TENANT
ZONE
thresholdKwh
​number · required

Absolute daily threshold (kWh) granted while the override is active

Example: 8
price
​number · required

Price

Example: 9.9
description
​string

Customer-facing description

isActive
​boolean

Whether the override is sellable

Default: true

SurgeOverrideResponseDto

_id
​string · required
name
​string · required
applicableEntityTypes
​string[] · required
Enum values:
ROOM
TENANT
ZONE
thresholdKwh
​number · required
price
​number · required
isActive
​boolean · required
createdAt
​string · date-time · required
updatedAt
​string · date-time · required
description
​string

UpdateSurgeOverrideDto

name
​string

Display name

Example: Boost 8 kWh
description
​string

Customer-facing description

applicableEntityTypes
​string[]

Entity types this override can be applied to

Enum values:
ROOM
TENANT
ZONE
thresholdKwh
​number

Absolute daily threshold (kWh) granted while the override is active

Example: 8
price
​number

Price

Example: 9.9
isActive
​boolean

Whether the override is sellable

Default: true

PurchaseSurgeOverrideDto

surgeOverrideId
​string · required

SurgeOverride catalog id

entityType
​string · enum · required

Entity type the override should apply to

Enum values:
ROOM
TENANT
ZONE
entityId
​string · required

Entity id (room/tenant/zone)

paymentId
​string

Optional Payment record id to link to this purchase (refunds handled via payment module)

PurchaseStatus

string · enum
Enum values:
ACTIVE
CANCELLED

SurgeOverridePurchaseResponseDto

_id
​string · required
surgeOverride
​string · required
system
​string · required
entityType
​string · enum · required

Type of entity to start usage surge analysis for

Enum values:
ROOM
TENANT
ZONE
entityId
​string · required
thresholdKwh
​number · required
activeFrom
​string · date-time · required
status
​string · enum · required
Enum values:
ACTIVE
CANCELLED
purchasedBy
​string · required
createdAt
​string · date-time · required
updatedAt
​string · date-time · required
payment
​string
purchasedByName
​string

Display name of the admin who purchased

entityName
​string

Display name of the entity (room/tenant/zone)

cancelledAt
​string · date-time
cancelledBy
​string
cancelReason
​string

CancelSurgeOverrideDto

reason
​string

Reason supplied at cancellation time

Example: Customer requested refund

SurgeOverridePurchaseListResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

SurgeOverridePurchaseActiveMapResponseDto

​object · required

Map of entityId → active SurgeOverridePurchase. Only entities with an active override are included.

total
​number · required

OnboardingStatus

string · enum
Enum values:
PENDING
IN_PROGRESS
COMPLETED

PhaseStatus

string · enum
Enum values:
PENDING
ACTIVE
SUGGESTIONS_READY
COMPLETED

OnboardingPhase

status
​string · enum · required
Enum values:
PENDING
ACTIVE
SUGGESTIONS_READY
COMPLETED
startDate
​string · date-time
activationScheduledTaskName
​string

AWS Scheduler task name for auto-activating this phase on startDate

endDate
​string · date-time

DefaultStaticSchedule

​object[]
​object[]
​object[]
​object[]
​object[]
​object[]
​object[]

ScheduleGroup

plugIds
​string[] · required

Plug IDs assigned to this schedule group

​object · required

StaticSchedulePhase

status
​string · enum · required
Enum values:
PENDING
ACTIVE
SUGGESTIONS_READY
COMPLETED
includePublicHolidays
​boolean · required
startDate
​string · date-time
activationScheduledTaskName
​string

AWS Scheduler task name for auto-activating this phase on startDate

endDate
​string · date-time
​object

Fallback schedule applied to unlocked plugs not in any scheduleGroup

​object[]

Per-group device schedules. Devices in a group get the group schedule; remaining unlocked devices get defaultStaticSchedule.

ascentAIScheduledTaskName
​string

AscentAIPhase

status
​string · enum · required
Enum values:
PENDING
ACTIVE
SUGGESTIONS_READY
COMPLETED
autoSuggestionsEnabled
​boolean · required
startDate
​string · date-time
activationScheduledTaskName
​string

AWS Scheduler task name for auto-activating this phase on startDate

endDate
​string · date-time
suggestionsGeneratedAt
​string · date-time
suggestionsActivatedAt
​string · date-time

OnboardingIterationDto

iterationNumber
​number · required
status
​string · enum · required
Enum values:
PENDING
IN_PROGRESS
COMPLETED
​object · required
​object · required
​object · required
​object · required
name
​string
startedAt
​string · date-time
completedAt
​string · date-time
ascentAiRecommendations
​object

SystemOnboardingResponseDto

_id
​string · required
system
​string · required
activeIterationIndex
​number · required
​object[] · required
createdAt
​string · date-time · required
updatedAt
​string · date-time · required

DefaultStaticScheduleDto

​object[]

Monday schedule entries

​object[]

Tuesday schedule entries

​object[]

Wednesday schedule entries

​object[]

Thursday schedule entries

​object[]

Friday schedule entries

​object[]

Saturday schedule entries

​object[]

Sunday schedule entries

ScheduleGroupDto

plugIds
​string[] · required
​object · required

UpdateOnboardingPhaseDto

startDate
​string

ISO 8601 date string

endDate
​string

ISO 8601 date string

includePublicHolidays
​boolean
​object

Default schedule auto-applied to unlocked plugs on Phase 2 activation

​object[]

Per-group device schedules for Phase 2. Devices in a group get the group schedule; remaining unlocked devices get defaultStaticSchedule.

EcoguardRecommendationDto

suitable
​boolean · required

Whether this device category benefits from EcoGuard

Example: true
reason
​string · required

Human-readable explanation shown to users

Example: This device type is suitable for EcoGuard idle detection.
suggestedIdleThreshold
​number

Suggested idle power threshold in watts (with 1.1x buffer). Only present if suitable is true.

Example: 5.5
suggestedTimer
​number

Suggested auto-shutoff timer in minutes. Only present if suitable is true.

Example: 30

PlugRecommendationDto

deviceId
​string · required

The unique identifier of the device (Plug or MCB)

Example: 507f1f77bcf86cd799439011
macId
​string · required

The MAC address of the device

Example: AA:BB:CC:DD:EE:FF
deviceName
​string · required

The name of the device for easy identification

Example: Office AC Unit
plugCategory
​string · required

The category of the plug device (only for Plugs, empty for MCBs)

Example: Air Conditioning
​object[]

Array of AI-recommended schedule entries for Monday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Tuesday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Wednesday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Thursday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Friday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Saturday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Sunday based on usage patterns

summary
​string

AI-generated summary explaining the recommended schedule and detected behavioral patterns

Example: Work-from-home behavior detected on weekdays with consistent 9 AM-5 PM active periods. Weekend usage minimal.
predictedIdleEnergyUsage
​number

Predicted average power consumption during idle periods in watts based on historical data

Example: 12.3
totalNumberOfIdleHours
​number

Total count of hours identified as idle or low-usage periods across the analysis timeframe

Example: 84
averageUsagePerDay
​number

Average daily power consumption in watts calculated over the analyzed time period

Example: 42.7
flags
​string[]

Array of flags highlighting anomalies, data gaps, or notable behavioral patterns detected by AI

Example: ["Insufficient data for Tuesday","Constant usage detected on Saturday","Casual/WFH usage pattern on Friday"]
​object

EcoGuard suitability and suggested configuration for this device

deviceNumber
​number

The device number assigned to the device

Example: 42
tier
​string · enum

Recommendation tier used: "rule-based" (fast, ~5ms), "clustering" (medium, ~10ms), or "llm" (slow, ~60s). Indicates the analysis method used.

Enum values:
rule-based
clustering
llm
Example: rule-based
confidenceScore
​number

Confidence score (0-1) indicating pattern clarity. Higher score = simpler, more predictable pattern.

Example: 0.95

BulkPlugRecommendationsResponseDto

​object · required

Map of plug IDs to their AI-generated ON/OFF schedule recommendations. Each key is a plug ID, and the value contains the complete recommendation data including weekday schedules, summary, and metrics.

bulkSummary
​string · required

AI-generated overall summary analyzing all plugs together. Identifies common patterns (e.g., "Working hours appear to be 9 AM - 6 PM across all devices"), optimization opportunities (e.g., "Coffee machine only used on Tuesdays and Thursdays"), cross-device insights, and collective energy-saving recommendations.

Example: Overall Pattern: Most devices show consistent weekday usage from 8 AM to 6 PM, suggesting office hours. The coffee machine is only active on Tuesday and Thursday mornings (7:30-9:00 AM), indicating team meeting days. Weekend usage is minimal across all devices. Optimization Opportunity: By implementing the recommended schedules, you could save an estimated 156 kWh per week (23% reduction). The AC unit has the highest optimization potential with 45 idle hours detected.

ReportFormat

string · enum
Enum values:
pdf
docx
json
excel

StartIterationDto

name
​string

Optional name for this iteration, e.g. "Pilot", "Full Rollout"

UpdateIterationNameDto

name
​string · required

New name for the iteration

IterationSummaryDto

iterationNumber
​number · required
index
​number · required

Zero-based index in the iterations array

status
​string · enum · required
Enum values:
PENDING
IN_PROGRESS
COMPLETED
isActive
​boolean · required
name
​string
startedAt
​string · date-time
completedAt
​string · date-time

IterationListResponseDto

​object[] · required
total
​number · required
activeIterationIndex
​number · required

ReportBlockKind

string · enum
Enum values:
NARRATIVE
LIST
KPI
CHART
TABLE
NOTE
PANEL
MANUAL

ReportSectionCatalogDto

id
​string · required
title
​string · required
description
​string · required

What this section covers, one line.

kind
​string · enum · required
Enum values:
NARRATIVE
LIST
KPI
CHART
TABLE
NOTE
PANEL
MANUAL
chartOrFigure
​boolean · required

True when the section renders a computed figure rather than prose, so it cannot be reworded by an instruction.

requires
​string

What the data must contain for this section to appear. Show it greyed out rather than letting someone pick a section that silently vanishes.

Example: a comparable prior period

ReportSelectorType

string · enum
Enum values:
SYSTEM
TENANT
ZONE
ROOM
DEVICE

ReportSelectorLabelDto

type
​string · enum · required
Enum values:
SYSTEM
TENANT
ZONE
ROOM
DEVICE
id
​string · required
name
​string

Undefined when the entity has since been deleted.

ReportWindowKind

string · enum
Enum values:
RELATIVE
ABSOLUTE

RELATIVE re-resolves against the clock each time the report is generated; ABSOLUTE pins it to one period.

ReportWindowDto

kind
​string · enum · required

RELATIVE re-resolves against the clock each time the report is generated; ABSOLUTE pins it to one period.

Enum values:
RELATIVE
ABSOLUTE
Example: RELATIVE
days
​number

Days back from now. Required for RELATIVE, at most 60.

Example: 30
from
​string · date-time

First instant covered (ISO 8601). Required for ABSOLUTE.

Example: 2026-06-01T00:00:00.000Z
till
​string · date-time

Last instant covered (ISO 8601). Required for ABSOLUTE.

Example: 2026-06-30T00:00:00.000Z

EnergyReportSummaryDto

id
​string · required

Report id

name
​string · required

Name the reader gave it

​object[] · required

What the report covers, with each entity’s current name

​object · required
sectionCount
​number · required

How many sections the reader curated. 0 means the default set.

Example: 8
updatedAt
​string · date-time · required
createdAt
​string · date-time · required
latestRunId
​string

Most recent run. Absent until the report is generated.

lastGeneratedAt
​string · date-time

When the report was last generated

ReportSelectorDto

type
​string · enum · required
Enum values:
SYSTEM
TENANT
ZONE
ROOM
DEVICE
Example: ROOM
id
​string · required

Id of the entity at that level

Example: 64b7f1e6f9c9d4e5b8a9f7c3

CreateEnergyReportDto

name
​string · required

Name the reader gives this report.

Example: Campus Q3 review
​object[] · required

What the report covers. Selectors are unioned, and a room or zone stays a room or zone — the devices behind it are resolved fresh each time the report is generated.

​object · required

Period the report covers.

brief
​string

What this report is for, in your own words. Steers both the proposed outline and the writing.

Example: Quarterly review for the building owners, who are deciding whether to fund the chiller replacement.
language
​string

Language to write the report in, as a BCP 47 tag (e.g. "en", "zh-Hans", "ms"). Defaults to English.

Example: zh-Hans

EcovoltEntityType

string · enum
Enum values:
SYSTEM
TENANT
ZONE
ROOM
PLUG
MCB
ENV_SENSOR
AIRCON_CONTROL

The entity type to query

EcovoltPanelScopeDto

entityType
​string · enum · required

The entity type to query

Enum values:
SYSTEM
TENANT
ZONE
ROOM
PLUG
MCB
ENV_SENSOR
AIRCON_CONTROL
entityIds
​string[] · required

One or more MongoDB ObjectIds of the target entities. Hierarchy types (SYSTEM, TENANT, ZONE, ROOM) require exactly one. Device types (PLUG) accept 1–10 to compare multiple devices on the same panel.

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]

EcovoltMetric

string · enum
Enum values:
ENERGY_KWH_HOURLY
ENERGY_KWH_DAILY
ENERGY_KWH_TO_DATE
COST_DAILY
COST_HOURLY
COST_MONTHLY_TO_DATE
DEVICE_TYPE_BREAKDOWN
DEVICE_STATUS_BREAKDOWN

The measurement to plot.

ChartType

string · enum
Enum values:
LINE
BAR
PIE
AREA
STAT
JSON
TABLE
BUTTON

How to draw it.

EcovoltTimeRange

string · enum
Enum values:
LAST_1H
LAST_6H
LAST_24H
LAST_7D
LAST_30D
TODAY
THIS_MONTH

How far back to query. Omit to let the report’s own period choose.

ReportPanelSpecDto

​object · required

What to query: an entity type and the ids at that level.

metric
​string · enum · required

The measurement to plot.

Enum values:
ENERGY_KWH_HOURLY
ENERGY_KWH_DAILY
ENERGY_KWH_TO_DATE
COST_DAILY
COST_HOURLY
COST_MONTHLY_TO_DATE
DEVICE_TYPE_BREAKDOWN
DEVICE_STATUS_BREAKDOWN
chartType
​string · enum · required

How to draw it.

Enum values:
LINE
BAR
PIE
AREA
STAT
JSON
TABLE
BUTTON
timeRange
​string · enum

How far back to query. Omit to let the report’s own period choose.

Enum values:
LAST_1H
LAST_6H
LAST_24H
LAST_7D
LAST_30D
TODAY
THIS_MONTH

ReportChartType

string · enum
Enum values:
LINE
AREA
BAR
DONUT
HEATMAP

How to draw a PANEL or MANUAL section.

ReportChartPointDto

x
​string · required

Category or timestamp for this point

Example: 2026-08-11
y
​number · required

ReportChartSeriesDto

label
​string · required
​object[] · required
unit
​string

ReportOutlineEntryDto

id
​string · required

A catalog section id (see GET report-sections), or your own id for a section you are adding.

Example: executive-summary
title
​string

Heading to use. Required for a section you are adding; overrides the catalog title otherwise.

Example: Chiller performance
kind
​string · enum

Required for a section you are adding. NARRATIVE and LIST are written from instruction; PANEL draws a dashboard panel; MANUAL plots figures you supply.

Enum values:
NARRATIVE
LIST
KPI
CHART
TABLE
NOTE
PANEL
MANUAL
instruction
​string

What to write here, in plain English. Required for a section you are adding — without it the section is an empty heading.

Example: Compare the two chillers and say which is carrying the load.
panel
​string

An existing dashboard panel to draw. A PANEL section gives either this or panelSpec, never both.

​object

A chart built here, belonging to this report alone rather than the dashboard. A PANEL section gives either this or panel, never both.

chartType
​string · enum

How to draw a PANEL or MANUAL section.

Enum values:
LINE
AREA
BAR
DONUT
HEATMAP
​object[]

Figures to plot. Required for a MANUAL section — numbers you type in yourself, such as a target line or a utility-bill total we do not meter. They are part of the report, so every generation draws the same chart.

unit
​string

Unit for a MANUAL section’s figures.

ReportRunStatus

string · enum
Enum values:
GENERATING
COMPLETE
FAILED

EnergyReportDailyPointDto

date
​string · required

Calendar day in the system timezone (YYYY-MM-DD)

Example: 2026-07-28
kWh
​number · required

Energy consumed that day

Example: 271.4

EnergyReportCategorySliceDto

kWh
​number · required
percentOfTotal
​number · required

Share of the window total, 0-100

Example: 37.2
deviceCount
​number · required

Devices in this group

Example: 8
category
​string · required

Plug category, MCB measurement type, or device type — whichever the devices in this group are classified by

Example: PANTRY_APPLIANCES

EnergyReportDeviceRowDto

deviceId
​string · required
name
​string · required
deviceType
​string · required
path
​string · required

Frontend route for the "view" action

Example: /system/plugs/64b7f1e6f9c9d4e5b8a9f7c3
totalKWh
​number · required

Energy over the window

Example: 184.6
avgDailyKWh
​number · required
percentOfTotal
​number · required

Share of the window total, 0-100

Example: 19
category
​string

Classification the device is grouped by, when it has one

Example: WATERCOOLER
​object[]

Per-day series for the row sparkline. Omitted when the device reported on fewer than two days.

trendPercent
​number

Percent change between the first and second half of the window. Omitted when either half has no data, so a flat "0%" is never invented.

Example: -12.4

EnergyReportHourPointDto

hour
​number · required

Hour of day, 0-23

Example: 14
avgKWh
​number · required

Mean energy consumed in this hour across the days observed

Example: 18.2

EnergyReportWeekSplitDto

weekdayAvgKWh
​number · required
weekendAvgKWh
​number · required
weekendReductionPercent
​number · required

How much lower the weekend average is, in percent. Negative when weekends consume more.

Example: 40.1

EnergyReportWeekdayPointDto

weekday
​number · required

0 = Sunday through 6 = Saturday

Example: 2
avgKWh
​number · required
sampleDays
​number · required

Days of this weekday observed

Example: 4

EnergyReportDeviceTypeSliceDto

kWh
​number · required
percentOfTotal
​number · required

Share of the window total, 0-100

Example: 37.2
deviceCount
​number · required

Devices in this group

Example: 8
deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG

EnergyReportHeatmapCellDto

weekday
​number · required

Day of week, 0 = Sunday through 6 = Saturday

Example: 2
hour
​number · required

Hour of day, 0-23

Example: 14
avgKWh
​number · required

Mean energy in this weekday/hour slot across the window

Example: 21.4
sampleDays
​number · required

How many days contributed to this cell — low counts are weak evidence

Example: 4

EnergyReportDeviceTypeHeatmapDto

deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: MCB
totalKWh
​number · required

Energy this type accounts for across the window

Example: 512.3
​object[] · required

EnergyReportAnomalyDayDto

date
​string · required
kWh
​number · required
sigma
​number · required

Distance from the window mean in standard deviations. Negative for unusually low days.

Example: 2.7

EnergyReportDeviceMoverDto

deviceId
​string · required
name
​string · required
previousAvgDailyKWh
​number · required

Daily average in the preceding window

Example: 1.62
currentAvgDailyKWh
​number · required

Daily average in this window

Example: 2.6
changePercent
​number · required

Change in daily average, percent. Negative means it improved.

Example: 60.5

EnergyReportComparisonDto

previousTotalKWh
​number · required

Total for the preceding window

Example: 901.2
previousDaysObserved
​number · required

Days of data in the preceding window

Example: 29
avgDailyChangePercent
​number · required

Change in average daily consumption, in percent. Compared per-day rather than per-total so an unequal number of observed days does not read as a change in behaviour.

Example: -9.8

EnergyReportCostDto

totalCost
​number · required

Cost of the window in dollars

Example: 242.75
avgDailyCost
​number · required
costPerKWh
​number · required

Rate applied, in cents per kWh

Example: 29.88
rateSource
​string · enum

Scope level that supplied the rate. Null when the national default was used.

Enum values:
SYSTEM
TENANT
ZONE
ROOM
NATIONAL_DEFAULT
Example: ZONE

EnergyReportMetricsDto

periodStart
​string · date-time · required
periodEnd
​string · date-time · required
daysObserved
​number · required

Distinct days that actually carried data. Falls short of the window length when devices were offline — read every average against this, not against the window.

Example: 30
deviceCount
​number · required

Devices in scope

Example: 32
reportingDeviceCount
​number · required

Devices that reported at least one day. A gap against deviceCount is itself a finding.

Example: 30
totalKWh
​number · required
avgDailyKWh
​number · required

totalKWh over daysObserved

Example: 27.08
peakDayDate
​string

Heaviest day in the window (YYYY-MM-DD). Omitted when nothing reported.

Example: 2026-08-11
peakDayKWh
​number
​object[]

Daily totals for the trend chart. Omitted when nothing reported.

​object[]

Donut wedges, largest first. Omitted when every device falls in one category — a single-wedge donut says nothing.

​object[]

High-load device table, heaviest first. Omitted when no device reported.

topThreeSharePercent
​number

Share of total drawn by the three heaviest devices, 0-100. Omitted below five reporting devices, where "top 3" is most of the estate anyway.

Example: 45.3
devicesWithSchedule
​number

Devices with a schedule configured. Omitted when none has one — nothing to report compliance against.

Example: 12
​object[]

Mean consumption by hour of day. Omitted when no hourly records exist for the window.

peakHour
​number

Busiest hour of day, 0-23. Present whenever hourlyProfile is.

Example: 14
​object
​object[]

Average consumption per day of the week. Omitted when the window covered only one weekday.

​object[]

Energy split by hardware type (PLUG, MCB, ...), largest first. Distinct from categoryBreakdown, which groups by what a device is for. Omitted when the entity has only one device type.

measurementOverlap
​boolean

True when both PLUG and MCB devices are in scope. An MCB meters a whole circuit and the plugs on that circuit meter the same electricity again, so totalKWh double counts by an unknown amount and every percentOfTotal is diluted. Present only when the overlap exists — surface a caveat and prefer the per-type figures over the combined total.

Example: true
​object[]

Per-device-type weekday x hour grids, for reading plug load against circuit load. Omitted unless at least two device types each have a week of hourly data.

​object[]

Weekday x hour-of-day grid. Sparse — only observed cells are present, and an absent cell means never measured, not zero. Omitted below a week of data, where the grid would be mostly holes.

baseloadKWh
​number

Always-on load: each fully-reported day's quietest hour held for 24 hours, summed. This is the energy that never switches off, and the ceiling on what scheduling alone can save.

Example: 214.8
baseloadSharePercent
​number

baseloadKWh as a share of the window total, 0-100

Example: 26.4
offHoursKWh
​number

Energy consumed outside business hours (see BUSINESS_HOUR_START/END) plus all weekend energy. The headline number for scheduling work.

Example: 388.1
offHoursSharePercent
​number

offHoursKWh as a share of the window total, 0-100

Example: 47.8
​object[]

Days more than two standard deviations from the window mean, strongest first, for annotating the trend line. Omitted when the window is too short for a standard deviation to mean anything, or when no day qualifies.

​object[]

Devices whose daily average moved most against the preceding window, largest absolute change first. Present only alongside comparison.

​object
​object
carbonKg
​number

Scope 2 emissions for the window, in kg CO2e, at the grid factor in CARBON_KG_PER_KWH. Omitted when nothing was consumed.

Example: 341.2

ReportBlockAuthor

string · enum
Enum values:
AI
USER

ReportBlockCitationDto

text
​string · required

The figure exactly as it appears in the prose

Example: 340.2 kWh
metricKey
​string · required

Field of the run’s metrics the figure came from

Example: totalKWh
blockId
​string

Block that renders that figure, when one is on the report. The client scrolls there on click.

Example: kpi-total-kwh

EnergyReportBlockDto

id
​string · required
kind
​string · enum · required
Enum values:
NARRATIVE
LIST
KPI
CHART
TABLE
NOTE
PANEL
MANUAL
authoredBy
​string · enum · required
Enum values:
AI
USER
x
​number · required

Column offset

Example: 6
y
​number · required

Row offset

Example: 14
w
​number · required

Width in columns

Example: 6
h
​number · required

Height in grid rows

Example: 17
hidden
​boolean · required

Removed by the reader, kept so it can come back

Example: false
title
​string
body
​string

Markdown body. NARRATIVE and NOTE blocks.

items
​string[]

Bullet lines. LIST blocks.

chartType
​string · enum

How to draw a PANEL or MANUAL section.

Enum values:
LINE
AREA
BAR
DONUT
HEATMAP
metricKey
​string

Field of the run's metrics this block renders

Example: dailySeries
​object[]

The block’s own data: a PANEL block’s resolved series, or the numbers a reader typed into a MANUAL block. Frozen at generation and never re-queried.

panel
​string

Dashboard panel this block was resolved from.

unit
​string

Unit the series is measured in.

periodStart
​string · date-time

First instant this block’s series covers. Stored, never re-derived — a chart drawn over June still says June when opened in September.

periodEnd
​string · date-time

Last instant this block’s series covers.

unavailableReason
​string

Why this block has no series, when it was asked for but could not be drawn.

​object[]

Figures this block’s prose quotes, each traced to the metric it came from. Derived server-side — sent back unchanged.

ReportSuggestionKind

string · enum
Enum values:
ENERGY_ACTION
REPORT_IMPROVEMENT

Whether this is an action on the site or an edit to the report

ReportSuggestionPriority

string · enum
Enum values:
HIGH
MEDIUM
LOW

ReportSuggestionStatus

string · enum
Enum values:
OPEN
ACCEPTED
DISMISSED

ReportSuggestionDto

id
​string · required
kind
​string · enum · required

Whether this is an action on the site or an edit to the report

Enum values:
ENERGY_ACTION
REPORT_IMPROVEMENT
Example: ENERGY_ACTION
title
​string · required

One-line statement of what to do

Example: Schedule the Level 3 water coolers off between 19:00 and 07:00
detail
​string · required

What to do and why, citing the figures it is drawn from

Example: Those four plugs draw a combined 0.9 kW overnight with no occupancy, which is 14% of the period total.
priority
​string · enum · required
Enum values:
HIGH
MEDIUM
LOW
Example: HIGH
status
​string · enum · required
Enum values:
OPEN
ACCEPTED
DISMISSED
Example: OPEN
blockId
​string

Block this is pinned to. Absent when it proposes something the report does not cover yet.

Example: usage-trends
anchorText
​string

Excerpt of the block this refers to, so the comment can anchor to the sentence rather than the whole section.

Example: especially on Tuesdays and Thursdays
appliedBlockId
​string

Block the acceptance wrote to. ACCEPTED suggestions only.

resolvedAt
​string · date-time

When it was accepted or dismissed

ReportRunProvenanceDto

model
​string · required

Model id that wrote the narrative

Example: gpt-5.4-2026-03-05
promptVersion
​string · required

Version of the report prompt. Bumped whenever the prompt changes in a way that changes output.

Example: 2026-09-15
writingStyleHash
​string

Digest of the author’s Writing Style at generation time. Not the style itself — enough to tell that it changed, without copying a personal document onto every run.

Example: 9f2b1c4e
tokensUsed
​number

Tokens spent on the narrative.

Example: 18420
costCents
​number

Estimated cost of the narrative in cents, at the rates in OPENAI_MODEL_PRICING.

Example: 12.4

ReportFidelityDto

figuresChecked
​number · required

Figures quoted in the narrative

Example: 34
unsupported
​string[] · required

Figures the narrative states that do not appear in the metrics, with the sentence each came from. Empty is the expected result.

passed
​boolean · required

True when every figure in the narrative traces to a computed one.

Example: true

EnergyReportRunDto

id
​string · required

Run id

reportId
​string · required

Report this run generated

status
​string · enum · required
Enum values:
GENERATING
COMPLETE
FAILED
deviceIds
​string[] · required

Devices the selectors resolved to at generation time — what the figures were computed over, whatever the rooms hold now.

periodStart
​string · date-time · required
periodEnd
​string · date-time · required
​object[] · required
​object[] · required

Proposals made against this run, each open until accepted or dismissed.

createdAt
​string · date-time · required
updatedAt
​string · date-time · required
​object
​object

What produced this run, beyond the data.

​object

Whether every figure the narrative states traces back to a computed one.

error
​string

Why the run failed. FAILED runs only.

EnergyReportDto

id
​string · required

Report id

systemId
​string · required

System the report belongs to

name
​string · required

Name the reader gave it

​object[] · required

What the report covers, with each entity’s current name

​object · required
​object[] · required

The table of contents, in reading order. Empty means the default set of sections.

updatedAt
​string · date-time · required
createdAt
​string · date-time · required
brief
​string

What this report is for, in the reader’s own words.

language
​string

Language the report is written in, as a BCP 47 tag.

Example: zh-Hans
​object

Latest run, or the one asked for. Absent until the report is generated.

UpdateEnergyReportDto

name
​string

New name

Example: Q3 final
​object[]

Replaces what the report covers. Existing runs keep the devices they were computed over.

​object

Replaces the period the report covers.

brief
​string

What this report is for, in your own words. Steers both the proposed outline and the writing.

Example: Quarterly review for the building owners, who are deciding whether to fund the chiller replacement.
language
​string

Language to write the report in, as a BCP 47 tag (e.g. "en", "zh-Hans", "ms"). Defaults to English.

Example: zh-Hans

QuestionAnswerDto

question
​string · required

The question as it was put to them

Example: When the news is bad, what do you do?
answer
​string · required

What they answered, in their own words

Example: Say it plainly in the first sentence. No cushioning.

DraftReportOutlineDto

brief
​string

What the report is for, in their own words. Saved to the report so later generations keep the same intent.

Example: Quarterly review for the building owners, who are deciding whether to fund the chiller replacement.
​object[]

Answers to whatever else the client asked during setup.

ReportOutlineDto

​object[] · required

PreviewReportChartDto

​object · required
title
​string

Heading the section will carry. Used only for error messages here.

Example: Zone energy

ReportChartPreviewDto

​object[]

Absent when the chart could not be drawn — see unavailableReason.

unit
​string
periodStart
​string · date-time

The period the points actually cover.

periodEnd
​string · date-time
unavailableReason
​string

Why this chart cannot be drawn over the report’s period. Present instead of series — show it in the builder rather than letting someone add a section that will be empty.

SaveReportOutlineDto

​object[] · required

The table of contents in reading order. An empty array restores the default set of sections.

SaveReportBlockDto

id
​string · required
kind
​string · enum · required
Enum values:
NARRATIVE
LIST
KPI
CHART
TABLE
NOTE
PANEL
MANUAL
x
​number · required

Column offset

Example: 6
y
​number · required

Row offset

Example: 14
w
​number · required

Width in columns

Example: 6
h
​number · required

Height in grid rows

Example: 17
hidden
​boolean · required

Removed by the reader, kept so it can come back

Example: false
title
​string
body
​string

Markdown body. NARRATIVE and NOTE blocks.

items
​string[]

Bullet lines. LIST blocks.

chartType
​string · enum

How to draw a PANEL or MANUAL section.

Enum values:
LINE
AREA
BAR
DONUT
HEATMAP
metricKey
​string

Field of the run's metrics this block renders

Example: dailySeries
​object[]

Points for a chart the reader added. Ignored on a block the run already carries.

panel
​string

Dashboard panel a reader-added block is drawn from.

unit
​string

Unit a reader-added series is measured in.

SaveReportBlocksDto

​object[] · required

ReportRefineAction

string · enum
Enum values:
IMPROVE
ADD

Whether the highlighted text should be improved in place, or new content added around it

RefineReportBlockDto

blockId
​string · required

Id of the block to rewrite, as it appears on the run being read.

Example: usage-trends
action
​string · enum · required

Whether the highlighted text should be improved in place, or new content added around it

Enum values:
IMPROVE
ADD
Example: IMPROVE
blockContent
​string · required

Current full text of the block, used as the rewrite base

Example: Energy usage peaks during weekdays, especially on Tuesdays and Thursdays.
selectedText
​string

Excerpt the user highlighted. When omitted the whole block is treated as the target.

Example: especially on Tuesdays and Thursdays
instruction
​string

What the user wants changed or added, in their own words. Omit to let the model decide how to improve the excerpt.

Example: Explain why those two days are higher and quantify the gap.

RefineReportBlockResponseDto

blockId
​string · required

Block that was rewritten

Example: usage-trends
content
​string · required

Full replacement text for the block, with the requested change applied

Example: Energy usage peaks during weekdays, with Tuesday and Thursday running 18% above the weekly average because both days carry full lab occupancy.

AnalyseReportDto

instruction
​string

What the reader wants the analysis to focus on, in their own words. Omit for a general pass over the whole run.

Example: We are trying to cut weekend baseload. Focus on anything that runs outside office hours.

AnalyseReportResponseDto

​object[] · required

Every suggestion on the run — the ones just written plus any already settled — highest priority first.

ReportChatRole

string · enum
Enum values:
user
assistant

Who sent the message

ReportChatMessageDto

role
​string · enum · required

Who sent the message

Enum values:
user
assistant
Example: user
content
​string · required

Message text

Example: Why is Tuesday so much higher than the other weekdays?

ReportChatDto

​object[] · required

Conversation so far, oldest first, ending with the user turn to answer. Stateless — resend the history each turn.

ReportMetricChangeDto

key
​string · required
label
​string · required
unit
​string · required
before
​number · required
after
​number · required
changePercent
​number

Absent when the earlier figure was zero, so a share is meaningless.

Example: -8.4

ReportDiffDto

fromRunId
​string · required
toRunId
​string · required
fromPeriodStart
​string · date-time · required
toPeriodStart
​string · date-time · required
​object[] · required

Headline figures that moved by more than a couple of percent. A figure absent from either run is left out — absent means unknown, not zero.

sectionsAdded
​string[] · required

Sections the newer run has and the older did not

sectionsRemoved
​string[] · required

Sections the older run had and the newer does not

devicesAdded
​string[] · required

Devices that entered scope

devicesRemoved
​string[] · required

Devices that left scope

EnergyUsageRecommendationReportDto

​object[]

Array of AI-recommended schedule entries for Monday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Tuesday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Wednesday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Thursday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Friday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Saturday based on usage patterns

​object[]

Array of AI-recommended schedule entries for Sunday based on usage patterns

summary
​string

AI-generated summary explaining the recommended schedule and detected behavioral patterns

Example: Work-from-home behavior detected on weekdays with consistent 9 AM-5 PM active periods. Weekend usage minimal.
predictedIdleEnergyUsage
​number

Predicted average power consumption during idle periods in watts based on historical data

Example: 12.3
totalNumberOfIdleHours
​number

Total count of hours identified as idle or low-usage periods across the analysis timeframe

Example: 84
averageUsagePerDay
​number

Average daily power consumption in watts calculated over the analyzed time period

Example: 42.7
flags
​string[]

Array of flags highlighting anomalies, data gaps, or notable behavioral patterns detected by AI

Example: ["Insufficient data for Tuesday","Constant usage detected on Saturday","Casual/WFH usage pattern on Friday"]
​object

EcoGuard suitability and suggested configuration for this device

BulkPlugRecommendationsRequestDto

plugIds
​string[] · minItems: 1 · maxItems: 200 · required

Array of plug IDs to generate AI recommendations for. Minimum 1, maximum 200 plugs per request. For larger batches, split into multiple requests.

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012","507f1f77bcf86cd799439013"]

AscentDeviceOutcome

string · enum
Enum values:
suggested
already_optimal
unchanged
deferred_to_override
constant_usage
no_schedule
failed

What the run concluded for this device

AscentRunDevice

device
​string · required

Device analysed

deviceName
​string · required

Device name at run time

Example: Pantry AC
outcome
​string · enum · required

What the run concluded for this device

Enum values:
suggested
already_optimal
unchanged
deferred_to_override
constant_usage
no_schedule
failed
suggestion
​string

The suggestion this device produced, when the outcome is SUGGESTED.

deltaMinutes
​number

Signed ON-minutes the proposal would change. Positive = less ON time. Present whenever a schedule was derived, including outcomes that wrote no suggestion — that is how a near-miss stays visible.

Example: 45
confidenceScore
​number

Pattern confidence 0-1

Example: 0.82
reasons
​string[]

Short operator-facing reasons, same form as a suggestion

AscentRunResponseDto

_id
​string · required

Run ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
startedAt
​string · date-time · required

When the run started

Example: 2026-06-01T20:00:00.000Z
finishedAt
​string · date-time · required

When the run finished

Example: 2026-06-01T20:04:11.000Z
devicesWalked
​number · required

Devices walked

Example: 120
suggested
​number · required

Devices that produced a suggestion

Example: 12
alreadyOptimal
​number · required

Devices whose schedule already matched demand

Example: 96
unchanged
​number · required

Devices whose analysis matched the previous proposal

Example: 4
deferredToOverride
​number · required

Devices skipped because a manual override was mid-review

Example: 2
constantUsage
​number · required

Devices skipped as constant load

Example: 5
noSchedule
​number · required

Devices whose data supported no schedule

Example: 1
failed
​number · required

Devices whose analysis threw

Example: 0
​object[] · required

Every device row matching the filters. The summary counts above always cover the whole run, filters or not.

AscentRunDateDto

runId
​string · required
startedAt
​string · date-time · required
devicesWalked
​number · required

LatestAscentRunResponseDto

​object[] · required

Every run this System has, newest first — the date picker. Fetch one by id rather than loading them all.

run
​null | object

The most recent run, or null when the weekly cron has not covered this System yet. Null is not an error — it distinguishes "never ran" from "ran and found nothing".

AscentRunSummaryResponseDto

_id
​string · required

Run ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
startedAt
​string · date-time · required

When the run started

Example: 2026-06-01T20:00:00.000Z
finishedAt
​string · date-time · required

When the run finished

Example: 2026-06-01T20:04:11.000Z
devicesWalked
​number · required

Devices walked

Example: 120
suggested
​number · required

Devices that produced a suggestion

Example: 12
alreadyOptimal
​number · required

Devices whose schedule already matched demand

Example: 96
unchanged
​number · required

Devices whose analysis matched the previous proposal

Example: 4
deferredToOverride
​number · required

Devices skipped because a manual override was mid-review

Example: 2
constantUsage
​number · required

Devices skipped as constant load

Example: 5
noSchedule
​number · required

Devices whose data supported no schedule

Example: 1
failed
​number · required

Devices whose analysis threw

Example: 0

GetAscentRunsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Runs in the requested window, newest first. Counts only — fetch a single run for its per-device rows.

WritingStyleDto

prompted
​boolean · required

True once the account has been offered the first-run step, whether they wrote a profile or declined. The client shows the setup flow only while this is false, so declining sticks.

Example: false
writingStyle
​string

Freeform markdown describing how this account writes. Null until they write one.

Example: Blunt. Short sentences. Never say "sustainable" — we cannot back it.

UpdateWritingStyleDto

writingStyle
​string · required

Freeform markdown, at most 4000 characters. No required sections — three sentences is a valid profile. Send an empty string to clear it.

Example: Blunt. Short sentences. Always put the estimated saving next to a recommendation.

DraftWritingStyleDto

samples
​string[]

Things the account holder has actually written — an email, a memo, a past report. Their own words matter more than the length.

​object[]

Answers to whatever the client asked during setup. The questions are not defined here, so the wizard can change without a backend deploy.

WritingStyleDraftDto

writingStyle
​string · required

Markdown for the reader to edit and then save through PUT /writing-style/me.

PanelType

string · enum
Enum values:
EXTERNAL
ECOVOLT
BUILTIN

HttpMethod

string · enum
Enum values:
GET
POST
PUT
PATCH
DELETE

HTTP method for the proxy request

TransformType

string · enum
Enum values:
EXTRACT
SELECT
RENAME
FIELDS
FILTER
SORT
LIMIT
REDUCE

Type of transformation. Raw JSON types: EXTRACT, SELECT, RENAME, FIELDS, FILTER, SORT, LIMIT, REDUCE. DataFrame types: DF_RENAME_FIELDS, DF_ORGANIZE_FIELDS, DF_SELECT_FIELDS, DF_FILTER_FIELDS_BY_NAME, DF_FILTER_BY_VALUE, DF_FILTER_BY_QUERY, DF_CALCULATE, DF_CUMULATIVE, DF_REDUCE, DF_GROUP_BY, DF_JOIN, DF_MERGE, DF_CONCATENATE, DF_TIME_SERIES_LONG_TO_WIDE, DF_TIME_SERIES_WIDE_TO_LONG, DF_TIME_SERIES_TO_ROWS, DF_TIME_SERIES_TO_TABLE, DF_PIVOT, DF_ROWS_TO_FIELDS, DF_LABELS_TO_FIELDS, DF_LOOKUP, DF_CONFIG_FROM_QUERY, DF_REGRESSION, DF_EXTRACT_LABELS.

TransformerResponseDto

_id
​string · required

Unique transformer identifier

Example: 64b8c3d2e1f4a2b3c4d5e6f7
panel
​string · required

Panel ID this transformer belongs to

Example: 64b8c3d2e1f4a2b3c4d5e6f8
name
​string · required

Human-readable name of the transformer

Example: Calculate Profit Margin
type
​string · enum · required

Type of transformation. Raw JSON types: EXTRACT, SELECT, RENAME, FIELDS, FILTER, SORT, LIMIT, REDUCE. DataFrame types: DF_RENAME_FIELDS, DF_ORGANIZE_FIELDS, DF_SELECT_FIELDS, DF_FILTER_FIELDS_BY_NAME, DF_FILTER_BY_VALUE, DF_FILTER_BY_QUERY, DF_CALCULATE, DF_CUMULATIVE, DF_REDUCE, DF_GROUP_BY, DF_JOIN, DF_MERGE, DF_CONCATENATE, DF_TIME_SERIES_LONG_TO_WIDE, DF_TIME_SERIES_WIDE_TO_LONG, DF_TIME_SERIES_TO_ROWS, DF_TIME_SERIES_TO_TABLE, DF_PIVOT, DF_ROWS_TO_FIELDS, DF_LABELS_TO_FIELDS, DF_LOOKUP, DF_CONFIG_FROM_QUERY, DF_REGRESSION, DF_EXTRACT_LABELS.

Enum values:
EXTRACT
SELECT
RENAME
FIELDS
FILTER
SORT
LIMIT
REDUCE
enabled
​boolean · required

Whether this transformer is enabled in the pipeline. Disabled transformers are skipped.

Example: true
order
​number · required

Execution order within the pipeline. Lower numbers execute first.

Example: 0
createdAt
​string · date-time · required

Timestamp when the transformer was created

Example: 2026-03-14T10:30:00.000Z
updatedAt
​string · date-time · required

Timestamp when the transformer was last updated

Example: 2026-03-14T10:30:00.000Z
config
​object

Configuration object whose shape depends on the transform type. See CreateTransformerDto config documentation for schemas per type.

Example: {"outputField":"profit","operation":"subtract","fieldA":"revenue","fieldB":"cost"}

ProxyCallUsageResponseDto

_id
​string · required

Usage document ID

system
​string · required

System ID

method
​string · enum · required

HTTP method used

Enum values:
GET
POST
PUT
PATCH
DELETE
url
​string · required

Final URL used for the proxy call

statusCode
​number · required

HTTP status code from external source

Example: 200
authorization
​boolean · required

Whether Authorization header was present

createdAt
​string · date-time · required
updatedAt
​string · date-time · required
responseTimeMs
​number

Response time in milliseconds

Example: 150
dataSource
​string

Related DataSource ID

dashboard
​string

Related Dashboard ID

panel
​string

Related Panel ID

body
​object

Custom body for the proxy request (for POST/PUT)

ExternalPanelResponseDto

_id
​string · required

Panel ID

system
​string · required

System ID

title
​string · required

Title of the panel

panelType
​string · enum · required
Enum values:
EXTERNAL
ECOVOLT
BUILTIN
Default: EXTERNAL
chartType
​string · enum · required

Type of chart

Enum values:
LINE
BAR
PIE
AREA
STAT
JSON
TABLE
BUTTON
dataSource
​string · required

Data source ID or populated object

createdAt
​string · date-time · required
updatedAt
​string · date-time · required
description
​string

Description of the panel

colorPalette
​string[]

Color palette for chart series

endpoint
​string

API endpoint path

httpMethod
​string · enum

HTTP method for the proxy request

Enum values:
GET
POST
PUT
PATCH
DELETE
headers
​object

Custom headers for the proxy request

xAxisField
​string

X-Axis field

yAxisField
​string

Y-Axis field

​object[]

Populated transformers linked to this panel

options
​object

Visualization options

​object[]

Recent proxy call usages for this panel

body
​object

Custom body for the panel request (for POST/PUT)

GetExternalPanelsResponseDto

​object[] · required

External panels matching the query

total
​number · required

Total number of results

Example: 100

GetProxyUsagesResponseDto

​object[] · required

Proxy call usage rows matching the query

total
​number · required

Total number of results

Example: 100

DebugSnapshotDto

transformType
​string · required

Transform type applied at this step

order
​number · required

Execution order of this step

data
​object · required

Data state after this transform step

ProxyDebugResponseDto

data
​object · required

The final transformed data

​object[]

Debug snapshots from the compute service for each transform step (only present when debug=true)

PanelThresholdDto

value
​number

Threshold value

Example: 100
color
​string

Threshold color

Example: #ff0000
label
​string

Threshold label

Example: High

PanelVisualizationOptionsDto

colors
​object

Color mappings

Example: {"voltage":"#00ff00"}
yMin
​number

Y-axis minimum value

yMax
​number

Y-axis maximum value

showLegend
​boolean

Whether to show legend

showGrid
​boolean

Whether to show grid lines

​object[]

Thresholds for gauge/alert visualizations

unit
​string

Unit label

Example: kWh
decimals
​number

Number of decimal places

CreateExternalPanelDto

title
​string · required

Title of the panel

Example: System Voltage History
chartType
​string · enum · required

Type of chart

Enum values:
LINE
BAR
PIE
AREA
STAT
JSON
TABLE
BUTTON
dataSource
​string · required

ID of the Data Source

description
​string

Description of the panel

Example: Displays voltage trends over the last 24 hours
Default:
colorPalette
​string[]

Color palette for chart series. The frontend cycles through these colors.

Example: ["#FF6384","#36A2EB","#FFCE56","#4BC0C0"]
Default: []
endpoint
​string

API endpoint path appended to the data source base URL

Example: /api/v1/energy?range=1h
httpMethod
​string · enum

HTTP method for the proxy request

Enum values:
GET
POST
PUT
PATCH
DELETE
Default: GET
headers
​object

Custom headers to include in the proxy request

Example: {"X-Custom-Header":"value"}
xAxisField
​string

X-Axis field name

Example: time
yAxisField
​string

Y-Axis field name

Example: value
​object

Visualization options

body
​object

Custom body for the panel request (for POST/PUT)

UpdateExternalPanelDto

title
​string

Title of the panel

Example: System Voltage History
description
​string

Description of the panel

Example: Displays voltage trends over the last 24 hours
Default:
colorPalette
​string[]

Color palette for chart series. The frontend cycles through these colors.

Example: ["#FF6384","#36A2EB","#FFCE56","#4BC0C0"]
Default: []
chartType
​string · enum

Type of chart

Enum values:
LINE
BAR
PIE
AREA
STAT
JSON
TABLE
BUTTON
dataSource
​string

ID of the Data Source

endpoint
​string

API endpoint path appended to the data source base URL

Example: /api/v1/energy?range=1h
httpMethod
​string · enum

HTTP method for the proxy request

Enum values:
GET
POST
PUT
PATCH
DELETE
Default: GET
headers
​object

Custom headers to include in the proxy request

Example: {"X-Custom-Header":"value"}
xAxisField
​string

X-Axis field name

Example: time
yAxisField
​string

Y-Axis field name

Example: value
​object

Visualization options

body
​object

Custom body for the panel request (for POST/PUT)

EcovoltPanelResponseDto

_id
​string · required

Panel ID

system
​string · required

System ID

title
​string · required

Title of the panel

chartType
​string · enum · required

How to draw it.

Enum values:
LINE
BAR
PIE
AREA
STAT
JSON
TABLE
BUTTON
panelType
​string · enum · required
Enum values:
EXTERNAL
ECOVOLT
BUILTIN
Default: ECOVOLT
​object · required
metric
​string · enum · required

The measurement to plot.

Enum values:
ENERGY_KWH_HOURLY
ENERGY_KWH_DAILY
ENERGY_KWH_TO_DATE
COST_DAILY
COST_HOURLY
COST_MONTHLY_TO_DATE
DEVICE_TYPE_BREAKDOWN
DEVICE_STATUS_BREAKDOWN
createdAt
​string · date-time · required
updatedAt
​string · date-time · required
description
​string

Description of the panel

colorPalette
​string[]

Color palette

timeRange
​string · enum

How far back to query. Omit to let the report’s own period choose.

Enum values:
LAST_1H
LAST_6H
LAST_24H
LAST_7D
LAST_30D
TODAY
THIS_MONTH

GetEcovoltPanelsResponseDto

​object[] · required

Ecovolt panels matching the query

total
​number · required

Total number of results

Example: 100

EcovoltDataPointDto

value
​object · required

The measured value. Null when the device does not report this metric (e.g. AIRCON_AMBIENT_TEMPERATURE_C on a non-Pro unit).

timestamp
​string · date-time

Timestamp for time-series data points. Absent for stat metrics (e.g. ENERGY_KWH_TO_DATE).

EcovoltDataSeriesDto

label
​string · required

Human-readable series label (device name, entity name, etc.)

entityId
​string · required

MongoDB ObjectId string of the entity this series represents

entityType
​string · enum · required

The entity type this series represents

Enum values:
SYSTEM
TENANT
ZONE
ROOM
PLUG
MCB
ENV_SENSOR
AIRCON_CONTROL
kind
​string · enum · required

Whether this is a primary series or a comparison period series

Enum values:
primary
comparison
unit
​string · required

Unit label for the values in this series (e.g. kWh, °C, W)

​object[] · required

The data points in this series

EcovoltPanelDataResponseDto

metric
​string · enum · required

The metric that was resolved

Enum values:
ENERGY_KWH_HOURLY
ENERGY_KWH_DAILY
ENERGY_KWH_TO_DATE
COST_DAILY
COST_HOURLY
COST_MONTHLY_TO_DATE
DEVICE_TYPE_BREAKDOWN
DEVICE_STATUS_BREAKDOWN
unit
​string · required

Unit label for values in this response (e.g. kWh, °C)

​object[] · required

All series for this panel. Primary series have kind="primary", comparison period series have kind="comparison".

panelId
​string

Panel ID. Absent when resolving a preview of an unsaved panel.

timeRange
​string · enum

The time range used. Absent for stat metrics (e.g. ENERGY_KWH_TO_DATE) where the query always reflects the current month-to-date.

Enum values:
LAST_1H
LAST_6H
LAST_24H
LAST_7D
LAST_30D
TODAY
THIS_MONTH
resolvedAt
​string · date-time

Timestamp when this data was resolved

CreateEcovoltPanelDto

title
​string · required

Title of the panel

Example: System Energy This Week
chartType
​string · enum · required

Type of chart to render

Enum values:
LINE
BAR
PIE
AREA
STAT
JSON
TABLE
BUTTON
​object · required

Scope: system entity to query with optional device type filter

metric
​string · enum · required

The measurement to display

Enum values:
ENERGY_KWH_HOURLY
ENERGY_KWH_DAILY
ENERGY_KWH_TO_DATE
COST_DAILY
COST_HOURLY
COST_MONTHLY_TO_DATE
DEVICE_TYPE_BREAKDOWN
DEVICE_STATUS_BREAKDOWN
description
​string

Description of the panel

Default:
colorPalette
​string[]

Color palette for chart series

Example: ["#FF6384","#36A2EB"]
timeRange
​string · enum

How far back to query. Defaults to LAST_24H. Has no effect on stat metrics (TO_DATE, FORECAST, COST_MONTHLY_TO_DATE).

Enum values:
LAST_1H
LAST_6H
LAST_24H
LAST_7D
LAST_30D
TODAY
THIS_MONTH
Default: LAST_24H

UpdateEcovoltPanelDto

title
​string

Title of the panel

Example: System Energy This Week
description
​string

Description of the panel

Default:
colorPalette
​string[]

Color palette for chart series

Example: ["#FF6384","#36A2EB"]
chartType
​string · enum

Type of chart to render

Enum values:
LINE
BAR
PIE
AREA
STAT
JSON
TABLE
BUTTON
​object

Scope: system entity to query with optional device type filter

metric
​string · enum

The measurement to display

Enum values:
ENERGY_KWH_HOURLY
ENERGY_KWH_DAILY
ENERGY_KWH_TO_DATE
COST_DAILY
COST_HOURLY
COST_MONTHLY_TO_DATE
DEVICE_TYPE_BREAKDOWN
DEVICE_STATUS_BREAKDOWN
timeRange
​string · enum

How far back to query. Defaults to LAST_24H. Has no effect on stat metrics (TO_DATE, FORECAST, COST_MONTHLY_TO_DATE).

Enum values:
LAST_1H
LAST_6H
LAST_24H
LAST_7D
LAST_30D
TODAY
THIS_MONTH
Default: LAST_24H

ToggleAction

string · enum
Enum values:
ON
OFF

The action to perform: ON or OFF.

ToggleEcovoltPanelDto

entityId
​string · required

ID of the device entity to toggle. Must be one of the entity IDs in the panel scope.

Example: 64f1a2b3c4d5e6f7a8b9c0d1
action
​string · enum · required

The action to perform: ON or OFF.

Enum values:
ON
OFF

PanelGroup

string · enum
Enum values:
FEATURED
EXTERNAL

PanelCategory

string · enum
Enum values:
OVERVIEW
ENERGY
COST
INVENTORY
ELECTRICAL
AIR_QUALITY
WATER
STATUS

BuiltinWidgetKey

string · enum
Enum values:
STAT_TOTAL_ENERGY
STAT_TOTAL_BILL
STAT_DEVICE_STATUS
SCHEDULE_RECOMMENDATIONS
ENERGY_USAGE_BREAKDOWN
DEVICE_TYPE_BREAKDOWN
ENERGY_USAGE_CUSTOM_BREAKDOWN
TENANT_ENERGY_RANKING

BUILTIN entries only — the frontend registry key

PanelCatalogLayoutDto

w
​number · required

Default width in grid units

Example: 6
h
​number · required

Default height in grid units

Example: 8
minW
​number

Minimum width

minH
​number

Minimum height

PanelCatalogEntryDto

id
​string · required

Stable id for this catalog entry. Format: BUILTIN:.

Example: BUILTIN:STAT_TOTAL_ENERGY
panelType
​string · enum · required
Enum values:
EXTERNAL
ECOVOLT
BUILTIN
group
​string · enum · required
Enum values:
FEATURED
EXTERNAL
category
​string · enum · required
Enum values:
OVERVIEW
ENERGY
COST
INVENTORY
ELECTRICAL
AIR_QUALITY
WATER
STATUS
title
​string · required

Label shown in the picker

description
​string · required

One-line explanation shown under the label

icon
​string · required

Icon name for the frontend

allowedChartTypes
​string[] · required

Chart types this entry accepts. Empty for BUILTIN entries.

Enum values:
LINE
BAR
PIE
AREA
STAT
JSON
TABLE
BUTTON
allowedTimeRanges
​string[] · required

Time ranges this entry accepts. Empty for stat metrics (which reject a time range outright) and for BUILTIN entries.

Enum values:
LAST_1H
LAST_6H
LAST_24H
LAST_7D
LAST_30D
TODAY
THIS_MONTH
requiresEntitySelection
​boolean · required

Whether the user must pick target entities before the panel can be created, for the preselected scope. False for SYSTEM-scoped and builtin entries.

​object · required
available
​boolean · required

Whether this entry can be added to this system at any of its scopes

widgetKey
​string · enum

BUILTIN entries only — the frontend registry key

Enum values:
STAT_TOTAL_ENERGY
STAT_TOTAL_BILL
STAT_DEVICE_STATUS
SCHEDULE_RECOMMENDATIONS
ENERGY_USAGE_BREAKDOWN
DEVICE_TYPE_BREAKDOWN
ENERGY_USAGE_CUSTOM_BREAKDOWN
TENANT_ENERGY_RANKING
defaultConfig
​object

BUILTIN entries only — starting widget settings

disabledReason
​string

Why the entry is unavailable. Absent when available.

Example: No environment sensors on this system

PanelCatalogGroupDto

group
​string · enum · required
Enum values:
FEATURED
EXTERNAL
​object[] · required

Entries in this group, ordered by category then title

PanelCatalogResponseDto

​object[] · required

Every panel addable on this system, grouped server-side so two clients cannot disagree on ordering. Flat-list consumers can flatMap.

BuiltinPanelResponseDto

_id
​string · required

Panel ID

system
​string · required

System ID

title
​string · required

Title of the panel

panelType
​string · enum · required
Enum values:
EXTERNAL
ECOVOLT
BUILTIN
Default: BUILTIN
widgetKey
​string · enum · required

BUILTIN entries only — the frontend registry key

Enum values:
STAT_TOTAL_ENERGY
STAT_TOTAL_BILL
STAT_DEVICE_STATUS
SCHEDULE_RECOMMENDATIONS
ENERGY_USAGE_BREAKDOWN
DEVICE_TYPE_BREAKDOWN
ENERGY_USAGE_CUSTOM_BREAKDOWN
TENANT_ENERGY_RANKING
config
​object · required

Widget-specific settings, opaque to the backend

createdAt
​string · date-time · required
updatedAt
​string · date-time · required
description
​string

Description of the panel

colorPalette
​string[]

Color palette

GetBuiltinPanelsResponseDto

​object[] · required

Builtin panels matching the query

total
​number · required

Total number of results

Example: 100

CreateBuiltinPanelDto

title
​string · required

Title of the panel

Example: Total Energy
widgetKey
​string · enum · required

Which frontend-registered widget renders this panel

Enum values:
STAT_TOTAL_ENERGY
STAT_TOTAL_BILL
STAT_DEVICE_STATUS
SCHEDULE_RECOMMENDATIONS
ENERGY_USAGE_BREAKDOWN
DEVICE_TYPE_BREAKDOWN
ENERGY_USAGE_CUSTOM_BREAKDOWN
TENANT_ENERGY_RANKING
description
​string

Description of the panel

Default:
colorPalette
​string[]

Color palette for the widget

Example: ["#FF6384","#36A2EB"]
config
​object

Widget-specific settings. Stored opaquely — the shape is owned by the frontend registry entry for widgetKey.

Default: {}

UpdateBuiltinPanelDto

title
​string

Title of the panel

Example: Total Energy
description
​string

Description of the panel

Default:
colorPalette
​string[]

Color palette for the widget

Example: ["#FF6384","#36A2EB"]
widgetKey
​string · enum

Which frontend-registered widget renders this panel

Enum values:
STAT_TOTAL_ENERGY
STAT_TOTAL_BILL
STAT_DEVICE_STATUS
SCHEDULE_RECOMMENDATIONS
ENERGY_USAGE_BREAKDOWN
DEVICE_TYPE_BREAKDOWN
ENERGY_USAGE_CUSTOM_BREAKDOWN
TENANT_ENERGY_RANKING
config
​object

Widget-specific settings. Stored opaquely — the shape is owned by the frontend registry entry for widgetKey.

Default: {}

DeviceStatusBreakdownDto

total
​number · required

Total number of devices

Example: 5000
active
​number · required

Number of active devices

Example: 4200
inactive
​number · required

Number of inactive devices

Example: 600
offline
​number · required

Number of offline devices

Example: 200
spare
​number · required

Number of spare devices (excluded from active/inactive/offline counts)

Example: 50

TrendDirection

string · enum
Enum values:
up
down
stable

Trend direction

CostMetricDto

value
​number · required

Current cost value (SGD)

Example: 37500.25
trend
​number · required

Trend indicator (positive = increase, negative = decrease)

Example: 5.2
trendDirection
​string · enum · required

Trend direction

Enum values:
up
down
stable
Example: up

Indicator

string · enum
Enum values:
positive
neutral
negative

Indicator status

CarbonMetricDto

value
​number · required

Carbon emissions saved (kg CO₂)

Example: 52500.75
indicator
​string · enum · required

Indicator status

Enum values:
positive
neutral
negative
Example: positive

PlatformOverviewDto

totalSystems
​number · required

Total number of systems registered

Example: 150
totalTenants
​number · required

Total number of active tenants

Example: 450
​object · required

Total number of plugs with status breakdown

totalZones
​number · required

Total number of active zones

Example: 1200
totalRooms
​number · required

Total number of active rooms

Example: 800
totalEnergyMonitored
​number · required

Total energy monitored across all systems (kWh)

Example: 125000.5
​object · required

Estimated total energy cost (SGD)

​object · required

Total carbon emissions avoided (kg CO₂)

TimePeriod

string · enum
Enum values:
daily
weekly
monthly

EnergyDataPointDto

label
​string · required

Date/time label for the data point

Example: 2024-01-15
value
​number · required

Energy value (kWh)

Example: 5250.5
timestamp
​string · date-time · required

Timestamp of the data point

Example: 2024-01-15T00:00:00.000Z

EnergyUsageDto

period
​string · enum · required

Time period used for aggregation

Enum values:
daily
weekly
monthly
Example: daily
totalEnergy
​number · required

Total energy consumed in the period (kWh)

Example: 125000.5
​object[] · required

Energy usage data points

averageEnergy
​number · required

Average energy per time unit (kWh)

Example: 5000.25

SystemEnergyDto

systemId
​string · required

System ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

System name

Example: Building A - North Tower
energyConsumed
​number · required

Total energy consumed (kWh)

Example: 52500.25
plugCount
​number · required

Number of plugs in the system

Example: 250
percentageOfTotal
​number · required

Percentage of total energy

Example: 21.5
rank
​number · required

Rank position

Example: 1

TopSystemsDto

​object[] · required

List of top systems by energy consumption

totalEnergy
​number · required

Total energy consumed by all systems (kWh)

Example: 250000.5

HourlyUsageDto

hour
​number · required

Hour of day (0-23)

Example: 18
energy
​number · required

Energy consumed during this hour (kWh)

Example: 8500.5
percentageOfDay
​number · required

Percentage of daily total

Example: 12.5
isPeak
​boolean · required

Is this a peak hour?

Example: true

PeakHoursDto

​object[] · required

Peak usage hours data

overallPeakHour
​number · required

Overall peak hour

Example: 18
peakHourEnergy
​number · required

Peak hour energy value (kWh)

Example: 8500.5
offPeakAverageEnergy
​number · required

Off-peak average energy (kWh)

Example: 3200.25

GrowthDataPointDto

month
​string · required

Month label

Example: Jan 2024
count
​number · required

Number of new active plugs (>1kWh)

Example: 125
cumulative
​number · required

Cumulative total

Example: 1250
date
​string · date-time · required

Date of the data point

Example: 2024-01-01T00:00:00.000Z

GrowthTrendDto

​object[] · required

Monthly growth data points

totalGrowth
​number · required

Total growth count

Example: 1250
averageMonthlyGrowth
​number · required

Average monthly growth

Example: 104.2
growthRate
​number · required

Growth rate percentage

Example: 25.5

ProjectionDataPointDto

month
​string · required

Month label

Example: Apr 2024
projectedCount
​number · required

Projected device count

Example: 145
lowerBound
​number · required

Lower bound estimate

Example: 130
upperBound
​number · required

Upper bound estimate

Example: 160
date
​string · date-time · required

Date of projection

Example: 2024-04-01T00:00:00.000Z

RegressionParametersDto

slope
​number · required

Slope coefficient

Example: 12.5
intercept
​number · required

Y-intercept

Example: 1000
rSquared
​number · required

R-squared value (goodness of fit)

Example: 0.92

GrowthProjectionDto

​object[] · required

Projected growth for next 3 months

​object · required

Linear regression parameters

expectedTotal
​number · required

Expected total devices after 3 months

Example: 1650
confidence
​number · required

Confidence level (0-1)

Example: 0.85

RoleCountDto

role
​string · required

Role name

Example: SUPERADMIN
count
​number · required

Number of admins with this role

Example: 25
percentage
​number · required

Percentage of total

Example: 10

RoleDistributionDto

​object[] · required

Role distribution data

totalAdmins
​number · required

Total number of admins

Example: 250

CategoryCountDto

category
​string · required

Plug category

Example: AIR_CONDITIONER
count
​number · required

Number of plugs in this category

Example: 850
percentage
​number · required

Percentage of total plugs

Example: 17

PlugCategoryDistributionDto

​object[] · required

Category distribution data

totalPlugs
​number · required

Total number of plugs

Example: 5000

CategoryEnergyDto

category
​string · required

Plug category

Example: AIRCONDITIONER
energy
​number · required

Total energy consumed by this category (kWh)

Example: 52500.25
percentage
​number · required

Percentage of total energy

Example: 42
plugCount
​number · required

Number of plugs in category

Example: 850
averageEnergyPerPlug
​number · required

Average energy per plug (kWh)

Example: 61.76

PlugCategoryEnergyDistributionDto

​object[] · required

Category energy distribution data

totalEnergy
​number · required

Total energy consumed (kWh)

Example: 125000.5

SystemPlugCountDto

systemId
​string · required

System ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

System name

Example: Building A - North Tower
plugCount
​number · required

Number of plugs in this system

Example: 250
percentage
​number · required

Percentage of total plugs

Example: 5

PlugSystemDistributionDto

​object[] · required

System distribution data

totalPlugs
​number · required

Total number of plugs

Example: 5000
totalSystems
​number · required

Total number of systems

Example: 150

GranularityType

string · enum
Enum values:
hour
day
week
month

Time granularity for data aggregation

EnergyBreakdownRequestDto

systemId
​string · required

System ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
startDate
​string · required

Start date for energy data (ISO 8601 format)

Example: 2024-01-01
endDate
​string · required

End date for energy data (ISO 8601 format)

Example: 2024-01-31
granularity
​string · enum · required

Time granularity for data aggregation

Enum values:
hour
day
week
month
Example: day
compareStartDate
​string

Start date for comparison period (optional)

Example: 2023-01-01
compareEndDate
​string

End date for comparison period (optional)

Example: 2023-01-31

EnergyBreakdownPointDto

timestamp
​string · required

Timestamp of this data point

Example: 2024-01-01T00:00:00.000Z
energy
​number · required

Energy consumption in kWh

Example: 12.45
cost
​number · required

Cost in SGD (calculated using tariff rate active at this timestamp)

Example: 3.82
tariffRate
​number · required

Tariff rate used for this calculation (cents per kWh)

Example: 30.65

EnergyPeriodDto

totalEnergy
​number · required

Total energy consumption for period (kWh)

Example: 450.25
totalCost
​number · required

Total cost for period (SGD)

Example: 138.02
​object[] · required

Breakdown by time bucket

EnergyComparisonDto

totalEnergy
​number · required

Total energy consumption for period (kWh)

Example: 450.25
totalCost
​number · required

Total cost for period (SGD)

Example: 138.02
​object[] · required

Breakdown by time bucket

energyDelta
​number · required

Energy delta compared to main period (kWh)

Example: -45.5
costDelta
​number · required

Cost delta compared to main period (SGD)

Example: -13.96

EnergyBreakdownResponseDto

​object · required

Main period energy and cost data

calculatedAt
​string · required

Timestamp when these costs were calculated

Example: 2024-01-15T10:30:00.000Z
​object

Comparison period data (if comparison dates provided)

SmartModeSuggestedDeviceDto

id
​string · required
name
​string · required

TriggerMetric

string · enum
Enum values:
TEMPERATURE
HUMIDITY
CARBONDIOXIDE
PM1
FINE_PARTICULATE_MATTER
COARSE_PARTICULATE_MATTER
FORMALDEHYDE
SOUND

TriggerOperator

string · enum
Enum values:
GREATER_THAN
LESS_THAN
EQUAL_TO
NOT_EQUAL_TO
GREATER_THAN_OR_EQUAL_TO
LESS_THAN_OR_EQUAL_TO
IS_TRUE
IS_FALSE

ActionType

string · enum
Enum values:
TOGGLE_ON
TOGGLE_OFF
CONTROL_AIRCON
AIRCON_SMART_TEMP
CONTROL_EXTERNAL_DEVICE_DAIKIN_AIRCON

SmartModeSuggestionItemDto

rank
​number · required
confidence
​number · required

Confidence score between 0 and 1

Example: 0.89
occurrences
​number · required

Number of times this pattern was observed in the window

Example: 12
description
​string · required
​object · required
metric
​string · enum · required
Enum values:
TEMPERATURE
HUMIDITY
CARBONDIOXIDE
PM1
FINE_PARTICULATE_MATTER
COARSE_PARTICULATE_MATTER
FORMALDEHYDE
SOUND
operator
​string · enum · required
Enum values:
GREATER_THAN
LESS_THAN
EQUAL_TO
NOT_EQUAL_TO
GREATER_THAN_OR_EQUAL_TO
LESS_THAN_OR_EQUAL_TO
IS_TRUE
IS_FALSE
thresholdValue
​number · required
​object · required
actionType
​string · enum · required
Enum values:
TOGGLE_ON
TOGGLE_OFF
CONTROL_AIRCON
AIRCON_SMART_TEMP
CONTROL_EXTERNAL_DEVICE_DAIKIN_AIRCON
suggestedName
​string · required

Pre-filled trigger name the user can accept or edit

Example: Bedroom Fan on → Living Room AC on

SmartModeSuggestionResponseDto

​object[] · required

CreateFeatureDto

name
​string · required

Display name of the feature. Used for identification in the user interface.

Example: Tenant Management
featureType
​string · enum · required

Feature type identifier from the predefined feature enum. Determines the functional category of the feature.

Enum values:
ZONE_MANAGEMENT
ROOMS_MANAGEMENT
RELATIONSHIP_MAP
ADMIN_PANEL
TENANT_MANAGEMENT
SMART_PLUGS
AI_FEATURE
HEATMAP
Example: TENANT_MANAGEMENT
description
​string · required

Detailed description of what the feature does and its purpose within the system.

Example: Allows management of tenants within the system, including creation, updates, and relationship assignments

UpdateFeatureDto

name
​string · required

Display name of the feature. Used for identification in the user interface.

Example: Tenant Management
featureType
​string · enum · required

Feature type identifier from the predefined feature enum. Determines the functional category of the feature.

Enum values:
ZONE_MANAGEMENT
ROOMS_MANAGEMENT
RELATIONSHIP_MAP
ADMIN_PANEL
TENANT_MANAGEMENT
SMART_PLUGS
AI_FEATURE
HEATMAP
Example: TENANT_MANAGEMENT
description
​string · required

Detailed description of what the feature does and its purpose within the system.

Example: Allows management of tenants within the system, including creation, updates, and relationship assignments

OccupancyGranularity

string · enum
Enum values:
QUARTER_HOUR
HOUR
DAY

OccupancyTimelineBucketDto

start
​string · date-time · required

Bucket start

occupiedMinutes
​number · required

Minutes the room was occupied

Example: 30
observedMinutes
​number · required

Minutes a sensor was reporting. occupied < observed is vacancy; the rest of the bucket is a data gap, not vacancy

Example: 60
peakOccupancy
​null | number · required

Highest people count; null for motion-only sensors

Example: 6

OccupancySessionDto

start
​string · date-time · required

First occupied reading

end
​string · date-time · required

Last occupied reading

durationMinutes
​number · required

Dwell length in minutes

Example: 45
peakOccupancy
​null | number · required

Highest people count in the session; null for motion-only sensors

Example: 6

OccupancyTimelineResponseDto

roomId
​string · required

Room id

Example: 64b7f1e6f9c9d4e5b8a9f7c3
timezone
​string · required

System timezone buckets are aligned to

Example: Asia/Singapore
granularity
​string · enum · required
Enum values:
QUARTER_HOUR
HOUR
DAY
​object[] · required
​object[] · required

Continuous occupied periods, for enter/exit tooltips

OccupancyState

string · enum
Enum values:
OCCUPIED
VACANT
NO_DATA

OccupancyCurrentStatusDto

state
​string · enum · required
Enum values:
OCCUPIED
VACANT
NO_DATA
since
​null | string · date-time

When the room entered this state, within the last 24 hours

occupancy
​null | number

Latest people count; null for motion-only sensors

OccupancyDaySummaryDto

date
​string · required

Local date, yyyy-MM-dd

Example: 2026-09-22
firstInAt
​null | string · date-time · required
lastOutAt
​null | string · date-time · required
occupiedMinutes
​number · required
sessions
​number · required

Sessions that started this day

Example: 5
peakOccupancy
​null | number · required
peakAt
​null | string · date-time · required

OccupancySummaryResponseDto

roomId
​string · required
​object · required
utilisationPct
​null | number · required

Occupied ÷ observed minutes, as a percentage. null when no sensor reported

Example: 62.5
previousUtilisationPct
​null | number · required

Same figure for the equal-length period immediately before

Example: 55
utilisationDeltaPct
​null | number · required

utilisationPct − previousUtilisationPct, in percentage points

Example: 7.5
peakOccupancy
​null | number · required
peakAt
​null | string · date-time · required
occupiedMinutes
​number · required
sessionCount
​number · required
avgDwellMinutes
​null | number · required
vacantEnergisedMinutes
​number · required

Vacant minutes while the room drew at least 10 W

Example: 300
​object[] · required

OccupancyScopeType

string · enum
Enum values:
SYSTEM
TENANT
ZONE
ROOM

OccupancyHeatmapCellDto

weekday
​string · enum · required

Day of the week this time range applies to

Enum values:
monday
tuesday
wednesday
thursday
friday
saturday
sunday
hour
​number · required

Local hour, 0–23

Example: 14
utilisationPct
​null | number · required

Occupied ÷ observed minutes; null when no sensor reported

Example: 40
observedMinutes
​number · required

OccupancyHeatmapResponseDto

timezone
​string · required
​object[] · required

7 × 24 cells, every weekday/hour present

OccupancyRoomSortField

string · enum
Enum values:
roomName
utilisationPct
occupiedHours
sessions
avgDwellMinutes
peakOccupancy

OccupancySensorStatus

string · enum
Enum values:
ONLINE
OFFLINE
NO_DATA
SUSPECT
NO_SENSOR

Worst status among the room sensors

OccupancyRoomRowDto

roomId
​string · required
roomName
​string · required
utilisationPct
​null | number · required
occupiedHours
​number · required
sessions
​number · required
avgDwellMinutes
​null | number · required
peakOccupancy
​null | number · required
sensorStatus
​string · enum · required

Worst status among the room sensors

Enum values:
ONLINE
OFFLINE
NO_DATA
SUSPECT
NO_SENSOR

GetOccupancyRoomsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Room rows matching the scope, sorted and paginated

OccupancyWasteWindowDto

roomId
​string · required
roomName
​string · required
start
​string · date-time · required
end
​string · date-time · required
minutes
​number · required

OccupancyWasteResponseDto

totalVacantEnergisedMinutes
​number · required
​object[] · required

Contiguous vacant-but-energised periods, oldest first

OccupancySensorCapability

string · enum
Enum values:
MOTION
COUNT

OccupancySensorHealthDto

deviceId
​string · required
deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
capability
​string · enum · required
Enum values:
MOTION
COUNT
roomId
​string · required
roomName
​string · required
status
​string · enum · required

NO_DATA = online but no occupancy readings in the last day (counter disabled, BLE down); SUSPECT = occupied for the whole last day, likely a stuck reading

Enum values:
ONLINE
OFFLINE
NO_DATA
SUSPECT
NO_SENSOR
deviceName
​string
lastSeen
​string · date-time

OccupancyDevicesHealthResponseDto

unhealthyCount
​number · required

Sensors not ONLINE

Example: 1
​object[] · required

Unhealthy sensors first

ToolDefinitionDto

name
​string · required

Tool name (unique identifier)

description
​string · required

Tool description for LLM

​object · required

JSON Schema for tool input parameters

ToolConfirmationDto

toolCallId
​string · required

Tool call ID this confirmation resolves

approved
​boolean · required

Whether the user approved this tool call

AgentChatRequestDto

​object[] · required

Conversation history including user and assistant messages

systemId
​string · required

System ID the chat operates on. Required — used to enforce the AI_FEATURE entitlement and to scope context-aware tool calls.

sessionId
​string

Session ID for chat history persistence

​object[]

Approve/deny decisions for pending tool calls that required user confirmation (resolves a prior CONFIRMATION_REQUIRED event on this same conversation).

​object[] · deprecated

Deprecated and ignored. Tool definitions are owned by the server; anything sent here has no effect.

AiToolSummaryDto

name
​string · required

Stable tool name — the same identifier used for OpenAI function calling and MCP.

Example: get_room_energy
description
​string · required

Natural-language description shown to the model.

kind
​string · enum · required

Whether the tool reads data or mutates it. Write tools are limited to ADMIN and SUPERADMIN.

Enum values:
read
write
Example: read
requiresConfirmation
​boolean · required

Whether running the tool prompts the user to confirm first. Tools that decide this per-arguments report true.

Example: false

TranscribeAudioResponseDto

text
​string · required

Transcribed text from the audio recording

RangerChatHistorySummaryDto

sessionId
​string · required

UUID identifying the chat session

Example: 550e8400-e29b-41d4-a716-446655440000
messageCount
​number · required

Total number of messages in the session

Example: 6
preview
​string · required

First user message truncated to 120 chars

Example: How much energy did Building A consume last week?
createdAt
​string · date-time · required

Timestamp when the session was first created

Example: 2024-01-15T08:30:00.000Z
updatedAt
​string · date-time · required

Timestamp of the last message saved to this session

Example: 2024-01-15T08:35:00.000Z
adminEmail
​string

Email of the account that initiated the session

Example: admin@example.com

RangerChatHistoryPaginatedDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Chat session summaries for the current page

RangerChatHistoryDetailDto

sessionId
​string · required

UUID identifying the chat session

Example: 550e8400-e29b-41d4-a716-446655440000
messageCount
​number · required

Total number of messages in the session

Example: 6
preview
​string · required

First user message truncated to 120 chars

Example: How much energy did Building A consume last week?
createdAt
​string · date-time · required

Timestamp when the session was first created

Example: 2024-01-15T08:30:00.000Z
updatedAt
​string · date-time · required

Timestamp of the last message saved to this session

Example: 2024-01-15T08:35:00.000Z
​object[] · required
adminEmail
​string

Email of the account that initiated the session

Example: admin@example.com

CalendarPreviewRoomDto

roomId
​string · required

Room ID

roomName
​string · required

Room name as stored in the system

deviceCount
​number · required

Number of devices in this room that would receive schedules

RecurrenceType

string · enum
Enum values:
DAILY
WEEKLY

Recurrence pattern type. Only present when isRecurring is true.

CalendarPreviewEventDto

uid
​string · required

External event ID — Google event ID, iCal UID, or Microsoft event ID

eventTitle
​string · required

Original event title from the calendar

startTime
​string · date-time · required

Event start time

endTime
​string · date-time · required

Event end time

matched
​boolean · required

True if at least one room matched the event title

include
​boolean · required

Whether to include this event in the confirm step. Defaults to true when matched, false when unmatched.

​object[] · required

Rooms matched from the event title. Empty when matched=false.

isRecurring
​boolean · required

True if the event is a recurring event (daily or weekly pattern)

recurrenceType
​string · enum

Recurrence pattern type. Only present when isRecurring is true.

Enum values:
DAILY
WEEKLY
recurrenceDays
​number[]

Days of week the event recurs on (0=Sun … 6=Sat). Only present for weekly recurrence.

Example: [1,3,5]

CalendarPreviewResponseDto

​object[] · required

List of calendar events parsed from the calendar source, each with room-match results.

totalMatched
​number · required

Number of events that matched at least one room

totalUnmatched
​number · required

Number of events that matched no room

ScheduleType

string · enum
Enum values:
SINGLE
RECURRING

Schedule type: single one-time schedule or recurring weekly schedule

ConfirmCalendarEventDto

uid
​string · required

External event ID (from preview response)

eventTitle
​string · required

Event title (used for mapping storage)

startTime
​string · required

Event start time (may be user-adjusted)

endTime
​string · required

Event end time (may be user-adjusted)

include
​boolean · required

Set to false to skip this event — no schedules will be created for it

roomIds
​string[] · required

Room IDs to schedule (may be user-adjusted from preview)

scheduleType
​string · enum · required

Schedule type: single one-time schedule or recurring weekly schedule

Enum values:
SINGLE
RECURRING
daysOfWeek
​number[]

Days of week for recurring schedule (0=Sun … 6=Sat). Required when scheduleType is RECURRING.

Example: [1,3]
onTime
​string

ON time for recurring schedule in HH:MM format. Required when scheduleType is RECURRING.

Example: 09:00
offTime
​string

OFF time for recurring schedule in HH:MM format. Required when scheduleType is RECURRING.

Example: 17:00

ConfirmCalendarUploadDto

​object[] · required

List of calendar events to confirm. Must contain at least one entry.

gracePeriodMinutes
​number

Grace period in minutes. Devices turn ON this many minutes before the event starts and turn OFF this many minutes after it ends. Only applies to one-time (SINGLE) schedules. Defaults to 0.

Example: 15
Default: 0

CalendarImportResultDto

imported
​number · required

Number of events for which schedules were successfully created

Example: 5
skipped
​number · required

Number of events skipped (include=false, past, or no devices in room)

Example: 2

PreviewIcsUrlDto

icsUrl
​string · required

Publicly accessible ICS calendar feed URL. Must be a valid HTTPS URL pointing to a .ics file. Private/internal network addresses are not permitted.

Example: https://calendar.google.com/calendar/ical/example%40gmail.com/public/basic.ics

ConfirmIcsUrlDto

icsUrl
​string · required

Publicly accessible ICS calendar feed URL. Saved for ongoing background polling. Must be HTTPS; private/internal addresses are not permitted.

Example: https://calendar.google.com/calendar/ical/example%40gmail.com/public/basic.ics
​object[] · required

List of calendar events to confirm. Must contain at least one entry.

gracePeriodMinutes
​number

Grace period in minutes. Devices turn ON this many minutes before the event starts and turn OFF this many minutes after it ends. Saved for ongoing syncs. Defaults to 0.

Example: 15
Default: 0

SubscribeIcsUrlDto

icsUrl
​string · required

Publicly accessible ICS calendar feed URL. Must be a valid HTTPS URL pointing to a .ics file. Private/internal network addresses are not permitted.

Example: https://calendar.google.com/calendar/ical/example%40gmail.com/public/basic.ics
gracePeriodMinutes
​number

Grace period in minutes. Devices turn ON this many minutes before the event starts and turn OFF this many minutes after it ends. Defaults to 0.

Example: 15
Default: 0

CalendarType

string · enum
Enum values:
GOOGLE
MICROSOFT
ICS_URL
ICS_FILE

The calendar provider type for this connection (e.g., GOOGLE, MICROSOFT, ICS)

ConnectionScope

string · enum
Enum values:
SYSTEM
USER

Scope of this connection — whether it applies system-wide or per-user

CalendarConnectionResponseDto

id
​string · required

Unique identifier of the calendar connection

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemId
​string · required

System this calendar connection belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c1
calendarType
​string · enum · required

The calendar provider type for this connection (e.g., GOOGLE, MICROSOFT, ICS)

Enum values:
GOOGLE
MICROSOFT
ICS_URL
ICS_FILE
Example: GOOGLE
scope
​string · enum · required

Scope of this connection — whether it applies system-wide or per-user

Enum values:
SYSTEM
USER
Example: SYSTEM
isActive
​boolean · required

Whether this calendar connection is currently active

Example: true
createdAt
​string · date-time · required

Timestamp when this calendar connection was created

userId
​string

Admin user ID that owns this connection; null indicates a system-wide connection

Example: 64b7f1e6f9c9d4e5b8a9f7c2
googleCalendarId
​string

Google Calendar ID used for this connection (e.g., "primary")

Example: primary
icsUrl
​string

ICS feed URL for ICS-type calendar connections

Example: https://calendar.google.com/calendar/ical/example%40gmail.com/public/basic.ics
lastSyncedAt
​string · date-time

Timestamp of the last successful sync for this connection

Generate2dFloorPlanResponseDto

floorPlanId
​string · required

Floor plan document ID (upserted)

plan2d
​object · required

2D geometry preview — not yet saved

Room2DDto

id
​string · required
name
​string · required
type
​string · required
polygon
​array[] · required

CCW polygon vertices [[x,z],...]

Opening2DDto

start
​number · required
end
​number · required
kind
​string · required

Wall2DDto

start
​number[] · required

[x, z] coordinate

end
​number[] · required

[x, z] coordinate

kind
​string · required
​object[]

Stair2DDto

id
​string · required
bottom
​number[] · required

[x, z] coordinate

top
​number[] · required

[x, z] coordinate

width
​number · required

FloorPlanStyle

string · enum
Enum values:
DEFAULT
WARM
COOL
NIGHT

Visual style/theme for the 3D floor plan

Save2dFloorPlanDto

width
​number · required
height
​number · required
​object[] · required
​object[] · required
​object[] · required
style
​string · enum

Visual style/theme for the 3D floor plan

Enum values:
DEFAULT
WARM
COOL
NIGHT
Default: DEFAULT

Plan2dStatus

string · enum
Enum values:
none
draft
ready

FloorPlan

_id
​string · required
zone
​string · required

Zone this floor plan belongs to

system
​string · required

System this floor plan belongs to

name
​string · required

Display name for this floor plan

schemaVersion
​number · required

Floor plan JSON schema version

Example: 1
plan2dStatus
​string · enum · required
Enum values:
none
draft
ready
style
​string · enum · required

Visual style/theme for the 3D floor plan

Enum values:
DEFAULT
WARM
COOL
NIGHT
Default: DEFAULT
plan2d
​object

2D geometry before 3D conversion

roomMappings
​string[]

Mappings from AI room IDs to real Room documents

RenameRoomDto

jsonRoomId
​string · required
newName
​string · required

MapRoomDto

jsonRoomId
​string · required
realRoomId
​string

Real Room ObjectId — omit or null to unmap

RoomDocRefDto

_id
​string · required
name
​string · required

GetFloorPlanV2RoomDto

_id
​string · required
​object · required
polygon
​array[] · required
color
​string

GetDevicePlacementV2Dto

_id
​string · required
deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
device
​string · required
x
​number · required
y
​number · required

GetDistributionBoxPlacementV2Dto

_id
​string · required
distributionBox
​string · required
x
​number · required
y
​number · required

GetFloorPlanV2ResponseDto

_id
​string · required
zone
​string · required
system
​string · required
imageWidth
​number · required
imageHeight
​number · required
​object[] · required
​object[] · required
​object[] · required
status
​string · enum · required
Enum values:
none
draft
ready
imageUrl
​string

CDN URL of the image

OverlayReadingDto

temperature
​number

Temperature in °C (ENV_SENSOR)

humidity
​number

Humidity in % (ENV_SENSOR)

co2
​number

CO₂ in ppm (ENV_SENSOR)

power
​number

Real-time power draw in W (PLUG/MCB)

energy
​number

Accumulated energy in kWh (PLUG/MCB)

status
​boolean

On/off state (PLUG/MCB/SMART_SWITCH)

setpoint
​number

Aircon setpoint in °C (AIRCON_CONTROL)

mode
​string

Aircon mode: cool/heat/fan/auto (AIRCON_CONTROL)

occupancy
​null | number

People count (AIRCON_CONTROL with people counter). null means no reading, not an empty room

motionDetected
​null | boolean

Motion detected (AIRCON_CONTROL, MAXWELL_ULTRA only)

flowRate
​number

Flow rate in m³/h (WATER_METER)

OverlayPlacementDto

_id
​string · required
deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
device
​string · required
deviceName
​string · required
x
​number · required
y
​number · required
reading
​null | object

OverlayDistributionBoxPlacementDto

_id
​string · required
distributionBox
​string · required
name
​string · required
x
​number · required
y
​number · required

FloorPlanV2OverlayResponseDto

imageWidth
​number · required

Image width in pixels — use to size the canvas

imageHeight
​number · required

Image height in pixels — use to size the canvas

​object[] · required
​object[] · required

RoomDrawingV2Dto

room
​string · required

ID of the existing Room document this drawing represents

polygon
​array[] · required

CCW polygon vertices as [x, y] pixel pairs. Minimum 3 points. Origin top-left.

color
​string

Hex fill colour for canvas rendering

Example: #4A90E2

UpsertRoomsV2Dto

​object[] · required

Full replacement array of room drawings. Send empty array to clear.

PlacementType

string · enum
Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL

Placement type — DISTRIBUTION_BOX places a distribution box; all others place a Device

DevicePlacementV2Dto

deviceType
​string · enum · required

Placement type — DISTRIBUTION_BOX places a distribution box; all others place a Device

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
device
​string · required

Device or DistributionBox ID — must belong to this system

x
​number · required

Pixel distance from left edge of image

y
​number · required

Pixel distance from top edge of image

UpsertDevicePlacementsV2Dto

​object[] · required

Full replacement array of device placements. Send empty array to clear all pins.

AssetTypeResponseDto

_id
​string · required

Asset type ID

name
​string · required

Unique type key

Example: WiFi Router
displayName
​string · required

Human-readable display name

Example: WiFi Router
assetCount
​number · required

Number of assets across every system currently using this type

Example: 3
description
​string

What this class of asset is for

AssetTypeListResponseDto

​object[] · required
total
​number · required

CreateAssetTypeDto

name
​string · required

Unique type key, unique across the platform

Example: WiFi Router
displayName
​string · required

Human-readable display name

Example: WiFi Router
description
​string

What this class of asset is for

Example: Provides wireless network coverage for Ecovolt devices.

UpdateAssetTypeDto

displayName
​string

Human-readable display name

Example: WiFi Router
description
​string

What this class of asset is for

Example: Provides wireless network coverage for Ecovolt devices.

CreateAssetDto

assetType
​string · required

Asset type key. Must match an existing AssetType (see GET /asset-type).

Example: WiFi Router
name
​string

Optional label for this specific unit. Omit it to fall back to the AssetType display name.

Example: Main Uplink Router
notes
​string

Everything specific to this unit in this system — where it sits, how it is wired, install quirks. The universal description of the equipment lives on the AssetType.

Example: Level 3 Storeroom, mounted above the ceiling panel. Feeds the east wing APs.
serialNumber
​string

Manufacturer serial number

Example: SN-8842-XK
installedAt
​string

Date the asset was installed on site (ISO 8601)

Example: 2026-03-14T00:00:00.000Z
room
​string

Id of the room this asset is installed in. Must be a room in the same system. Omit it for an asset that sits outside any room.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
files
​string[] · application/octet-stream

Install photos (max 10MB each, images only)

AssetTypeSummaryDto

name
​string · required

Asset type key

Example: WiFi Router
displayName
​string · required

Human-readable display name, shared across all systems

Example: WiFi Router
description
​string

Universal description of what this class of equipment is for, shared across all systems

Example: Provides wireless network coverage for Ecovolt devices.

AssetRoomSummaryDto

_id
​string · required

Room ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

Room name

Example: Level 3 Storeroom

GetAssetDto

_id
​string · required

Asset ID

name
​string · required

Label for this unit. Falls back to the AssetType displayName when the asset has no name of its own, so this is always safe to render.

Example: Main Uplink Router
​object · required

Universal, catalogue-level facts about this asset type

imageKeys
​string[] · required

S3 object keys of the install photos

imageUrls
​string[] · required

CDN URLs of the install photos, in the same order as keys

system
​string · required

System ID this asset belongs to

createdAt
​string · date-time · required

Creation timestamp

customName
​string

The per-unit label as stored, absent when the asset relies on the type name. Use name to display.

Example: Main Uplink Router
notes
​string

Everything specific to this unit in this system — where it sits, how it is wired, install quirks. The universal description lives on assetType.description.

Example: Level 3 Storeroom, mounted above the ceiling panel. Feeds the east wing APs.
serialNumber
​string

Manufacturer serial number

Example: SN-8842-XK
installedAt
​string · date-time

Date the asset was installed on site

​object

Room this asset is installed in. Absent when the asset is not linked to a room, or when the linked room has since been deleted.

systemName
​string

Name of the owning system. Only set on cross-system reads, where the caller has no single system in context.

GetAssetsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of asset objects matching the query parameters

UpdateAssetDto

name
​string

Label for this specific unit. Send an empty string to clear it and fall back to the AssetType display name.

Example: Main Uplink Router
assetType
​string

Asset type key. Must match an existing AssetType (see GET /asset-type).

Example: WiFi Router
notes
​string

Everything specific to this unit in this system — where it sits, how it is wired, install quirks. The universal description of the equipment lives on the AssetType.

Example: Level 3 Storeroom, mounted above the ceiling panel. Feeds the east wing APs.
serialNumber
​string

Manufacturer serial number

Example: SN-8842-XK
installedAt
​string

Date the asset was installed on site (ISO 8601). Send an empty string to clear it.

Example: 2026-03-14T00:00:00.000Z
room
​string

Id of the room this asset is installed in. Must be a room in the same system. Send an empty string to unlink the asset from its room.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
existingImageKeys
​string[]

S3 keys of existing images to keep. Any current image not listed here is deleted from S3. Omit the field to keep every existing image; send it empty to drop them all.

Example: ["assets/6f1c1f6a-6f2b-4c1e-9a7a-1f2c3d4e5f60.jpg"]
files
​string[] · application/octet-stream

New install photos to append (max 10MB each, images only)

GetCreditDto

roomId
​string · required

Room ID

systemId
​string · required

System ID

balance
​number · required

Current balance in SGD

updatedAt
​string · date-time · required

Last updated timestamp

TopupCreditDto

amount
​number · required

Amount to top up in SGD (min $5)

Example: 10

TopupCreditResponseDto

balance
​number · required

Updated balance after top-up

amount
​number · required

Amount that was topped up

transactionId
​string · required

Transaction ID

CreditTransactionType

string · enum
Enum values:
TOPUP
USAGE_DEDUCTION
MANUAL_ADJUSTMENT

CreditTransactionStatus

string · enum
Enum values:
PENDING
APPROVED
REJECTED

GetCreditTransactionDto

id
​string · required

Transaction ID

roomId
​string · required
type
​string · enum · required
Enum values:
TOPUP
USAGE_DEDUCTION
MANUAL_ADJUSTMENT
status
​string · enum · required
Enum values:
PENDING
APPROVED
REJECTED
amount
​number · required

Amount in SGD

balanceAfter
​number · required

Balance after transaction

createdAt
​string · date-time · required
description
​string
kwhConsumed
​number

kWh consumed (USAGE_DEDUCTION only)

GetCreditTransactionsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of transactions

ReleaseNotesRepository

string · enum
Enum values:
software
hardware

ReleaseNoteDto

tagName
​string · required

Git tag version of the release

Example: v1.2.0
title
​string · required

Title of the release (usually same as tag or human readable)

Example: Version 1.2.0
body
​string · required

Full markdown content of the release note

Example: ## 🚀 Features - Added dashboard - Improved sync ## 🐛 Fixes - Fixed login bug
publishedAt
​string · date-time · required

Date when the release was published

Example: 2024-07-06T10:00:00Z
url
​string · required

URL linking to the release on GitHub

Example: https://github.com/ecovolt-sg/ecovolt-external-apis/releases/tag/v1.2.0
developerName
​string · required

Name of the developer who created the release

Example: Glenn Quah Han Rong
developerUrl
​string · required

URL of the developer's GitHub profile

Example: https://github.com/glennquahhanrong
developerAvatarUrl
​string · required

Avatar URL of the developer who created the release

Example: https://avatars.githubusercontent.com/u/12345678?v=4

ReportingApp

string · enum
Enum values:
BASE
TREK
LANDING_PAGE
EVEREST
EMULATOR
VISTA

Which product the feedback is about

FeedbackType

string · enum
Enum values:
bug
feature
improvement
general

What kind of submission this is

CreateProductFeedbackDto

product
​string · enum · required

Which product the feedback is about

Enum values:
BASE
TREK
LANDING_PAGE
EVEREST
EMULATOR
VISTA
type
​string · enum · required

What kind of submission this is

Enum values:
bug
feature
improvement
general
title
​string · required

Short summary of the feedback

details
​string · required

The full description the reporter wrote

urgency
​number · min: 1 · max: 5

How urgent the reporter thinks this is (1-5). A hint only — triage sets the real ClickUp priority.

contactNumber
​string

Number to follow up on, if the reporter opted in

pageUrl
​string

Page the reporter was on. Captured by the app, not asked.

appVersion
​string

Frontend build version. Captured by the app, not asked.

userAgent
​string

Reporter user agent. Captured by the app, not asked.

systemName
​string

System in context, when the app has one.

files
​string[] · application/octet-stream

Supporting files — up to 5, 10 MB each

ProductFeedbackDto

clickupTaskId
​string · required

Id of the ClickUp task created for this submission

Example: 86abc1234
clickupUrl
​string · required

Direct link to the task in ClickUp

Example: https://app.clickup.com/t/86abc1234
notified
​boolean · required

Whether the Telegram notification was sent. False does not mean the submission failed — the ClickUp task is the record.

Example: true

ProductReviewPromptDto

show
​boolean · required

Whether the quarterly review dialog should be shown to this account now. False once they have reviewed or dismissed this app for the current quarter.

Example: true
periodKey
​string · required

Calendar quarter this answer applies to (Singapore). Returned for display and debugging — the client never sends it back.

Example: 2026-Q3

CreateProductReviewDto

app
​string · enum · required

App being reviewed — the one the dialog was shown in

Enum values:
BASE
TREK
LANDING_PAGE
EVEREST
EMULATOR
VISTA
Example: EVEREST
rating
​number · min: 1 · max: 5 · required

Star rating the account gave, 1-5

Example: 4
comments
​string

Free-text comment. Optional — a rating alone is a valid review.

Example: Dashboard is much faster this quarter.

ProductReviewDto

_id
​string · required

Primary ID of the stored review

Example: 64b7f1e6f9c9d4e5b8a9f7c3
app
​string · enum · required

App that was reviewed

Enum values:
BASE
TREK
LANDING_PAGE
EVEREST
EMULATOR
VISTA
Example: EVEREST
periodKey
​string · required

Calendar quarter the review was collected for (Singapore)

Example: 2026-Q3
rating
​number · required

Star rating the account gave, 1-5

Example: 4
createdAt
​string · date-time · required

Timestamp when the review was submitted

comments
​string

Free-text comment, when the account wrote one

Example: Dashboard is much faster this quarter.

DismissProductReviewDto

app
​string · enum · required

App whose prompt is being dismissed

Enum values:
BASE
TREK
LANDING_PAGE
EVEREST
EMULATOR
VISTA
Example: EVEREST

WifiConfigStatus

string · enum
Enum values:
CONFIRMED
PENDING
FAILED

WifiDeviceStatusDto

deviceId
​string · required
macId
​string · required
deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
desiredSsid
​string · required

SSID the device was last told to join

Example: Corp-IoT
status
​string · enum · required
Enum values:
CONFIRMED
PENDING
FAILED
Example: PENDING
reportedSsid
​string

SSID the device last reported being connected to

Example: Corp-IoT-Old
wifiError
​string

Reason the last delta failed on the device, when status is FAILED

Example: join_failed

WifiDeviceStatusResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required
pendingCount
​number · required

Devices in the system not yet converged to the desired SSID. Counted across the whole system, not just this page.

Example: 7

CreateSubscriptionTierDto

name
​string · required

Name of the subscription tier. Used for identification and display to customers.

Example: Premium
description
​string · required

Detailed description of what the subscription tier includes. Helps customers understand the value proposition.

Example: Access to all premium features including advanced analytics, unlimited users, and priority support
features
​string[] · required

Array of feature identifiers included in this subscription tier. Determines which features are accessible to subscribers.

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]

UpdateSubscriptionTierDto

name
​string · required

Name of the subscription tier. Used for identification and display to customers.

Example: Premium
description
​string · required

Detailed description of what the subscription tier includes. Helps customers understand the value proposition.

Example: Access to all premium features including advanced analytics, unlimited users, and priority support
features
​string[] · required

Array of feature identifiers included in this subscription tier. Determines which features are accessible to subscribers.

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]

TelegramStatusResponseDto

connected
​boolean · required

Whether this account has a personal Telegram chat linked

Example: true
groupName
​string

Name of the linked Telegram group

Example: EcoVolt Alerts

TelegramPairingCodeResponseDto

code
​string · required

Short pairing code the admin sends in their Telegram group

Example: ECO-A3B7
expiresIn
​number · required

Seconds until the code expires

Example: 600

TelegramWebhookDto

RegisterWebhookResponseDto

ok
​boolean · required

Whether the request was successful

Example: true
result
​boolean · required

Telegram API result

Example: true
description
​string

Description from Telegram

Example: Webhook was set

ForecastGranularity

string · enum
Enum values:
HOURLY
DAILY

ForecastPointDto

hour
​string · required

ISO 8601 UTC timestamp

kWh
​number · required

Predicted energy usage (kWh)

lower
​number · required

Lower confidence bound (kWh)

upper
​number · required

Upper confidence bound (kWh)

ForecastReason

string · enum
Enum values:
insufficient_data
no_forecast_available

Set only when predictions is empty. insufficient_data: device has < 30 days of usage history (expected for new devices). no_forecast_available: device qualifies but no fresh forecast doc exists (precompute failed or has not yet run for this device).

DeviceForecastResponseDto

deviceId
​string · required

Unique identifier for the device

​object[] · required

Forecast data points for the device

modelVersion
​string · required

Model version

granularity
​string · required

Granularity of returned data

hasSufficientData
​boolean · required

Whether this device has sufficient data for forecasting

reason
​string · enum

Set only when predictions is empty. insufficient_data: device has < 30 days of usage history (expected for new devices). no_forecast_available: device qualifies but no fresh forecast doc exists (precompute failed or has not yet run for this device).

Enum values:
insufficient_data
no_forecast_available
daysUntilEligible
​number

Only present when reason = insufficient_data. Number of additional days of usage history needed before the device becomes eligible.

AggregatedForecastResponseDto

entityId
​string · required

Entity ID (zone, tenant, or system)

entityType
​string · required

Entity type (zone, tenant, or system)

​object[] · required

Aggregated forecast (sum of all device forecasts under this entity)

totalDevices
​number · required

Total devices included in aggregation

devicesWithSufficientData
​number · required

Devices that contributed predictions to the aggregated forecast

devicesWithInsufficientData
​number · required

Devices with < 30 days of usage history

devicesWithoutForecast
​number · required

Devices that qualify (>= 30 days) but have no fresh forecast doc — precompute has not yet reached them, or failed for those devices

granularity
​string · required

Granularity of returned data

TrainingStatus

string · enum
Enum values:
ok
failed

Outcome of the training run

TrainingStatusDto

status
​string · enum · required

Outcome of the training run

Enum values:
ok
failed
Example: ok
completedAt
​string · required

ISO 8601 timestamp of when training completed

Example: 2026-05-18T10:30:00.000Z
error
​string

Error message if training failed

Example: Insufficient data for model convergence

PrecomputeStatusDto

completedAt
​string · required

ISO 8601 timestamp of when precompute completed

ok
​number · required

Forecast documents successfully written

failed
​number · required

Devices that failed during precompute

eligibleDevices
​number · required

Total eligible devices processed

skippedDevices
​number · required

Devices skipped due to insufficient data

ErrorSource

string · enum
Enum values:
FRONTEND
BACKEND

Origin of the error

HttpRequestMethod

string · enum
Enum values:
GET
POST
PUT
PATCH
DELETE
HEAD
OPTIONS

HTTP method of the failed request

CreateErrorLogDto

source
​string · enum · required

Origin of the error

Enum values:
FRONTEND
BACKEND
Example: FRONTEND
httpMethod
​string · enum · required

HTTP method of the failed request

Enum values:
GET
POST
PUT
PATCH
DELETE
HEAD
OPTIONS
Example: GET
requestUrl
​string · required

URL of the HTTP request that failed

Example: /api/plug/system/64b7/list
errorMessage
​string · required

Description of the error

Example: Network Error: Failed to fetch plug list
reportedApp
​string · enum

Frontend app the error was reported from (FRONTEND errors)

Enum values:
BASE
TREK
LANDING_PAGE
EVEREST
EMULATOR
VISTA
Example: EVEREST
pageUrl
​string

Frontend page URL where the error occurred (FRONTEND errors)

Example: https://app.ecovolt.sg/system/64b7/dashboard
system
​string

System the account was operating in when the error occurred

Example: 64b7f1e6f9c9d4e5b8a9f7c3
statusCode
​number

HTTP status code received. Omitted when no response was involved — an uncaught JavaScript error or a rejected promise never had one.

Example: 500
stackTrace
​string

Stack trace string (BACKEND errors)

ErrorLogSystemRefDto

_id
​string · required
systemName
​string · required

ErrorLogAdminRefDto

_id
​string · required
name
​string · required
email
​string · required

GetErrorLogDto

_id
​string · required

Primary ID of the error log

Example: 64b7f1e6f9c9d4e5b8a9f7c3
source
​string · enum · required

Origin of the error

Enum values:
FRONTEND
BACKEND
Example: FRONTEND
httpMethod
​string · enum · required

HTTP method of the failed request

Enum values:
GET
POST
PUT
PATCH
DELETE
HEAD
OPTIONS
Example: GET
requestUrl
​string · required

URL of the HTTP request that failed

Example: /api/plug/system/64b7/list
errorMessage
​string · required

Description of the error

Example: Network Error: Failed to fetch plug list
solved
​boolean · required

Whether this error has been resolved

Example: false
createdAt
​string · date-time · required

Timestamp when the log was created

updatedAt
​string · date-time · required

Timestamp when the log was last updated

reportedApp
​string · enum

Frontend app the error was reported from (FRONTEND only)

Enum values:
BASE
TREK
LANDING_PAGE
EVEREST
EMULATOR
VISTA
Example: EVEREST
pageUrl
​string

Frontend page URL where the error occurred (FRONTEND only)

Example: https://app.ecovolt.sg/system/64b7/dashboard
​object

System the account was operating in when the error occurred

​object

Admin (Account) that encountered the error — present for FRONTEND errors, absent for BACKEND errors

statusCode
​number

HTTP status code received. Absent when no response was involved — an uncaught JavaScript error or a rejected promise never had one.

Example: 500
stackTrace
​string

Stack trace string (BACKEND errors only)

resolvedAt
​string · date-time

Timestamp when the error was marked as resolved

Example: 2026-06-02T10:00:00.000Z
​object

Admin (SUPERADMIN) who resolved the error

GetErrorLogsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of error log entries

BulkUpdateErrorLogsDto

errorLogIds
​string[] · required

Array of error log IDs to update

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]
solved
​boolean · required

Whether to mark the error logs as solved or unsolved

Example: true

FailedErrorLogOperationDto

errorLogId
​string · required

ID of the error log that failed

reason
​string · required

Reason the operation failed on this error log

BulkUpdateErrorLogsResponseDto

successCount
​number · required

Number of error logs successfully updated

failedCount
​number · required

Number of error logs that failed to update

​object[] · required

Successfully updated error logs

​object[] · required

Error logs that failed to update with reasons

BulkDeleteErrorLogsDto

errorLogIds
​string[] · required

Array of error log IDs to delete

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]

BulkDeleteErrorLogsResponseDto

successCount
​number · required

Number of error logs successfully deleted

failedCount
​number · required

Number of error logs that failed to delete

successful
​string[] · required

IDs of error logs successfully deleted

​object[] · required

Error logs that failed to delete with reasons

PublicDatapoint

string · enum
Enum values:
REALTIME_POWER
TEMPERATURE
HUMIDITY
WATER_FLOW

Public datapoints to enable. TEMPERATURE/HUMIDITY need an ENV_SENSOR (Euna, Kelvin) or AIRCON_CONTROL (Maxwell Pro/Ultra) in the target. Defaults to [REALTIME_POWER] if omitted.

NfcMode

string · enum
Enum values:
CONTROL
VIEW

Whether this link controls the target or only shows a public view. Defaults to CONTROL if omitted, for compatibility with callers that predate this field.

GenerateNfcTokenDto

publicDatapoints
​string[]

Public datapoints to enable. TEMPERATURE/HUMIDITY need an ENV_SENSOR (Euna, Kelvin) or AIRCON_CONTROL (Maxwell Pro/Ultra) in the target. Defaults to [REALTIME_POWER] if omitted.

Enum values:
REALTIME_POWER
TEMPERATURE
HUMIDITY
WATER_FLOW
rangeDays
​number · min: 1 · max: 14

How many days of history to show, for every enabled datapoint. Defaults to 2 if omitted.

Example: 1
expiresAt
​string · date-time

When this link stops working. Omit for a token that never expires — prefer setting it for any tag that is handed out temporarily.

Example: 2026-12-31T23:59:59.000Z
mode
​string · enum

Whether this link controls the target or only shows a public view. Defaults to CONTROL if omitted, for compatibility with callers that predate this field.

Enum values:
CONTROL
VIEW
Example: CONTROL

NfcTargetType

string · enum
Enum values:
ROOM
DEVICE
ZONE
TENANT

Target type

GenerateNfcTokenResponseDto

token
​string · required

Encrypted NFC token

Example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
publicUrl
​string · required

Public URL for NFC page

Example: http://localhost:3000/nfc/eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
nfcId
​string · required

NFC document ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
targetType
​string · enum · required

Target type

Enum values:
ROOM
DEVICE
ZONE
TENANT
Example: ROOM
targetId
​string · required

Target ID (room or device)

Example: 64b7f1e6f9c9d4e5b8a9f7c3
targetName
​string · required

Target name

Example: Conference Room A
createdAt
​string · date-time · required

Created at timestamp

Example: 2026-02-06T08:30:00.000Z
mode
​string · enum

Whether this link controls devices or only shows a public view

Enum values:
CONTROL
VIEW
Example: CONTROL
publicDatapoints
​string[]

Public datapoints enabled for a VIEW-mode link

Enum values:
REALTIME_POWER
TEMPERATURE
HUMIDITY
WATER_FLOW
rangeDays
​number

Days of realtime power history shown on a VIEW-mode link, counted back from now

Example: 2
expiresAt
​string · date-time

When this link stops working. Absent if it never expires.

Example: 2026-12-31T23:59:59.000Z

NfcViewOptionsDto

publicDatapoints
​string[]

Public datapoints to enable. TEMPERATURE/HUMIDITY need an ENV_SENSOR (Euna, Kelvin) or AIRCON_CONTROL (Maxwell Pro/Ultra) in the target. Defaults to [REALTIME_POWER] if omitted.

Enum values:
REALTIME_POWER
TEMPERATURE
HUMIDITY
WATER_FLOW
rangeDays
​number · min: 1 · max: 14

How many days of history to show, for every enabled datapoint. Defaults to 2 if omitted.

Example: 1
expiresAt
​string · date-time

When this link stops working. Omit for a token that never expires — prefer setting it for any tag that is handed out temporarily.

Example: 2026-12-31T23:59:59.000Z

NfcTokenInfoDto

nfcId
​string · required

NFC document ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
targetType
​string · enum · required

Target type

Enum values:
ROOM
DEVICE
ZONE
TENANT
Example: ROOM
targetId
​string · required

Target ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
targetName
​string · required

Target name

Example: Conference Room A
usageCount
​number · required

Token usage count

Example: 42
isActive
​boolean · required

Whether token is active

Example: true
token
​string · required

Encrypted token string

Example: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
createdAt
​string · date-time · required

Created at timestamp

Example: 2026-02-06T08:30:00.000Z
mode
​string · enum

Whether this link controls devices or only shows a public view

Enum values:
CONTROL
VIEW
Example: CONTROL
publicDatapoints
​string[]

Public datapoints enabled for a VIEW-mode link

Enum values:
REALTIME_POWER
TEMPERATURE
HUMIDITY
WATER_FLOW
rangeDays
​number

Days of realtime power history shown on a VIEW-mode link, counted back from now

Example: 2
lastUsed
​string · date-time

When this token was last used to control or read a target

Example: 2026-09-18T08:30:00.000Z
expiresAt
​string · date-time

Optional expiration date

Example: 2026-12-06T08:30:00.000Z

ListNfcTokensResponseDto

​object[] · required

List of NFC tokens

total
​number · required

Total number of tokens

Example: 5

NfcToggleDto

onStatus
​string · enum · required

Target device status

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
deviceId
​string

Optional device ID to toggle specific device in room (room tokens only)

Example: 64b7f1e6f9c9d4e5b8a9f7c3

NfcToggleResponseDto

successful
​string[] · required

Successfully toggled device IDs

Example: ["64b7f1e6f9c9d4e5b8a9f7c3","64b7f1e6f9c9d4e5b8a9f7c4"]
failed
​string[] · required

Failed device IDs

Example: []
total
​number · required

Total devices attempted

Example: 2
action
​string · enum · required

Action performed

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetName
​string · required

Target name

Example: Conference Room A

NfcAnalyticsQueryDto

startDate
​string · date-time · required

Start date for analytics query

Example: 2026-02-01T00:00:00.000Z
endDate
​string · date-time · required

End date for analytics query

Example: 2026-02-06T23:59:59.999Z

NfcTargetInfoDto

id
​string · required

Target ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

Target name

Example: Conference Room A
type
​string · enum · required

Type of NFC target (DEVICE, ROOM, USER)

Enum values:
ROOM
DEVICE
ZONE
TENANT
Example: ROOM
onStatus
​string · enum

Device ON/OFF status (only for DEVICE targets)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON

NfcControllableFeaturesDto

temperature
​boolean · required

Whether temperature control is supported

Example: true
mode
​boolean · required

Whether operating mode control is supported

Example: true
fan
​boolean · required

Whether fan speed control is supported

Example: true
swing
​boolean · required

Whether swing control is supported

Example: false

NfcGangSwitchStateDto

gangNumber
​number · required

Gang number (1-4)

Example: 1
onStatus
​string · enum · required

ON/OFF status of this gang

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
label
​string

Optional label for the gang

Example: Main Light

NfcDeviceInfoDto

id
​string · required

Device ID

Example: 64b7f1e6f9c9d4e5b8a9f7c3
name
​string · required

Device name

Example: Coffee Machine
deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
onStatus
​string · enum · required

Device ON/OFF status

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: OFF
temperature
​number

Temperature setting in Celsius (AIRCON_CONTROL only)

Example: 24
mode
​string · enum

Aircon operating mode (AIRCON_CONTROL only)

Enum values:
COOL
HEAT
DRY
FAN
AUTO
Example: COOL
fan
​string · enum

Fan speed setting (AIRCON_CONTROL only)

Enum values:
LOW
MEDIUM
HIGH
AUTO
Example: AUTO
swing
​string · enum

Swing setting (AIRCON_CONTROL only)

Enum values:
ON
OFF
AUTO
Example: OFF
brand
​string · enum

Aircon brand (AIRCON_CONTROL only)

Enum values:
DAIKIN
MITSUBISHI
PANASONIC
LG
SAMSUNG
FUJITSU
TOSHIBA
SHARP
Example: DAIKIN
​object

Indicates which control features are physically supported by this aircon (AIRCON_CONTROL only)

numberOfGangs
​number · min: 1 · max: 4

Number of gangs/buttons on the switch (SMART_SWITCH only)

Example: 2
​object[]

Individual gang switch states (SMART_SWITCH only)

Example: [{"gangNumber":1,"onStatus":"ON","label":"Main Light"},{"gangNumber":2,"onStatus":"OFF","label":"Accent Light"}]
switchType
​string · enum

Type of appliance the switch controls (SMART_SWITCH only)

Enum values:
UNREGISTERED
LIGHT
FAN
AIRCON
Example: LIGHT
totalEnergyUsage
​number

Total energy usage in watt-hours (PLUG/MCB only)

Example: 125000

DateRangeDto

startDate
​string · date-time · required

Start date of the queried range

Example: 2026-02-01T00:00:00.000Z
endDate
​string · date-time · required

End date of the queried range

Example: 2026-02-06T23:59:59.999Z

EnvironmentRealtimeDataPointDto

createdAt
​string · date-time · required

Start timestamp of the downsampled bucket

Example: 2026-09-18T07:00:00.000Z
temperature
​number

Average temperature for the bucket, in degrees Celsius

Example: 24.5
humidity
​number

Average relative humidity for the bucket, as a percentage

Example: 65

EnvironmentRealtimeSeriesDto

deviceName
​string · required
deviceType
​string · enum · required

Subtype the readings came from — ENV_SENSOR (Euna/Kelvin) or AIRCON_CONTROL (Maxwell Pro/Ultra ambient readings)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: ENV_SENSOR
​object[] · required

EnvironmentRealtimeResponseDto

​object[] · required

One series per contributing sensor in the target

averageTemperature
​number

Mean temperature across the sensors, in degrees Celsius. Omitted when only one sensor reported — its own series is already the answer.

Example: 24.5
averageHumidity
​number

Mean relative humidity across the sensors, as a percentage. Omitted when only one sensor reported.

Example: 65

WaterRealtimeDataPointDto

createdAt
​string · date-time · required

Start timestamp of the downsampled bucket

Example: 2026-09-18T07:00:00.000Z
flowRate
​number · required

Mean flow rate over the bucket, in m³/h

Example: 1.4

WaterRealtimeSeriesDto

deviceName
​string · required
​object[] · required

WaterRealtimeResponseDto

​object[] · required

One series per contributing water meter in the target

totalFlowRate
​number

Flow rate summed across the meters, in m³/h — meters on separate pipes add up rather than averaging. Omitted when only one meter reported.

Example: 2.8

NfcAnalyticsResponseDto

​object · required

Target information

​object[] · required

Usage history data by day with cost breakdown

​object · required

Date range queried

mode
​string · enum

Whether this link is CONTROL or VIEW mode

Enum values:
CONTROL
VIEW
Example: CONTROL
deviceType
​string · enum

Device type (for device-level tokens only)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: AIRCON_CONTROL
​object

Device details with current state (for device-level tokens)

​object

Room details (for room-level tokens)

​object[]

Device list (only for ROOM tokens, includes all toggleable devices in the room)

​object

Live realtime power series, present only for VIEW-mode links with REALTIME_POWER enabled. Always covers the token rangeDays back from now, not the requested dateRange.

​object

Live ambient temperature/humidity series from the ENV_SENSOR and AIRCON_CONTROL devices in the target, present on any link that enables TEMPERATURE and/or HUMIDITY. A metric that was not enabled is stripped from every point. Always covers the token rangeDays back from now, not the requested dateRange, which may differ from the window usageHistory was computed over.

​object

Live water flow-rate series from the WATER_METER devices in the target, present only on links that enable WATER_FLOW. Always covers the token rangeDays back from now, not the requested dateRange.

NfcAirconControlDto

deviceId
​string

Specific device ID to control (for room-level tokens)

Example: 507f1f77bcf86cd799439011
power
​string · enum

Power ON/OFF control

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
temperature
​number · min: 16 · max: 30

Temperature setting in Celsius (16-30)

Example: 24
mode
​string · enum

Aircon operating mode

Enum values:
COOL
HEAT
DRY
FAN
AUTO
Example: COOL
fan
​string · enum

Fan speed setting

Enum values:
LOW
MEDIUM
HIGH
AUTO
Example: AUTO
swing
​string · enum

Swing setting for aircon vents

Enum values:
ON
OFF
AUTO
Example: ON

NfcControlResponseDto

success
​boolean · required

Whether the control operation was successful

Example: true
message
​string · required

Human-readable message describing the result

Example: Device controlled successfully
​object · required

Updated device information after control operation

NfcSmartSwitchControlDto

deviceId
​string

Specific device ID to control (for room-level tokens)

Example: 507f1f77bcf86cd799439011
power
​string · enum

Power ON/OFF control

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
gangNumber
​number · min: 1 · max: 4

Gang number to control (1-4). Omit to control all gangs.

Example: 2
onStatus
​string · enum

ON/OFF status for the targeted gang(s)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON

NfcControlDto

deviceId
​string

Specific device ID to control (for room-level tokens)

Example: 507f1f77bcf86cd799439011
power
​string · enum

Power ON/OFF control

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON

GenerateSignupTokensDto

role
​string · enum · required

Role the created accounts receive, which decides what each claim creates: TENANT → a new Tenant entity in the system, USER → a new Zone under parentId, ROOM → a new Room under parentId, ADMIN → nothing (the account just joins the system), DEVELOPER → nothing (a sandbox-only account on the system, issued as a 6-digit code instead of a QR token). SUPERADMIN is never accepted.

Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER
Example: TENANT
count
​number · min: 1 · max: 500 · required

How many stickers to print. Tokens are interchangeable — none is tied to a particular space — so this is simply the number of boxes you are handing out, and it doubles as the cap on how many accounts the batch can create.

Example: 30
parentId
​string

The container each claim creates its space inside. Required for USER (a Tenant id) and ROOM (a Zone id), since a Zone needs a parent Tenant and a Room needs a parent Zone. Omit for TENANT and ADMIN.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
expiresInDays
​number · min: 1 · max: 365

Days until the stickers stop working. Set this to the rollout window — a sticker that outlives its handover is a standing credential.

Example: 90
Default: 90

GeneratedSignupTokenDto

_id
​string · required

Primary ID of the signup token record

Example: 64b7f1e6f9c9d4e5b8a9f7c3
role
​string · enum · required

Role the account created from this sticker will receive

Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER
Example: TENANT
token
​string · required

The plaintext token. Returned once, at generation, and never again.

Example: x7Fq2mR8vLpN4wKdY6bT1sHgJ3cZaQeU5oXiV9nMrPk
signupUrl
​string · required

Full URL to encode as the QR code. Host depends on role — TENANT/USER land on base, ROOM on trek, ADMIN on everest.

Example: https://base.ecovolt.ai/join/x7Fq2mR8vLpN4wKdY6bT1sHgJ3cZaQeU5oXiV9nMrPk
expiresAt
​string · date-time · required

When the sticker stops working

Example: 2026-11-20T08:30:00.000Z

GenerateSignupTokensResponseDto

​object[] · required

One entry per printable sticker. Capture these now — the plaintext tokens are not retrievable later.

SignupTokenStatus

string · enum
Enum values:
UNUSED
SCANNED
CONSUMED
EXPIRED
REVOKED

GetSignupTokenDto

_id
​string · required

Primary ID of the signup token record

Example: 64b7f1e6f9c9d4e5b8a9f7c3
role
​string · enum · required

Role the account created from this sticker receives

Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER
Example: TENANT
status
​string · enum · required

Derived lifecycle state

Enum values:
UNUSED
SCANNED
CONSUMED
EXPIRED
REVOKED
Example: UNUSED
expiresAt
​string · date-time · required

When the sticker stops working

Example: 2026-11-20T08:30:00.000Z
createdAt
​string · date-time · required

When the sticker was generated

Example: 2026-08-22T08:00:00.000Z
createdEntityLabel
​string

Name of the space this sticker created when it was claimed. Absent until then — stickers are interchangeable and name nothing in advance.

Example: Block 123 #04-12
createdEntityId
​string

ID of the space created on claim

Example: 64b7f1e6f9c9d4e5b8a9f7c4
claimedByEmail
​string

Email of the account that claimed this sticker

Example: felicia@gmail.com
firstScannedAt
​string · date-time

When the sticker was first scanned — the gap to now tells the operator whether a box was ever opened

Example: 2026-08-22T08:30:00.000Z
consumedAt
​string · date-time

When an account was created from this sticker

Example: 2026-08-22T08:34:00.000Z

GetSignupTokensResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Signup tokens matching the query parameters

SignupLinkStatus

string · enum
Enum values:
ACTIVE
CONSUMED
EXPIRED

Which of the three screens the page should render

SignupLinkInfoDto

status
​string · enum · required

Which of the three screens the page should render

Enum values:
ACTIVE
CONSUMED
EXPIRED
Example: ACTIVE
systemName
​string · required

System the account will be created in, for the page heading

Example: Marina Bay Residences
role
​string · enum · required

Role the created account will receive

Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER
Example: TENANT
requiresSpaceName
​boolean · required

Whether the form must collect a name for the space being created. False only for ADMIN links, which create no space.

Example: true
windowExpiresAt
​string · date-time

When the current activation window closes. Only present while ACTIVE — a form submitted after this is rejected, and the page should tell the user to scan again.

Example: 2026-08-22T09:30:00.000Z
createdEntityLabel
​string

Name of the space that was created, once the link has been claimed. Lets the CONSUMED screen say what it registered.

Example: Block 123 #04-12

SignUpWithLinkDto

name
​string · required

Full name of the person registering

Example: Felicia Chia
email
​string · required

Email address for the new account (must be unique)

Example: felicia@gmail.com
password
​string · required

Account password (minimum 6 characters)

Example: SecurePass123
acceptedTerms
​boolean · required

Whether the person accepted the Terms & Conditions. Must be true.

Example: true
spaceName
​string

Name for the space being created — the unit, zone or room this person occupies. Required unless the link reports requiresSpaceName: false (ADMIN links, which create no space).

Example: Block 123 #04-12
app
​string · enum

Frontend app the signup came from. A named web app receives the session as httpOnly cookies instead of in the response body.

Enum values:
everest
base
docs
trek
emulator
beacon
bi
vista
Example: base

OAuthSignUpWithLinkDto

credential
​string · required

Provider ID token (JWT credential) obtained client-side by the in-page sign-in button. Verified server-side.

Example: eyJhbGciOiJSUzI1NiIsImtpZCI6...
acceptedTerms
​boolean · required

Whether the person accepted the Terms & Conditions. Must be true — the provider cannot consent on their behalf.

Example: true
spaceName
​string

Name for the space being created — the unit, zone or room this person occupies. Required unless the link reports requiresSpaceName: false (ADMIN links, which create no space).

Example: Block 123 #04-12
app
​string · enum

Frontend app the signup came from. A named web app receives the session as httpOnly cookies instead of in the response body.

Enum values:
everest
base
docs
trek
emulator
beacon
bi
vista
Example: base

WaterMeterSize

string · enum
Enum values:
DN15
DN20
DN25
DN32
DN40
DN50

Pipe diameter size (DN15, DN20, DN25, etc.)

WaterMeter

_id
​string · required

Primary ID of the Device

Example: 64b7f1e6f9c9d4e5b8a9f7c3
deviceType
​string · enum · required

Type of device (discriminator field)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
Example: PLUG
macId
​string · required

MAC ID of the Device (from IoT device)

Example: 1092384701928347
deviceName
​string · required

Name of the Device

Example: Living Room AC
deviceNumber
​number · required

Unique device number for identification

Example: 1
onStatus
​string · enum · required

Status of the Device (ON / OFF / INACTIVE / ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
location
​string · required

Physical location or address where the device is installed

Example: Room 101, Building A
remarks
​string · required

Remarks for the Device

batchNumber
​number · required

Manufacturing batch number for tracking production groups

Example: 1
chipModel
​string · enum · required

Hardware chip model identifier used in the device

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
Example: ESP32C2
versionNumber
​string · required

Firmware version number currently running on the device

Example: 1.0.0
ssid
​string · required

Network SSID (Wi-Fi name) that the device is connected to

Example: IoT-Network-5G
​object · required

Tagged Tenant

​object · required

Tagged Zone

​object · required

Tagged Room

​object · required

Tagged System

createdAt
​string · date-time · required

Date Time of the Creation

Example: 2021-09-01
updatedAt
​string · date-time · required

Date Time of the Update

Example: 2021-09-01
lastSeen
​string · date-time · required

Last time the device was seen/reported

Example: 2021-09-01
isLocked
​boolean · required

Whether the device is locked. When locked, the device on/off status cannot be toggled.

Example: false
totalEnergyUsage
​number · required

Total cumulative energy usage in kWh

Example: 0
totalEnergySaved
​number · required

Total energy saved through optimization in kWh

Example: 0
autoUpdateAttempts
​number · required

Number of auto-update OTA attempts sent to this device

Example: 0
autoUpdateBlacklisted
​boolean · required

Whether device is blacklisted from auto-updates (max retries exceeded)

Example: false
manualUpdateBlacklist
​boolean · required

Whether device is manually blacklisted from auto-updates by admin

Example: false
inactivityNotificationEnabled
​boolean · required

Whether inactivity notifications are enabled for this device

Default: false
meterSize
​string · enum · required

Pipe diameter size (DN15, DN20, DN25, etc.)

Enum values:
DN15
DN20
DN25
DN32
DN40
DN50
flowRate
​number · required

Current flow rate (m³/h)

velocity
​number · required

Flow velocity (m/s)

soundSpeed
​number · required

Speed of sound in fluid (m/s)

signalQuality
​number · required

Ultrasonic signal quality (no units)

totalNetVolume
​number · required

Total net water volume since device registration (L)

Default: 0
isLeakDetected
​boolean · required

Whether a leak is currently detected

leakThresholdFlowRate
​number · required

Current leak detection threshold (m³/h)

Default: 5
targetState
​string · enum

Pending desired on/off state commanded by backend (cloud / scheduled). Set when a toggle is issued; cleared when the device reports a matching state or a physical (MANUAL) press overrides it. Always ON or OFF when present.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when targetState was last written. Used to expire stale SCHEDULED intents (24hr TTL). CLOUD intents do not expire.

Example: 2026-05-25T08:00:00.000Z
targetSource
​string · enum

Origin of the pending targetState. Drives TTL behavior on reconcile. Only CLOUD / SCHEDULED are ever written here.

Enum values:
MANUAL
CLOUD
SCHEDULED
ECOGUARD
WATCHDOG
LWT
UNKNOWN
BOOTUP
Example: CLOUD
deviceModel
​string

Model name or identifier of the device

Example: TP-Link HS110
deviceBrand
​string

Brand or manufacturer of the device

Example: TP-Link
wifiError
​string

Last WiFi shadow delta failure reported by the device (e.g. join_failed); cleared once it reports a successful join

Example: join_failed
wifiDesiredSsid
​string

Primary SSID the device was last told to join. Set at send time on both the shadow and legacy changeWifi paths; convergence is ssid matching any desired SSID.

Example: Corp-IoT
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join. See {@link wifiDesiredSsid}.

Example: Corp-IoT-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them.

Example: ["Corp-IoT","Corp-IoT-2","Corp-IoT-3"]
config
​object

Settings as last reported by the device into its config shadow, one block per feature

pendingConfig
​object

Settings written to the config shadow but not yet reported back. A key the device reports at a different value was rejected

configRequestedAt
​string · date-time

When settings were last written to the config shadow

configReportedAt
​string · date-time

When the device last reported into its config shadow

rssi
​number

Latest WiFi signal strength reported by the device (dBm). Updated on each realtime MQTT report.

Example: -65
isPhaseChild
​boolean

True when this row is one phase of a split COIL3P rather than a physical unit. Such rows have no real MAC, never report telemetry, and are excluded from firmware, OTA, provisioning and panel-slot views.

Example: false
isRidgeChild
​boolean

True when this row is a unit behind a RIDGE gateway rather than a directly-connected unit. Such rows have no real MAC, are never fleet-provisioned, and are excluded from firmware, OTA and liveness watchdogs — their gateway carries those.

Example: false
hasPhaseChildren
​boolean

True when this clamp has been split into per-phase children. Such a clamp is org-detached and excluded from energy and organisational views — its children carry those — while remaining the sole target for firmware, OTA and diagnostics.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
​object

Schedule configuration for the device. Contains recurring weekly schedules and one-time scheduled tasks.

scheduleId
​null | string

Id of the single Schedule (in the schedules collection) this device currently follows. deviceSchedule is compiled from that schedule. When null, the device follows nothing.

Example: 507f1f77bcf86cd799439011
realTimePower
​number

Real-time power consumption in watts

Example: 1500
realTimeCurrent
​number

Real-time current in amperes

Example: 6.5
lastAutoUpdateAttempt
​string · date-time

Timestamp of last auto-update OTA attempt

inactivityNotificationSentAt
​string · date-time

Timestamp when the last inactivity notification was sent for this device

thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
​object

Threshold limits sent to the device but not yet confirmed by its firmware. Keys match DeviceThresholdsDto. Present only while a save is outstanding — a key that persists here is not being enforced by the hardware.

​object

This device's alert thresholds gathered into one object. Which fields are populated depends on deviceType — see DeviceThresholdsDto. Absent when no thresholds are configured. The same values remain available as flat top-level fields.

meterModel
​string

Meter model/manufacturer

meterConnected
​boolean

Whether the meter is physically connected

inletTemperature
​number

Latest inlet water temperature (°C)

outletTemperature
​number

Latest outlet water temperature (°C)

energyFlowRate
​number

Latest thermal energy flow rate (GJ/h)

flowRateMax
​number

Max threshold flow rate (m³/h)

Example: 10
flowRateMin
​number

Min threshold flow rate (m³/h)

Example: 0
inletTemperatureMax
​number

Max threshold inlet temperature (°C)

Example: 60
inletTemperatureMin
​number

Min threshold inlet temperature (°C)

Example: 0
outletTemperatureMax
​number

Max threshold outlet temperature (°C)

Example: 60
outletTemperatureMin
​number

Min threshold outlet temperature (°C)

Example: 0
lastLeakNotificationAt
​string · date-time

Timestamp of last leak notification received

notificationThresholdHour
​number

Hourly notification threshold — minimum hours between repeat notifications of the same type

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000

FilteredWaterMeterDto

_id
​string · required

Unique database identifier of the device document in the system

Example: 64b7f1e6f9c9d4e5b8a9f7c3
macId
​string · required

Unique identifier assigned to the device by the IoT hardware (MAC ID)

Example: 1092384701928347
deviceName
​string · required

Friendly name for the device for easy identification

Example: Living Room AC
onStatus
​string · enum · required

Current operational status of the device (ON, OFF, INACTIVE, or ERROR)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
totalEnergyUsage
​number · required

Cumulative total energy consumption in kilowatt-hours (kWh) since device installation

Example: 500
tenantId
​string · required

Unique identifier of the tenant organization that owns this device

Example: 64b7f1e6f9c9d4e5b8a9f7c4
tenantName
​string · required

Name of the tenant organization that owns this device

Example: Faculty of Engineering
zoneId
​string · required

Unique identifier of the zone that this device is assigned to

Example: 64b7f1e6f9c9d4e5b8a9f7c5
zoneName
​string · required

Name of the zone that this device is assigned to

Example: Zone A
roomId
​string · required

Unique identifier of the room where this device is physically located

Example: 64b7f1e6f9c9d4e5b8a9f7c6
roomName
​string · required

Name of the room where this device is physically located

Example: Room 101
dbId
​string · required

Unique identifier of the distribution box that this device is connected to (for MCBs)

Example: 64b7f1e6f9c9d4e5b8a9f7c7
dbName
​string · required

Name of the distribution box that this device is connected to (for MCBs)

Example: Main Distribution Box
systemId
​string · required

Unique identifier of the system that this device belongs to

Example: 64b7f1e6f9c9d4e5b8a9f7c3
systemName
​string · required

Name of the system that this device belongs to

Example: NUS Engineering Building
realTimePower
​number · required

Real-time power consumption in watts (W) measured by the device

Example: 115
realTimeCurrent
​number · required

Real-time current draw in amperes (A) measured by the device

Example: 0.5
ssid
​string · required

Network SSID (Wi-Fi name) that the device is currently connected to

Example: XH001
meterSize
​string · enum · required

Pipe diameter size (DN15, DN20, DN25, etc.)

Enum values:
DN15
DN20
DN25
DN32
DN40
DN50
flowRate
​number · required

Current flow rate (m³/h)

Example: 0
velocity
​number · required

Flow velocity (m/s)

Example: 0
soundSpeed
​number · required

Speed of sound in fluid (m/s)

Example: 0
signalQuality
​number · required

Ultrasonic signal quality (no units)

Example: 0
totalNetVolume
​number · required

Total net water volume since device registration (L)

Default: 0
isLeakDetected
​boolean · required

Whether a leak is currently detected

Example: false
leakThresholdFlowRate
​number · required

Current leak detection threshold (m³/h)

Default: 5
targetState
​string · enum

Pending desired on/off state commanded by backend. Present when a toggle was issued but the device has not yet acknowledged (e.g. issued while INACTIVE). Frontend can derive a "Pending" indicator when this differs from onStatus.

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
Example: ON
targetStateSetAt
​string · date-time

Timestamp when the pending targetState was last written.

Example: 2026-05-25T08:00:00.000Z
deviceNumber
​number

Auto-incremented sequential number for tracking device registration order

Example: 3
batchNumber
​number

Manufacturing batch number for tracking production groups and quality control

Example: 23
chipModel
​string · enum

Hardware chip model identifier used in the device (e.g., ESP32C2, ESP8266)

Enum values:
ESP8266
ESP32C2
ESP32C5
ESP32
ESP32C3
ESP32S3
versionNumber
​string

Firmware version number currently running on the device

Example: 1.0.0
wifiDesiredSsid
​string

Primary SSID the device was last told to join

Example: XH001
wifiDesiredSsid2
​string

Secondary SSID the device was last told to join

Example: XH001-2
wifiDesiredSsid3
​string

Tertiary SSID the device was last told to join

Example: XH001-3
wifiSsidPriority
​string[]

Desired SSIDs in the order the device should attempt them

Example: ["XH001","XH001-2","XH001-3"]
​object

Weekly and one-time schedule configuration for automated device control

scheduleId
​null | string

Id of the named Schedule this device currently follows. deviceSchedule is compiled from it. Absent or null when the device follows nothing.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
lastSeen
​string · date-time

Timestamp when the device last communicated with the system

Example: 2024-10-15T12:30:00.000Z
isLocked
​boolean

Lock status indicating if the device is locked

Example: false
inactivityNotificationEnabled
​boolean

Whether inactivity notifications are enabled for this device

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled

Example: true
​object

Alert thresholds configured for this device, gathered into one object. Which fields are populated depends on the device type — see DeviceThresholdsDto. Omitted entirely when nothing is set.

meterModel
​string

Meter model/manufacturer

meterConnected
​boolean

Whether the meter is physically connected

lastLeakNotificationAt
​string · date-time

Timestamp of last leak notification received

flowRateMax
​number

Max threshold flow rate (m³/h)

Example: 10
flowRateMin
​number

Min threshold flow rate (m³/h)

Example: 0
inletTemperature
​number

Latest inlet water temperature (°C)

Example: 25
outletTemperature
​number

Latest outlet water temperature (°C)

Example: 23.5
energyFlowRate
​number

Latest thermal energy flow rate (GJ/h)

Example: 0.05
inletTemperatureMax
​number

Max threshold inlet temperature (°C)

Example: 60
inletTemperatureMin
​number

Min threshold inlet temperature (°C)

Example: 0
outletTemperatureMax
​number

Max threshold outlet temperature (°C)

Example: 60
outletTemperatureMin
​number

Min threshold outlet temperature (°C)

Example: 0

GetWaterMetersResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

List of water meters with organizational hierarchy details

UpdateWaterMeterDto

deviceName
​string

Name of the device

Example: Living Room Light
location
​string

Physical location of the device

Example: Block 123, Unit 01-23
remarks
​string

Additional remarks or notes about the device

Example: Handle with care - critical equipment
tenantId
​string

Tenant ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c3
zoneId
​string

Zone ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c4
roomId
​string

Room ID to associate the device with

Example: 64b7f1e6f9c9d4e5b8a9f7c5
isLocked
​boolean

Whether the device is locked. When locked, the device cannot be toggled ON/OFF.

Example: false
isSpare
​boolean

Whether the device is a spare/inventory device. Spare devices can be filtered out of user-facing dashboards.

Example: false
thresholdEnabled
​boolean

Whether threshold monitoring is enabled on this device.

Default: false
meterSize
​string · enum

Size/diameter of the water meter

Enum values:
DN15
DN20
DN25
DN32
DN40
DN50
meterModel
​string

Model name/number of the water meter

Example: Sensus 620M

SetLeakThresholdDto

flowRateMax
​number · min: 0 · required

Leak detection threshold flow rate (m³/h)

Example: 5

LeakHistoryResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of leak detection notifications

AlertThresholdHistory

waterMeter
​string · required

Water meter ID

flowRateMax
​number · required

Max flow rate threshold confirmed by device (m³/h)

Example: 10
createdAt
​string · date-time · required

Timestamp when this record was created

updatedAt
​string · date-time · required

Timestamp when this record was last updated

inletTemperatureMax
​number

Max inlet temperature threshold confirmed by device (°C)

Example: 60
inletTemperatureMin
​number

Min inlet temperature threshold confirmed by device (°C)

Example: 0
outletTemperatureMax
​number

Max outlet temperature threshold confirmed by device (°C)

Example: 60
outletTemperatureMin
​number

Min outlet temperature threshold confirmed by device (°C)

Example: 0

ThresholdHistoryResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of threshold configuration history records

WaterMeterLatestReadingDto

flowRate
​number · required

Current flow rate (m³/h)

Example: 1.5
velocity
​number · required

Flow velocity (m/s)

Example: 0.8
soundSpeed
​number · required

Speed of sound in fluid (m/s)

Example: 1480.5
signalQuality
​number · required

Ultrasonic signal quality (no units)

Example: 85
lastSeen
​string · date-time · required

Last time the device sent data

Example: 2026-01-14T10:08:20.717Z
meterConnected
​boolean

Whether the meter is physically connected

inletTemperature
​number

Inlet water temperature (°C)

Example: 25
outletTemperature
​number

Outlet water temperature (°C)

Example: 23.5
energyFlowRate
​number

Thermal energy flow rate (GJ/h)

Example: 0.05

BulkSetLeakThresholdDto

waterMeterIds
​string[] · required

Array of water meter IDs to update

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
flowRateMax
​number · required

Leak detection threshold flow rate (m³/h)

Example: 5

FailedWaterMeterDto

waterMeterId
​string · required

Water meter ID that failed

Example: 507f1f77bcf86cd799439011
error
​string · required

Error message explaining why it failed

Example: Water meter not found

BulkWaterMeterResponseDto

​object[] · required

Array of successfully processed water meters

​object[] · required

Array of failed water meters with error details

summary
​string · required

Summary of the bulk operation

Example: Successfully processed 8 out of 10 water meters

BulkUpdateWaterMeterThresholdsDto

waterMeterIds
​string[] · required

IDs of water meters to update

flowRateMax
​number

Max threshold flow rate (m³/h)

Example: 10
flowRateMin
​number

Min threshold flow rate (m³/h)

Example: 0
notificationThresholdHour
​number

Hourly notification threshold — minimum hours between repeat notifications

Example: 4
notificationCooldown
​number

Hardware notification cooldown in milliseconds — minimum time the device waits between sending repeated notifications

Example: 300000
Default: 300000

HealthCheckDto

status
​string · required

Server health status

Example: ok
timestamp
​string · required

ISO timestamp of the health check

Example: 2026-01-18T12:00:00.000Z

DashboardLayoutItemDto

i
​string · required

Panel ID reference

Example: 64b7f1e6f9c9d4e5b8a9f7c3
x
​number · required

X position in grid

Example: 0
y
​number · required

Y position in grid

Example: 0
w
​number · required

Width in grid units

Example: 6
h
​number · required

Height in grid units

Example: 4
minW
​number

Minimum width

minH
​number

Minimum height

maxW
​number

Maximum width

maxH
​number

Maximum height

static
​boolean

Whether the item is static/immovable

CreateDashboardDto

name
​string · required

Name of the dashboard

Example: Main Controller Dashboard
description
​string

Short explanation of what this dashboard shows

Example: Building-wide energy, cost and device health
icon
​string

Icon name rendered by the frontend beside the dashboard name

Example: building
refreshInterval
​number · min: 0

Auto-refresh interval in seconds. Set to 0 to disable auto-refresh.

Example: 5
Default: 5
​object[]

Layout configuration

panelIds
​string[]

Panel IDs to include

globalTransformIds
​string[]

Global Transform IDs

DashboardResponseDto

_id
​string · required

Dashboard ID

system
​string · required

System ID

name
​string · required

Name of the dashboard

isDefault
​boolean · required

Whether this is the system default dashboard

Default: false
​object[] · required

Layout configuration

panels
​string[] · required

Panel IDs or populated panels

createdAt
​string · date-time · required
updatedAt
​string · date-time · required
description
​string

Short explanation of what this dashboard shows

icon
​string

Icon name for the frontend

templateKey
​string

Key of the template this dashboard was created from

Example: PROPERTY_OVERVIEW
refreshInterval
​number

Auto-refresh interval in seconds. 0 means disabled.

Example: 5
globalTransforms
​string[]

Global transform IDs or populated transforms

GetMyDeviceTypesResponseDto

deviceTypes
​string[] · required

Distinct device types accessible to the authenticated account

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL

DashboardTemplatePreviewItemDto

title
​string · required

Panel title as the template creates it

x
​number · required

Column offset in a 12-column grid

y
​number · required

Row offset in grid units

w
​number · required

Width in grid columns

h
​number · required

Height in grid units

DashboardTemplateResponseDto

key
​string · required

Stable template key, passed to createDashboardFromTemplate

Example: PROPERTY_OVERVIEW
name
​string · required

Template name shown on the card

description
​string · required

What the template sets up

panelCount
​number · required

How many panels the template creates

requiredFeatures
​string[] · required

Features the system must have enabled

Enum values:
ZONE_MANAGEMENT
ROOMS_MANAGEMENT
RELATIONSHIP_MAP
ADMIN_PANEL
TENANT_MANAGEMENT
SMART_PLUGS
AI_FEATURE
HEATMAP
requiredDeviceTypes
​string[] · required

The system must own at least one device of one of these types. Empty means the template works anywhere.

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
​object[] · required

The panels this template lays out, in creation order, so the picker can show what the dashboard will look like before it is created.

matchedDeviceTypes
​string[] · required

The required device types this system actually owns. Drives the recommendation and lets the picker say why a template was suggested.

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
recommended
​boolean · required

True for the single template that best fits this system's devices. Falls back to the default template when nothing matches more strongly.

available
​boolean · required

Whether this template can be applied to this system now

icon
​string

Icon name for the frontend

disabledReason
​string

Why the template is unavailable. Absent when available.

Example: No env sensor devices on this system

ListDashboardTemplatesResponseDto

​object[] · required

Every template, including ones this system cannot use — those come back with available=false and a reason rather than being omitted.

DashboardDetailResponseDto

_id
​string · required

Dashboard ID

system
​string · required

System ID

name
​string · required

Name of the dashboard

isDefault
​boolean · required

Whether this is the system default dashboard

Default: false
​object[] · required

Layout configuration

​array · required

Populated panels. Discriminate on panelType — EXTERNAL, ECOVOLT or BUILTIN.

createdAt
​string · date-time · required
updatedAt
​string · date-time · required
description
​string

Short explanation of what this dashboard shows

icon
​string

Icon name for the frontend

templateKey
​string

Key of the template this dashboard was created from

refreshInterval
​number

Auto-refresh interval in seconds. 0 means disabled.

Example: 5
​object[]

Populated global transformers

UpdateDashboardDto

name
​string

Name of the dashboard

Example: Main Controller Dashboard
description
​string

Short explanation of what this dashboard shows

Example: Building-wide energy, cost and device health
icon
​string

Icon name rendered by the frontend beside the dashboard name

Example: building
refreshInterval
​number · min: 0

Auto-refresh interval in seconds. Set to 0 to disable auto-refresh.

Example: 5
Default: 5
​object[]

Layout configuration

panelIds
​string[]

Panel IDs to include

globalTransformIds
​string[]

Global Transform IDs

DataSourceType

string · enum
Enum values:
REST_API

Type of data source

AuthType

string · enum
Enum values:
BEARER
API_KEY_HEADER
NONE

How the API key is sent. BEARER = Authorization: Bearer , API_KEY_HEADER = custom header (default x-api-key), NONE = no auth

CreateDataSourceDto

name
​string · required

Name of the data source

Example: Main InfluxDB
type
​string · enum · required

Type of data source

Enum values:
REST_API
url
​string · required

Base URL

Example: https://influxdb.example.com
authType
​string · enum

How the API key is sent. BEARER = Authorization: Bearer , API_KEY_HEADER = custom header (default x-api-key), NONE = no auth

Enum values:
BEARER
API_KEY_HEADER
NONE
Default: BEARER
apiKeyHeaderName
​string

Custom header name when authType is API_KEY_HEADER (defaults to x-api-key)

Example: x-api-key
apiKey
​string

API Key (will be encrypted before storage)

DataSourceResponseDto

_id
​string · required

Data source ID

system
​string · required

System ID

name
​string · required

Name of the data source

type
​string · enum · required

Type of data source

Enum values:
REST_API
url
​string · required

Base URL

createdAt
​string · date-time · required
updatedAt
​string · date-time · required
authType
​string · enum

How the API key is sent

Enum values:
BEARER
API_KEY_HEADER
NONE
apiKeyHeaderName
​string

Custom header name when authType is API_KEY_HEADER

connectionParams
​object

Connection parameters

DiscoveredFieldDto

name
​string · required

Property name in the response payload

kind
​string · enum · required

Best-effort classification used to suggest chart axes. Time fields suit the X axis, numeric fields the Y axis.

Enum values:
time
number
other

DiscoveredOperationDto

path
​string · required

Path relative to the data source base URL

method
​string · enum · required

HTTP method

Enum values:
GET
POST
PUT
PATCH
DELETE
​object[] · required

Properties of the success response schema

summary
​string

Operation summary from the spec

operationId
​string

operationId declared in the spec

DiscoverEndpointsResponseDto

​object[] · required

Operations found in the data source API spec

specUrl
​string

URL the spec was ultimately read from, when one was found

UpdateDataSourceDto

name
​string

Name of the data source

Example: Main InfluxDB
type
​string · enum

Type of data source

Enum values:
REST_API
url
​string

Base URL

Example: https://influxdb.example.com
authType
​string · enum

How the API key is sent. BEARER = Authorization: Bearer , API_KEY_HEADER = custom header (default x-api-key), NONE = no auth

Enum values:
BEARER
API_KEY_HEADER
NONE
Default: BEARER
apiKeyHeaderName
​string

Custom header name when authType is API_KEY_HEADER (defaults to x-api-key)

Example: x-api-key
apiKey
​string

API Key (will be encrypted before storage)

CreateTransformerDto

name
​string · required

Name of the transformer

Example: Extract Temperature
type
​string · enum · required

Type of transformation to apply. Raw JSON types: EXTRACT, SELECT, RENAME, FIELDS, FILTER, SORT, LIMIT, REDUCE. DataFrame types (DF_ prefix): DF_RENAME_FIELDS, DF_ORGANIZE_FIELDS, DF_SELECT_FIELDS, DF_FILTER_FIELDS_BY_NAME, DF_FILTER_BY_VALUE, DF_FILTER_BY_QUERY, DF_CALCULATE, DF_CUMULATIVE, DF_REDUCE, DF_GROUP_BY, DF_JOIN, DF_MERGE, DF_CONCATENATE, DF_TIME_SERIES_LONG_TO_WIDE, DF_TIME_SERIES_WIDE_TO_LONG, DF_TIME_SERIES_TO_ROWS, DF_TIME_SERIES_TO_TABLE, DF_PIVOT, DF_ROWS_TO_FIELDS, DF_LABELS_TO_FIELDS, DF_LOOKUP, DF_CONFIG_FROM_QUERY, DF_REGRESSION, DF_EXTRACT_LABELS.

Enum values:
EXTRACT
SELECT
RENAME
FIELDS
FILTER
SORT
LIMIT
REDUCE
config
​object

Configuration object for the transform. Shape depends on the transform type. See TRANSFORMATIONS.md for the full config reference per type.

Example: {}
Default: {}
enabled
​boolean

Whether this transformer is enabled in the pipeline. Disabled transformers are skipped during execution.

Example: true
Default: true
order
​number · min: 0

Execution order within the pipeline. Lower numbers execute first.

Example: 0
Default: 0

UpdateTransformerDto

name
​string

Name of the transformer

Example: Extract Temperature
type
​string · enum

Type of transformation to apply.

Enum values:
EXTRACT
SELECT
RENAME
FIELDS
FILTER
SORT
LIMIT
REDUCE
config
​object

Configuration object for the transform. Shape depends on the transform type. See TRANSFORMATIONS.md for the full config reference per type.

Example: {}
enabled
​boolean

Whether this transformer is enabled in the pipeline. Disabled transformers are skipped during execution.

Example: true
Default: true
order
​number · min: 0

Execution order within the pipeline. Lower numbers execute first.

Example: 0
Default: 0

HealthStatus

string · enum
Enum values:
HEALTHY
WARNING
CRITICAL
OFFLINE

DeviceHealthItemDto

deviceId
​string · required

Device ID

deviceName
​string · required

Device name or macId

healthScore
​number · required

Health score 0-100

Example: 85
healthStatus
​string · enum · required

Health status

Enum values:
HEALTHY
WARNING
CRITICAL
OFFLINE
openAnomalyCount
​number · required

Number of open anomalies

Example: 1
monitoringEnabled
​boolean · required

Whether predictive maintenance monitoring is active for this device

Example: true
Default: true
mlRiskScore
​number

ML model anomaly risk score 0.0–1.0

mlIsAnomaly
​boolean

Whether ML model flagged this device as anomalous

DeviceHealthSummaryDto

​object[] · required
total
​number · required

Total device count (after filtering)

Example: 25
page
​number · required

Current page number

Example: 1
size
​number · required

Items per page

Example: 50

AnomalyType

string · enum
Enum values:
SPIKE
DEGRADATION
DEAD_DEVICE
SPIKE_FREQUENCY
ERRATIC_CONSUMPTION
STANDBY_ANOMALY
POWER_FACTOR_TREND

AnomalySeverity

string · enum
Enum values:
LOW
MEDIUM
HIGH
CRITICAL

AnomalyStatus

string · enum
Enum values:
OPEN
ACKNOWLEDGED
RESOLVED
FALSE_POSITIVE

DeviceAnomalyResponseDto

_id
​string · required

Anomaly ID

device
​string · required

Device ID

system
​string · required

System ID

anomalyType
​string · enum · required
Enum values:
SPIKE
DEGRADATION
DEAD_DEVICE
SPIKE_FREQUENCY
ERRATIC_CONSUMPTION
STANDBY_ANOMALY
POWER_FACTOR_TREND
severity
​string · enum · required
Enum values:
LOW
MEDIUM
HIGH
CRITICAL
detectedAt
​string · date-time · required
baselineValue
​number · required
actualValue
​number · required
deviationPercentage
​number · required
explanation
​string · required
status
​string · enum · required
Enum values:
OPEN
ACKNOWLEDGED
RESOLVED
FALSE_POSITIVE
deviceName
​string

Device name (populated for convenience)

notes
​string

Staff notes about this anomaly

PaginatedAnomaliesDto

​object[] · required
total
​number · required
page
​number · required
size
​number · required

DayType

string · enum
Enum values:
weekday
weekend

DeviceBaselineDataDto

dayType
​string · enum · required
Enum values:
weekday
weekend
Example: weekday
calculatedAt
​string · date-time · required

When baseline was last calculated

windowDays
​number · required

Rolling window in days

Example: 28
healthScore
​number · required

Health score 0-100

Example: 85
hourlyAvgUsage
​number · required

Average hourly energy usage (kWh) while ON

Example: 1.5
hourlyStdDev
​number · required

Std dev of hourly usage

Example: 0.3
dailyAvgUsage
​number · required

Average daily energy usage (kWh)

Example: 12
dailyStdDev
​number · required

Std dev of daily usage

Example: 1.2
peakHourAvg
​number · required

Peak hour average usage (kWh)

Example: 2.1
offPeakHourAvg
​number · required

Off-peak hour average usage (kWh)

Example: 0.8
avgPowerFactor
​number · required

Average power factor

Example: 0.95
avgCurrent
​number · required

Average current (A)

Example: 2.1
avgVoltage
​number · required

Average voltage (V)

Example: 230
avgPower
​number · required

Average power (W)

Example: 480
avgCyclesPerDay
​number · required

Average on/off cycles per day

Example: 4
avgActiveHoursPerDay
​number · required

Average active hours per day

Example: 8
monitoringEnabled
​boolean · required

Whether monitoring is enabled

Example: true
sampleDays
​number · required

Comparable days that contributed to the reference window

Example: 20
recentHourlyAvgUsage
​number · required

Mean hourly usage (kWh) over the last 7 comparable days

Example: 0.42
recentHourlyStdDev
​number · required

Std dev of hourly usage over the last 7 comparable days

Example: 0.18
recentActiveHoursPerDay
​number · required

Mean ON hours per day over the last 7 comparable days

Example: 7.5
recentCyclesPerDay
​number · required

Mean on/off cycles per day over the last 7 comparable days

Example: 5
avgStandbyPower
​number · required

Mean power (W) drawn while OFF — the learned standby signature

Example: 0.6
recentStandbyPower
​number · required

Mean power (W) drawn while OFF over the last 7 days

Example: 0.7
spikeCountRecent
​number · required

Hours above 3σ in the last 7 comparable days

Example: 2
spikeCountPrior
​number · required

Hours above 3σ in the 7 comparable days before that

Example: 1
dailyAvgSlopeRecent
​number · required

Slope of daily usage over the recent window (kWh/day per day)

Example: 0.03
dailyAvgSlopeWindow
​number · required

Slope of daily usage across the reference window (kWh/day per day)

Example: 0.01
powerFactorSlope
​number · required

Slope of daily mean power factor (PF per day). Negative = drifting down.

Example: -0.0008
baselineResetAt
​null | string · date-time

When baseline was last reset

mlRiskScore
​number

ML anomaly risk score 0.0–1.0

mlIsAnomaly
​boolean

Whether ML flagged as anomalous

mlFailureProbability
​number

Supervised P(real fault), once the system has enough triaged anomalies

mlModelType
​string

Which model produced the ML fields: isolation_forest, hybrid, or unavailable

Example: hybrid
mlScoredAt
​string · date-time

When ML score was last updated

DeviceDetailResponseDto

deviceId
​string · required

Device ID

​object[] · required

All anomalies for this device

​object

Weekday baseline

​object

Weekend baseline

UpdateAnomalyStatusDto

status
​string · enum · required

New status for the anomaly

Enum values:
OPEN
ACKNOWLEDGED
RESOLVED
FALSE_POSITIVE
notes
​string · maxLength: 1000

Notes about what happened or actions taken

Example: Checked on-site — compressor wear confirmed. Scheduled for replacement next week.

BulkMonitoringRequestDto

deviceIds
​string[] · required

Device IDs to enable or disable monitoring for

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]

BulkResetBaselineResponseDto

affected
​number · required

Number of devices reset

Example: 3
deviceIds
​string[] · required

Device IDs that were successfully reset

baselineResetAt
​string · date-time · required

Timestamp the reset was triggered

weekdayRecalibratingUntil
​string · date-time · required

Weekday anomaly detection resumes after this date (28 days from reset)

weekendRecalibratingUntil
​string · date-time · required

Weekend anomaly detection resumes after this date (70 days from reset)

message
​string · required

Human-readable confirmation message

ResetHealthScoreRequestDto

deviceIds
​string[]

Device IDs to reset. Omit to reset every PLUG in the system — the usual case after a run of false positives.

Example: ["507f1f77bcf86cd799439011","507f1f77bcf86cd799439012"]
anomalyTypes
​string[]

Only close open anomalies of these types. Omit to close all of them.

Enum values:
SPIKE
DEGRADATION
DEAD_DEVICE
SPIKE_FREQUENCY
ERRATIC_CONSUMPTION
STANDBY_ANOMALY
POWER_FACTOR_TREND

BulkResetHealthScoreResponseDto

affected
​number · required

Number of devices rescored

Example: 12
deviceIds
​string[] · required

Device IDs that were rescored

anomaliesClosed
​number · required

Number of open anomalies marked as false positives

Example: 43
message
​string · required

Human-readable confirmation message

BulkMonitoringResponseDto

affected
​number · required

Number of devices affected

Example: 3
deviceIds
​string[] · required

Device IDs that were successfully updated

message
​string · required

Human-readable confirmation message

Example: Monitoring enabled for 3 device(s).

MlTrainingResponseDto

samplesUsed
​number · required

Number of baseline feature vectors submitted for training

Example: 128
trained
​boolean · required

Whether a model was actually fitted. False when the compute service was unreachable, or when the batch fell below its per-category minimum — a submitted batch is not a trained model.

Example: true
message
​string · required

Human-readable outcome

categoriesTrained
​object

Samples fitted per plug category, keyed by category name

Example: {"AIRCONDITIONER":70,"DESKTOP":58}

SupervisedMlTrainingResponseDto

samplesUsed
​number · required

Triaged anomalies that carried a feature snapshot and could be used as labels

Example: 64
confirmedFaults
​number · required

Of those, how many were RESOLVED — i.e. confirmed real faults

Example: 27
falsePositives
​number · required

Of those, how many were dismissed as FALSE_POSITIVE

Example: 37
trained
​boolean · required

Whether the classifier was fitted. False when there were too few labels, only one class was present, or the compute service was unreachable.

Example: true
message
​string · required

Human-readable outcome

cvRocAuc
​number

Out-of-sample ROC AUC, measured by cross validation before the final fit. Absent when the minority class could not support at least two folds.

Example: 0.88
featureImportances
​object

Relative contribution of each feature, keyed by feature name

Example: {"usage_ratio":0.21,"std_dev_ratio":0.18}

ConsumerOrderLocation

string · enum
Enum values:
Central
North
Northeast
East
West

Location of the customer

ConsumerOrderHousingType

string · enum
Enum values:
HDB
Condominium
Landed
Commercial
Other

Type of housing

ConsumerOrderDevice

string · enum
Enum values:
smart-tv
water-cooler
air-purifier
printer
aircon
washing-machine
home-coffee-machine

Device type identifier

ConsumerSelectedDeviceDto

deviceType
​string · enum · required

Device type identifier

Enum values:
smart-tv
water-cooler
air-purifier
printer
aircon
washing-machine
home-coffee-machine
Example: aircon
qty
​number · min: 1 · required

Number of units of this device

Example: 2

CreateConsumerOrderDto

firstName
​string · required

First name of the customer

Example: Jane
lastName
​string · required

Last name of the customer

Example: Doe
mobile
​string · required

Mobile number of the customer

Example: +6591234567
email
​string · required

Email address of the customer

Example: jane.doe@example.com
location
​string · enum · required

Location of the customer

Enum values:
Central
North
Northeast
East
West
Example: Central
housingType
​string · enum · required

Type of housing

Enum values:
HDB
Condominium
Landed
Commercial
Other
Example: HDB
​object[] · required

High-energy appliances the customer wants to monitor, with quantities

CreateConsumerOrderResponseDto

message
​string · required

Confirmation message

Example: Order submitted successfully.

SetSceneDto

sceneId
​string · required

Stable id of the scene to activate (see GET /exhibit/scenes).

Example: day
setBy
​string

Optional label for who triggered the change (audit only).

Example: ipad-control

SceneStateResponseDto

sceneId
​string · required
label
​string · required
updatedAt
​string · required

ISO timestamp of when this scene became active.

Example: 2026-06-10T09:30:00.000Z

ExhibitDeviceKind

string · enum
Enum values:
ahu
light
other

ExhibitDeviceTelemetryDto

deviceId
​string · required
name
​string · required
kind
​string · enum · required
Enum values:
ahu
light
other
on
​boolean · required

True when the circuit is energised.

onStatus
​string · enum · required

Status of the device (ON / OFF)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE
deviceNumber
​number
measurementType
​string · enum

Measurement type, for MCBs only

Enum values:
SSO
LIGHTS_FANS
LIGHTS
FANS
AIRCON
POWER_OUTLETS
GENERAL
COMBINED
locked
​boolean

Locked devices reject toggles upstream.

level
​number

Storey, parsed from the zone name ("Level 3" → 3).

Example: 3
roomName
​string
zoneName
​string
ratedCurrent
​number
ratedVoltage
​number
realTimePower
​number

Real-time power (W)

realTimeVoltage
​number

Real-time voltage (V)

realTimeCurrent
​number

Real-time current (A)

powerFactor
​number

Power factor (0-1)

totalEnergyUsage
​number

Lifetime accumulated energy (kWh), not a daily figure.

lastSeen
​string

When the device last reported.

Example: 2026-09-23T09:30:00.000Z

ExhibitTelemetryResponseDto

readAt
​string · required

When this snapshot was read from upstream.

Example: 2026-09-23T09:30:00.000Z
​object[] · required

ExhibitTelemetryPointDto

at
​string · required
power
​number

Power (W)

voltage
​number

Voltage (V)

current
​number

Current (A)

ExhibitDeviceHistoryDto

deviceId
​string · required
​object[] · required

Upstream realtime readings, oldest first.

ExhibitTelemetryHistoryResponseDto

from
​string · required
till
​string · required
​object[] · required

ExhibitEnvironmentPointDto

at
​string · required
temperature
​number

Ambient temperature (°C)

humidity
​number

Ambient humidity (%)

ExhibitEnvironmentSensorDto

deviceId
​string · required
name
​string · required
​object[] · required

Upstream realtime readings, oldest first.

ExhibitEnvironmentResponseDto

from
​string · required
till
​string · required
​object[] · required

ToggleExhibitDeviceDto

deviceId
​string · required
onStatus
​string · enum · required

Status of the device (ON / OFF)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE

BulkToggleExhibitDevicesDto

deviceIds
​string[] · maxItems: 50 · required
onStatus
​string · enum · required

Status of the device (ON / OFF)

Enum values:
ON
OFF
INACTIVE
ERROR
ACTIVE

ControlAirconSmartTempDto

value
​number
aggressiveness
​number · min: 0 · max: 1

Proportional gain (0–1). 0 = no compensation, 1 = full compensation. Default: 0.5.

Example: 0.5

ControlExternalDeviceDaikinAirconDto

externalDeviceIds
​string[] · required

IDs of the external devices to control

Example: ["64b7f1e6f9c9d4e5b8a9f7c1","64b7f1e6f9c9d4e5b8a9f7c2"]
value
​number
power
​boolean

Power the unit on (true) or off (false)

Example: true
mode
​number · enum

AC mode (1=cool, 2=heat, 3=fan, 4=auto, 5=dry)

Enum values:
1
2
3
4
5
Example: 1
fan
​number · enum

Fan rate (1=low, 2=high, 3=middle, 4=auto)

Enum values:
1
2
3
4
Example: 4
setpoint
​number · min: 14 · max: 32

Setpoint temperature in °C (cool 18–32, heat 14–28; rejected in auto mode)

Example: 23
lockPower
​boolean

Lock (true) or unlock (false) the wired remote power button

Example: false
lockMode
​boolean

Lock (true) or unlock (false) the wired remote mode selector

Example: false
lockSetpoint
​boolean

Lock (true) or unlock (false) the wired remote setpoint adjust

Example: false
forcedOff
​boolean

Forced system stop (true) or clear (false) — port-master units only (ac 0/64/128/192). Units stay OFF after clear.

Example: false
filterReset
​boolean

Reset the dirty-filter sign

Example: false
forcedThermoOff
​boolean

Force the thermostat off (true) or clear (false)

Example: false
energySaving
​boolean

Enable (true) or clear (false) energy-saving operation

Example: false

CreateActionDto

deviceId
​string · required

ID of the device to perform the action on

Example: 64b7f1e6f9c9d4e5b8a9f7c3
actionType
​string · enum · required

Type of action to perform

Enum values:
TOGGLE_ON
TOGGLE_OFF
CONTROL_AIRCON
AIRCON_SMART_TEMP
CONTROL_EXTERNAL_DEVICE_DAIKIN_AIRCON
​

Control payload. Required for CONTROL_AIRCON, AIRCON_SMART_TEMP, and CONTROL_EXTERNAL_DEVICE_DAIKIN_AIRCON. Shape is ControlAirconDto for CONTROL_AIRCON; ControlAirconSmartTempDto (value + aggressiveness) for AIRCON_SMART_TEMP; ControlExternalDeviceDaikinAirconDto (externalDeviceIds + Daikin fields) for CONTROL_EXTERNAL_DEVICE_DAIKIN_AIRCON.

SmartModeDeviceDto

_id
​string · required
deviceType
​string · enum · required

Type of device (PLUG, MCB, etc.)

Enum values:
PLUG
MCB
ENV_SENSOR
SMART_SWITCH
AIRCON_CONTROL
WATER_METER
RIDGE
EXTERNAL
deviceName
​string

ControlDto

value
​number

SmartModeCreatorDto

_id
​string · required
name
​string · required
email
​string · required
role
​string · enum · required

Administrator role defining access permissions (SUPERADMIN or ADMIN)

Enum values:
SUPERADMIN
ADMIN
USER
TENANT
ROOM
DEVELOPER

NodePositionDto

x
​number · required

X coordinate on the canvas

Example: 200
y
​number · required

Y coordinate on the canvas

Example: 100

GetActionDto

_id
​string · required
system
​string · required
actionType
​string · enum · required
Enum values:
TOGGLE_ON
TOGGLE_OFF
CONTROL_AIRCON
AIRCON_SMART_TEMP
CONTROL_EXTERNAL_DEVICE_DAIKIN_AIRCON
createdAt
​string · date-time · required
updatedAt
​string · date-time · required
​object
​object

Control payload. Shape depends on actionType: ControlAirconDto for CONTROL_AIRCON; ControlAirconSmartTempDto for AIRCON_SMART_TEMP.

​object
​object

GetActionsResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of actions matching the query

UpdateActionDto

deviceId
​string

ID of the device to perform the action on

Example: 64b7f1e6f9c9d4e5b8a9f7c3
actionType
​string · enum

Type of action to perform

Enum values:
TOGGLE_ON
TOGGLE_OFF
CONTROL_AIRCON
AIRCON_SMART_TEMP
CONTROL_EXTERNAL_DEVICE_DAIKIN_AIRCON
​

Control payload. Shape is ControlAirconDto for CONTROL_AIRCON; ControlAirconSmartTempDto (value + aggressiveness) for AIRCON_SMART_TEMP; ControlExternalDeviceDaikinAirconDto (externalDeviceIds + Daikin fields) for CONTROL_EXTERNAL_DEVICE_DAIKIN_AIRCON.

​object

Canvas position of this node

TriggerDayTimeRangeDto

day
​string · enum · required

Day of the week this time range applies to

Enum values:
monday
tuesday
wednesday
thursday
friday
saturday
sunday
Example: monday
startTime
​string · required

Start time in HH:mm format (inclusive)

Example: 08:00
endTime
​string · required

End time in HH:mm format (exclusive). Must be after startTime — overnight ranges are not supported.

Example: 18:00

CreateTriggerDto

name
​string · required

Human-readable name for this trigger

Example: Server Room Overheat Alert
metric
​string · enum · required

Metric to evaluate

Enum values:
TEMPERATURE
HUMIDITY
CARBONDIOXIDE
PM1
FINE_PARTICULATE_MATTER
COARSE_PARTICULATE_MATTER
FORMALDEHYDE
SOUND
operator
​string · enum · required

Comparison operator

Enum values:
GREATER_THAN
LESS_THAN
EQUAL_TO
NOT_EQUAL_TO
GREATER_THAN_OR_EQUAL_TO
LESS_THAN_OR_EQUAL_TO
IS_TRUE
IS_FALSE
thresholdValue
​number · required

Threshold value to compare the metric against (e.g. 30 for "temperature > 30")

Example: 30
actions
​string[] · required

IDs of actions to execute when the condition is met

Example: ["64b7f1e6f9c9d4e5b8a9f7c3"]
deviceId
​string

ID of the device whose metric will be monitored. Required for device metrics; omit for weather metrics.

Example: 64b7f1e6f9c9d4e5b8a9f7c3
latitude
​number

Latitude of the location to check weather for. Required when metric is a weather metric; ignored otherwise.

Example: 1.3521
longitude
​number

Longitude of the location to check weather for. Required when metric is a weather metric; ignored otherwise.

Example: 103.8198
delayMinutes
​number

Minutes the condition must be sustained before actions fire. Omit for immediate fire.

Example: 5
intervalMinutes
​number · min: 1 · max: 1440

Minutes between repeated action firings while the condition remains true. Absent means fire on every evaluation while the condition is met.

Example: 60
​object[]

Time windows when this trigger is allowed to fire. If omitted or empty, the trigger fires at any time.

GetTriggerDto

_id
​string · required
system
​string · required
name
​string · required

Human-readable name for this trigger

Example: Server Room Overheat Alert
metric
​string · enum · required
Enum values:
TEMPERATURE
HUMIDITY
CARBONDIOXIDE
PM1
FINE_PARTICULATE_MATTER
COARSE_PARTICULATE_MATTER
FORMALDEHYDE
SOUND
operator
​string · enum · required
Enum values:
GREATER_THAN
LESS_THAN
EQUAL_TO
NOT_EQUAL_TO
GREATER_THAN_OR_EQUAL_TO
LESS_THAN_OR_EQUAL_TO
IS_TRUE
IS_FALSE
thresholdValue
​number · required

Threshold value the metric is compared against

Example: 30
​object[] · required

Actions executed when the condition is met

createdAt
​string · date-time · required
updatedAt
​string · date-time · required
​object
latitude
​number

Latitude of the weather location. Present only on weather triggers.

Example: 1.3521
longitude
​number

Longitude of the weather location. Present only on weather triggers.

Example: 103.8198
delayMinutes
​number

Minutes the condition must be sustained before actions fire. Absent means fire immediately.

Example: 5
intervalMinutes
​number

Minutes between repeated action firings while the condition remains true. Absent means fire only once per condition met.

Example: 60
​object[]

Time windows when this trigger is allowed to fire. Empty array means no restriction.

​object
​object

CreateTriggerWithActionDto

name
​string · required

Name for the trigger

Example: Bedroom Fan on → Living Room AC on
triggerDeviceId
​string · required

Device whose toggle state is monitored as the trigger condition

Example: 64b7f1e6f9c9d4e5b8a9f7c3
metric
​string · enum · required
Enum values:
TEMPERATURE
HUMIDITY
CARBONDIOXIDE
PM1
FINE_PARTICULATE_MATTER
COARSE_PARTICULATE_MATTER
FORMALDEHYDE
SOUND
operator
​string · enum · required
Enum values:
GREATER_THAN
LESS_THAN
EQUAL_TO
NOT_EQUAL_TO
GREATER_THAN_OR_EQUAL_TO
LESS_THAN_OR_EQUAL_TO
IS_TRUE
IS_FALSE
thresholdValue
​number · required

Threshold value compared against the metric. Use 0 for IS_TRUE/IS_FALSE operators.

Example: 0
actionDeviceId
​string · required

Device to control when the trigger fires

Example: 64b7f1e6f9c9d4e5b8a9f7c3
actionType
​string · enum · required
Enum values:
TOGGLE_ON
TOGGLE_OFF
CONTROL_AIRCON
AIRCON_SMART_TEMP
CONTROL_EXTERNAL_DEVICE_DAIKIN_AIRCON

GetTriggerWithActionResponseDto

​object · required
​object · required

GetTriggersResponseDto

total
​number · required

Total count of items matching filters

Example: 150
page
​number · min: 1 · required

Current page number

Example: 1
size
​number · min: 1 · required

Items per page

Example: 50
totalPages
​number · min: 0 · required

Total number of pages

Example: 3
​object[] · required

Array of triggers matching the query

UpdateTriggerDto

name
​string

Human-readable name for this trigger

Example: Server Room Overheat Alert
deviceId
​string

ID of the device whose metric will be monitored

Example: 64b7f1e6f9c9d4e5b8a9f7c3
metric
​string · enum

Metric to evaluate

Enum values:
TEMPERATURE
HUMIDITY
CARBONDIOXIDE
PM1
FINE_PARTICULATE_MATTER
COARSE_PARTICULATE_MATTER
FORMALDEHYDE
SOUND
operator
​string · enum

Comparison operator

Enum values:
GREATER_THAN
LESS_THAN
EQUAL_TO
NOT_EQUAL_TO
GREATER_THAN_OR_EQUAL_TO
LESS_THAN_OR_EQUAL_TO
IS_TRUE
IS_FALSE
thresholdValue
​number

Threshold value to compare the metric against

Example: 30
actions
​string[]

IDs of actions to execute when the condition is met

latitude
​number

Latitude of the location to check weather for. Only applicable to weather metrics.

Example: 1.3521
longitude
​number

Longitude of the location to check weather for. Only applicable to weather metrics.

Example: 103.8198
delayMinutes
​number

Minutes the condition must be sustained before actions fire. Omit to leave unchanged.

Example: 5
intervalMinutes
​number · min: 0 · max: 1440

Minutes between repeated action firings while the condition remains true. Absent means fire on every evaluation while the condition is met.

Example: 60
​object

Canvas position of this node

​object[]

Time windows when this trigger is allowed to fire. Pass an empty array to remove all restrictions.

On this page
  • MediaType
  • ReleaseResponseBodyDto
  • ReleaseResponseDto
  • ReleaseBodyDto
  • ReleaseDto
  • CreateManufacturerApiKeyDto
  • ManufacturerApiKeyCreatedResponseDto
  • ManufacturerApiKeyResponseDto
  • DeviceType
  • UsageHistoryHour
  • UsageHistoryDay
  • UsageHistoryDayWithCostBreakdownDto
  • UsageHistoryDayBreakdownDto
  • UsageHistoryHourBreakdownDto
  • UsageHistoryHourWithTariffResponseDto
  • DeviceStatus
  • UsageHistoryEnergyRealtimeDto
  • RateSource
  • PeriodCostResolution
  • PeriodCostProjectionDto
  • DevicePeriodCostResponseDto
  • McbRealtimeDataPointDto
  • McbRealtimeSeriesDto
  • McbMeasurementType
  • DeviceRealtimeSeriesDto
  • McbRealtimeResponseDto
  • DevicesRealtimeRequestDto
  • RoomMcbAiInsightPossibleDeviceDto
  • RoomMcbAiInsightResponseDto
  • DeviceEnergyDto
  • UsageWithCostResponseDto
  • TelemetryHourSmartSwitchResponseDto
  • TelemetryAirconControlRealtimeResponseDto
  • TelemetryHourAirconControlResponseDto
  • WifiHeatmapCellDto
  • WifiHeatmapDeviceDto
  • WifiHeatmapResponseDto
  • BoxplotDeviceType
  • DeviceBoxplotEntryDto
  • DeviceBoxplotResponseDto
  • DeviceBoxStatsDto
  • DeviceBreakdownEntryDto
  • DeviceDrilldownResponseDto
  • TelemetryHourEnvironmentSensorResponseDto
  • TelemetryEnvironmentSensorRealtimeResponseDto
  • TelemetryHourWaterMeterResponseDto
  • TelemetryWaterMeterRealtimeResponseDto
  • TelemetryDayWaterMeterResponseDto
  • Role
  • FrontendApp
  • SignUpDto
  • LoginResponseDto
  • LoginDto
  • SignoutDto
  • RefreshTokenDto
  • InviteDto
  • ReInviteDto
  • SignUpViaInviteDto
  • RequestResetPasswordDto
  • ResetPasswordDto
  • ValidateTokenResponseDto
  • GoogleTokenDto
  • MicrosoftTokenDto
  • Auth2FAResponseDto
  • Disable2FAResponseDto
  • ValidateTokenDto
  • Disable2FASystemResponseDto
  • AuditAction
  • AuditOutcome
  • AuditTargetType
  • StatusTriggerSource
  • GetAuditLogDto
  • GetAuditLogsResponseDto
  • ChatRole
  • ChatMessageDto
  • ChatRequestDto
  • PlugCategoryResponseDto
  • PlugCategoriesListResponseDto
  • CreatePlugCategoryDto
  • UpdatePlugCategoryDto
  • SurgeConfig
  • LocationObject
  • FeatureType
  • Feature
  • SubscriptionTier
  • SystemPermission
  • SandboxApiGroup
  • ScheduleExclusionType
  • CountryCode
  • ExclusionMode
  • ScheduleExclusion
  • SystemTimezone
  • EntityLabelPairDto
  • SystemEntityLabelsDto
  • System
  • Tenant
  • Zone
  • Room
  • QuietHours
  • NotificationPreferences
  • Admin
  • CreateSystemDto
  • GetSystemDto
  • GetSystemsDto
  • ScheduleAdjustmentConfigDto
  • GetSystemDetailDto
  • TenantEnergyUsageDto
  • GetTenantEnergyUsageResponseDto
  • CreateTariffRateDto
  • TariffScope
  • GetTariffRatePeriodDto
  • GetTariffRateHistoryDto
  • UpdateTariffRateDto
  • GetEffectiveTariffRateDto
  • PublicHolidayResponseDto
  • CustomExclusionEntryDto
  • BulkAddCustomExclusionsDto
  • BulkAddCustomExclusionsResponseDto
  • RemoveExclusionResponseDto
  • UpdateSystemDto
  • HeartBeatConfigurationDto
  • LinkAdminToSystemDto
  • LinkAdminResponseDto
  • UnlinkAdminResponseDto
  • UpdateSystemPermissionDto
  • SandboxApiGroupsResponseDto
  • UpdateSandboxApiGroupsDto
  • UpdateScheduleAdjustmentConfigDto
  • ToggleSystemLockDto
  • ToggleSystemLockResponseDto
  • CronJobType
  • ScheduleCronJobRequestDto
  • ScheduleCronJobResponseDto
  • DeleteCronJobRequestDto
  • CronJobState
  • CronJobStatusResponseDto
  • PopulatedTenantDto
  • PopulatedUserDto
  • PopulatedRoomDto
  • PopulatedZoneDto
  • DeviceChipModel
  • PlugType
  • MCBType
  • McbPhase
  • AirconControlMode
  • AirconControlFan
  • AirconControlSwing
  • AirconControlBrand
  • GangSwitchState
  • SwitchType
  • ScheduledActionType
  • OneTimeScheduleEntry
  • DailyScheduleEntry
  • ScheduleExecutionMode
  • ScheduleConfirmationState
  • DeviceSchedule
  • DeviceThresholdsDto
  • DeviceDetailsDto
  • GetDevicesResponseDto
  • DeviceHistoryItem
  • GetDeviceHistoryDto
  • MultipleDevicesConfigurationDto
  • DeviceConfigurationDto
  • DeviceErrorType
  • ErrorLog
  • GetErrorHistoryDto
  • CreateWhiteListedDevicesDto
  • WhiteList
  • GetWhitelistedDevicesDto
  • GetIsDeviceWhiteListedDto
  • BulkRemoveWhitelistDto
  • ManufacturerRegisterDeviceDto
  • ManufacturerDeviceResponseDto
  • ManufacturerPlugStatusDto
  • ManufacturerSystemPlugsResponseDto
  • ManufacturerDeviceStatusDto
  • ManufacturerSystemDevicesResponseDto
  • MultipleDevicesChangeSystemDto
  • UpdateMultipleDevicesRelationshipsDto
  • UpdateDeviceBaseDto
  • DeviceUpdateItem
  • BulkUpdateDevicesDto
  • UpdateDevicesLockStatusDto
  • FailedDeviceLockUpdateDto
  • UpdateDevicesLockStatusResponseDto
  • UpdateDevicesSpareStatusDto
  • UpdateDevicesRelationshipTenantDto
  • UpdateDevicesRelationshipZoneDto
  • MultipleDevicesCalibrationDto
  • InactiveDeviceDto
  • GetInactiveDevicesDto
  • SaveInactiveSnapshotResponseDto
  • InactiveDeviceSnapshot
  • GetInactiveSnapshotsDto
  • HierarchyType
  • DeviceCountDto
  • DeviceTypeBreakdownDto
  • ChangeDeviceSystemDto
  • ToggleDeviceStatusDto
  • DeviceConfig
  • Device
  • BulkToggleDeviceDto
  • DeviceResetScope
  • BulkResetDevicesDto
  • ResetDevicesResponseDto
  • ResetDeviceDto
  • BulkDeleteDeviceDto
  • BulkManualBlacklistDto
  • BulkUnblacklistDto
  • EnvironmentType
  • ChangeEnvironmentDto
  • BulkUpdateEnergyThresholdsDto
  • DeviceBulkEnvironmentThresholdsDto
  • DeviceBulkWaterMeterThresholdsDto
  • UpdateEnergyDeviceThresholdDto
  • BulkUniqueEnergyThresholdItemDto
  • BulkUniqueUpdateEnergyThresholdsDto
  • UpdateEnvironmentSensorThresholdDto
  • BulkUniqueEnvSensorThresholdItemDto
  • BulkUniqueUpdateEnvSensorThresholdsDto
  • UpdateWaterMeterThresholdDto
  • BulkUniqueWaterMeterThresholdItemDto
  • BulkUniqueUpdateWaterMeterThresholdsDto
  • EnergyThresholdBaselineDto
  • EnvironmentSensorThresholdBaselineDto
  • WaterMeterThresholdBaselineDto
  • ThresholdBaselineResponseDto
  • BulkThresholdBaselineRequestDto
  • FailedThresholdBaselineDto
  • BulkThresholdBaselineResponseDto
  • UpdateInactivityNotificationDto
  • ClaimTokenResponseDto
  • PrintQrRequestDto
  • PrintQrResponseDto
  • ClaimDeviceResponseDto
  • CreateNotificationDto
  • Notification
  • NotificationGroup
  • SearchQueryResultDto
  • NotificationGroupsResponseDto
  • ReadAllNotificationsResponseDto
  • BasicEmailNotificationDto
  • BusinessOrderDevice
  • BusinessSelectedDeviceDto
  • PublicWebEmailNotificationDto
  • NewsletterSubscriberSource
  • NewsletterSubscriberDto
  • NewsletterSubscriberStatus
  • NewsletterSubscriberResponseDto
  • EmailRecipientsType
  • ManualSelectionRecipientType
  • ManualSelectionRecipientDto
  • CreateEmailCampaignDto
  • EmailCampaignStatus
  • EmailCampaign
  • SendEmailCampaignDto
  • SendTestEmailRequestDto
  • GetEmailCampaignsDto
  • UpdateEmailCampaignDto
  • EmailTemplateDto
  • EmailTemplateStatus
  • EmailTemplate
  • GetEmailTemplatesDto
  • PreviewEmailTemplateDto
  • UpdateEmailTemplateDto
  • CreateFirmwareDto
  • ReuploadFirmwareDto
  • GetFirmwareResponseDto
  • DeleteFirmwareByPrefixResponseDto
  • SendOtaDto
  • OtaDispatchMode
  • OtaDispatchResponseDto
  • MassSendOtaRollbackDto
  • SendOtaRollbackDto
  • GetFirmwareListDto
  • GenerateDownloadUrlResponseDto
  • VersionDistributionDto
  • ChipModelDistributionDto
  • DeviceTypeFirmwareDistributionDto
  • GetFirmwareVersionDistributionDto
  • DeviceFirmwareInfoDto
  • GetDeviceFirmwareListDto
  • CreateAutoUpdatePolicyDto
  • AutoUpdatePolicyResponseDto
  • AutoUpdateAffectedDeviceDto
  • AutoUpdateAffectedDevicesListDto
  • CreateOtaJobDto
  • OtaJobResponseDto
  • OtaJobStatus
  • OtaJobListItemDto
  • GetOtaJobsResponseDto
  • OtaJobExecutionDto
  • OtaJobStatusDto
  • CreateTenantDto
  • GetTenantDto
  • GetTenantsResponseDto
  • GetRoomDto
  • GetZoneDto
  • TenantRelationshipDto
  • GetTenantsRelationshipDto
  • RoomEnergyUsageDto
  • GetRoomEnergyUsageResponseDto
  • UpdateTenantDto
  • SurgeConfigTypeOverride
  • MonitoringEntityType
  • StartAnalysisDto
  • McbMeasurementTypeBreakdown
  • EntityEnergyBreakdown
  • EntityAnalysisDetailDto
  • ThresholdSource
  • TypeKeyAnalysisDto
  • AnalysisStartResponseDto
  • SentinelPowerRangeRuleDto
  • TypeThresholdOverrideDto
  • CreateSurgeConfigDto
  • SurgeConfigResponseDto
  • SurgeConfigLookupResponseDto
  • UpdateSurgeScheduleDto
  • SurgeScheduleResponseDto
  • UpdateSystemSurgeConfigDto
  • EntityMetadata
  • ViolationResponseDto
  • ViolationsListResponseDto
  • LatestViolationDto
  • ViolationMetadata
  • FlaggedEntityDto
  • FlaggedEntitiesResponseDto
  • ResetAllViolationsDto
  • ResetAllViolationsResponseDto
  • DisabledEntityDto
  • DisabledEntitiesResponseDto
  • ToggleMonitoringDto
  • MonitoringStatusResponseDto
  • UpdateConfirmedDevicesDto
  • ConfirmedDevicesResponseDto
  • ResetViolationsDto
  • ResetCounters
  • ResetViolationsResponseDto
  • EntityEnergyBreakdownResponseDto
  • EntityCheckResultDto
  • DailySurgeCheckResultDto
  • FlaggedEntityDigestResultDto
  • SurgeDigestResultDto
  • EntityTypeKind
  • EntityTypeResponseDto
  • EntityTypeListResponseDto
  • CreateEntityTypeDto
  • UpdateEntityTypeDto
  • SingleScheduleEntryDto
  • DailyScheduleEntryDto
  • DeviceWeeklyScheduleDto
  • FollowScheduleDto
  • DayOfWeek
  • DayTimeRange
  • Schedule
  • DeviceSchedulingOptionsDto
  • DayTimeRangeDto
  • ScheduleInputDto
  • DeviceSingleScheduleDto
  • EditDeviceSingleTimerDto
  • DeleteDeviceSingleTimerDto
  • MergeMode
  • MassDevicesScheduleDto
  • MassDevicesSingleScheduleDto
  • DeviceScheduleInfo
  • MassEditDeviceSingleTimerDto
  • MassEditDeviceWeeklyTimerDto
  • MassDeleteDeviceTimerDto
  • GroupedRecurringSchedule
  • GroupedOneTimeSchedule
  • GetSystemGroupedSchedulesDto
  • SortOrder
  • SuggestionFilter
  • SuggestionSource
  • ScheduleAdjustmentStatus
  • AdjustmentType
  • OverrideAction
  • ScheduleMapDto
  • RecommendationTier
  • ScheduleAdjustmentSuggestionDto
  • SuggestionStatusCountsDto
  • GetSystemSuggestionsResponseDto
  • GetDeviceSuggestionsResponseDto
  • AcceptSuggestionRequestDto
  • AcceptSuggestionResponseDto
  • RejectSuggestionResponseDto
  • BulkSuggestionsRequestDto
  • BulkSuggestionFailureDto
  • BulkSuggestionsResponseDto
  • InvoiceItemDto
  • CreateInvoiceDto
  • BillingType
  • InvoiceStatus
  • Product
  • SystemInvoiceItem
  • SystemInvoice
  • UpdateInvoiceDiscountDto
  • UpdateInvoiceStatusDto
  • UpdateInvoiceNotesDto
  • InvoiceItemInput
  • UpdateInvoiceItemsDto
  • TriggerInvoiceGenerationDto
  • GenerateInvoiceResultDto
  • TriggerBulkInvoiceGenerationDto
  • BulkInvoiceGenerationResultDto
  • CreateBillingConfigDto
  • UpdateBillingConfigDto
  • BillingConfig
  • EnergyInvoice
  • TriggerBillingDto
  • TriggerBillingResponseDto
  • CreateProductDto
  • UpdateProductDto
  • ApiTokenAudience
  • CreateApiTokenDto
  • ApiTokenResponseDto
  • GetSystemDetailsDto
  • GetAdminDto
  • ApiTokenGeneratedByResponseDto
  • ApiTokenUsageDto
  • ApiTokenUsageSearchResultDto
  • GetApiTokenDto
  • GetApiTokenWithUsageDto
  • GetAdminsDto
  • UpdateProfileDto
  • NotificationChannelSettingsDto
  • QuietHoursDto
  • NotificationPreferencesResponseDto
  • UpdateNotificationPreferencesDto
  • GetSessionDto
  • UpdateAdminRoleDto
  • UpdateAdminDto
  • LinkSystemToAdminDto
  • UnlinkSystemToAdminDto
  • CreateZoneDto
  • LinkMultiplePlugsDto
  • GetZonesResponseDto
  • UpdateZoneDto
  • MigratePlugDto
  • EcoguardPlug
  • Plug
  • PlugUpdateItem
  • BulkUpdatePlugsDto
  • AiCategorizePlugsRequestDto
  • UpdatePlugDto
  • FilteredPlugDto
  • GetPlugsResponseDto
  • PlugCategoryEnergyBreakdownDto
  • PlugCategoriesBreakdownDto
  • CreateEcoguardPlugDto
  • BreakerCurve
  • CoilClampPositionDto
  • SandboxDevice
  • WireConnection
  • SandboxWire
  • DistributionBox
  • MCB
  • FilteredMcbDto
  • GetMCBsResponseDto
  • MCBNameSuggestionDto
  • GetBulkMCBNamesResponseDto
  • MCBNameUpdateDto
  • SaveBulkMCBNamesDto
  • MCBUpdateDto
  • MassUpdateMCBDto
  • UpdateMCBDto
  • MassMoveMCBsDistributionBoxDto
  • PhaseAssignmentDto
  • SplitMcbPhasesDto
  • PhaseSplitIntegrityDto
  • MCBPositionDto
  • BulkUpdateMCBPositionsDto
  • SetReversePowerDto
  • SetReversePowerResponseDto
  • PeopleCounterConfig
  • AirconControlConfig
  • AirconControlIrType
  • AirconControlFanBrand
  • AirconControlSeriesType
  • AirconControl
  • FilteredAirconControlDto
  • GetAirconControlsDto
  • UpdateAirconControlDto
  • ControlAirconDto
  • UpdateAirconControlThresholdDto
  • UpdatePeopleCounterConfigDto
  • MassUpdateBrandAirconDto
  • BulkControlAirconDto
  • EstimateAirconConsumptionDto
  • AirconConsumptionByModeDto
  • AirconAmbientSource
  • AirconConsumptionIntervalDto
  • AirconConsumptionEstimateDto
  • CreateRoomDto
  • GetRoomsResponseDto
  • UpdateRoomDto
  • AirconModelSpecDto
  • AirconModelSpecsResponseDto
  • CreateAirconModelSpecDto
  • UpdateAirconModelSpecDto
  • RidgeIntegrationType
  • RidgeCommunicationType
  • RidgeUnitStatusCountsDto
  • FilteredRidgeDto
  • GetRidgesDto
  • RidgeControllerInfo
  • Ridge
  • CreateRidgeDto
  • UpdateRidgeDto
  • SyncRidgeConfigurationDto
  • RidgeControlFieldSettingDto
  • GetRidgeControlLayoutDto
  • UpdateRidgeControlLayoutDto
  • ExternalDeviceType
  • ExternalDeviceCategory
  • DaikinMode
  • DaikinFanRate
  • DaikinHvacControlDto
  • ExternalDeviceOneTimeScheduleEntry
  • ExternalDeviceDailyScheduleEntry
  • ExternalDeviceSchedule
  • ExternalDeviceDto
  • GetExternalDevicesDto
  • CreateExternalDeviceDto
  • UpdateExternalDeviceDto
  • ExternalDeviceCommandDirection
  • ExternalDeviceCommandValueType
  • ExternalDeviceCommandDto
  • ExternalDeviceCommandWriteDto
  • ExternalDeviceCommandControlDto
  • BulkControlExternalDeviceDto
  • BulkControlFailureDto
  • BulkControlResultDto
  • ExternalDeviceOneTimeScheduleEntryDto
  • ExternalDeviceScheduleEntryDto
  • SetExternalDeviceScheduleDto
  • ExternalDevicePendingControl
  • ExternalDevice
  • BulkApplyExternalDeviceScheduleDto
  • BulkScheduleFailureDto
  • BulkApplyScheduleResultDto
  • ExternalDeviceHistoryDto
  • GetExternalDeviceHistoryDto
  • EnvironmentSensorType
  • EnvironmentSensor
  • FilteredEnvironmentSensorDto
  • GetEnvironmentSensorsDto
  • UpdateEnvironmentSensorDeviceDto
  • BulkUpdateEnvironmentSensorThresholdsDto
  • RecommendedThresholdBandsDto
  • EnvironmentSensorThresholdGroup
  • CreateEnvironmentSensorThresholdGroupDto
  • UpdateEnvironmentSensorThresholdGroupDto
  • PendingUpdateDto
  • FilteredSmartSwitchDto
  • GetSmartSwitchesDto
  • UpdateSmartSwitchDto
  • SmartSwitch
  • ControlSmartSwitchDto
  • BulkControlSmartSwitchDto
  • CreateDistributionBoxDto
  • GetDistributionBoxesDto
  • SandboxDeviceInputDto
  • WireConnectionDto
  • SandboxWireInputDto
  • UpdateDistributionBoxDto
  • AddMCBToDistributionBoxDto
  • RemoveMCBFromDistributionBoxDto
  • GetDistributionBoxMcbDto
  • GetMCBEnergyUsageDto
  • GetDistributionBoxEnergyUsageDto
  • GetAggregatedDistributionBoxEnergyUsageDto
  • CreateSandboxDeviceDto
  • UpdateSandboxDeviceDto
  • ReplaceSandboxDeviceWithMcbDto
  • CreateSandboxWireDto
  • UpdateSandboxWireDto
  • UpdateSandboxElementsDto
  • DeviceTypeForWire
  • DeviceRole
  • TwinDeviceDto
  • GenerateDigitalTwinResponseDto
  • CreateSurgeOverrideDto
  • SurgeOverrideResponseDto
  • UpdateSurgeOverrideDto
  • PurchaseSurgeOverrideDto
  • PurchaseStatus
  • SurgeOverridePurchaseResponseDto
  • CancelSurgeOverrideDto
  • SurgeOverridePurchaseListResponseDto
  • SurgeOverridePurchaseActiveMapResponseDto
  • OnboardingStatus
  • PhaseStatus
  • OnboardingPhase
  • DefaultStaticSchedule
  • ScheduleGroup
  • StaticSchedulePhase
  • AscentAIPhase
  • OnboardingIterationDto
  • SystemOnboardingResponseDto
  • DefaultStaticScheduleDto
  • ScheduleGroupDto
  • UpdateOnboardingPhaseDto
  • EcoguardRecommendationDto
  • PlugRecommendationDto
  • BulkPlugRecommendationsResponseDto
  • ReportFormat
  • StartIterationDto
  • UpdateIterationNameDto
  • IterationSummaryDto
  • IterationListResponseDto
  • ReportBlockKind
  • ReportSectionCatalogDto
  • ReportSelectorType
  • ReportSelectorLabelDto
  • ReportWindowKind
  • ReportWindowDto
  • EnergyReportSummaryDto
  • ReportSelectorDto
  • CreateEnergyReportDto
  • EcovoltEntityType
  • EcovoltPanelScopeDto
  • EcovoltMetric
  • ChartType
  • EcovoltTimeRange
  • ReportPanelSpecDto
  • ReportChartType
  • ReportChartPointDto
  • ReportChartSeriesDto
  • ReportOutlineEntryDto
  • ReportRunStatus
  • EnergyReportDailyPointDto
  • EnergyReportCategorySliceDto
  • EnergyReportDeviceRowDto
  • EnergyReportHourPointDto
  • EnergyReportWeekSplitDto
  • EnergyReportWeekdayPointDto
  • EnergyReportDeviceTypeSliceDto
  • EnergyReportHeatmapCellDto
  • EnergyReportDeviceTypeHeatmapDto
  • EnergyReportAnomalyDayDto
  • EnergyReportDeviceMoverDto
  • EnergyReportComparisonDto
  • EnergyReportCostDto
  • EnergyReportMetricsDto
  • ReportBlockAuthor
  • ReportBlockCitationDto
  • EnergyReportBlockDto
  • ReportSuggestionKind
  • ReportSuggestionPriority
  • ReportSuggestionStatus
  • ReportSuggestionDto
  • ReportRunProvenanceDto
  • ReportFidelityDto
  • EnergyReportRunDto
  • EnergyReportDto
  • UpdateEnergyReportDto
  • QuestionAnswerDto
  • DraftReportOutlineDto
  • ReportOutlineDto
  • PreviewReportChartDto
  • ReportChartPreviewDto
  • SaveReportOutlineDto
  • SaveReportBlockDto
  • SaveReportBlocksDto
  • ReportRefineAction
  • RefineReportBlockDto
  • RefineReportBlockResponseDto
  • AnalyseReportDto
  • AnalyseReportResponseDto
  • ReportChatRole
  • ReportChatMessageDto
  • ReportChatDto
  • ReportMetricChangeDto
  • ReportDiffDto
  • EnergyUsageRecommendationReportDto
  • BulkPlugRecommendationsRequestDto
  • AscentDeviceOutcome
  • AscentRunDevice
  • AscentRunResponseDto
  • AscentRunDateDto
  • LatestAscentRunResponseDto
  • AscentRunSummaryResponseDto
  • GetAscentRunsResponseDto
  • WritingStyleDto
  • UpdateWritingStyleDto
  • DraftWritingStyleDto
  • WritingStyleDraftDto
  • PanelType
  • HttpMethod
  • TransformType
  • TransformerResponseDto
  • ProxyCallUsageResponseDto
  • ExternalPanelResponseDto
  • GetExternalPanelsResponseDto
  • GetProxyUsagesResponseDto
  • DebugSnapshotDto
  • ProxyDebugResponseDto
  • PanelThresholdDto
  • PanelVisualizationOptionsDto
  • CreateExternalPanelDto
  • UpdateExternalPanelDto
  • EcovoltPanelResponseDto
  • GetEcovoltPanelsResponseDto
  • EcovoltDataPointDto
  • EcovoltDataSeriesDto
  • EcovoltPanelDataResponseDto
  • CreateEcovoltPanelDto
  • UpdateEcovoltPanelDto
  • ToggleAction
  • ToggleEcovoltPanelDto
  • PanelGroup
  • PanelCategory
  • BuiltinWidgetKey
  • PanelCatalogLayoutDto
  • PanelCatalogEntryDto
  • PanelCatalogGroupDto
  • PanelCatalogResponseDto
  • BuiltinPanelResponseDto
  • GetBuiltinPanelsResponseDto
  • CreateBuiltinPanelDto
  • UpdateBuiltinPanelDto
  • DeviceStatusBreakdownDto
  • TrendDirection
  • CostMetricDto
  • Indicator
  • CarbonMetricDto
  • PlatformOverviewDto
  • TimePeriod
  • EnergyDataPointDto
  • EnergyUsageDto
  • SystemEnergyDto
  • TopSystemsDto
  • HourlyUsageDto
  • PeakHoursDto
  • GrowthDataPointDto
  • GrowthTrendDto
  • ProjectionDataPointDto
  • RegressionParametersDto
  • GrowthProjectionDto
  • RoleCountDto
  • RoleDistributionDto
  • CategoryCountDto
  • PlugCategoryDistributionDto
  • CategoryEnergyDto
  • PlugCategoryEnergyDistributionDto
  • SystemPlugCountDto
  • PlugSystemDistributionDto
  • GranularityType
  • EnergyBreakdownRequestDto
  • EnergyBreakdownPointDto
  • EnergyPeriodDto
  • EnergyComparisonDto
  • EnergyBreakdownResponseDto
  • SmartModeSuggestedDeviceDto
  • TriggerMetric
  • TriggerOperator
  • ActionType
  • SmartModeSuggestionItemDto
  • SmartModeSuggestionResponseDto
  • CreateFeatureDto
  • UpdateFeatureDto
  • OccupancyGranularity
  • OccupancyTimelineBucketDto
  • OccupancySessionDto
  • OccupancyTimelineResponseDto
  • OccupancyState
  • OccupancyCurrentStatusDto
  • OccupancyDaySummaryDto
  • OccupancySummaryResponseDto
  • OccupancyScopeType
  • OccupancyHeatmapCellDto
  • OccupancyHeatmapResponseDto
  • OccupancyRoomSortField
  • OccupancySensorStatus
  • OccupancyRoomRowDto
  • GetOccupancyRoomsResponseDto
  • OccupancyWasteWindowDto
  • OccupancyWasteResponseDto
  • OccupancySensorCapability
  • OccupancySensorHealthDto
  • OccupancyDevicesHealthResponseDto
  • ToolDefinitionDto
  • ToolConfirmationDto
  • AgentChatRequestDto
  • AiToolSummaryDto
  • TranscribeAudioResponseDto
  • RangerChatHistorySummaryDto
  • RangerChatHistoryPaginatedDto
  • RangerChatHistoryDetailDto
  • CalendarPreviewRoomDto
  • RecurrenceType
  • CalendarPreviewEventDto
  • CalendarPreviewResponseDto
  • ScheduleType
  • ConfirmCalendarEventDto
  • ConfirmCalendarUploadDto
  • CalendarImportResultDto
  • PreviewIcsUrlDto
  • ConfirmIcsUrlDto
  • SubscribeIcsUrlDto
  • CalendarType
  • ConnectionScope
  • CalendarConnectionResponseDto
  • Generate2dFloorPlanResponseDto
  • Room2DDto
  • Opening2DDto
  • Wall2DDto
  • Stair2DDto
  • FloorPlanStyle
  • Save2dFloorPlanDto
  • Plan2dStatus
  • FloorPlan
  • RenameRoomDto
  • MapRoomDto
  • RoomDocRefDto
  • GetFloorPlanV2RoomDto
  • GetDevicePlacementV2Dto
  • GetDistributionBoxPlacementV2Dto
  • GetFloorPlanV2ResponseDto
  • OverlayReadingDto
  • OverlayPlacementDto
  • OverlayDistributionBoxPlacementDto
  • FloorPlanV2OverlayResponseDto
  • RoomDrawingV2Dto
  • UpsertRoomsV2Dto
  • PlacementType
  • DevicePlacementV2Dto
  • UpsertDevicePlacementsV2Dto
  • AssetTypeResponseDto
  • AssetTypeListResponseDto
  • CreateAssetTypeDto
  • UpdateAssetTypeDto
  • CreateAssetDto
  • AssetTypeSummaryDto
  • AssetRoomSummaryDto
  • GetAssetDto
  • GetAssetsResponseDto
  • UpdateAssetDto
  • GetCreditDto
  • TopupCreditDto
  • TopupCreditResponseDto
  • CreditTransactionType
  • CreditTransactionStatus
  • GetCreditTransactionDto
  • GetCreditTransactionsResponseDto
  • ReleaseNotesRepository
  • ReleaseNoteDto
  • ReportingApp
  • FeedbackType
  • CreateProductFeedbackDto
  • ProductFeedbackDto
  • ProductReviewPromptDto
  • CreateProductReviewDto
  • ProductReviewDto
  • DismissProductReviewDto
  • WifiConfigStatus
  • WifiDeviceStatusDto
  • WifiDeviceStatusResponseDto
  • CreateSubscriptionTierDto
  • UpdateSubscriptionTierDto
  • TelegramStatusResponseDto
  • TelegramPairingCodeResponseDto
  • TelegramWebhookDto
  • RegisterWebhookResponseDto
  • ForecastGranularity
  • ForecastPointDto
  • ForecastReason
  • DeviceForecastResponseDto
  • AggregatedForecastResponseDto
  • TrainingStatus
  • TrainingStatusDto
  • PrecomputeStatusDto
  • ErrorSource
  • HttpRequestMethod
  • CreateErrorLogDto
  • ErrorLogSystemRefDto
  • ErrorLogAdminRefDto
  • GetErrorLogDto
  • GetErrorLogsResponseDto
  • BulkUpdateErrorLogsDto
  • FailedErrorLogOperationDto
  • BulkUpdateErrorLogsResponseDto
  • BulkDeleteErrorLogsDto
  • BulkDeleteErrorLogsResponseDto
  • PublicDatapoint
  • NfcMode
  • GenerateNfcTokenDto
  • NfcTargetType
  • GenerateNfcTokenResponseDto
  • NfcViewOptionsDto
  • NfcTokenInfoDto
  • ListNfcTokensResponseDto
  • NfcToggleDto
  • NfcToggleResponseDto
  • NfcAnalyticsQueryDto
  • NfcTargetInfoDto
  • NfcControllableFeaturesDto
  • NfcGangSwitchStateDto
  • NfcDeviceInfoDto
  • DateRangeDto
  • EnvironmentRealtimeDataPointDto
  • EnvironmentRealtimeSeriesDto
  • EnvironmentRealtimeResponseDto
  • WaterRealtimeDataPointDto
  • WaterRealtimeSeriesDto
  • WaterRealtimeResponseDto
  • NfcAnalyticsResponseDto
  • NfcAirconControlDto
  • NfcControlResponseDto
  • NfcSmartSwitchControlDto
  • NfcControlDto
  • GenerateSignupTokensDto
  • GeneratedSignupTokenDto
  • GenerateSignupTokensResponseDto
  • SignupTokenStatus
  • GetSignupTokenDto
  • GetSignupTokensResponseDto
  • SignupLinkStatus
  • SignupLinkInfoDto
  • SignUpWithLinkDto
  • OAuthSignUpWithLinkDto
  • WaterMeterSize
  • WaterMeter
  • FilteredWaterMeterDto
  • GetWaterMetersResponseDto
  • UpdateWaterMeterDto
  • SetLeakThresholdDto
  • LeakHistoryResponseDto
  • AlertThresholdHistory
  • ThresholdHistoryResponseDto
  • WaterMeterLatestReadingDto
  • BulkSetLeakThresholdDto
  • FailedWaterMeterDto
  • BulkWaterMeterResponseDto
  • BulkUpdateWaterMeterThresholdsDto
  • HealthCheckDto
  • DashboardLayoutItemDto
  • CreateDashboardDto
  • DashboardResponseDto
  • GetMyDeviceTypesResponseDto
  • DashboardTemplatePreviewItemDto
  • DashboardTemplateResponseDto
  • ListDashboardTemplatesResponseDto
  • DashboardDetailResponseDto
  • UpdateDashboardDto
  • DataSourceType
  • AuthType
  • CreateDataSourceDto
  • DataSourceResponseDto
  • DiscoveredFieldDto
  • DiscoveredOperationDto
  • DiscoverEndpointsResponseDto
  • UpdateDataSourceDto
  • CreateTransformerDto
  • UpdateTransformerDto
  • HealthStatus
  • DeviceHealthItemDto
  • DeviceHealthSummaryDto
  • AnomalyType
  • AnomalySeverity
  • AnomalyStatus
  • DeviceAnomalyResponseDto
  • PaginatedAnomaliesDto
  • DayType
  • DeviceBaselineDataDto
  • DeviceDetailResponseDto
  • UpdateAnomalyStatusDto
  • BulkMonitoringRequestDto
  • BulkResetBaselineResponseDto
  • ResetHealthScoreRequestDto
  • BulkResetHealthScoreResponseDto
  • BulkMonitoringResponseDto
  • MlTrainingResponseDto
  • SupervisedMlTrainingResponseDto
  • ConsumerOrderLocation
  • ConsumerOrderHousingType
  • ConsumerOrderDevice
  • ConsumerSelectedDeviceDto
  • CreateConsumerOrderDto
  • CreateConsumerOrderResponseDto
  • SetSceneDto
  • SceneStateResponseDto
  • ExhibitDeviceKind
  • ExhibitDeviceTelemetryDto
  • ExhibitTelemetryResponseDto
  • ExhibitTelemetryPointDto
  • ExhibitDeviceHistoryDto
  • ExhibitTelemetryHistoryResponseDto
  • ExhibitEnvironmentPointDto
  • ExhibitEnvironmentSensorDto
  • ExhibitEnvironmentResponseDto
  • ToggleExhibitDeviceDto
  • BulkToggleExhibitDevicesDto
  • ControlAirconSmartTempDto
  • ControlExternalDeviceDaikinAirconDto
  • CreateActionDto
  • SmartModeDeviceDto
  • ControlDto
  • SmartModeCreatorDto
  • NodePositionDto
  • GetActionDto
  • GetActionsResponseDto
  • UpdateActionDto
  • TriggerDayTimeRangeDto
  • CreateTriggerDto
  • GetTriggerDto
  • CreateTriggerWithActionDto
  • GetTriggerWithActionResponseDto
  • GetTriggersResponseDto
  • UpdateTriggerDto