LaylaElectric (v1)

Download OpenAPI specification:Download

The LaylaElectric REST API lets you manage your Layla account, properties, devices, alarms, statistics, notifications and reports.

Authentication

Every request must include an Authorization: Bearer <JWT> header.

Versioning

Each endpoint lives at a versioned path under the API base — e.g. /v1/properties or /v3/properties/dashboard. The version is part of the path itself (it is not in the server URL), so different endpoints can independently move to a newer version without breaking older callers. The version that each route lives at is shown in the path of every operation below. Most routes are at v1; a few newer dashboard / status routes are at v3.

Conventions

  • All timestamps are ISO-8601 strings.
  • All measurement data (noise, temperature, power, …) is returned in the user's preferred units. You can change preferences via PATCH /v1/users/self.
  • start and end date-time parameters are interpreted in the property's timezone unless the endpoint says otherwise.
  • Errors come back as JSON with a message field and the relevant HTTP status code (400, 401, 403, 404, 409, 429, 500).

users

Manage your account, preferences and notification settings.

Get the currently logged-in user

Returns the profile of the user that owns the bearer token, including their preferences, notification settings and a presigned URL to their profile picture.

Authorizations:
JWT

Responses

Response samples

Content type
application/json
{
  • "name": "string",
  • "accepted_policy": 1,
  • "email": "string",
  • "address": "string",
  • "phone": "string",
  • "company": "string",
  • "title": "string",
  • "preferences": {
    },
  • "notification_preferences": {
    },
  • "alarm_notification_preferences": {
    },
  • "notification_frequency": [
    ],
  • "is_onboarded": true,
  • "picture_preview_url": "string",
  • "total_device_count": 0
}

Replace the current user's profile

Replaces the profile in full. Use PATCH if you only want to update a few fields.

Authorizations:
JWT
Request Body schema: application/json
name
required
string
accepted_policy
integer [ 0 .. 1 ]

1 once the user has accepted the latest policy versions.

email
string
address
string
phone
string
company
string
title
string
object
object

Channel-level toggles for all notifications.

object

Per-alarm-type channel toggles (email/push).

notification_frequency
Array of strings
Items Enum: "realtime" "daily" "weekly"
is_onboarded
boolean

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "accepted_policy": 1,
  • "email": "string",
  • "address": "string",
  • "phone": "string",
  • "company": "string",
  • "title": "string",
  • "preferences": {
    },
  • "notification_preferences": {
    },
  • "alarm_notification_preferences": {
    },
  • "notification_frequency": [
    ],
  • "is_onboarded": true
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "accepted_policy": 1,
  • "email": "string",
  • "address": "string",
  • "phone": "string",
  • "company": "string",
  • "title": "string",
  • "preferences": {
    },
  • "notification_preferences": {
    },
  • "alarm_notification_preferences": {
    },
  • "notification_frequency": [
    ],
  • "is_onboarded": true,
  • "picture_preview_url": "string",
  • "total_device_count": 0
}

Partially update the current user

Update one or more profile fields without resending the whole user object. Use this to flip notification preferences, change language/temperature unit, or accept the latest policy.

Authorizations:
JWT
Request Body schema: application/json
name
string
accepted_policy
integer [ 0 .. 1 ]

1 once the user has accepted the latest policy versions.

email
string
address
string
phone
string
company
string
title
string
object
object

Channel-level toggles for all notifications.

object

Per-alarm-type channel toggles (email/push).

notification_frequency
Array of strings
Items Enum: "realtime" "daily" "weekly"
is_onboarded
boolean

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "accepted_policy": 1,
  • "email": "string",
  • "address": "string",
  • "phone": "string",
  • "company": "string",
  • "title": "string",
  • "preferences": {
    },
  • "notification_preferences": {
    },
  • "alarm_notification_preferences": {
    },
  • "notification_frequency": [
    ],
  • "is_onboarded": true
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "accepted_policy": 1,
  • "email": "string",
  • "address": "string",
  • "phone": "string",
  • "company": "string",
  • "title": "string",
  • "preferences": {
    },
  • "notification_preferences": {
    },
  • "alarm_notification_preferences": {
    },
  • "notification_frequency": [
    ],
  • "is_onboarded": true,
  • "picture_preview_url": "string",
  • "total_device_count": 0
}

