Skip to content
OpenAppPhysical access, simplified
Login

Require hold expiry

Type
hold_require_expiry
Category
Holds
Enforced at
Authoring-time
Tiers
OrgIntegrationDevice
Enforcement
Enforce
Default
Not configured — permanent holds are allowed for anyone with the set-hold role.

Limits how a principal with the set-hold role may latch a door or light. This type forbids permanent holds. Temporary holds, and weekly holds unless also forbidden, remain allowed. Clearing a hold back to normal is always allowed for anyone with set-hold. Policies never grant the ability to hold.

When it is enforced

Evaluated when someone creates or updates an invitation, hold, or share. Requests that would exceed the limit are rejected — they are not silently rewritten.

Where to set it

Settings → Policies (org), the integration Policies tab, or — on PalGate — the device steward Policies tab.

Policies never grant access. See thepolicies architecture guidefor how org, integration, and device tiers combine.

Arguments

The config object on create/update. Shared row fieldsenforcement (enforce, require_approval,audit_only) and enabled apply to every type;audit_only and disabled rows never block.

NameTypeRequiredValuesDescription
applies_tostring or string[]No
agentapi_keyinvitationmemberresidentadminall
Principal kinds this row binds. Closed set: agent, api_key, invitation, member, resident, admin, all. Unknown strings and empty arrays are rejected. `all` matches every kind. When omitted, the type-specific default applies (see Default). Device-tier rows without `applies_to` often bind everyone, including admins. Default: Org/integration: member and resident. Device-tier without applies_to: everyone, including admins.
outputstring or integerNoOptional channel or output id. When set, the policy binds only that output. When omitted, it binds every output of the tier target. A scoped row does not apply when the acting output is unknown.

How overlapping rows combine

Boolean OR across applicable enforcing rows (any forbid wins).

Example

A resident can hold a door open until 18:00, but cannot set a hold with no end.

config
{}

Integrations

This type is documented on these connectors: