Quiet hours
- Type
- quiet_hours
- Category
- Agent safety
- Enforced atWhen this policy is checked: while someone tries to open, while they create or change an invitation or hold, on a membership change or background sweep (lifecycle), or after a denial (record only).
- Access-time
- TiersWhere an admin can set this policy: the whole organization, one integration, or the physical device when the connector supports a device steward.
- OrgIntegration
- EnforcementEnforcement modes this type accepts. Enforce applies the row. Require approval (user sharing only) opens an admin approval inbox instead of blocking.
- Enforce
- DefaultWhat happens when no row of this type is configured.
- Not configured — no quiet-hours window.
Denies an otherwise-allowed open during a local time window for the principal kinds in applies_to. Default applies_to is agents, API keys, and invitations — not human admins unless you include them. A caller is every kind it is at once (its credential kind, plus invitation, resident, or admin when that relationship holds), and a row binds when any of them is listed. Evaluated on the entity-action API and the dashboard portal open; not yet on the anonymous public portal or invitation open. Local time uses the organization IANA timezone and wraps midnight the same way invitation curfew does. Active emergency free egress skips this deny.
When it is enforced
Evaluated when someone opens a door or gate or triggers an entity action. If this policy applies, the open is denied even when roles and grants would otherwise allow it.
Where to set it
Settings → Policies (org) or the integration Policies tab.
Policies never grant access. See thepolicies architecture guidefor how org, integration, and device tiers combine.
Arguments
The config object on create/update. Row fields outsideconfig are enforcement (this type acceptsenforce; any other value is rejected with 400), enabled (disabled rows never apply), and capability.
| Name | Type | Required | Values | Description |
|---|---|---|---|---|
| start | string | Yes | HH:MM | Inclusive start of the window as local `HH:MM` (00:00–23:59). May be later than end (midnight-wrapping, for example 22:30→06:00). |
| end | string | Yes | HH:MM | Inclusive end of the window as local `HH:MM`. At 06:00 the minute 06:00 is blocked and 06:01 is not. |
| applies_to | string[] | No | agentapi_keyinvitationmemberresidentadminall | Principal kinds this row binds, as a non-empty array of agent, api_key, invitation, member, resident, admin, all. Other kinds, a bare string, and empty arrays are rejected. `all` matches every kind this policy can bind. A caller is every kind it is at once, and a row binds when any of them is listed. When omitted, the default applies. Default: agent, api_key, invitation |
How overlapping rows combine
Any applicable enforcing row that binds one of the caller’s principal kinds denies the open. Disabled rows never block.
Example
An agent or API key cannot open the lobby door at 02:00. A signed-in admin still can, unless applies_to includes admin.
{ "start": "22:00", "end": "06:00", "applies_to": [ "agent", "api_key", "invitation" ]}Integrations
This type is documented on these connectors:
- Home Assistant (home_assistant)
- KNX (knx)
- MQTT (mqtt)
- PalGate Cloud (palgate_cloud)
- Shelly Cloud (shelly_cloud)
- Shelly Websocket (shelly_websocket)
- Tasmota (tasmota)
- Virtual Access (virtual_access)
- Virtual Demo Devices (virtual_demo)
- Waveshare (waveshare)
Related
- Policy catalog
- Policies architecture guide
- Invitation curfew (invitation_curfew)
- Rate limit (rate_limit)
- Emergency lockdown (emergency_lockdown)
- Require step-up (require_step_up)
Typed configuration
Section titled “Typed configuration”The OpenAPI contract names this object QuietHoursPolicyConfig:
{ "start": "22:00", "end": "06:00", "applies_to": ["agent", "api_key", "invitation"]}start and end are inclusive organization-local HH:MM values. A start later than the end wraps midnight. applies_to is optional; omit it to use the default set. output is not supported (quiet hours are set on an organization or integration, not one device output) and is rejected.