properties

View and manage your properties (houses, apartments, offices, commercial spaces).

List properties for the current user

Returns the properties the user is a member of. Use the fields parameter to enrich the result with optional computed data (savings, alarm counts, etc) — only ask for what you need to keep the response fast.

Authorizations:
JWT
query Parameters
id
string

Get a single property by ID (filtered server-side).

currency
string (CurrencyCode)
Enum: "USD" "EUR" "GBP" "ILS" "BRL" "MXN"

Override the currency for any monetary fields in the response.

fields
Array of strings
Items Enum: "users" "alarm_event_counts" "monthly_savings" "total_savings" "total_efficiency_gains" "alarm_states" "devices"

Comma-separated list of extra fields to compute and include. Each one adds latency, so be selective.

filters
Array of strings
Items Enum: "eco" "noise_alarm" "security_alarm"

Restrict results to properties matching a given feature/alarm.

sort_by
string
Enum: "money_saved" "noise_events" "crowd_events" "security_events"

Sort key applied server-side.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get the user's dashboard payload (v3)

Returns the full dashboard view in a single call: properties, subscription state, aggregated alarm summary and per-pillar status. Designed for the app home screen.

Authorizations:
JWT
query Parameters
timezone
required
string

IANA timezone (e.g. Europe/London).

fields
Array of strings
Items Enum: "status" "last_day_overview" "alarm_event_counts" "properties" "enabled_alarms" "alarm_states" "status_by_pillar" "ir"

Comma-separated list of optional sections to include in the response. Omit the parameter to receive all sections. Each section is only populated when explicitly requested (or when fields is omitted).

Top-level sections:

  • status — sensor online counts and average Wi-Fi quality.
  • last_day_overview — yesterday's noise / activity / climate / air-quality summary.
  • alarm_event_counts — counts per alarm type.
  • properties — slim per-property summary array.

Per-property sub-fields (only relevant when properties is also requested):

  • enabled_alarms — list of alarm types enabled on each property.
  • alarm_states — current state of each alarm (ok / in_alarm / snoozed / …).
  • status_by_pillar — per-pillar (noise / air_quality / smart_ac) online breakdown.
  • ir — IR-learning state per device.

Examples:

  • fields=status,properties — sensor counts + minimal property list.
  • fields=properties,alarm_states,ir — properties with current alarms + IR state.
  • omit fields entirely — everything.
start
string <date-time>

Start of the date range (inclusive), interpreted in the supplied timezone. Must be sent together with end.

end
string <date-time>

End of the date range (exclusive), interpreted in the supplied timezone. Must be sent together with start.

Responses

Response samples

Content type
application/json
{
  • "meta": {
    },
  • "has_subscription": true,
  • "status": {
    },
  • "last_day_overview": {
    },
  • "alarm_event_counts": [
    ],
  • "properties": [
    ]
}

Get online/offline status for one or more properties

Returns a lightweight status payload (online / offline) and per-pillar breakdown for each property.

Authorizations:
JWT
query Parameters
property_ids
Array of strings

Comma-separated property IDs. If omitted, all the user's properties are returned.

Responses

Response samples

Content type
application/json
{
  • "properties": [
    ]
}

Get status for a single property

Returns online/offline state and a per-pillar status breakdown for one property.

Authorizations:
JWT
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "status": "online",
  • "status_by_pillar": {
    }
}

Replace a property

Replaces all editable fields of the property.

Authorizations:
JWT
path Parameters
id
required
string
Request Body schema: application/json
name
required
string <= 100 characters
category
required
string <= 20 characters

Free-form category slug (typically house, apartment, office, commercial).

address
required
string <= 255 characters
timezone
required
string

IANA timezone (e.g. Europe/London).

object
enabled
integer [ 0 .. 1 ]

