From fb8067adafc0dffa7f535bd9c75717b2eeedda68 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Jul 2026 22:58:46 +0000 Subject: [PATCH 1/5] feat: group inherited errors by parent resource on API error pages Render resource error pages in two parts: first the errors that belong to the resource itself (matching `is__error`), grouped by variant group as before; then, for each parent resource whose errors the resource inherits (other `is__error` flags), a single flat group per parent (variant groups ignored), headed by the parent's noun. Errors that carry no resource flag remain the resource's own errors, and unmanaged resources reuse their managed counterpart's flag (`is_access_code_error`), so their own errors are identified correctly. On the access code pages, inherited errors are limited to the ungrouped and Locks variant groups; device categories like thermostats are not relevant there. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01TgmnJeFSgiQhfptLskubdh --- mintlify-codegen/errors.ts | 148 ++++++++++++++++-- mintlify-docs/api/access_codes/errors.mdx | 116 ++++++++------ .../api/access_codes/unmanaged/errors.mdx | 116 ++++++++------ mintlify-docs/api/acs/systems/errors.mdx | 16 +- mintlify-docs/api/devices/errors.mdx | 22 ++- .../api/devices/unmanaged/errors.mdx | 22 ++- 6 files changed, 306 insertions(+), 134 deletions(-) diff --git a/mintlify-codegen/errors.ts b/mintlify-codegen/errors.ts index 0d59f7d50..f29ef1889 100644 --- a/mintlify-codegen/errors.ts +++ b/mintlify-codegen/errors.ts @@ -68,6 +68,23 @@ function variantCode( return prop?.values?.[0]?.name ?? null } +/** Map a list of variants to sorted code entries, dropping any without a + * discriminator code. */ +function variantsToEntries( + variants: DiscriminatedListProperty['variants'], + discriminator: string, +): CodeEntry[] { + return variants + .map((v) => { + const code = variantCode(v, discriminator) + return code == null + ? null + : { code, description: (v.description ?? '').trim() } + }) + .filter((e): e is CodeEntry => e != null) + .sort((a, b) => a.code.localeCompare(b.code)) +} + /** * Group a resource's `errors` or `warnings` property into ordered code groups: * the ungrouped variants first (no heading), then each named variant group in @@ -78,16 +95,10 @@ function groupCodes(prop: Property | undefined): CodeGroup[] { if (!isDiscriminatedListProperty(prop)) return [] const entriesFor = (key: string | null): CodeEntry[] => - prop.variants - .filter((v) => v.variantGroupKey === key) - .map((v) => { - const code = variantCode(v, prop.discriminator) - return code == null - ? null - : { code, description: (v.description ?? '').trim() } - }) - .filter((e): e is CodeEntry => e != null) - .sort((a, b) => a.code.localeCompare(b.code)) + variantsToEntries( + prop.variants.filter((v) => v.variantGroupKey === key), + prop.discriminator, + ) const groups: CodeGroup[] = [{ name: null, entries: entriesFor(null) }] for (const group of prop.variantGroups) { @@ -99,6 +110,108 @@ function groupCodes(prop: Property | undefined): CodeGroup[] { return groups.filter((g) => g.entries.length > 0) } +// Resources whose inherited error groups are restricted to an allowlist of +// variant groups (in addition to the always-included ungrouped variants). Every +// error a resource reports carries an `is__error` flag for each +// resource it applies to, so a resource inherits errors from its parents (e.g. +// an access code inherits its lock's device errors). On the access code pages, +// only lock-related inherited errors are relevant; broader device categories +// like thermostats or noise sensors are not. +const INHERITED_ERROR_GROUP_ALLOWLIST: Record = { + access_code: ['locks'], + unmanaged_access_code: ['locks'], +} + +/** Convert a resource type (`connected_account`) into a display noun + * (`Connected Account`) for an inherited-error group heading. */ +function resourceTypeNoun(resourceType: string): string { + return resourceType + .split('_') + .map((w) => w.charAt(0).toUpperCase() + w.slice(1)) + .join(' ') +} + +/** + * Group a resource's `errors` property following the inheritance model: first + * the errors that belong to the resource itself (those flagged + * `is__error`), grouped by variant group exactly like + * `groupCodes`; then, for each parent resource whose errors this resource + * inherits (other `is__error` flags), a single flat group per parent — + * variant groups are ignored, and the group is headed by the parent's noun. + * Inherited groups are ordered by parent resource, and an error that applies to + * several parents appears under each. When `inheritedGroupAllowlist` is set, + * inherited errors are limited to the ungrouped variants plus the listed variant + * groups. + */ +function groupErrorCodes( + prop: Property | undefined, + resourceType: string, + inheritedGroupAllowlist?: string[], +): CodeGroup[] { + if (!isDiscriminatedListProperty(prop)) return [] + + // Unmanaged resources reuse their managed counterpart's error flag + // (`unmanaged_access_code` errors carry `is_access_code_error`), so strip the + // `unmanaged_` prefix to identify the resource's own errors. + const ownErrorKey = `is_${resourceType.replace(/^unmanaged_/, '')}_error` + const hasErrorKey = ( + variant: DiscriminatedListProperty['variants'][number], + key: string, + ): boolean => variant.properties.some((p) => p.name === key) + const hasAnyErrorKey = ( + variant: DiscriminatedListProperty['variants'][number], + ): boolean => variant.properties.some((p) => /^is_.+_error$/.test(p.name)) + + // Errors matching the resource's own type, grouped by variant group. Errors + // that carry no resource flag at all belong to this resource too (some + // resources don't tag their errors), so they render here rather than as + // inherited. + const ownGroups = groupCodes({ + ...prop, + variants: prop.variants.filter( + (v) => hasErrorKey(v, ownErrorKey) || !hasAnyErrorKey(v), + ), + }) + + // Errors inherited from parent resources, one flat group per parent. + const parentErrorKeys = [ + ...new Set( + prop.variants.flatMap((v) => + v.properties + .map((p) => p.name) + .filter( + (name) => /^is_.+_error$/.test(name) && name !== ownErrorKey, + ), + ), + ), + ].sort() + + const isAllowedGroup = (variantGroupKey: string | null): boolean => + inheritedGroupAllowlist == null || + variantGroupKey == null || + inheritedGroupAllowlist.includes(variantGroupKey) + + const inheritedGroups: CodeGroup[] = parentErrorKeys + .map((errorKey): CodeGroup => { + const parentResourceType = errorKey + .replace(/^is_/, '') + .replace(/_error$/, '') + const variants = prop.variants.filter( + (v) => + hasErrorKey(v, errorKey) && + !hasErrorKey(v, ownErrorKey) && + isAllowedGroup(v.variantGroupKey), + ) + return { + name: resourceTypeNoun(parentResourceType), + entries: variantsToEntries(variants, prop.discriminator), + } + }) + .filter((g) => g.entries.length > 0) + + return [...ownGroups, ...inheritedGroups] +} + /** * Order an object's properties for display: the discriminator first, then * `message` and `created_at`, then everything else alphabetically. Keeps the @@ -349,6 +462,11 @@ interface ErrorPageOptions { // devices. Used only for device sub-category pages (locks/thermostats/phones), // which are subsets that omit the device-level codes. commonDeviceErrorsRoute?: string + // When set, errors are grouped by the inheritance model (own errors first, + // then a flat group per parent resource) keyed on this resource type. Used for + // real per-resource pages; omitted for device sub-category pages, which are + // already scoped to a single variant group. + inheritanceResourceType?: string } /** @@ -372,7 +490,14 @@ async function writeErrorPage( return } - const errorGroups = groupCodes(errorsProp) + const errorGroups = + options.inheritanceResourceType != null + ? groupErrorCodes( + errorsProp, + options.inheritanceResourceType, + INHERITED_ERROR_GROUP_ALLOWLIST[options.inheritanceResourceType], + ) + : groupCodes(errorsProp) const warningGroups = groupCodes(warningsProp) if (errorGroups.length === 0 && warningGroups.length === 0) return @@ -519,6 +644,7 @@ export async function updateErrorPages( resource.properties.find((p) => p.name === 'errors'), resource.properties.find((p) => p.name === 'warnings'), routes, + { inheritanceResourceType: resource.resourceType }, ) } diff --git a/mintlify-docs/api/access_codes/errors.mdx b/mintlify-docs/api/access_codes/errors.mdx index 038ce6ae6..523daecc5 100644 --- a/mintlify-docs/api/access_codes/errors.mdx +++ b/mintlify-docs/api/access_codes/errors.mdx @@ -78,133 +78,135 @@ Indicates that the provider cannot confirm whether the access code was set or re --- -### `account_disconnected` +### `code_modified_external_to_seam` -Indicates that the account is disconnected. +Code was modified or removed externally after Seam successfully set it on the device. --- -### `bridge_disconnected` +### `duplicate_code_attempt_prevented` -Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). +An attempt to modify this access code was prevented. --- -### `code_modified_external_to_seam` +### `duplicate_code_on_device` -Code was modified or removed externally after Seam successfully set it on the device. +Duplicate access code detected on device. --- -### `device_disconnected` +### `failed_to_remove_from_device` -Indicates that the device is disconnected. +Failed to remove code from device. --- -### `device_offline` +### `failed_to_set_on_device` -Indicates that the device is offline. +Failed to set code on device. --- -### `device_removed` +### `insufficient_permissions` -Indicates that the device has been removed. +Admin role required—insufficient permissions to manage PINs on this device. Please have an admin update your role, or ask them to set the PIN. --- -### `duplicate_code_attempt_prevented` +### `no_space_for_access_code_on_device` -An attempt to modify this access code was prevented. +No space for access code on device. --- -### `duplicate_code_on_device` +### `provider_issue` -Duplicate access code detected on device. +Indicates a provider-specific issue that prevents the access code from being set or managed. Check the error message for details. --- -### `failed_to_remove_from_device` +### `replaced_by_newer_access_code` -Failed to remove code from device. +This access code was overridden on the device by a newer access code programmed to the same slot. --- -### `failed_to_set_on_device` +### `salto_ks_user_not_subscribed` -Failed to set code on device. +Salto site user is not subscribed. --- -### `hub_disconnected` +### Bridge -Indicates that the hub is disconnected. +#### `bridge_disconnected` + +Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). --- -### `insufficient_permissions` +### Connected Account -Admin role required—insufficient permissions to manage PINs on this device. Please have an admin update your role, or ask them to set the PIN. +#### `account_disconnected` + +Indicates that the account is disconnected. --- -### `missing_device_credentials` +#### `bridge_disconnected` -Indicates that device credentials are missing. +Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). --- -### `no_space_for_access_code_on_device` +#### `dormakaba_sites_disconnected` -No space for access code on device. +Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support. --- -### `provider_issue` +#### `salto_ks_subscription_limit_exceeded` -Indicates a provider-specific issue that prevents the access code from being set or managed. Check the error message for details. +Indicates that the Salto site user limit has been reached. --- -### `replaced_by_newer_access_code` +### Device -This access code was overridden on the device by a newer access code programmed to the same slot. +#### `account_disconnected` + +Indicates that the account is disconnected. --- -### `salto_ks_user_not_subscribed` +#### `august_lock_missing_bridge` -Salto site user is not subscribed. +Indicates that the lock is not connected to a bridge. --- -### `subscription_required` +#### `august_lock_not_authorized` -Indicates that a subscription is required to connect. +Indicates that the user is not authorized to use the August lock. --- -### Access Codes - -#### `empty_backup_access_code_pool` +#### `device_disconnected` -Indicates that the [backup access code pool](https://docs.seam.co/low-level-apis/smart-locks/access-codes/backup-access-codes) is empty. +Indicates that the device is disconnected. --- -### Locks - -#### `august_lock_missing_bridge` +#### `device_offline` -Indicates that the lock is not connected to a bridge. +Indicates that the device is offline. --- -#### `august_lock_not_authorized` +#### `device_removed` -Indicates that the user is not authorized to use the August lock. +Indicates that the device has been removed. --- @@ -214,29 +216,39 @@ Indicates that one or more dormakaba sites associated with the connected account --- +#### `hub_disconnected` + +Indicates that the hub is disconnected. + +--- + #### `lockly_missing_wifi_bridge` Indicates that the Lockly lock is not connected to a Wi-Fi bridge. --- +#### `missing_device_credentials` + +Indicates that device credentials are missing. + +--- + #### `salto_ks_subscription_limit_exceeded` Indicates that the Salto site user limit has been reached. --- -#### `ttlock_lock_not_paired_to_gateway` +#### `subscription_required` -Indicates that the lock is not paired with a gateway. +Indicates that a subscription is required to connect. --- -### Thermostats - -#### `auxiliary_heat_running` +#### `ttlock_lock_not_paired_to_gateway` -Indicates that the auxiliary heat is running. +Indicates that the lock is not paired with a gateway. --- diff --git a/mintlify-docs/api/access_codes/unmanaged/errors.mdx b/mintlify-docs/api/access_codes/unmanaged/errors.mdx index 03da9ac7a..70f91ce92 100644 --- a/mintlify-docs/api/access_codes/unmanaged/errors.mdx +++ b/mintlify-docs/api/access_codes/unmanaged/errors.mdx @@ -78,133 +78,135 @@ Indicates that the provider cannot confirm whether the access code was set or re --- -### `account_disconnected` +### `code_modified_external_to_seam` -Indicates that the account is disconnected. +Code was modified or removed externally after Seam successfully set it on the device. --- -### `bridge_disconnected` +### `duplicate_code_attempt_prevented` -Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). +An attempt to modify this access code was prevented. --- -### `code_modified_external_to_seam` +### `duplicate_code_on_device` -Code was modified or removed externally after Seam successfully set it on the device. +Duplicate access code detected on device. --- -### `device_disconnected` +### `failed_to_remove_from_device` -Indicates that the device is disconnected. +Failed to remove code from device. --- -### `device_offline` +### `failed_to_set_on_device` -Indicates that the device is offline. +Failed to set code on device. --- -### `device_removed` +### `insufficient_permissions` -Indicates that the device has been removed. +Admin role required—insufficient permissions to manage PINs on this device. Please have an admin update your role, or ask them to set the PIN. --- -### `duplicate_code_attempt_prevented` +### `no_space_for_access_code_on_device` -An attempt to modify this access code was prevented. +No space for access code on device. --- -### `duplicate_code_on_device` +### `provider_issue` -Duplicate access code detected on device. +Indicates a provider-specific issue that prevents the access code from being set or managed. Check the error message for details. --- -### `failed_to_remove_from_device` +### `replaced_by_newer_access_code` -Failed to remove code from device. +This access code was overridden on the device by a newer access code programmed to the same slot. --- -### `failed_to_set_on_device` +### `salto_ks_user_not_subscribed` -Failed to set code on device. +Salto site user is not subscribed. --- -### `hub_disconnected` +### Bridge -Indicates that the hub is disconnected. +#### `bridge_disconnected` + +Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). --- -### `insufficient_permissions` +### Connected Account -Admin role required—insufficient permissions to manage PINs on this device. Please have an admin update your role, or ask them to set the PIN. +#### `account_disconnected` + +Indicates that the account is disconnected. --- -### `missing_device_credentials` +#### `bridge_disconnected` -Indicates that device credentials are missing. +Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). --- -### `no_space_for_access_code_on_device` +#### `dormakaba_sites_disconnected` -No space for access code on device. +Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support. --- -### `provider_issue` +#### `salto_ks_subscription_limit_exceeded` -Indicates a provider-specific issue that prevents the access code from being set or managed. Check the error message for details. +Indicates that the Salto site user limit has been reached. --- -### `replaced_by_newer_access_code` +### Device -This access code was overridden on the device by a newer access code programmed to the same slot. +#### `account_disconnected` + +Indicates that the account is disconnected. --- -### `salto_ks_user_not_subscribed` +#### `august_lock_missing_bridge` -Salto site user is not subscribed. +Indicates that the lock is not connected to a bridge. --- -### `subscription_required` +#### `august_lock_not_authorized` -Indicates that a subscription is required to connect. +Indicates that the user is not authorized to use the August lock. --- -### Access Codes - -#### `empty_backup_access_code_pool` +#### `device_disconnected` -Indicates that the [backup access code pool](https://docs.seam.co/low-level-apis/smart-locks/access-codes/backup-access-codes) is empty. +Indicates that the device is disconnected. --- -### Locks - -#### `august_lock_missing_bridge` +#### `device_offline` -Indicates that the lock is not connected to a bridge. +Indicates that the device is offline. --- -#### `august_lock_not_authorized` +#### `device_removed` -Indicates that the user is not authorized to use the August lock. +Indicates that the device has been removed. --- @@ -214,29 +216,39 @@ Indicates that one or more dormakaba sites associated with the connected account --- +#### `hub_disconnected` + +Indicates that the hub is disconnected. + +--- + #### `lockly_missing_wifi_bridge` Indicates that the Lockly lock is not connected to a Wi-Fi bridge. --- +#### `missing_device_credentials` + +Indicates that device credentials are missing. + +--- + #### `salto_ks_subscription_limit_exceeded` Indicates that the Salto site user limit has been reached. --- -#### `ttlock_lock_not_paired_to_gateway` +#### `subscription_required` -Indicates that the lock is not paired with a gateway. +Indicates that a subscription is required to connect. --- -### Thermostats - -#### `auxiliary_heat_running` +#### `ttlock_lock_not_paired_to_gateway` -Indicates that the auxiliary heat is running. +Indicates that the lock is not paired with a gateway. --- diff --git a/mintlify-docs/api/acs/systems/errors.mdx b/mintlify-docs/api/acs/systems/errors.mdx index a20abd3c1..5056f4f7c 100644 --- a/mintlify-docs/api/acs/systems/errors.mdx +++ b/mintlify-docs/api/acs/systems/errors.mdx @@ -49,13 +49,6 @@ Indicates that the [access control system](https://docs.seam.co/low-level-apis/a --- -### `bridge_disconnected` - -Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. -See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). - ---- - ### `provider_service_unavailable` Indicates that the access control system provider's service is temporarily unavailable. Seam will automatically retry and reconnect when the service becomes available again. @@ -90,6 +83,15 @@ See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-l --- +### Bridge + +#### `bridge_disconnected` + +Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. +See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). + +--- + ## Warnings Each warning is an object with the following shape: diff --git a/mintlify-docs/api/devices/errors.mdx b/mintlify-docs/api/devices/errors.mdx index 0c5401597..fd851a998 100644 --- a/mintlify-docs/api/devices/errors.mdx +++ b/mintlify-docs/api/devices/errors.mdx @@ -53,12 +53,6 @@ Indicates that the account is disconnected. --- -### `bridge_disconnected` - -Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). - ---- - ### `device_disconnected` Indicates that the device is disconnected. @@ -149,6 +143,22 @@ Indicates that the auxiliary heat is running. --- +### Bridge + +#### `bridge_disconnected` + +Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). + +--- + +### Connected Account + +#### `bridge_disconnected` + +Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). + +--- + ## Warnings Each warning is an object with the following shape: diff --git a/mintlify-docs/api/devices/unmanaged/errors.mdx b/mintlify-docs/api/devices/unmanaged/errors.mdx index af3ac4599..57e7339cf 100644 --- a/mintlify-docs/api/devices/unmanaged/errors.mdx +++ b/mintlify-docs/api/devices/unmanaged/errors.mdx @@ -53,12 +53,6 @@ Indicates that the account is disconnected. --- -### `bridge_disconnected` - -Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). - ---- - ### `device_disconnected` Indicates that the device is disconnected. @@ -149,6 +143,22 @@ Indicates that the auxiliary heat is running. --- +### Bridge + +#### `bridge_disconnected` + +Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). + +--- + +### Connected Account + +#### `bridge_disconnected` + +Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). + +--- + ## Warnings Each warning is an object with the following shape: From bbbe2433e35e79561a59ab57a427e5268e53738d Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 2 Jul 2026 22:59:30 +0000 Subject: [PATCH 2/5] ci: Format code --- mintlify-codegen/errors.ts | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/mintlify-codegen/errors.ts b/mintlify-codegen/errors.ts index f29ef1889..8e1212d9e 100644 --- a/mintlify-codegen/errors.ts +++ b/mintlify-codegen/errors.ts @@ -179,9 +179,7 @@ function groupErrorCodes( prop.variants.flatMap((v) => v.properties .map((p) => p.name) - .filter( - (name) => /^is_.+_error$/.test(name) && name !== ownErrorKey, - ), + .filter((name) => /^is_.+_error$/.test(name) && name !== ownErrorKey), ), ), ].sort() From 5d82940b03635be1c29d2999ed843b875813657a Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Jul 2026 23:08:35 +0000 Subject: [PATCH 3/5] refactor: identify own vs inherited errors via variant.resourceType Use the blueprint's `variant.resourceType` field (added in @seamapi/blueprint 0.56.0) to split a resource's errors into its own and inherited groups, replacing the `is__error` marker-property parsing. Each error names exactly one owning resource, so inherited errors group cleanly under a single parent and never appear twice. This corrects two cases the marker approach got wrong: `acs_system` errors (e.g. `bridge_disconnected`) are its own, not inherited from a bridge; and errors that carried several markers (e.g. `account_disconnected`, `bridge_disconnected`) no longer duplicate across parent groups. Bumps @seamapi/blueprint to ^0.56.0 for the field. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01TgmnJeFSgiQhfptLskubdh --- mintlify-codegen/errors.ts | 77 ++++++++----------- mintlify-docs/api/access_codes/errors.mdx | 26 ------- .../api/access_codes/unmanaged/errors.mdx | 26 ------- mintlify-docs/api/acs/systems/errors.mdx | 16 ++-- mintlify-docs/api/devices/errors.mdx | 36 ++++----- .../api/devices/unmanaged/errors.mdx | 36 ++++----- package-lock.json | 8 +- package.json | 2 +- 8 files changed, 71 insertions(+), 156 deletions(-) diff --git a/mintlify-codegen/errors.ts b/mintlify-codegen/errors.ts index 8e1212d9e..a623fe979 100644 --- a/mintlify-codegen/errors.ts +++ b/mintlify-codegen/errors.ts @@ -111,12 +111,12 @@ function groupCodes(prop: Property | undefined): CodeGroup[] { } // Resources whose inherited error groups are restricted to an allowlist of -// variant groups (in addition to the always-included ungrouped variants). Every -// error a resource reports carries an `is__error` flag for each -// resource it applies to, so a resource inherits errors from its parents (e.g. -// an access code inherits its lock's device errors). On the access code pages, -// only lock-related inherited errors are relevant; broader device categories -// like thermostats or noise sensors are not. +// variant groups (in addition to the always-included ungrouped variants). An +// error's `variant.resourceType` names the resource it belongs to, so a resource +// inherits the errors whose type differs from its own (e.g. an access code +// inherits its lock's device errors). On the access code pages, only +// lock-related inherited errors are relevant; broader device categories like +// thermostats or noise sensors are not. const INHERITED_ERROR_GROUP_ALLOWLIST: Record = { access_code: ['locks'], unmanaged_access_code: ['locks'], @@ -133,15 +133,13 @@ function resourceTypeNoun(resourceType: string): string { /** * Group a resource's `errors` property following the inheritance model: first - * the errors that belong to the resource itself (those flagged - * `is__error`), grouped by variant group exactly like - * `groupCodes`; then, for each parent resource whose errors this resource - * inherits (other `is__error` flags), a single flat group per parent — - * variant groups are ignored, and the group is headed by the parent's noun. - * Inherited groups are ordered by parent resource, and an error that applies to - * several parents appears under each. When `inheritedGroupAllowlist` is set, - * inherited errors are limited to the ungrouped variants plus the listed variant - * groups. + * the errors that belong to the resource itself (whose `variant.resourceType` + * matches), grouped by variant group exactly like `groupCodes`; then, for each + * parent resource whose errors this resource inherits (variants with a different + * `resourceType`), a single flat group per parent — variant groups are ignored, + * and the group is headed by the parent's noun. Inherited groups are ordered by + * parent resource type. When `inheritedGroupAllowlist` is set, inherited errors + * are limited to the ungrouped variants plus the listed variant groups. */ function groupErrorCodes( prop: Property | undefined, @@ -150,37 +148,28 @@ function groupErrorCodes( ): CodeGroup[] { if (!isDiscriminatedListProperty(prop)) return [] - // Unmanaged resources reuse their managed counterpart's error flag - // (`unmanaged_access_code` errors carry `is_access_code_error`), so strip the - // `unmanaged_` prefix to identify the resource's own errors. - const ownErrorKey = `is_${resourceType.replace(/^unmanaged_/, '')}_error` - const hasErrorKey = ( + // Unmanaged resources carry their managed counterpart's resource type on + // their variants (`unmanaged_access_code` errors are tagged `access_code`), so + // strip the `unmanaged_` prefix to identify the resource's own errors. A + // variant with no resource type is treated as the resource's own. + const ownResourceType = resourceType.replace(/^unmanaged_/, '') + const isOwn = ( variant: DiscriminatedListProperty['variants'][number], - key: string, - ): boolean => variant.properties.some((p) => p.name === key) - const hasAnyErrorKey = ( - variant: DiscriminatedListProperty['variants'][number], - ): boolean => variant.properties.some((p) => /^is_.+_error$/.test(p.name)) + ): boolean => + variant.resourceType == null || variant.resourceType === ownResourceType - // Errors matching the resource's own type, grouped by variant group. Errors - // that carry no resource flag at all belong to this resource too (some - // resources don't tag their errors), so they render here rather than as - // inherited. + // Errors matching the resource's own type, grouped by variant group. const ownGroups = groupCodes({ ...prop, - variants: prop.variants.filter( - (v) => hasErrorKey(v, ownErrorKey) || !hasAnyErrorKey(v), - ), + variants: prop.variants.filter(isOwn), }) - // Errors inherited from parent resources, one flat group per parent. - const parentErrorKeys = [ + // Errors inherited from parent resources, one flat group per parent resource. + const parentResourceTypes = [ ...new Set( - prop.variants.flatMap((v) => - v.properties - .map((p) => p.name) - .filter((name) => /^is_.+_error$/.test(name) && name !== ownErrorKey), - ), + prop.variants + .map((v) => v.resourceType) + .filter((t): t is string => t != null && t !== ownResourceType), ), ].sort() @@ -189,15 +178,11 @@ function groupErrorCodes( variantGroupKey == null || inheritedGroupAllowlist.includes(variantGroupKey) - const inheritedGroups: CodeGroup[] = parentErrorKeys - .map((errorKey): CodeGroup => { - const parentResourceType = errorKey - .replace(/^is_/, '') - .replace(/_error$/, '') + const inheritedGroups: CodeGroup[] = parentResourceTypes + .map((parentResourceType): CodeGroup => { const variants = prop.variants.filter( (v) => - hasErrorKey(v, errorKey) && - !hasErrorKey(v, ownErrorKey) && + v.resourceType === parentResourceType && isAllowedGroup(v.variantGroupKey), ) return { diff --git a/mintlify-docs/api/access_codes/errors.mdx b/mintlify-docs/api/access_codes/errors.mdx index 523daecc5..1382e1714 100644 --- a/mintlify-docs/api/access_codes/errors.mdx +++ b/mintlify-docs/api/access_codes/errors.mdx @@ -138,14 +138,6 @@ Salto site user is not subscribed. --- -### Bridge - -#### `bridge_disconnected` - -Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). - ---- - ### Connected Account #### `account_disconnected` @@ -174,12 +166,6 @@ Indicates that the Salto site user limit has been reached. ### Device -#### `account_disconnected` - -Indicates that the account is disconnected. - ---- - #### `august_lock_missing_bridge` Indicates that the lock is not connected to a bridge. @@ -210,12 +196,6 @@ Indicates that the device has been removed. --- -#### `dormakaba_sites_disconnected` - -Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support. - ---- - #### `hub_disconnected` Indicates that the hub is disconnected. @@ -234,12 +214,6 @@ Indicates that device credentials are missing. --- -#### `salto_ks_subscription_limit_exceeded` - -Indicates that the Salto site user limit has been reached. - ---- - #### `subscription_required` Indicates that a subscription is required to connect. diff --git a/mintlify-docs/api/access_codes/unmanaged/errors.mdx b/mintlify-docs/api/access_codes/unmanaged/errors.mdx index 70f91ce92..176841745 100644 --- a/mintlify-docs/api/access_codes/unmanaged/errors.mdx +++ b/mintlify-docs/api/access_codes/unmanaged/errors.mdx @@ -138,14 +138,6 @@ Salto site user is not subscribed. --- -### Bridge - -#### `bridge_disconnected` - -Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). - ---- - ### Connected Account #### `account_disconnected` @@ -174,12 +166,6 @@ Indicates that the Salto site user limit has been reached. ### Device -#### `account_disconnected` - -Indicates that the account is disconnected. - ---- - #### `august_lock_missing_bridge` Indicates that the lock is not connected to a bridge. @@ -210,12 +196,6 @@ Indicates that the device has been removed. --- -#### `dormakaba_sites_disconnected` - -Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support. - ---- - #### `hub_disconnected` Indicates that the hub is disconnected. @@ -234,12 +214,6 @@ Indicates that device credentials are missing. --- -#### `salto_ks_subscription_limit_exceeded` - -Indicates that the Salto site user limit has been reached. - ---- - #### `subscription_required` Indicates that a subscription is required to connect. diff --git a/mintlify-docs/api/acs/systems/errors.mdx b/mintlify-docs/api/acs/systems/errors.mdx index 5056f4f7c..a20abd3c1 100644 --- a/mintlify-docs/api/acs/systems/errors.mdx +++ b/mintlify-docs/api/acs/systems/errors.mdx @@ -49,6 +49,13 @@ Indicates that the [access control system](https://docs.seam.co/low-level-apis/a --- +### `bridge_disconnected` + +Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. +See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). + +--- + ### `provider_service_unavailable` Indicates that the access control system provider's service is temporarily unavailable. Seam will automatically retry and reconnect when the service becomes available again. @@ -83,15 +90,6 @@ See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-l --- -### Bridge - -#### `bridge_disconnected` - -Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. -See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). - ---- - ## Warnings Each warning is an object with the following shape: diff --git a/mintlify-docs/api/devices/errors.mdx b/mintlify-docs/api/devices/errors.mdx index fd851a998..31f85e1fa 100644 --- a/mintlify-docs/api/devices/errors.mdx +++ b/mintlify-docs/api/devices/errors.mdx @@ -47,12 +47,6 @@ Each error is an object with the following shape: -### `account_disconnected` - -Indicates that the account is disconnected. - ---- - ### `device_disconnected` Indicates that the device is disconnected. @@ -111,24 +105,12 @@ Indicates that the user is not authorized to use the August lock. --- -#### `dormakaba_sites_disconnected` - -Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support. - ---- - #### `lockly_missing_wifi_bridge` Indicates that the Lockly lock is not connected to a Wi-Fi bridge. --- -#### `salto_ks_subscription_limit_exceeded` - -Indicates that the Salto site user limit has been reached. - ---- - #### `ttlock_lock_not_paired_to_gateway` Indicates that the lock is not paired with a gateway. @@ -143,7 +125,13 @@ Indicates that the auxiliary heat is running. --- -### Bridge +### Connected Account + +#### `account_disconnected` + +Indicates that the account is disconnected. + +--- #### `bridge_disconnected` @@ -151,11 +139,15 @@ Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.s --- -### Connected Account +#### `dormakaba_sites_disconnected` -#### `bridge_disconnected` +Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support. -Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). +--- + +#### `salto_ks_subscription_limit_exceeded` + +Indicates that the Salto site user limit has been reached. --- diff --git a/mintlify-docs/api/devices/unmanaged/errors.mdx b/mintlify-docs/api/devices/unmanaged/errors.mdx index 57e7339cf..ea15a534f 100644 --- a/mintlify-docs/api/devices/unmanaged/errors.mdx +++ b/mintlify-docs/api/devices/unmanaged/errors.mdx @@ -47,12 +47,6 @@ Each error is an object with the following shape: -### `account_disconnected` - -Indicates that the account is disconnected. - ---- - ### `device_disconnected` Indicates that the device is disconnected. @@ -111,24 +105,12 @@ Indicates that the user is not authorized to use the August lock. --- -#### `dormakaba_sites_disconnected` - -Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support. - ---- - #### `lockly_missing_wifi_bridge` Indicates that the Lockly lock is not connected to a Wi-Fi bridge. --- -#### `salto_ks_subscription_limit_exceeded` - -Indicates that the Salto site user limit has been reached. - ---- - #### `ttlock_lock_not_paired_to_gateway` Indicates that the lock is not paired with a gateway. @@ -143,7 +125,13 @@ Indicates that the auxiliary heat is running. --- -### Bridge +### Connected Account + +#### `account_disconnected` + +Indicates that the account is disconnected. + +--- #### `bridge_disconnected` @@ -151,11 +139,15 @@ Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.s --- -### Connected Account +#### `dormakaba_sites_disconnected` -#### `bridge_disconnected` +Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support. -Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected). +--- + +#### `salto_ks_subscription_limit_exceeded` + +Indicates that the Salto site user limit has been reached. --- diff --git a/package-lock.json b/package-lock.json index dc90b0cc9..3f811d946 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,7 +12,7 @@ "@metalsmith/metadata": "^0.3.0", "@prettier/plugin-php": "^0.24.0", "@prettier/plugin-ruby": "^4.0.4", - "@seamapi/blueprint": "^0.55.0", + "@seamapi/blueprint": "^0.56.0", "@seamapi/smith": "^0.5.2", "@seamapi/types": "1.923.0", "@types/command-exists": "^1.2.3", @@ -936,9 +936,9 @@ "license": "MIT" }, "node_modules/@seamapi/blueprint": { - "version": "0.55.0", - "resolved": "https://registry.npmjs.org/@seamapi/blueprint/-/blueprint-0.55.0.tgz", - "integrity": "sha512-2Xk3XQ486WufuZ4ar7aP1XWQXaadg04x1VVjHGWrI1lMpSfWAeOTs8ol3EdRzI/NK6pUdIfgED86aH62KsyQ9w==", + "version": "0.56.0", + "resolved": "https://registry.npmjs.org/@seamapi/blueprint/-/blueprint-0.56.0.tgz", + "integrity": "sha512-6trN/T2hGnoWE8l1tmHYv+QHexF1NzeG+hiGUm6nfTBIqCsndl457p10VCtfB7ew0CqSUzNkjfhrb7hww3SZPQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index 4b7ef67da..4a01ef75e 100644 --- a/package.json +++ b/package.json @@ -41,7 +41,7 @@ "@metalsmith/metadata": "^0.3.0", "@prettier/plugin-php": "^0.24.0", "@prettier/plugin-ruby": "^4.0.4", - "@seamapi/blueprint": "^0.55.0", + "@seamapi/blueprint": "^0.56.0", "@seamapi/smith": "^0.5.2", "@seamapi/types": "1.923.0", "@types/command-exists": "^1.2.3", From e005781dcbb566693331d5ad9a9c4f8f4ef2d837 Mon Sep 17 00:00:00 2001 From: Seam Bot Date: Thu, 2 Jul 2026 23:13:22 +0000 Subject: [PATCH 4/5] ci: Generate docs --- docs/api-reference/_blueprint.json | 286 +++++++++++++++++++++++++++++ 1 file changed, 286 insertions(+) diff --git a/docs/api-reference/_blueprint.json b/docs/api-reference/_blueprint.json index 002680f91..3545be1a4 100644 --- a/docs/api-reference/_blueprint.json +++ b/docs/api-reference/_blueprint.json @@ -93710,6 +93710,7 @@ ], "variants": [ { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -93780,6 +93781,7 @@ "description": "Indicates a provider-specific issue that prevents the access code from being set or managed. Check the error message for details." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -93850,6 +93852,7 @@ "description": "Failed to set code on device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -93920,6 +93923,7 @@ "description": "Failed to remove code from device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -94016,6 +94020,7 @@ "description": "Duplicate access code detected on device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -94086,6 +94091,7 @@ "description": "An attempt to modify this access code was prevented." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -94156,6 +94162,7 @@ "description": "No space for access code on device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -94226,6 +94233,7 @@ "description": "Indicates that the provider cannot confirm whether the access code was set or removed on the device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -94386,6 +94394,7 @@ "description": "Code was modified or removed externally after Seam successfully set it on the device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -94456,6 +94465,7 @@ "description": "Indicates that the access code is disabled or inactive on the device. The code exists but will not grant access until re-enabled." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -94526,6 +94536,7 @@ "description": "Salto site user is not subscribed." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -94596,6 +94607,7 @@ "description": "Admin role required—insufficient permissions to manage PINs on this device. Please have an admin update your role, or ask them to set the PIN." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -94666,6 +94678,7 @@ "description": "This access code was overridden on the device by a newer access code programmed to the same slot." }, { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -94749,6 +94762,7 @@ "description": "Indicates that the account is disconnected." }, { + "resourceType": "connected_account", "variantGroupKey": "locks", "properties": [ { @@ -94832,6 +94846,7 @@ "description": "Indicates that the Salto site user limit has been reached." }, { + "resourceType": "connected_account", "variantGroupKey": "locks", "properties": [ { @@ -94915,6 +94930,7 @@ "description": "Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -94985,6 +95001,7 @@ "description": "Indicates that the device is offline." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -95055,6 +95072,7 @@ "description": "Indicates that the device has been removed." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -95125,6 +95143,7 @@ "description": "Indicates that the hub is disconnected." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -95195,6 +95214,7 @@ "description": "Indicates that the device is disconnected." }, { + "resourceType": "device", "variantGroupKey": "access_codes", "properties": [ { @@ -95265,6 +95285,7 @@ "description": "Indicates that the [backup access code pool](https://docs.seam.co/low-level-apis/smart-locks/access-codes/backup-access-codes) is empty." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -95335,6 +95356,7 @@ "description": "Indicates that the user is not authorized to use the August lock." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -95405,6 +95427,7 @@ "description": "Indicates that the lock is not connected to a bridge." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -95475,6 +95498,7 @@ "description": "Indicates that the lock is not paired with a gateway." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -95545,6 +95569,7 @@ "description": "Indicates that device credentials are missing." }, { + "resourceType": "device", "variantGroupKey": "thermostats", "properties": [ { @@ -95615,6 +95640,7 @@ "description": "Indicates that the auxiliary heat is running." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -95685,6 +95711,7 @@ "description": "Indicates that a subscription is required to connect." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -95755,6 +95782,7 @@ "description": "Indicates that the Lockly lock is not connected to a Wi-Fi bridge." }, { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -95973,6 +96001,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -96030,6 +96059,7 @@ "description": "Seam is in the process of setting an access code on the device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -96100,6 +96130,7 @@ "description": "Seam is waiting until closer to the access code's start time before programming it on the device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -96157,6 +96188,7 @@ "description": "Seam is in the process of removing an access code from the device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -96272,6 +96304,7 @@ "description": "Seam is in the process of pushing an updated PIN code to the device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -96387,6 +96420,7 @@ "description": "Seam is in the process of pushing an updated access code name to the device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -96701,6 +96735,7 @@ ], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -96758,6 +96793,7 @@ "description": "Indicates a provider-specific issue that may affect the access code. Check the warning message for details." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -96815,6 +96851,7 @@ "description": "Duplicate access code detected." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -96872,6 +96909,7 @@ "description": "The Schlage device's timezone is ambiguous and this code's schedule crosses a daylight-saving transition in at least one plausible timezone. A 1-hour safety buffer has been applied to the side of the schedule affected by the transition (`ends_at` for spring-forward, `starts_at` for fall-back) so the code stays active through the shift — the code may be usable up to 1 hour beyond your requested window. Set the device's timezone via `/devices/report_provider_metadata` to clear the buffer and guarantee exact DST handling." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -97019,6 +97057,7 @@ "description": "Code was modified or removed externally after Seam successfully set it on the device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -97076,6 +97115,7 @@ "description": "Delay in setting code on device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -97133,6 +97173,7 @@ "description": "Delay in removing code from device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -97190,6 +97231,7 @@ "description": "Third-party integration detected that may cause access codes to fail." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -97247,6 +97289,7 @@ "description": "Algopins must be used within 24 hours." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -97304,6 +97347,7 @@ "description": "Management was transferred to another workspace." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -97361,6 +97405,7 @@ "description": "Indicates that the access code is disabled or inactive on the device. The code exists but will not grant access until re-enabled." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -97418,6 +97463,7 @@ "description": "A backup access code has been pulled and is being used in place of this access code." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -97775,6 +97821,7 @@ "variantGroups": [], "variants": [ { + "resourceType": "access_grant", "variantGroupKey": null, "properties": [ { @@ -97904,6 +97951,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -98034,6 +98082,7 @@ "description": "Seam is in the process of updating the devices/spaces associated with this access grant." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -98397,6 +98446,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -98454,6 +98504,7 @@ "description": "Indicates that the [access grant](https://docs.seam.co/use-cases/granting-access) is being deleted." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -98511,6 +98562,7 @@ "description": "Indicates that the access grant should have access to more locations than it currently does. Access methods are being created for the missing locations." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -98623,6 +98675,7 @@ "description": "Indicates that the access grant has access to locations it should not have. Access methods are being removed from the extra locations." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -98694,6 +98747,7 @@ "description": "Indicates that the access times for this [access grant](https://docs.seam.co/use-cases/granting-access) are being updated." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -98790,6 +98844,7 @@ "description": "Indicates that the requested PIN code was already in use on a device, so a different code was assigned." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -98860,6 +98915,7 @@ "description": "Indicates that a device in the access grant does not support access codes and was excluded from code materialization." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -99303,6 +99359,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -99420,6 +99477,7 @@ "description": "Seam is in the process of provisioning access for this access method on new devices." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -99537,6 +99595,7 @@ "description": "Seam is in the process of revoking access for this access method from devices." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -99696,6 +99755,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -99753,6 +99813,7 @@ "description": "Indicates that the [access method](https://docs.seam.co/use-cases/granting-access/creating-an-access-grant) is being deleted." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -99810,6 +99871,7 @@ "description": "Indicates that the access times for this [access method](https://docs.seam.co/use-cases/granting-access/creating-an-access-grant) are being updated." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -100204,6 +100266,7 @@ "variantGroups": [], "variants": [ { + "resourceType": "acs_access_group", "variantGroupKey": null, "properties": [ { @@ -100413,6 +100476,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -100470,6 +100534,7 @@ "description": "Seam is in the process of pushing an access group creation to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -100527,6 +100592,7 @@ "description": "Seam is in the process of pushing an access group deletion to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -100584,6 +100650,7 @@ "description": "This access group is scheduled for automatic deletion when its access window expires." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -100699,6 +100766,7 @@ "description": "Seam is in the process of pushing an access group information update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -100840,6 +100908,7 @@ "description": "Seam is in the process of pushing an access schedule update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -100955,6 +101024,7 @@ "description": "Seam is in the process of pushing a user membership update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -101070,6 +101140,7 @@ "description": "Seam is in the process of pushing an entrance membership update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -102074,6 +102145,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -102131,6 +102203,7 @@ "description": "Indicates that the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) is waiting to be issued." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -102188,6 +102261,7 @@ "description": "Indicates that the schedule of one of the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials)'s children was modified externally." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -102245,6 +102319,7 @@ "description": "Indicates that the schedule of the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) was modified to avoid creating a credential with a start date in the past." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -102302,6 +102377,7 @@ "description": "Indicates that the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) is being deleted." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -102359,6 +102435,7 @@ "description": "An unknown issue occurred while syncing the state of the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) with the provider. This issue may affect the proper functioning of the credential." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -103997,6 +104074,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -104054,6 +104132,7 @@ "description": "Indicates that a change in the reported device model has been detected for this Salto KS entrance, which may occur after an IQ hub reset. Access code support may be affected. See https://help.getseam.com/articles/5098842588-salto-ks-lock-loses-access-code-support for troubleshooting steps." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -104111,6 +104190,7 @@ "description": "Indicates that this entrance shares a zone with other entrances in Avigilon Alta and cannot be added to an access group individually." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -104168,6 +104248,7 @@ "description": "Indicates that this entrance requires additional configuration in the access control system before Seam can fully manage it." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -104383,6 +104464,7 @@ "variantGroups": [], "variants": [ { + "resourceType": "acs_system", "variantGroupKey": null, "properties": [ { @@ -104440,6 +104522,7 @@ "description": "Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline.\nThis error might also occur if Seam Bridge is connected to the wrong [workspace](https://docs.seam.co/core-concepts/workspaces).\nSee also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected)." }, { + "resourceType": "acs_system", "variantGroupKey": null, "properties": [ { @@ -104510,6 +104593,7 @@ "description": "Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline.\nSee also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected)." }, { + "resourceType": "acs_system", "variantGroupKey": null, "properties": [ { @@ -104567,6 +104651,7 @@ "description": "Indicates that [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge) is functioning correctly and the Seam API can communicate with Seam Bridge, but the Seam API cannot connect to the on-premises [Visionline access control system](https://docs.seam.co/device-and-system-integration-guides/assa-abloy-visionline-access-control-system).\nFor example, the IP address of the on-premises access control system may be set incorrectly within the Seam [workspace](https://docs.seam.co/core-concepts/workspaces).\nSee also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.visionline_instance_unreachable)." }, { + "resourceType": "acs_system", "variantGroupKey": null, "properties": [ { @@ -104624,6 +104709,7 @@ "description": "Indicates that the maximum number of users allowed for the site has been reached. This means that new access codes cannot be created. Contact Salto support to increase the user limit." }, { + "resourceType": "acs_system", "variantGroupKey": null, "properties": [ { @@ -104681,6 +104767,7 @@ "description": "Indicates that the [access control system](https://docs.seam.co/low-level-apis/access-systems) has been disconnected. See [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system) to resolve the issue." }, { + "resourceType": "acs_system", "variantGroupKey": null, "properties": [ { @@ -104738,6 +104825,7 @@ "description": "Indicates that the login credentials are invalid. Reconnect the account using a [Connect Webview](https://docs.seam.co/core-concepts/connect-webviews) to restore access." }, { + "resourceType": "acs_system", "variantGroupKey": null, "properties": [ { @@ -104795,6 +104883,7 @@ "description": "Indicates that the [access control system](https://docs.seam.co/low-level-apis/access-systems) has lost its Salto KS certification. Contact [support](mailto:support@seam.co) to regain access." }, { + "resourceType": "acs_system", "variantGroupKey": null, "properties": [ { @@ -105362,6 +105451,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -105419,6 +105509,7 @@ "description": "Indicates that the Salto KS site has exceeded 80% of the maximum number of allowed users. Increase your subscription limit or delete some users from your site to rectify the issue." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -105490,6 +105581,7 @@ "description": "Indicates the [access control system](https://docs.seam.co/low-level-apis/access-systems) time zone could not be determined because the reported physical location does not match the time zone configured on the physical [ACS entrances](https://docs.seam.co/low-level-apis/access-systems/retrieving-entrance-details)." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -105762,6 +105854,7 @@ "variantGroups": [], "variants": [ { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -105819,6 +105912,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) was deleted from the [access system](https://docs.seam.co/low-level-apis/access-systems) outside of Seam." }, { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -105876,6 +105970,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) could not be subscribed on Salto KS because the subscription limit has been exceeded." }, { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -105933,6 +106028,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) was not created on the [access system](https://docs.seam.co/low-level-apis/access-systems). This is likely due to an internal unexpected error. Contact Seam [support](mailto:support@seam.co)." }, { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -105990,6 +106086,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) was not updated on the [access system](https://docs.seam.co/low-level-apis/access-systems). This is likely due to an internal unexpected error. Contact Seam [support](mailto:support@seam.co)." }, { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -106047,6 +106144,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) was not deleted on the [access system](https://docs.seam.co/low-level-apis/access-systems). This is likely due to an internal unexpected error. Contact Seam [support](mailto:support@seam.co)." }, { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -106295,6 +106393,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -106352,6 +106451,7 @@ "description": "Seam is in the process of pushing a user creation to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -106409,6 +106509,7 @@ "description": "Seam is in the process of pushing a user deletion to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -106479,6 +106580,7 @@ "description": "User exists in Seam but has not been pushed to the provider yet. Will be created when a credential is issued." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -106646,6 +106748,7 @@ "description": "" }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -106787,6 +106890,7 @@ "description": "Seam is in the process of pushing an access schedule update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -106902,6 +107006,7 @@ "description": "Seam is in the process of pushing a suspension state update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -107017,6 +107122,7 @@ "description": "Seam is in the process of pushing an access group membership update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -107122,6 +107228,7 @@ "description": "A scheduled access group membership change is pending for this user." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -107362,6 +107469,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -107419,6 +107527,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) is being deleted from the [access system](https://docs.seam.co/low-level-apis/access-systems). This is a temporary state, and the access system user will be deleted shortly." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -107476,6 +107585,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) is not subscribed on Salto KS, so they cannot unlock doors or perform any actions. This occurs when the their access schedule hasn’t started yet, if their access schedule has ended, if the site has reached its limit for active users (subscription slots), or if they have been manually unsubscribed." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -107533,6 +107643,7 @@ "description": "An unknown issue occurred while syncing the state of this [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) with the provider. This issue may affect the proper functioning of this user." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -108174,6 +108285,7 @@ "variantGroups": [], "variants": [ { + "resourceType": "bridge_client_session", "variantGroupKey": null, "properties": [ { @@ -108296,6 +108408,7 @@ "description": "Indicates that Seam cannot reach Seam Bridge's LAN." }, { + "resourceType": "bridge_client_session", "variantGroupKey": null, "properties": [ { @@ -109451,6 +109564,7 @@ "variantGroups": [], "variants": [ { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -109534,6 +109648,7 @@ "description": "Indicates that the account is disconnected." }, { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -109617,6 +109732,7 @@ "description": "Indicates that the Seam API cannot communicate with [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge), for example, if the Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline. See also [Troubleshooting Your Access Control System](https://docs.seam.co/low-level-apis/access-systems/troubleshooting-your-access-control-system#acs_system.errors.seam_bridge_disconnected)." }, { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -109784,6 +109900,7 @@ "description": "Indicates that the maximum number of users allowed for the site has been reached. This means that new access codes cannot be created. Contact Salto support to increase the user limit." }, { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -110018,6 +110135,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -110075,6 +110193,7 @@ "description": "Indicates that scheduled downtime is planned for the connected account." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -110132,6 +110251,7 @@ "description": "Indicates that an unknown issue occurred while syncing the state of the connected account with the provider. This issue may affect the proper functioning of one or more resources in the account." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -110273,6 +110393,7 @@ "description": "Indicates that the Salto KS site has exceeded 80% of the maximum number of allowed users. Increase your subscription limit or delete some users from your site." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -110330,6 +110451,7 @@ "description": "Indicates that the Connected Account requires reauthorization using a new Connect Webview. The account is still connected, but cannot access new features. Delaying reauthorization too long will eventually cause the Connected Account to become disconnected." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -110387,6 +110509,7 @@ "description": "Indicates that the connected account is currently being deleted. All devices, access codes, and other resources associated with this account are in the process of being removed from Seam." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -110444,6 +110567,7 @@ "description": "Indicates that the connected account's provider service is temporarily unavailable. Seam will automatically retry and reconnect when the service becomes available again." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -110501,6 +110625,7 @@ "description": "Indicates that the connected account requires additional setup before it can be fully operational. Follow the instructions in the warning message to complete the setup." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -111962,6 +112087,7 @@ ], "variants": [ { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -112045,6 +112171,7 @@ "description": "Indicates that the account is disconnected." }, { + "resourceType": "connected_account", "variantGroupKey": "locks", "properties": [ { @@ -112128,6 +112255,7 @@ "description": "Indicates that the Salto site user limit has been reached." }, { + "resourceType": "connected_account", "variantGroupKey": "locks", "properties": [ { @@ -112211,6 +112339,7 @@ "description": "Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -112281,6 +112410,7 @@ "description": "Indicates that the device is offline." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -112351,6 +112481,7 @@ "description": "Indicates that the device has been removed." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -112421,6 +112552,7 @@ "description": "Indicates that the hub is disconnected." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -112491,6 +112623,7 @@ "description": "Indicates that the device is disconnected." }, { + "resourceType": "device", "variantGroupKey": "access_codes", "properties": [ { @@ -112561,6 +112694,7 @@ "description": "Indicates that the [backup access code pool](https://docs.seam.co/low-level-apis/smart-locks/access-codes/backup-access-codes) is empty." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -112631,6 +112765,7 @@ "description": "Indicates that the user is not authorized to use the August lock." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -112701,6 +112836,7 @@ "description": "Indicates that the lock is not connected to a bridge." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -112771,6 +112907,7 @@ "description": "Indicates that the lock is not paired with a gateway." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -112841,6 +112978,7 @@ "description": "Indicates that device credentials are missing." }, { + "resourceType": "device", "variantGroupKey": "thermostats", "properties": [ { @@ -112911,6 +113049,7 @@ "description": "Indicates that the auxiliary heat is running." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -112981,6 +113120,7 @@ "description": "Indicates that a subscription is required to connect." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -113051,6 +113191,7 @@ "description": "Indicates that the Lockly lock is not connected to a Wi-Fi bridge." }, { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -119809,6 +119950,7 @@ ], "variants": [ { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -119866,6 +120008,7 @@ "description": "Indicates that the backup access code is unhealthy." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -119923,6 +120066,7 @@ "description": "Indicates that there are too many backup codes." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -119980,6 +120124,7 @@ "description": "Indicates that the Wyze Lock is not connected to a gateway." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -120037,6 +120182,7 @@ "description": "Indicates that a third-party integration has been detected." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -120094,6 +120240,7 @@ "description": "Indicates that the Remote Unlock feature is not enabled in the settings.\"" }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -120151,6 +120298,7 @@ "description": "Indicates that the gateway signal is weak." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -120208,6 +120356,7 @@ "description": "Indicates that the device is in power saving mode and may have limited functionality." }, { + "resourceType": null, "variantGroupKey": "thermostats", "properties": [ { @@ -120265,6 +120414,7 @@ "description": "Indicates that the temperature threshold has been exceeded." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -120322,6 +120472,7 @@ "description": "Indicates that the device appears to be unresponsive." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -120379,6 +120530,7 @@ "description": "Indicates that a scheduled maintenance window has been detected." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -120436,6 +120588,7 @@ "description": "Indicates that the device has a flaky connection." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -120493,6 +120646,7 @@ "description": "Indicates that the Salto KS lock is in Office Mode. Access Codes will not unlock doors." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -120550,6 +120704,7 @@ "description": "Indicates that the Salto KS lock is in Privacy Mode. Access Codes will not unlock doors." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -120607,6 +120762,7 @@ "description": "Indicates that the Salto KS site has exceeded 80% of the maximum number of allowed users. Increase your subscription limit or delete some users from your site." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -120664,6 +120820,7 @@ "description": "Indicates that a change in the reported device model has been detected for this Salto KS lock, which may occur after an IQ hub reset. Access code support may be affected. See https://help.getseam.com/articles/5098842588-salto-ks-lock-loses-access-code-support for troubleshooting steps." }, { + "resourceType": null, "variantGroupKey": "phones", "properties": [ { @@ -120721,6 +120878,7 @@ "description": "Indicates that an unknown issue occurred while syncing the state of the phone with the provider. This issue may affect the proper functioning of the phone." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -120778,6 +120936,7 @@ "description": "Indicates that Seam detected that the Lockly device does not have a time zone configured. Time-bound codes may not work as expected." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -120835,6 +120994,7 @@ "description": "Indicates that Seam does not know the time zone of the Ultraloq device. Set a time zone to enable time-bound access codes." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -120892,6 +121052,7 @@ "description": "Indicates that the 2N device does not have a time zone configured. Configure a time zone on the device to enable access codes." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -120949,6 +121110,7 @@ "description": "Indicates that a hub or relay must be connected to unlock additional capabilities such as remote unlock." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -121006,6 +121168,7 @@ "description": "Indicates a provider-specific issue that may affect device functionality." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -121063,6 +121226,7 @@ "description": "Indicates that the key is in a locker that does not support the access codes API." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -121120,6 +121284,7 @@ "description": "Indicates that the accessory keypad exists, but is not linked to the Igloohome Bridge. Online access code programming will fail until the keypad is linked to the Igloohome Bridge in the Igloohome app." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -121177,6 +121342,7 @@ "description": "Indicates that the device may optimistically be reported as online because the provider does not reliably report its online status." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -121260,6 +121426,7 @@ "description": "Indicates that the device has reached its maximum number of active access codes. Delete existing codes before creating new ones." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -128436,6 +128603,7 @@ ], "variants": [ { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -128506,6 +128674,7 @@ "description": "Indicates a provider-specific issue that prevents the access code from being set or managed. Check the error message for details." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -128576,6 +128745,7 @@ "description": "Failed to set code on device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -128646,6 +128816,7 @@ "description": "Failed to remove code from device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -128742,6 +128913,7 @@ "description": "Duplicate access code detected on device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -128812,6 +128984,7 @@ "description": "An attempt to modify this access code was prevented." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -128882,6 +129055,7 @@ "description": "No space for access code on device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -128952,6 +129126,7 @@ "description": "Indicates that the provider cannot confirm whether the access code was set or removed on the device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -129112,6 +129287,7 @@ "description": "Code was modified or removed externally after Seam successfully set it on the device." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -129182,6 +129358,7 @@ "description": "Indicates that the access code is disabled or inactive on the device. The code exists but will not grant access until re-enabled." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -129252,6 +129429,7 @@ "description": "Salto site user is not subscribed." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -129322,6 +129500,7 @@ "description": "Admin role required—insufficient permissions to manage PINs on this device. Please have an admin update your role, or ask them to set the PIN." }, { + "resourceType": "access_code", "variantGroupKey": null, "properties": [ { @@ -129392,6 +129571,7 @@ "description": "This access code was overridden on the device by a newer access code programmed to the same slot." }, { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -129475,6 +129655,7 @@ "description": "Indicates that the account is disconnected." }, { + "resourceType": "connected_account", "variantGroupKey": "locks", "properties": [ { @@ -129558,6 +129739,7 @@ "description": "Indicates that the Salto site user limit has been reached." }, { + "resourceType": "connected_account", "variantGroupKey": "locks", "properties": [ { @@ -129641,6 +129823,7 @@ "description": "Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -129711,6 +129894,7 @@ "description": "Indicates that the device is offline." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -129781,6 +129965,7 @@ "description": "Indicates that the device has been removed." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -129851,6 +130036,7 @@ "description": "Indicates that the hub is disconnected." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -129921,6 +130107,7 @@ "description": "Indicates that the device is disconnected." }, { + "resourceType": "device", "variantGroupKey": "access_codes", "properties": [ { @@ -129991,6 +130178,7 @@ "description": "Indicates that the [backup access code pool](https://docs.seam.co/low-level-apis/smart-locks/access-codes/backup-access-codes) is empty." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -130061,6 +130249,7 @@ "description": "Indicates that the user is not authorized to use the August lock." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -130131,6 +130320,7 @@ "description": "Indicates that the lock is not connected to a bridge." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -130201,6 +130391,7 @@ "description": "Indicates that the lock is not paired with a gateway." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -130271,6 +130462,7 @@ "description": "Indicates that device credentials are missing." }, { + "resourceType": "device", "variantGroupKey": "thermostats", "properties": [ { @@ -130341,6 +130533,7 @@ "description": "Indicates that the auxiliary heat is running." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -130411,6 +130604,7 @@ "description": "Indicates that a subscription is required to connect." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -130481,6 +130675,7 @@ "description": "Indicates that the Lockly lock is not connected to a Wi-Fi bridge." }, { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -130720,6 +130915,7 @@ ], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -130777,6 +130973,7 @@ "description": "Indicates a provider-specific issue that may affect the access code. Check the warning message for details." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -130834,6 +131031,7 @@ "description": "Duplicate access code detected." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -130891,6 +131089,7 @@ "description": "The Schlage device's timezone is ambiguous and this code's schedule crosses a daylight-saving transition in at least one plausible timezone. A 1-hour safety buffer has been applied to the side of the schedule affected by the transition (`ends_at` for spring-forward, `starts_at` for fall-back) so the code stays active through the shift — the code may be usable up to 1 hour beyond your requested window. Set the device's timezone via `/devices/report_provider_metadata` to clear the buffer and guarantee exact DST handling." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -131038,6 +131237,7 @@ "description": "Code was modified or removed externally after Seam successfully set it on the device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -131095,6 +131295,7 @@ "description": "Delay in setting code on device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -131152,6 +131353,7 @@ "description": "Delay in removing code from device." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -131209,6 +131411,7 @@ "description": "Third-party integration detected that may cause access codes to fail." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -131266,6 +131469,7 @@ "description": "Algopins must be used within 24 hours." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -131323,6 +131527,7 @@ "description": "Management was transferred to another workspace." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -131380,6 +131585,7 @@ "description": "Indicates that the access code is disabled or inactive on the device. The code exists but will not grant access until re-enabled." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -131437,6 +131643,7 @@ "description": "A backup access code has been pulled and is being used in place of this access code." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -131783,6 +131990,7 @@ "variantGroups": [], "variants": [ { + "resourceType": "acs_access_group", "variantGroupKey": null, "properties": [ { @@ -131992,6 +132200,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -132049,6 +132258,7 @@ "description": "Seam is in the process of pushing an access group creation to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -132106,6 +132316,7 @@ "description": "Seam is in the process of pushing an access group deletion to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -132163,6 +132374,7 @@ "description": "This access group is scheduled for automatic deletion when its access window expires." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -132278,6 +132490,7 @@ "description": "Seam is in the process of pushing an access group information update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -132419,6 +132632,7 @@ "description": "Seam is in the process of pushing an access schedule update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -132534,6 +132748,7 @@ "description": "Seam is in the process of pushing a user membership update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -132649,6 +132864,7 @@ "description": "Seam is in the process of pushing an entrance membership update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -133653,6 +133869,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -133710,6 +133927,7 @@ "description": "Indicates that the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) is waiting to be issued." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -133767,6 +133985,7 @@ "description": "Indicates that the schedule of one of the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials)'s children was modified externally." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -133824,6 +134043,7 @@ "description": "Indicates that the schedule of the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) was modified to avoid creating a credential with a start date in the past." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -133881,6 +134101,7 @@ "description": "Indicates that the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) is being deleted." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -133938,6 +134159,7 @@ "description": "An unknown issue occurred while syncing the state of the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) with the provider. This issue may affect the proper functioning of the credential." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -134208,6 +134430,7 @@ "variantGroups": [], "variants": [ { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -134265,6 +134488,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) was deleted from the [access system](https://docs.seam.co/low-level-apis/access-systems) outside of Seam." }, { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -134322,6 +134546,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) could not be subscribed on Salto KS because the subscription limit has been exceeded." }, { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -134379,6 +134604,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) was not created on the [access system](https://docs.seam.co/low-level-apis/access-systems). This is likely due to an internal unexpected error. Contact Seam [support](mailto:support@seam.co)." }, { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -134436,6 +134662,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) was not updated on the [access system](https://docs.seam.co/low-level-apis/access-systems). This is likely due to an internal unexpected error. Contact Seam [support](mailto:support@seam.co)." }, { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -134493,6 +134720,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) was not deleted on the [access system](https://docs.seam.co/low-level-apis/access-systems). This is likely due to an internal unexpected error. Contact Seam [support](mailto:support@seam.co)." }, { + "resourceType": "acs_user", "variantGroupKey": null, "properties": [ { @@ -134741,6 +134969,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -134798,6 +135027,7 @@ "description": "Seam is in the process of pushing a user creation to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -134855,6 +135085,7 @@ "description": "Seam is in the process of pushing a user deletion to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -134925,6 +135156,7 @@ "description": "User exists in Seam but has not been pushed to the provider yet. Will be created when a credential is issued." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -135092,6 +135324,7 @@ "description": "" }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -135233,6 +135466,7 @@ "description": "Seam is in the process of pushing an access schedule update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -135348,6 +135582,7 @@ "description": "Seam is in the process of pushing a suspension state update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -135463,6 +135698,7 @@ "description": "Seam is in the process of pushing an access group membership update to the integrated access system." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -135568,6 +135804,7 @@ "description": "A scheduled access group membership change is pending for this user." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -135808,6 +136045,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -135865,6 +136103,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) is being deleted from the [access system](https://docs.seam.co/low-level-apis/access-systems). This is a temporary state, and the access system user will be deleted shortly." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -135922,6 +136161,7 @@ "description": "Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) is not subscribed on Salto KS, so they cannot unlock doors or perform any actions. This occurs when the their access schedule hasn’t started yet, if their access schedule has ended, if the site has reached its limit for active users (subscription slots), or if they have been manually unsubscribed." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -135979,6 +136219,7 @@ "description": "An unknown issue occurred while syncing the state of this [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) with the provider. This issue may affect the proper functioning of this user." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -136955,6 +137196,7 @@ ], "variants": [ { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -137038,6 +137280,7 @@ "description": "Indicates that the account is disconnected." }, { + "resourceType": "connected_account", "variantGroupKey": "locks", "properties": [ { @@ -137121,6 +137364,7 @@ "description": "Indicates that the Salto site user limit has been reached." }, { + "resourceType": "connected_account", "variantGroupKey": "locks", "properties": [ { @@ -137204,6 +137448,7 @@ "description": "Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -137274,6 +137519,7 @@ "description": "Indicates that the device is offline." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -137344,6 +137590,7 @@ "description": "Indicates that the device has been removed." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -137414,6 +137661,7 @@ "description": "Indicates that the hub is disconnected." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -137484,6 +137732,7 @@ "description": "Indicates that the device is disconnected." }, { + "resourceType": "device", "variantGroupKey": "access_codes", "properties": [ { @@ -137554,6 +137803,7 @@ "description": "Indicates that the [backup access code pool](https://docs.seam.co/low-level-apis/smart-locks/access-codes/backup-access-codes) is empty." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -137624,6 +137874,7 @@ "description": "Indicates that the user is not authorized to use the August lock." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -137694,6 +137945,7 @@ "description": "Indicates that the lock is not connected to a bridge." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -137764,6 +138016,7 @@ "description": "Indicates that the lock is not paired with a gateway." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -137834,6 +138087,7 @@ "description": "Indicates that device credentials are missing." }, { + "resourceType": "device", "variantGroupKey": "thermostats", "properties": [ { @@ -137904,6 +138158,7 @@ "description": "Indicates that the auxiliary heat is running." }, { + "resourceType": "device", "variantGroupKey": null, "properties": [ { @@ -137974,6 +138229,7 @@ "description": "Indicates that a subscription is required to connect." }, { + "resourceType": "device", "variantGroupKey": "locks", "properties": [ { @@ -138044,6 +138300,7 @@ "description": "Indicates that the Lockly lock is not connected to a Wi-Fi bridge." }, { + "resourceType": "connected_account", "variantGroupKey": null, "properties": [ { @@ -138640,6 +138897,7 @@ ], "variants": [ { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -138697,6 +138955,7 @@ "description": "Indicates that the backup access code is unhealthy." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -138754,6 +139013,7 @@ "description": "Indicates that there are too many backup codes." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -138811,6 +139071,7 @@ "description": "Indicates that the Wyze Lock is not connected to a gateway." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -138868,6 +139129,7 @@ "description": "Indicates that a third-party integration has been detected." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -138925,6 +139187,7 @@ "description": "Indicates that the Remote Unlock feature is not enabled in the settings.\"" }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -138982,6 +139245,7 @@ "description": "Indicates that the gateway signal is weak." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -139039,6 +139303,7 @@ "description": "Indicates that the device is in power saving mode and may have limited functionality." }, { + "resourceType": null, "variantGroupKey": "thermostats", "properties": [ { @@ -139096,6 +139361,7 @@ "description": "Indicates that the temperature threshold has been exceeded." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -139153,6 +139419,7 @@ "description": "Indicates that the device appears to be unresponsive." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -139210,6 +139477,7 @@ "description": "Indicates that a scheduled maintenance window has been detected." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -139267,6 +139535,7 @@ "description": "Indicates that the device has a flaky connection." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -139324,6 +139593,7 @@ "description": "Indicates that the Salto KS lock is in Office Mode. Access Codes will not unlock doors." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -139381,6 +139651,7 @@ "description": "Indicates that the Salto KS lock is in Privacy Mode. Access Codes will not unlock doors." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -139438,6 +139709,7 @@ "description": "Indicates that the Salto KS site has exceeded 80% of the maximum number of allowed users. Increase your subscription limit or delete some users from your site." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -139495,6 +139767,7 @@ "description": "Indicates that a change in the reported device model has been detected for this Salto KS lock, which may occur after an IQ hub reset. Access code support may be affected. See https://help.getseam.com/articles/5098842588-salto-ks-lock-loses-access-code-support for troubleshooting steps." }, { + "resourceType": null, "variantGroupKey": "phones", "properties": [ { @@ -139552,6 +139825,7 @@ "description": "Indicates that an unknown issue occurred while syncing the state of the phone with the provider. This issue may affect the proper functioning of the phone." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -139609,6 +139883,7 @@ "description": "Indicates that Seam detected that the Lockly device does not have a time zone configured. Time-bound codes may not work as expected." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -139666,6 +139941,7 @@ "description": "Indicates that Seam does not know the time zone of the Ultraloq device. Set a time zone to enable time-bound access codes." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -139723,6 +139999,7 @@ "description": "Indicates that the 2N device does not have a time zone configured. Configure a time zone on the device to enable access codes." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -139780,6 +140057,7 @@ "description": "Indicates that a hub or relay must be connected to unlock additional capabilities such as remote unlock." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -139837,6 +140115,7 @@ "description": "Indicates a provider-specific issue that may affect device functionality." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -139894,6 +140173,7 @@ "description": "Indicates that the key is in a locker that does not support the access codes API." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -139951,6 +140231,7 @@ "description": "Indicates that the accessory keypad exists, but is not linked to the Igloohome Bridge. Online access code programming will fail until the keypad is linked to the Igloohome Bridge in the Igloohome app." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -140008,6 +140289,7 @@ "description": "Indicates that the device may optimistically be reported as online because the provider does not reliably report its online status." }, { + "resourceType": null, "variantGroupKey": "access_codes", "properties": [ { @@ -140091,6 +140373,7 @@ "description": "Indicates that the device has reached its maximum number of active access codes. Delete existing codes before creating new ones." }, { + "resourceType": null, "variantGroupKey": "locks", "properties": [ { @@ -140346,6 +140629,7 @@ "variantGroups": [], "variants": [ { + "resourceType": "user_identity", "variantGroupKey": null, "properties": [ { @@ -140499,6 +140783,7 @@ "variantGroups": [], "variants": [ { + "resourceType": null, "variantGroupKey": null, "properties": [ { @@ -140556,6 +140841,7 @@ "description": "Indicates that the user identity is currently being deleted." }, { + "resourceType": null, "variantGroupKey": null, "properties": [ { From 482e65ab8f7c15509a1e38be40363277c1a3af89 Mon Sep 17 00:00:00 2001 From: Claude Date: Thu, 2 Jul 2026 23:23:45 +0000 Subject: [PATCH 5/5] feat: add a callout linking each inherited-error group to its parent Each inherited-error group now opens with a explaining that the codes belong to a parent resource and are surfaced here when set on it, linking to the parent resource's own errors page. Co-Authored-By: Claude Opus 4.8 Claude-Session: https://claude.ai/code/session_01TgmnJeFSgiQhfptLskubdh --- mintlify-codegen/errors.ts | 51 ++++++++++++++++++- mintlify-docs/api/access_codes/errors.mdx | 8 +++ .../api/access_codes/unmanaged/errors.mdx | 8 +++ mintlify-docs/api/devices/errors.mdx | 4 ++ .../api/devices/unmanaged/errors.mdx | 4 ++ 5 files changed, 74 insertions(+), 1 deletion(-) diff --git a/mintlify-codegen/errors.ts b/mintlify-codegen/errors.ts index a623fe979..442ad4b0c 100644 --- a/mintlify-codegen/errors.ts +++ b/mintlify-codegen/errors.ts @@ -42,6 +42,12 @@ interface CodeGroup { // Group heading (e.g. "Locks"); null for the ungrouped variants. name: string | null entries: CodeEntry[] + // Set on inherited-error groups: the parent resource the errors come from and + // a link to its own errors page. Drives the explanatory callout. + inheritedFrom?: { + noun: string + href?: string + } } function isDiscriminatedListProperty( @@ -145,6 +151,7 @@ function groupErrorCodes( prop: Property | undefined, resourceType: string, inheritedGroupAllowlist?: string[], + errorsHrefByResourceType?: Record, ): CodeGroup[] { if (!isDiscriminatedListProperty(prop)) return [] @@ -185,9 +192,14 @@ function groupErrorCodes( v.resourceType === parentResourceType && isAllowedGroup(v.variantGroupKey), ) + const href = errorsHrefByResourceType?.[parentResourceType] return { name: resourceTypeNoun(parentResourceType), entries: variantsToEntries(variants, prop.discriminator), + inheritedFrom: { + noun: resourceTypeNoun(parentResourceType), + ...(href == null ? {} : { href }), + }, } }) .filter((g) => g.entries.length > 0) @@ -322,6 +334,24 @@ function renderEntry(entry: CodeEntry, level: string): string { return [`${level} \`${entry.code}\``, '', description, '', '---'].join('\n') } +/** + * Render the callout that heads an inherited-error group, explaining that the + * codes belong to a parent resource and are surfaced here when set on it. + */ +function renderInheritedNote( + inheritedFrom: NonNullable, +): string { + const { noun, href } = inheritedFrom + const link = href == null ? noun : `[${noun}](${href})` + return [ + '', + ` These errors are inherited from the ${link} resource. When they are ` + + `set on the parent ${noun.toLowerCase()}, they are propagated to this ` + + `resource's errors list.`, + '', + ].join('\n') +} + /** * Render an `## Errors` or `## Warnings` section: the object shape followed by * every code (as a linkable heading) with its meaning. Returns '' when there are @@ -342,6 +372,9 @@ function renderSection( // ungrouped codes sit directly under the section at `###`. const codeLevel = group.name != null ? '####' : '###' if (group.name != null) blocks.push(`### ${group.name}`) + if (group.inheritedFrom != null) { + blocks.push(renderInheritedNote(group.inheritedFrom)) + } for (const entry of group.entries) { blocks.push(renderEntry(entry, codeLevel)) } @@ -450,6 +483,9 @@ interface ErrorPageOptions { // real per-resource pages; omitted for device sub-category pages, which are // already scoped to a single variant group. inheritanceResourceType?: string + // Maps a resource type to its errors page href, used to link an inherited + // group's callout back to the parent resource's own errors page. + errorsHrefByResourceType?: Record } /** @@ -479,6 +515,7 @@ async function writeErrorPage( errorsProp, options.inheritanceResourceType, INHERITED_ERROR_GROUP_ALLOWLIST[options.inheritanceResourceType], + options.errorsHrefByResourceType, ) : groupCodes(errorsProp) const warningGroups = groupCodes(warningsProp) @@ -619,6 +656,15 @@ export async function updateErrorPages( ): Promise { const routes: string[] = [] + // Every documented resource's errors page lives at `/api//errors`, + // so an inherited-error group can link back to the parent it came from. + const errorsHrefByResourceType: Record = {} + for (const resource of blueprint.resources) { + if (resource.isUndocumented) continue + errorsHrefByResourceType[resource.resourceType] = + `/api${resource.routePath}/errors` + } + for (const resource of blueprint.resources) { if (resource.isUndocumented) continue await writeErrorPage( @@ -627,7 +673,10 @@ export async function updateErrorPages( resource.properties.find((p) => p.name === 'errors'), resource.properties.find((p) => p.name === 'warnings'), routes, - { inheritanceResourceType: resource.resourceType }, + { + inheritanceResourceType: resource.resourceType, + errorsHrefByResourceType, + }, ) } diff --git a/mintlify-docs/api/access_codes/errors.mdx b/mintlify-docs/api/access_codes/errors.mdx index 1382e1714..baa7f1730 100644 --- a/mintlify-docs/api/access_codes/errors.mdx +++ b/mintlify-docs/api/access_codes/errors.mdx @@ -140,6 +140,10 @@ Salto site user is not subscribed. ### Connected Account + + These errors are inherited from the [Connected Account](/api/connected_accounts/errors) resource. When they are set on the parent connected account, they are propagated to this resource's errors list. + + #### `account_disconnected` Indicates that the account is disconnected. @@ -166,6 +170,10 @@ Indicates that the Salto site user limit has been reached. ### Device + + These errors are inherited from the [Device](/api/devices/errors) resource. When they are set on the parent device, they are propagated to this resource's errors list. + + #### `august_lock_missing_bridge` Indicates that the lock is not connected to a bridge. diff --git a/mintlify-docs/api/access_codes/unmanaged/errors.mdx b/mintlify-docs/api/access_codes/unmanaged/errors.mdx index 176841745..571f2e68e 100644 --- a/mintlify-docs/api/access_codes/unmanaged/errors.mdx +++ b/mintlify-docs/api/access_codes/unmanaged/errors.mdx @@ -140,6 +140,10 @@ Salto site user is not subscribed. ### Connected Account + + These errors are inherited from the [Connected Account](/api/connected_accounts/errors) resource. When they are set on the parent connected account, they are propagated to this resource's errors list. + + #### `account_disconnected` Indicates that the account is disconnected. @@ -166,6 +170,10 @@ Indicates that the Salto site user limit has been reached. ### Device + + These errors are inherited from the [Device](/api/devices/errors) resource. When they are set on the parent device, they are propagated to this resource's errors list. + + #### `august_lock_missing_bridge` Indicates that the lock is not connected to a bridge. diff --git a/mintlify-docs/api/devices/errors.mdx b/mintlify-docs/api/devices/errors.mdx index 31f85e1fa..fcd3c52a8 100644 --- a/mintlify-docs/api/devices/errors.mdx +++ b/mintlify-docs/api/devices/errors.mdx @@ -127,6 +127,10 @@ Indicates that the auxiliary heat is running. ### Connected Account + + These errors are inherited from the [Connected Account](/api/connected_accounts/errors) resource. When they are set on the parent connected account, they are propagated to this resource's errors list. + + #### `account_disconnected` Indicates that the account is disconnected. diff --git a/mintlify-docs/api/devices/unmanaged/errors.mdx b/mintlify-docs/api/devices/unmanaged/errors.mdx index ea15a534f..178308154 100644 --- a/mintlify-docs/api/devices/unmanaged/errors.mdx +++ b/mintlify-docs/api/devices/unmanaged/errors.mdx @@ -127,6 +127,10 @@ Indicates that the auxiliary heat is running. ### Connected Account + + These errors are inherited from the [Connected Account](/api/connected_accounts/errors) resource. When they are set on the parent connected account, they are propagated to this resource's errors list. + + #### `account_disconnected` Indicates that the account is disconnected.