Anti-tailgating cooldown
- Type
- anti_tailgating_cooldown
- 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 per-door cooldown after a successful open.
Records the last successful open per entity and denies another open until cooldown_seconds have passed. Combination takes the maximum cooldown. By default every principal except organization admins is bound; admins are bound only when applies_to includes admin. Active emergency free egress skips this deny. Disabled rows never block.
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 |
|---|---|---|---|---|
| cooldown_seconds | integer | Yes | — | Minimum seconds between successful opens of the same entity. Integer from 1 through 31536000. |
| 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: Everyone except admins: a caller who is an admin is not bound unless applies_to names admin. |
How overlapping rows combine
Most-restrictive: maximum of cooldown_seconds across applicable rows. Disabled rows never block.
Example
A guest who just opened the lobby cannot open it again for 15 seconds. An org admin still can. Emergency free egress skips the wait.
{ "cooldown_seconds": 15}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
- Rate limit (rate_limit)
- Emergency free egress (emergency_free_egress)
- Require step-up (require_step_up)