1 = active, 0 = paused.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "category": "string",
  • "address": "string",
  • "timezone": "string",
  • "settings": {
    },
  • "enabled": 1
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "category": "string",
  • "address": "string",
  • "timezone": "string",
  • "settings": {
    },
  • "enabled": 1,
  • "id": "string",
  • "role": "admin",
  • "enabled_alarms": [
    ],
  • "enabled_features": [
    ],
  • "enabled_tier_features": [
    ],
  • "alarm_event_counts": [
    ],
  • "monthly_savings": {
    },
  • "total_savings": {
    },
  • "total_efficiency_gains": 0,
  • "alarm_states": [
    ]
}

Partially update a property

Authorizations:
JWT
path Parameters
id
required
string
Request Body schema: application/json
name
string <= 100 characters
category
string <= 20 characters

Free-form category slug (typically house, apartment, office, commercial).

address
string <= 255 characters
timezone
string

IANA timezone (e.g. Europe/London).

object
enabled
integer [ 0 .. 1 ]

1 = active, 0 = paused.

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "category": "string",
  • "address": "string",
  • "timezone": "string",
  • "settings": {
    },
  • "enabled": 1
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "category": "string",
  • "address": "string",
  • "timezone": "string",
  • "settings": {
    },
  • "enabled": 1,
  • "id": "string",
  • "role": "admin",
  • "enabled_alarms": [
    ],
  • "enabled_features": [
    ],
  • "enabled_tier_features": [
    ],
  • "alarm_event_counts": [
    ],
  • "monthly_savings": {
    },
  • "total_savings": {
    },
  • "total_efficiency_gains": 0,
  • "alarm_states": [
    ]
}

Toggle alarm features at the property level

Enables or disables alarms (and their quiet-hours variants) for every device in the property. Send only the alarms you want to change — any parameter you omit is left untouched.

Authorizations:
JWT
path Parameters
id
required
string
query Parameters
noise_alarm
boolean
noise_alarm_quiet_hours
boolean
occupancy_alarm
boolean
occupancy_alarm_quiet_hours
boolean
security_alarm
boolean
alarm_schedule
boolean

Enable or disable the per-device alarm scheduling feature.

mold_alarm
boolean
mold_alarm_quiet_hours
boolean
smoke_alarm
boolean
smoke_alarm_quiet_hours
boolean
co_alarm
boolean

Carbon-monoxide alarm.

co_alarm_quiet_hours
boolean

Responses

Turn the property's eco-mode on or off

Eco-mode is a power-saving automation that switches AC/appliances off when occupants leave a room.

Authorizations:
JWT
path Parameters
id
required
string
query Parameters
eco_mode
boolean

Responses

Get a time series of measurements for the whole property

Returns aggregated measurements (across all devices in the property) at the chosen granularity. Use this for property-level charts. You can optionally restrict the aggregation to a subset of devices via device_ids.

Authorizations:
JWT
path Parameters
id
required
string
query Parameters
measure
required
string (MeasureName)
Enum: "power" "temperature" "humidity" "noise" "occupancy_min" "occupancy_max" "wifi_rssi" "net_qlt" "aq_iaq" "mold_risk_index"

A measurement type recorded by the device.

device_ids
Array of strings

Comma-separated device IDs to aggregate over. If omitted, all the property's devices are included.

granularity
string (TimeGranularity)
Enum: "minutes" "15min" "hours"

Bucket size for the returned series.

start
string <date-time>

Start of the range (inclusive), in the property's timezone. If omitted, defaults to the earliest device creation date.

end
string <date-time>

End of the range (exclusive), in the property's timezone. If omitted, defaults to now.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

devices

Configure Layla devices — alarms, IR controls, pillars and settings.

List devices in a property

Returns the devices in a single property. Use fields to add computed data such as latest sensor values or active alarm state.

Authorizations:
JWT
query Parameters
property_id
string

Restrict results to a single property.

fields
Array of strings
Items Enum: "alarm_event_counts" "latest_values" "in_alarm" "snoozed" "active_alarms"

Comma-separated optional fields.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

List all the user's devices

Returns every device the user has access to, across every property — handy for "all devices" screens.

Authorizations:
JWT
query Parameters
property_id
string

Optional filter; behaves like /devices?property_id=….

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get a single device

Authorizations:
JWT
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "device_mac": "string",
  • "category": "EM",
  • "name": "string",
  • "enabled": true,
  • "alarms": [
    ],
  • "features": [
    ],
  • "tier_features": [
    ],
  • "device_pillar": "noise",
  • "settings": {
    },
  • "id": "string",
  • "property_id": "string",
  • "serial_number": "string",
  • "alarm_event_counts": [
    ],
  • "latest_values": [
    ],
  • "in_alarm": [
    ],
  • "snoozed": [
    ],
  • "active_alarms": [
    ],
  • "connection_status": "online",
  • "last_updated_at": "2019-08-24T14:15:22Z",
  • "trees": 0,
  • "ac_control_active": true,
  • "air_quality_extended_settings_available": true
}

Partially update a device

Update one or more device fields — rename it, change its pillar, toggle alarms on/off, edit thresholds, set quiet hours, etc.

Authorizations:
JWT
path Parameters
id
required
string
Request Body schema: application/json
device_mac
string

MAC address printed on the device sticker.

category
string
Enum: "EM" "SP" "v3.0"

Device hardware category — SP (Sensor Pro), EM, or v3.0.

name
string <= 50 characters
enabled
boolean
Array of objects (AlarmConfigurationModel)

Alarm configuration objects (thresholds, quiet hours, schedules).

features
Array of strings
Items Value: "eco"
tier_features
Array of strings (TierFeature)
Items Enum: "climate" "environment" "motion_safety" "safety"
device_pillar
string (DevicePillar)
Enum: "noise" "air_quality" "smart_ac"

Active feature set on a device — see PATCH /v1/devices/{id}/pillar.

object (DeviceSettingsModel)

Responses

Request samples

Content type
application/json
{
  • "device_mac": "string",
  • "category": "EM",
  • "name": "string",
  • "enabled": true,
  • "alarms": [
    ],
  • "features": [
    ],
  • "tier_features": [
    ],
  • "device_pillar": "noise",
  • "settings": {
    }
}

Response samples

Content type
application/json
{
  • "device_mac": "string",
  • "category": "EM",
  • "name": "string",
  • "enabled": true,
  • "alarms": [
    ],
  • "features": [
    ],
  • "tier_features": [
    ],
  • "device_pillar": "noise",
  • "settings": {
    },
  • "id": "string",
  • "property_id": "string",
  • "serial_number": "string",
  • "alarm_event_counts": [
    ],
  • "latest_values": [
    ],
  • "in_alarm": [
    ],
  • "snoozed": [
    ],
  • "active_alarms": [
    ],
  • "connection_status": "online",
  • "last_updated_at": "2019-08-24T14:15:22Z",
  • "trees": 0,
  • "ac_control_active": true,
  • "air_quality_extended_settings_available": true
}

Get a time series of measurements for a single device

Authorizations:
JWT
path Parameters
id
required
string
query Parameters
measure
required
string (MeasureName)
Enum: "power" "temperature" "humidity" "noise" "occupancy_min" "occupancy_max" "wifi_rssi" "net_qlt" "aq_iaq" "mold_risk_index"

A measurement type recorded by the device.

granularity
string (TimeGranularity)
Enum: "minutes" "15min" "hours"

Bucket size for time-series endpoints. If you omit the parameter the server will pick a sensible value based on the date range.

start
string <date-time>

Start of the range (inclusive), in the property's timezone.

end
string <date-time>

End of the range (exclusive), in the property's timezone.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Update eco-mode PIR threshold for a device

Sets the no-motion duration (seconds) before eco-mode decides the room is empty and turns the AC off.

Authorizations:
JWT
path Parameters
id
required
string
Request Body schema: application/json
last_PIR_detected_time_th
required
integer >= 0

Seconds without motion before triggering eco-mode.

Responses

Request samples

Content type
application/json
{
  • "last_PIR_detected_time_th": 0
}

Response samples

Content type
application/json
{
  • "device_id": "string",
  • "device_mac": "string",
  • "last_PIR_detected_time_th": 0,
  • "realtime_session": true,
  • "message": "string"
}

Switch the device's active "pillar"

A pillar is the feature set the device is currently configured for — e.g. noise (acoustic monitoring), air_quality or smart_ac. Each device can only be in one pillar at a time. Activation-locked devices cannot be switched until they have a paid subscription seat.

Authorizations:
JWT
path Parameters
id
required
string
Request Body schema: application/json
device_pillar
required
string
Enum: "noise" "air_quality" "smart_ac"

Responses

Request samples

Content type
application/json
{
  • "device_pillar": "noise"
}

Response samples

Content type
application/json
{
  • "device_id": "string",
  • "device_mac": "string",
  • "active_pillar": "string",
  • "updated": true
}

Test IR transmission

Sends a test pulse so the user can confirm the device controls their AC. Pass mode: smart to use Layla's pre-mapped commands (when an AC vendor/model is known) or mode: learn to replay the most recent learned command. Optionally include an appliance_config block to override the AC state for the test.

Authorizations:
JWT
path Parameters
id
required
string
Request Body schema: application/json
mode
string
Enum: "smart" "learn"
object (IrApplianceConfigModel)

Per-AC state used by IR commands. Fields map 1-to-1 to the underlying IR library — leave any field out to keep the device's current setting.

Responses

Request samples

Content type
application/json
{
  • "mode": "smart",
  • "appliance_config": {
    }
}

Schedule a one-time AC on/off

Tells the device to turn the AC on or off at a specific moment in the future.

Authorizations:
JWT
path Parameters
id
required
string
Request Body schema: application/json
action
required
string
Enum: "on" "off"
scheduled_for
required
string <date-time>

Responses

Request samples

Content type
application/json
{
  • "action": "on",
  • "scheduled_for": "2019-08-24T14:15:22Z"
}

Cancel the one-time AC timer

Authorizations:
JWT
path Parameters
id
required
string

Responses

Create / update a recurring AC schedule

Sets up a recurring AC schedule (e.g. "Mon-Fri, 8am-6pm") with optional AC vendor-specific settings (temperature, fan speed, mode).

Authorizations:
JWT
path Parameters
id
required
string
Request Body schema: application/json
enabled
boolean
days
Array of strings
Items Enum: "mon" "tue" "wed" "thu" "fri" "sat" "sun"

Days the schedule runs on.

start_time
string^[0-9]{2}:[0-9]{2}$

24-hour time in HH:MM format.

end_time
string^[0-9]{2}:[0-9]{2}$
change_ac_state
boolean

If true, the device will actually switch the AC; if false, the schedule is silent.

object (IrApplianceConfigModel)

Per-AC state used by IR commands. Fields map 1-to-1 to the underlying IR library — leave any field out to keep the device's current setting.

Responses

Request samples

Content type
application/json
{
  • "enabled": true,
  • "days": [
    ],
  • "start_time": "string",
  • "end_time": "string",
  • "change_ac_state": true,
  • "appliance_config": {
    }
}

Delete the AC schedule

Authorizations:
JWT
path Parameters
id
required
string

Responses

statistics

Energy savings, efficiency and alarm-event analytics over time.

Get overall energy & alarm statistics

Returns aggregated energy, costs, savings, efficiency-gains and alarm counts. Filter by property/device and optionally include period-over- period trends.

Authorizations:
JWT
query Parameters
category
string

Property category to filter on (house, apartment, …).

period
string
Enum: "day" "two_days" "week" "month" "three_months" "year" "prev_day" "prev_two_days" "prev_week" "prev_month" "prev_three_months" "prev_year"

Rolling window the statistics are computed over. The prev_* variants return the same-length window immediately before the corresponding one — handy for showing "last week vs the week before" comparisons.

currency
string (CurrencyCode)
Enum: "USD" "EUR" "GBP" "ILS" "BRL" "MXN"

ISO 4217 currency code.

property_id
string
device_id
string
fields
Array of strings
Items Value: "trends"

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Alarm-event time series

Returns the number of alarm events of the given type over time, bucketed by granularity.

Authorizations:
JWT
path Parameters
name
required
string

Alarm/event name.

query Parameters
category
string
property_ids
Array of strings
device_ids
Array of strings
start
string <date-time>
end
string <date-time>
timezone
string
granularity
string (TimeGranularity)
Enum: "minutes" "15min" "hours"

Bucket size for time-series endpoints. If you omit the parameter the server will pick a sensible value based on the date range.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Alarm-event summary total

Authorizations:
JWT
path Parameters
name
required
string
query Parameters
category
string
property_ids
Array of strings
device_ids
Array of strings
start
string <date-time>
end
string <date-time>
timezone
string

Responses

Response samples

Content type
application/json
{
  • "value": 0
}

Alarm-event summary per property

Same as /summary but returns a value per property — handy for "top properties by alarm count" lists.

Authorizations:
JWT
path Parameters
name
required
string
query Parameters
category
string
property_ids
Array of strings
device_ids
Array of strings
start
string <date-time>
end
string <date-time>
timezone
string

Responses

Response samples

Content type
application/json
{
  • "value": 0,
  • "property": {
    }
}

Multiple alarm-event summaries per property

Like the single-alarm version, but you can ask for several alarm types in one call.

Authorizations:
JWT
query Parameters
names
Array of strings (AlarmName)
Items Enum: "noise_alarm" "noise_alarm_quiet_hours" "occupancy_alarm" "device_off_alarm" "device_off_alarm_multiple" "security_alarm" "mold_alarm" "smoke_alarm" "co_alarm" "air_quality_alarm" "bvoc_alarm" "bvoc_spike_alarm" "co2_alarm" "co2_high_guidance" "iaq_ventilation_guidance"
category
string
property_ids
Array of strings
device_ids
Array of strings
start
string <date-time>
end
string <date-time>
timezone
string

Responses

Response samples

Content type
application/json
{
  • "value": 0,
  • "name": "noise_alarm",
  • "property": {
    }
}

notifications

In-app and push notification history.

List notifications

Returns the user's notifications, newest first. Filter by property, device, read status and type, optionally restrict to a date range, and paginate via limit / offset.

Authorizations:
JWT
query Parameters
property_id
string

Restrict to a single property the user has access to.

device_id
string

Restrict to a single device.

seen
boolean

Filter by read/unread status. Omit to return both.

types
Array of strings (NotificationTypeName)
Items Enum: "noise_alarm_start" "noise_alarm_end" "noise_alarm_quiet_hours_start" "noise_alarm_quiet_hours_end" "occupancy_alarm_start" "occupancy_alarm_end" "device_off_alarm_start" "device_off_alarm_end" "device_off_alarm_multiple_start" "device_off_alarm_multiple_end" "security_alarm_start" "security_alarm_end" "mold_alarm_start" "mold_alarm_end" "smoke_alarm_start" "smoke_alarm_end" "co_alarm_start" "co_alarm_end" "air_quality_alarm_start" "air_quality_alarm_end" "bvoc_alarm_start" "bvoc_alarm_end" "bvoc_spike_alarm_start" "bvoc_spike_alarm_end" "co2_alarm_start" "co2_alarm_end" "co2_high_guidance_start" "co2_high_guidance_end" "iaq_ventilation_guidance_start" "iaq_ventilation_guidance_end" "eco_mode_enabled"

Comma-separated list of notification types to include.

start
string <date-time>

Start of the date range (inclusive). Send together with end.

end
string <date-time>

End of the date range (exclusive). Send together with start.

timezone
string

IANA timezone the start / end values are interpreted in. Also used to render created_at values in the response.

limit
integer >= 1

Maximum number of notifications to return.

offset
integer >= 0

Number of notifications to skip (for pagination).

locale
string (LanguageCode)
Enum: "en" "es" "fr" "pt" "de" "it" "el" "ja"

Two-letter language code (e.g. en, es) used to translate notification titles/bodies. If omitted, the server falls back to the user's preference, then to the Accept-Language header, then to en.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Get the latest notification per property

Used by dashboard tiles — one row per property, holding only the most recent matching notification.

Authorizations:
JWT
query Parameters
property_ids
Array of strings

Comma-separated property IDs. If omitted, all the user's properties are included.

types
Array of strings (NotificationTypeName)
Items Enum: "noise_alarm_start" "noise_alarm_end" "noise_alarm_quiet_hours_start" "noise_alarm_quiet_hours_end" "occupancy_alarm_start" "occupancy_alarm_end" "device_off_alarm_start" "device_off_alarm_end" "device_off_alarm_multiple_start" "device_off_alarm_multiple_end" "security_alarm_start" "security_alarm_end" "mold_alarm_start" "mold_alarm_end" "smoke_alarm_start" "smoke_alarm_end" "co_alarm_start" "co_alarm_end" "air_quality_alarm_start" "air_quality_alarm_end" "bvoc_alarm_start" "bvoc_alarm_end" "bvoc_spike_alarm_start" "bvoc_spike_alarm_end" "co2_alarm_start" "co2_alarm_end" "co2_high_guidance_start" "co2_high_guidance_end" "iaq_ventilation_guidance_start" "iaq_ventilation_guidance_end" "eco_mode_enabled"

Comma-separated list of notification types to include.

start
required
string <date-time>

Earliest notification timestamp to consider, interpreted in timezone.

timezone
required
string

IANA timezone for start and for the created_at values in the response.

locale
string (LanguageCode)
Enum: "en" "es" "fr" "pt" "de" "it" "el" "ja"

Language code used to translate notification titles/bodies. Falls back to the user's preference, then the Accept-Language header, then en.

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Mark multiple notifications as seen

Mark by IDs (ids) and/or all notifications under a property (property_id).

Authorizations:
JWT
Request Body schema: application/json
ids
Array of strings
property_id
string

Responses

Request samples

Content type
application/json
{
  • "ids": [
    ],
  • "property_id": "string"
}

reports

Email reports and async incident reports.

Email a summary report

Generates and emails a summary report for one or more properties. Choose the period (last day, week, month, etc) and the report flavours (owner / smoke / noise / executive). The result arrives by email — this endpoint does not return the PDF directly.

Authorizations:
JWT
Request Body schema: application/json
property_ids
required
Array of strings
types
Array of strings
Items Enum: "owner" "smoke" "noise" "executive"

Which flavours of report to generate.

period
required
string
Enum: "day" "two_days" "week" "month" "three_months" "year" "all_time"

Responses

Request samples

Content type
application/json
{
  • "property_ids": [
    ],
  • "types": [
    ],
  • "period": "day"
}

Request an incident report (asynchronous)

Kicks off generation of a detailed incident report for a specific day or date range and email-delivers a link. The endpoint returns immediately with a report_id; poll /reports/{id} for progress.

Either date or both start_date and end_date are required.

Authorizations:
JWT
Request Body schema: application/json
property_id
required
string
property_name
string

Optional friendly name to embed in the report.

report_types
Array of strings non-empty unique
Items Enum: "noise" "crowd" "smoke" "mold" "air_quality" "activity" "temperature" "humidity" "security" "movement_count" "co"
date
string <date>

Single day (YYYY-MM-DD). Use this OR start_date+end_date.

start_date
string <date>
end_date
string <date>
emails
required
Array of strings <email> non-empty unique

Email addresses to send the finished report to.

Responses

Request samples

Content type
application/json
{
  • "property_id": "string",
  • "property_name": "string",
  • "report_types": [
    ],
  • "date": "2019-08-24",
  • "start_date": "2019-08-24",
  • "end_date": "2019-08-24",
  • "emails": [
    ]
}

Response samples

Content type
application/json
{
  • "report_id": "string"
}

Get the status of an incident report

Poll this endpoint after POST /v1/reports/incident. status transitions pendingprocessingcompleted (report_link populated) or failed (error_message populated).

Authorizations:
JWT
path Parameters
id
required
string

Responses

Response samples

Content type
application/json
{
  • "report_id": "string",
  • "status": "pending",
  • "report_link": "string",
  • "emails_sent": [
    ],
  • "generated_at": "2019-08-24T14:15:22Z",
  • "error_message": "string",
  • "error_at": "2019-08-24T14:15:22Z"
}