diff --git a/mintlify-codegen/errors.ts b/mintlify-codegen/errors.ts new file mode 100644 index 000000000..4f150255e --- /dev/null +++ b/mintlify-codegen/errors.ts @@ -0,0 +1,359 @@ +/* eslint-disable no-console */ +import { readFile, writeFile } from 'node:fs/promises' +import { join } from 'node:path' + +import type { Blueprint, DiscriminatedListProperty } from '@seamapi/blueprint' + +import { formatType, indent, sampleValue } from './property-fields.js' + +/** + * Generate error and warning documentation for the API reference. + * + * Errors and warnings are enumerated states Seam reports on a resource (e.g. + * `device.errors[].error_code = "device_offline"`), each with a human-readable + * description. The blueprint models them as `discriminated_object` list + * properties on the resource, but the OpenAPI spec can only express the generic + * `errors`/`warnings` array shape — so the enumerated codes and their meanings + * were dropped when the API reference moved to OpenAPI-generated pages (the same + * gap events had before they were restored; see events.ts). + * + * This module restores them from `blueprint.resources[].properties` on every + * `npm run generate:mintlify`, producing one combined `errors.mdx` page per + * resource with an `## Errors` and an `## Warnings` section. Each section opens + * with the object shape (an example payload plus a properties accordion) and + * then lists every code with its meaning. A standalone page (rather than a + * section on the object page) renders full width and matches the layout the + * events pages use. + * + * `update-nav.ts` wires the generated pages into the sidebar after their object + * (and events) page. Link canonicalization (Phase G) runs afterward so + * `docs.seam.co` links in descriptions become canonical relative paths. + */ + +type Resource = Blueprint['resources'][number] +type Property = Resource['properties'][number] + +interface CodeEntry { + code: string + description: string +} + +interface CodeGroup { + // Group heading (e.g. "Locks"); null for the ungrouped variants. + name: string | null + entries: CodeEntry[] +} + +function isDiscriminatedListProperty( + prop: Property | undefined, +): prop is Property & DiscriminatedListProperty { + return ( + prop != null && + 'itemFormat' in prop && + prop.itemFormat === 'discriminated_object' + ) +} + +/** + * Read the enumerated code (the discriminator enum's single value) from a + * variant's properties, e.g. `error_code = "device_offline"`. + */ +function variantCode( + variant: DiscriminatedListProperty['variants'][number], + discriminator: string, +): string | null { + const prop = variant.properties.find( + (p) => p.name === discriminator && p.format === 'enum', + ) as { values?: Array<{ name: string }> } | undefined + return prop?.values?.[0]?.name ?? null +} + +/** + * Group a resource's `errors` or `warnings` property into ordered code groups: + * the ungrouped variants first (no heading), then each named variant group in + * blueprint order. Entries within a group are sorted by code. Returns an empty + * array when the property is absent or has no documented variants. + */ +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)) + + const groups: CodeGroup[] = [{ name: null, entries: entriesFor(null) }] + for (const group of prop.variantGroups) { + groups.push({ + name: group.name, + entries: entriesFor(group.variantGroupKey), + }) + } + return groups.filter((g) => g.entries.length > 0) +} + +/** + * Order an object's properties for display: the discriminator first, then + * `message` and `created_at`, then everything else alphabetically. Keeps the + * example payload and properties list readable and consistent across pages. + */ +function orderProperties(props: Property[], discriminator: string): Property[] { + const priority = [discriminator, 'message', 'created_at'] + const rank = (name: string): number => { + const i = priority.indexOf(name) + return i === -1 ? priority.length : i + } + return [...props].sort( + (a, b) => rank(a.name) - rank(b.name) || a.name.localeCompare(b.name), + ) +} + +/** + * The union of properties across a discriminated list's variants, deduplicated + * by name (first occurrence wins). Variants share a core shape (`error_code` or + * `warning_code`, `message`, `created_at`) plus a few variant-specific flags, so + * the union documents every field a reader might encounter. + */ +function unionProperties(prop: DiscriminatedListProperty): Property[] { + const byName = new Map() + for (const variant of prop.variants) { + for (const p of variant.properties) { + if (!byName.has(p.name)) byName.set(p.name, p) + } + } + return orderProperties([...byName.values()], prop.discriminator) +} + +/** Strip Markdown link and inline-code syntax so a description reads as the + * plain-text string an API `message` field would actually contain + * (`[access grant](https://…)` -> `access grant`). */ +function toPlainText(md: string): string { + return md + .replace(/\[([^\]]+)\]\([^)]*\)/g, '$1') + .replace(/`([^`]+)`/g, '$1') + .trim() +} + +/** Build an example object from one variant: the concrete code and a plain-text + * message, with fixed sample values for the rest. */ +function buildExample( + variant: DiscriminatedListProperty['variants'][number], + discriminator: string, + code: string, +): Record { + const example: Record = {} + for (const p of orderProperties(variant.properties, discriminator)) { + if (p.name === discriminator) example[p.name] = code + else if (p.name === 'message') { + example[p.name] = + toPlainText(variant.description ?? '') || 'A human-readable message.' + } else example[p.name] = sampleValue(p) + } + return example +} + +/** Render one property of the object shape as a Mintlify ``. */ +function renderShapeProperty( + prop: Property, + discriminator: string, + kind: string, +): string { + const body = [ + (prop.description ?? '').trim() || `The ${prop.name.replace(/_/g, ' ')}.`, + ] + if (prop.name === discriminator) { + body.push('', `One of the ${kind} codes listed below.`) + } + return [ + ``, + indent(body.join('\n'), 2), + '', + ].join('\n') +} + +/** + * Render the object shape for a section: an example payload (built from the + * first variant) and an accordion documenting every property. Returns '' when + * the property is missing or has no variants. + */ +function renderObjectShape(prop: Property | undefined, kind: string): string { + if (!isDiscriminatedListProperty(prop)) return '' + const first = prop.variants[0] + if (first == null) return '' + + const code = variantCode(first, prop.discriminator) ?? '' + const json = JSON.stringify( + buildExample(first, prop.discriminator, code), + null, + 2, + ) + const fields = unionProperties(prop) + .map((p) => renderShapeProperty(p, prop.discriminator, kind)) + .join('\n\n') + const title = kind.charAt(0).toUpperCase() + kind.slice(1) + + return [ + `Each ${kind} is an object with the following shape:`, + '', + `\`\`\`json Example ${kind}`, + json, + '```', + '', + ``, + '', + fields, + '', + '', + ].join('\n') +} + +/** + * Render one code entry as a heading (so each code gets a linkable anchor) + * followed by its description and a divider that separates it from the next + * entry. `level` is the Markdown heading prefix (`###` for ungrouped codes, + * `####` for codes nested under a variant-group heading). + */ +function renderEntry(entry: CodeEntry, level: string): string { + const description = + entry.description || `Indicates the \`${entry.code}\` state.` + return [`${level} \`${entry.code}\``, '', description, '', '---'].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 + * no codes. `kind` is the singular noun (`error`/`warning`) used in prose. + */ +function renderSection( + title: string, + kind: string, + prop: Property | undefined, + groups: CodeGroup[], +): string { + if (groups.length === 0) return '' + const blocks: string[] = [`## ${title}`] + const shape = renderObjectShape(prop, kind) + if (shape) blocks.push(shape) + for (const group of groups) { + // Named variant groups get an `###` heading and nest their codes at `####`; + // ungrouped codes sit directly under the section at `###`. + const codeLevel = group.name != null ? '####' : '###' + if (group.name != null) blocks.push(`### ${group.name}`) + for (const entry of group.entries) { + blocks.push(renderEntry(entry, codeLevel)) + } + } + return blocks.join('\n\n') +} + +/** The noun for a resource, from its object page title (`The Device Object` -> + * `Device`) or a humanized route path. */ +function resourceNoun(objectContent: string | null, routePath: string): string { + const match = objectContent?.match(/^title:\s*['"]?(.+?)['"]?\s*$/m) + const objectTitle = match?.[1] + const noun = objectTitle + ?.replace(/^The\s+/, '') + .replace(/\s+Object$/, '') + .trim() + if (noun) return noun + + return routePath + .slice(1) + .split('/') + .map((seg) => + seg + .split('_') + .map((w) => w.charAt(0).toUpperCase() + w.slice(1)) + .join(' '), + ) + .join(' ') +} + +/** The `Errors`/`Warnings`/`Errors and Warnings` suffix for the given sections. */ +function kindSuffix(hasErrors: boolean, hasWarnings: boolean): string { + if (hasErrors && hasWarnings) return 'Errors and Warnings' + return hasErrors ? 'Errors' : 'Warnings' +} + +/** Render the full standalone errors/warnings page (frontmatter + sections). */ +function renderPage( + noun: string, + errorSection: string, + warningSection: string, +): string { + const title = `${noun} ${kindSuffix(Boolean(errorSection), Boolean(warningSection))}` + const kinds = + errorSection && warningSection + ? 'Errors and warnings' + : errorSection + ? 'Errors' + : 'Warnings' + const description = `${kinds} that Seam reports on the ${noun} resource, each with its code and meaning.` + const frontmatter = [ + '---', + `title: '${title.replace(/'/g, "\\'")}'`, + `description: '${description.replace(/'/g, "\\'")}'`, + '---', + ].join('\n') + const body = [errorSection, warningSection].filter(Boolean).join('\n\n') + return `${frontmatter}\n\n${body}\n` +} + +async function readFileOrNull(path: string): Promise { + try { + return await readFile(path, 'utf8') + } catch { + return null + } +} + +/** + * Generate the per-resource `errors.mdx` pages. Returns the route paths that + * received a page (e.g. `/devices`) so the caller can wire them into the + * navigation. + */ +export async function updateErrorPages( + blueprint: Blueprint, + docsDir: string, +): Promise { + const routes: string[] = [] + + for (const resource of blueprint.resources) { + if (resource.isUndocumented) continue + + const errorsProp = resource.properties.find((p) => p.name === 'errors') + const warningsProp = resource.properties.find((p) => p.name === 'warnings') + const errorGroups = groupCodes(errorsProp) + const warningGroups = groupCodes(warningsProp) + if (errorGroups.length === 0 && warningGroups.length === 0) continue + + const resourceDir = join(docsDir, 'api', resource.routePath.slice(1)) + const objectContent = await readFileOrNull(join(resourceDir, 'object.mdx')) + if (objectContent == null) { + // Some resources with errors/warnings have no object page yet (e.g. + // /acs/credentials). Skip until a page exists. + console.log( + ` No object page for errors on ${resource.routePath}, skipping`, + ) + continue + } + + const noun = resourceNoun(objectContent, resource.routePath) + const page = renderPage( + noun, + renderSection('Errors', 'error', errorsProp, errorGroups), + renderSection('Warnings', 'warning', warningsProp, warningGroups), + ) + await writeFile(join(resourceDir, 'errors.mdx'), page) + routes.push(resource.routePath) + } + + return routes +} diff --git a/mintlify-codegen/events.ts b/mintlify-codegen/events.ts index 9443639b4..9f78638cc 100644 --- a/mintlify-codegen/events.ts +++ b/mintlify-codegen/events.ts @@ -4,6 +4,8 @@ import { join } from 'node:path' import type { Blueprint } from '@seamapi/blueprint' +import { formatType, hasEnumValues, indent } from './property-fields.js' + /** * Generate event documentation for the API reference. * @@ -39,50 +41,6 @@ const EVENT_OBJECT_ROUTE = '/events' type EventResource = Blueprint['events'][number] type EventProperty = EventResource['properties'][number] -/** - * Map a blueprint property format to the type label used across the API object - * pages (e.g. `id` -> `String (UUID)`, `enum` -> `Enum (String)`). Mirrors - * `formatPropertyType` in generate.ts so event properties read the same as the - * resource properties above them. - */ -function formatType(prop: EventProperty): string { - switch (prop.format) { - case 'id': - return 'String (UUID)' - case 'datetime': - return 'String (ISO 8601)' - case 'enum': - return 'Enum (String)' - case 'list': - return 'Array' - case 'boolean': - return 'Boolean' - case 'string': - return 'String' - case 'object': - case 'record': - return 'Object' - default: - return (prop as { jsonType?: string }).jsonType ?? 'String' - } -} - -function indent(text: string, spaces: number): string { - const pad = ' '.repeat(spaces) - return text - .split('\n') - .map((line) => (line.trim() ? pad + line : line)) - .join('\n') -} - -function hasEnumValues( - prop: EventProperty, -): prop is EventProperty & { values: Array<{ name: string }> } { - return ( - 'values' in prop && Array.isArray((prop as { values?: unknown }).values) - ) -} - /** * Object-format properties (e.g. the `from`/`to` of a `*.*_changed` event) * carry their own typed `properties` array. Free-form records @@ -109,7 +67,10 @@ const SAMPLE_STRING_VALUES: Record = { /** * Build an illustrative sample value for an event property from its format. * Values are fixed (never random) so generated payloads are stable across - * runs; this mirrors the value conventions in load-data.ts. + * runs; this mirrors the value conventions in load-data.ts. This event-specific + * variant recurses into a `*_changed` event's typed `from`/`to` payloads; the + * shared basic version used by the object and error pages lives in + * property-fields.ts. */ function sampleValue(prop: EventProperty): unknown { if (hasEnumValues(prop) && prop.values.length > 0) { diff --git a/mintlify-codegen/generate.ts b/mintlify-codegen/generate.ts index 3eaf5ed14..23901fbdf 100644 --- a/mintlify-codegen/generate.ts +++ b/mintlify-codegen/generate.ts @@ -6,10 +6,15 @@ import { env } from 'node:process' import type { Blueprint } from '@seamapi/blueprint' import { canonicalizeGeneratedLinks } from './canonicalize-links.js' +import { updateErrorPages } from './errors.js' import { updateEventPages } from './events.js' import { getRawOpenApiSpec, loadBlueprint } from './load-data.js' import { transformSpec } from './transform-spec.js' -import { insertEventsPagesIntoNav, updateDocsJson } from './update-nav.js' +import { + insertErrorPagesIntoNav, + insertEventsPagesIntoNav, + updateDocsJson, +} from './update-nav.js' const skipCodeFormat = env['SKIP_CODE_FORMAT'] != null @@ -85,6 +90,21 @@ if (updatedEvents.length > 0) { // object page. Runs after nav (Phase E) so its transforms don't strip them. await insertEventsPagesIntoNav(updatedEvents) +// Phase F.7: Generate error/warning documentation from the errors/warnings +// properties on each resource — one combined page per resource. Like events, +// these are blueprint-only (the OpenAPI spec can't express the enumerated +// codes) and run before link canonicalization so their description links are +// rewritten. Nav wiring runs after events so the sidebar reads +// object -> events -> errors. +console.log('Updating error and warning documentation...') +const updatedErrors = await updateErrorPages(blueprint, outputDir) +if (updatedErrors.length > 0) { + console.log( + ` Generated errors pages for ${updatedErrors.length} resources: ${updatedErrors.join(', ')}`, + ) +} +await insertErrorPagesIntoNav(updatedErrors) + // Phase G: canonicalize docs links in generated output. Guards against two // classes of upstream @seamapi/types regression: // 1. legacy `/latest` reappearing in `docs.seam.co/latest/...` links diff --git a/mintlify-codegen/property-fields.ts b/mintlify-codegen/property-fields.ts new file mode 100644 index 000000000..a1705503b --- /dev/null +++ b/mintlify-codegen/property-fields.ts @@ -0,0 +1,91 @@ +/** + * Shared helpers for rendering blueprint properties on generated API-reference + * pages (events.ts, errors.ts). Kept format- and value-consistent across pages + * so event, error, and warning properties read identically. + */ + +interface Formattable { + format: string + jsonType?: string +} + +interface Sampleable { + format: string + values?: Array<{ name: string }> +} + +/** + * Map a blueprint property format to the type label used across the API object + * pages (e.g. `id` -> `String (UUID)`, `enum` -> `Enum (String)`). Mirrors + * `formatPropertyType` in generate.ts. + */ +export function formatType(prop: Formattable): string { + switch (prop.format) { + case 'id': + return 'String (UUID)' + case 'datetime': + return 'String (ISO 8601)' + case 'enum': + return 'Enum (String)' + case 'list': + return 'Array' + case 'boolean': + return 'Boolean' + case 'string': + return 'String' + case 'object': + case 'record': + return 'Object' + default: + return prop.jsonType ?? 'String' + } +} + +/** Narrow a property to one that carries enum `values`. Generic so it preserves + * the caller's property type. */ +export function hasEnumValues( + prop: T, +): prop is T & { values: Array<{ name: string }> } { + return ( + 'values' in prop && Array.isArray((prop as { values?: unknown }).values) + ) +} + +/** + * Build an illustrative sample value for a property from its format. Values are + * fixed (never random) so generated payloads are stable across runs; this + * mirrors the value conventions in load-data.ts. + */ +export function sampleValue(prop: Sampleable): unknown { + if (hasEnumValues(prop) && prop.values.length > 0) { + return prop.values[0]?.name ?? '' + } + switch (prop.format) { + case 'id': + return '00000000-0000-0000-0000-000000000000' + case 'datetime': + return '2025-01-01T00:00:00.000Z' + case 'boolean': + return true + case 'number': + return 0 + case 'list': + return [] + case 'object': + case 'record': + return {} + case 'string': + return '' + default: + return null + } +} + +/** Indent every non-blank line of `text` by `spaces` spaces. */ +export function indent(text: string, spaces: number): string { + const pad = ' '.repeat(spaces) + return text + .split('\n') + .map((line) => (line.trim() ? pad + line : line)) + .join('\n') +} diff --git a/mintlify-codegen/update-nav.ts b/mintlify-codegen/update-nav.ts index 728ddfd47..8ed18ef82 100644 --- a/mintlify-codegen/update-nav.ts +++ b/mintlify-codegen/update-nav.ts @@ -28,6 +28,14 @@ function isEventsPage(page: string): boolean { return page.startsWith('api/') && page.endsWith('/events') } +/** + * Check if a page reference is a generated errors/warnings page + * (e.g. "api/devices/errors"). + */ +function isErrorsPage(page: string): boolean { + return page.startsWith('api/') && page.endsWith('/errors') +} + /** * Convert a page path like "api/access_codes/create" to an OpenAPI reference * like "POST /access_codes/create". @@ -86,6 +94,9 @@ function transformPages( // Keep generated events pages as MDX (not endpoints, but real pages) if (isEventsPage(page)) return page + // Keep generated errors/warnings pages as MDX (not endpoints) + if (isErrorsPage(page)) return page + // Check if the endpoint exists in the spec const apiPath = page.replace(/^api/, '') if (!specPaths.has(apiPath)) { @@ -376,10 +387,51 @@ export async function insertEventsPagesIntoNav( let inserted = 0 for (const routePath of eventRoutes) { - const objectPage = `api${routePath}/object` - const eventsPage = `api${routePath}/events` - for (const group of apiTab.groups) { - const result = insertAfterObjectPage(group.pages, objectPage, eventsPage) + const result = insertIntoGroups( + apiTab.groups, + `api${routePath}/object`, + `api${routePath}/events`, + ) + if (result === 'inserted') inserted++ + } + + if (inserted > 0) { + await writeFile(docsJsonPath, JSON.stringify(docsJson, null, 2) + '\n') + console.log(` Added ${inserted} events page(s) to nav`) + } +} + +/** + * Insert each generated errors/warnings page into the nav after its events page + * (falling back to its object page when there is no events page), e.g. + * "api/devices/errors" after "api/devices/events". Idempotent: skips routes + * whose errors page is already present. Call after the errors pages have been + * written to disk and after events pages are wired in. + */ +export async function insertErrorPagesIntoNav( + errorRoutes: string[], +): Promise { + if (errorRoutes.length === 0) return + + const docsJsonPath = join( + import.meta.dirname, + '..', + 'mintlify-docs', + 'docs.json', + ) + const docsJson = JSON.parse(await readFile(docsJsonPath, 'utf8')) + const apiTab = docsJson.navigation?.tabs?.find( + (t: any) => t.tab === 'API Reference', + ) + if (!apiTab?.groups) return + + let inserted = 0 + for (const routePath of errorRoutes) { + const errorsPage = `api${routePath}/errors` + // Prefer anchoring after the events page so the sidebar reads + // object -> events -> errors; fall back to the object page. + for (const anchor of [`api${routePath}/events`, `api${routePath}/object`]) { + const result = insertIntoGroups(apiTab.groups, anchor, errorsPage) if (result === 'inserted') inserted++ if (result !== 'not-found') break } @@ -387,29 +439,45 @@ export async function insertEventsPagesIntoNav( if (inserted > 0) { await writeFile(docsJsonPath, JSON.stringify(docsJson, null, 2) + '\n') - console.log(` Added ${inserted} events page(s) to nav`) + console.log(` Added ${inserted} errors page(s) to nav`) + } +} + +/** + * Insert `newPage` after `anchorPage`, searching every top-level nav group. + * Returns the first non-'not-found' result (a page lives in one group only). + */ +function insertIntoGroups( + groups: any[], + anchorPage: string, + newPage: string, +): 'inserted' | 'present' | 'not-found' { + for (const group of groups) { + const result = insertAfterPage(group.pages, anchorPage, newPage) + if (result !== 'not-found') return result } + return 'not-found' } /** - * Recursively locate `objectPage` in the nav tree and insert `eventsPage` right + * Recursively locate `anchorPage` in the nav tree and insert `newPage` right * after it. Returns 'inserted' when added, 'present' when already there, and - * 'not-found' when the object page isn't in this subtree. + * 'not-found' when the anchor page isn't in this subtree. */ -function insertAfterObjectPage( +function insertAfterPage( pages: any[], - objectPage: string, - eventsPage: string, + anchorPage: string, + newPage: string, ): 'inserted' | 'present' | 'not-found' { - const idx = pages.indexOf(objectPage) + const idx = pages.indexOf(anchorPage) if (idx !== -1) { - if (pages.includes(eventsPage)) return 'present' - pages.splice(idx + 1, 0, eventsPage) + if (pages.includes(newPage)) return 'present' + pages.splice(idx + 1, 0, newPage) return 'inserted' } for (const page of pages) { if (typeof page === 'object' && page.group) { - const result = insertAfterObjectPage(page.pages, objectPage, eventsPage) + const result = insertAfterPage(page.pages, anchorPage, newPage) if (result !== 'not-found') return result } } diff --git a/mintlify-docs/api/access_codes/errors.mdx b/mintlify-docs/api/access_codes/errors.mdx new file mode 100644 index 000000000..4b1505154 --- /dev/null +++ b/mintlify-docs/api/access_codes/errors.mdx @@ -0,0 +1,351 @@ +--- +title: 'Access Code Errors and Warnings' +description: 'Errors and warnings that Seam reports on the Access Code resource, each with its code and meaning.' +--- + +## Errors + +Each error is an object with the following shape: + +```json Example error +{ + "error_code": "provider_issue", + "message": "Indicates a provider-specific issue that prevents the access code from being set or managed. Check the error message for details.", + "created_at": "2025-01-01T00:00:00.000Z", + "is_access_code_error": true +} +``` + + + + + Unique identifier of the type of error. Enables quick recognition and categorization of the issue. + + One of the error codes listed below. + + + + Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the error. + + + + Indicates the type of external modification. `modified` means the code's PIN or schedule was changed. `removed` means the code was deleted from the device. + + + + Indicates that this is an access code error. + + + + Indicates whether the error is related to [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge). + + + + Indicates that the error is a [connected account](https://docs.seam.co/api/connected_accounts/object) error. + + + + Indicates that the error is not a device error. + + + + ID of the managed access code that conflicts with this managed access code, when Seam can identify it. + + + + List of fields that were changed externally, with their previous and new values. + + + + ID of the unmanaged access code that conflicts with this managed access code, when Seam can identify it. + + + + +### `access_code_inactive` + +Indicates that the access code is disabled or inactive on the device. The code exists but will not grant access until re-enabled. + +--- + +### `access_code_state_unconfirmed` + +Indicates that the provider cannot confirm whether the access code was set or removed on the device. + +--- + +### `account_disconnected` + +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). + +--- + +### `code_modified_external_to_seam` + +Code was modified or removed externally after Seam successfully set it on the device. + +--- + +### `device_disconnected` + +Indicates that the device is disconnected. + +--- + +### `device_offline` + +Indicates that the device is offline. + +--- + +### `device_removed` + +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. + +--- + +### `duplicate_code_attempt_prevented` + +An attempt to modify this access code was prevented. + +--- + +### `duplicate_code_on_device` + +Duplicate access code detected on device. + +--- + +### `failed_to_remove_from_device` + +Failed to remove code from device. + +--- + +### `failed_to_set_on_device` + +Failed to set code on device. + +--- + +### `hub_disconnected` + +Indicates that the hub is disconnected. + +--- + +### `insufficient_permissions` + +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. + +--- + +### `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. + +--- + +### `no_space_for_access_code_on_device` + +No space for access code on device. + +--- + +### `provider_issue` + +Indicates a provider-specific issue that prevents the access code from being set or managed. Check the error message for details. + +--- + +### `replaced_by_newer_access_code` + +This access code was overridden on the device by a newer access code programmed to the same slot. + +--- + +### `salto_ks_user_not_subscribed` + +Salto site user is not subscribed. + +--- + +### `subscription_required` + +Indicates that a subscription is required to connect. + +--- + +### `ttlock_lock_not_paired_to_gateway` + +Indicates that the lock is not paired with a gateway. + +--- + +### Access Codes + +#### `empty_backup_access_code_pool` + +Indicates that the [backup access code pool](https://docs.seam.co/low-level-apis/smart-locks/access-codes/backup-access-codes) is empty. + +--- + +### Locks + +#### `august_lock_missing_bridge` + +Indicates that the lock is not connected to a bridge. + +--- + +#### `august_lock_not_authorized` + +Indicates that the user is not authorized to use the August lock. + +--- + +#### `salto_ks_subscription_limit_exceeded` + +Indicates that the Salto site user limit has been reached. + +--- + +### Thermostats + +#### `auxiliary_heat_running` + +Indicates that the auxiliary heat is running. + +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "provider_issue", + "message": "Indicates a provider-specific issue that may affect the access code. Check the warning message for details.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + Indicates the type of external modification. `modified` means the code's PIN or schedule was changed. `removed` means the code was deleted from the device. + + + + List of fields that were changed externally, with their previous and new values. + + + + +### `access_code_inactive` + +Indicates that the access code is disabled or inactive on the device. The code exists but will not grant access until re-enabled. + +--- + +### `being_deleted` + +Access code is being deleted. + +--- + +### `code_modified_external_to_seam` + +Code was modified or removed externally after Seam successfully set it on the device. + +--- + +### `delay_in_removing_from_device` + +Delay in removing code from device. + +--- + +### `delay_in_setting_on_device` + +Delay in setting code on device. + +--- + +### `igloo_algopin_must_be_used_within_24_hours` + +Algopins must be used within 24 hours. + +--- + +### `management_transferred` + +Management was transferred to another workspace. + +--- + +### `provider_issue` + +Indicates a provider-specific issue that may affect the access code. Check the warning message for details. + +--- + +### `schlage_access_code_ambiguous_timezone_dst_risk` + +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. + +--- + +### `schlage_detected_duplicate` + +Duplicate access code detected. + +--- + +### `third_party_integration_detected` + +Third-party integration detected that may cause access codes to fail. + +--- + +### `using_backup_access_code` + +A backup access code has been pulled and is being used in place of this access code. + +--- diff --git a/mintlify-docs/api/access_codes/unmanaged/errors.mdx b/mintlify-docs/api/access_codes/unmanaged/errors.mdx new file mode 100644 index 000000000..1208914b2 --- /dev/null +++ b/mintlify-docs/api/access_codes/unmanaged/errors.mdx @@ -0,0 +1,351 @@ +--- +title: 'Unmanaged Access Codes Errors and Warnings' +description: 'Errors and warnings that Seam reports on the Unmanaged Access Codes resource, each with its code and meaning.' +--- + +## Errors + +Each error is an object with the following shape: + +```json Example error +{ + "error_code": "provider_issue", + "message": "Indicates a provider-specific issue that prevents the access code from being set or managed. Check the error message for details.", + "created_at": "2025-01-01T00:00:00.000Z", + "is_access_code_error": true +} +``` + + + + + Unique identifier of the type of error. Enables quick recognition and categorization of the issue. + + One of the error codes listed below. + + + + Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the error. + + + + Indicates the type of external modification. `modified` means the code's PIN or schedule was changed. `removed` means the code was deleted from the device. + + + + Indicates that this is an access code error. + + + + Indicates whether the error is related to [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge). + + + + Indicates that the error is a [connected account](https://docs.seam.co/api/connected_accounts/object) error. + + + + Indicates that the error is not a device error. + + + + ID of the managed access code that conflicts with this managed access code, when Seam can identify it. + + + + List of fields that were changed externally, with their previous and new values. + + + + ID of the unmanaged access code that conflicts with this managed access code, when Seam can identify it. + + + + +### `access_code_inactive` + +Indicates that the access code is disabled or inactive on the device. The code exists but will not grant access until re-enabled. + +--- + +### `access_code_state_unconfirmed` + +Indicates that the provider cannot confirm whether the access code was set or removed on the device. + +--- + +### `account_disconnected` + +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). + +--- + +### `code_modified_external_to_seam` + +Code was modified or removed externally after Seam successfully set it on the device. + +--- + +### `device_disconnected` + +Indicates that the device is disconnected. + +--- + +### `device_offline` + +Indicates that the device is offline. + +--- + +### `device_removed` + +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. + +--- + +### `duplicate_code_attempt_prevented` + +An attempt to modify this access code was prevented. + +--- + +### `duplicate_code_on_device` + +Duplicate access code detected on device. + +--- + +### `failed_to_remove_from_device` + +Failed to remove code from device. + +--- + +### `failed_to_set_on_device` + +Failed to set code on device. + +--- + +### `hub_disconnected` + +Indicates that the hub is disconnected. + +--- + +### `insufficient_permissions` + +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. + +--- + +### `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. + +--- + +### `no_space_for_access_code_on_device` + +No space for access code on device. + +--- + +### `provider_issue` + +Indicates a provider-specific issue that prevents the access code from being set or managed. Check the error message for details. + +--- + +### `replaced_by_newer_access_code` + +This access code was overridden on the device by a newer access code programmed to the same slot. + +--- + +### `salto_ks_user_not_subscribed` + +Salto site user is not subscribed. + +--- + +### `subscription_required` + +Indicates that a subscription is required to connect. + +--- + +### `ttlock_lock_not_paired_to_gateway` + +Indicates that the lock is not paired with a gateway. + +--- + +### Access Codes + +#### `empty_backup_access_code_pool` + +Indicates that the [backup access code pool](https://docs.seam.co/low-level-apis/smart-locks/access-codes/backup-access-codes) is empty. + +--- + +### Locks + +#### `august_lock_missing_bridge` + +Indicates that the lock is not connected to a bridge. + +--- + +#### `august_lock_not_authorized` + +Indicates that the user is not authorized to use the August lock. + +--- + +#### `salto_ks_subscription_limit_exceeded` + +Indicates that the Salto site user limit has been reached. + +--- + +### Thermostats + +#### `auxiliary_heat_running` + +Indicates that the auxiliary heat is running. + +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "provider_issue", + "message": "Indicates a provider-specific issue that may affect the access code. Check the warning message for details.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + Indicates the type of external modification. `modified` means the code's PIN or schedule was changed. `removed` means the code was deleted from the device. + + + + List of fields that were changed externally, with their previous and new values. + + + + +### `access_code_inactive` + +Indicates that the access code is disabled or inactive on the device. The code exists but will not grant access until re-enabled. + +--- + +### `being_deleted` + +Access code is being deleted. + +--- + +### `code_modified_external_to_seam` + +Code was modified or removed externally after Seam successfully set it on the device. + +--- + +### `delay_in_removing_from_device` + +Delay in removing code from device. + +--- + +### `delay_in_setting_on_device` + +Delay in setting code on device. + +--- + +### `igloo_algopin_must_be_used_within_24_hours` + +Algopins must be used within 24 hours. + +--- + +### `management_transferred` + +Management was transferred to another workspace. + +--- + +### `provider_issue` + +Indicates a provider-specific issue that may affect the access code. Check the warning message for details. + +--- + +### `schlage_access_code_ambiguous_timezone_dst_risk` + +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. + +--- + +### `schlage_detected_duplicate` + +Duplicate access code detected. + +--- + +### `third_party_integration_detected` + +Third-party integration detected that may cause access codes to fail. + +--- + +### `using_backup_access_code` + +A backup access code has been pulled and is being used in place of this access code. + +--- diff --git a/mintlify-docs/api/access_grants/errors.mdx b/mintlify-docs/api/access_grants/errors.mdx new file mode 100644 index 000000000..609f31e06 --- /dev/null +++ b/mintlify-docs/api/access_grants/errors.mdx @@ -0,0 +1,141 @@ +--- +title: 'Access Grant Errors and Warnings' +description: 'Errors and warnings that Seam reports on the Access Grant resource, each with its code and meaning.' +--- + +## Errors + +Each error is an object with the following shape: + +```json Example error +{ + "error_code": "cannot_create_requested_access_methods", + "message": "A human-readable message.", + "created_at": "2025-01-01T00:00:00.000Z", + "missing_device_ids": [] +} +``` + + + + + Unique identifier of the type of error. Enables quick recognition and categorization of the issue. + + One of the error codes listed below. + + + + Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the error. + + + + IDs of the devices that did not receive an access code at grant creation. Use these to identify which specific devices failed when the message reports a partial failure. + + + + +### `cannot_create_requested_access_methods` + +Indicates the `cannot_create_requested_access_methods` state. + +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "being_deleted", + "message": "Indicates that the access grant is being deleted.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + IDs of the access methods being updated. + + + + ID of the device where the requested code was unavailable. + + + + Devices whose access codes could not be revoked during reconciliation. Present when the provider does not support revoking an offline access code (e.g. Dormakaba oracode with exhausted override budget). + + + + The new PIN code that was assigned instead. + + + + The originally requested PIN code that was unavailable. + + + + Specific reason why the grant's times are not programmable on the device. + + + + +### `being_deleted` + +Indicates that the [access grant](https://docs.seam.co/use-cases/granting-access) is being deleted. + +--- + +### `device_does_not_support_access_codes` + +Indicates that a device in the access grant does not support access codes and was excluded from code materialization. + +--- + +### `device_time_constraints_violated` + +Indicates that a device in the access grant cannot program an access code for the grant's time range because of device-specific time constraints. + +--- + +### `overprovisioned_access` + +Indicates that the access grant has access to locations it should not have. Access methods are being removed from the extra locations. + +--- + +### `requested_code_unavailable` + +Indicates that the requested PIN code was already in use on a device, so a different code was assigned. + +--- + +### `underprovisioned_access` + +Indicates that the access grant should have access to more locations than it currently does. Access methods are being created for the missing locations. + +--- + +### `updating_access_times` + +Indicates that the access times for this [access grant](https://docs.seam.co/use-cases/granting-access) are being updated. + +--- diff --git a/mintlify-docs/api/access_methods/errors.mdx b/mintlify-docs/api/access_methods/errors.mdx new file mode 100644 index 000000000..1f1d1313f --- /dev/null +++ b/mintlify-docs/api/access_methods/errors.mdx @@ -0,0 +1,56 @@ +--- +title: 'Access Method Warnings' +description: 'Warnings that Seam reports on the Access Method resource, each with its code and meaning.' +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "being_deleted", + "message": "Indicates that the access method is being deleted.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + ID of the original access method from which this backup access method was split, if applicable. + + + + +### `being_deleted` + +Indicates that the [access method](https://docs.seam.co/use-cases/granting-access/creating-an-access-grant) is being deleted. + +--- + +### `pulled_backup_access_code` + +Indicates that all attempts to create an access code on this device before the start time failed and a backup access code was used to ensure access was provided in time. + +--- + +### `updating_access_times` + +Indicates that the access times for this [access method](https://docs.seam.co/use-cases/granting-access/creating-an-access-grant) are being updated. + +--- diff --git a/mintlify-docs/api/acs/access_groups/errors.mdx b/mintlify-docs/api/acs/access_groups/errors.mdx new file mode 100644 index 000000000..1bce31da8 --- /dev/null +++ b/mintlify-docs/api/acs/access_groups/errors.mdx @@ -0,0 +1,40 @@ +--- +title: 'Access Group Errors' +description: 'Errors that Seam reports on the Access Group resource, each with its code and meaning.' +--- + +## Errors + +Each error is an object with the following shape: + +```json Example error +{ + "error_code": "failed_to_create_on_acs_system", + "message": "Indicates that the access group was not created on the access system. This is likely due to an internal unexpected error. Contact Seam support.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of error. Enables quick recognition and categorization of the issue. + + One of the error codes listed below. + + + + Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the error. + + + + +### `failed_to_create_on_acs_system` + +Indicates that the [access group](https://docs.seam.co/low-level-apis/access-systems/user-management/assigning-users-to-access-groups) 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). + +--- diff --git a/mintlify-docs/api/acs/credentials/errors.mdx b/mintlify-docs/api/acs/credentials/errors.mdx new file mode 100644 index 000000000..e64e18d05 --- /dev/null +++ b/mintlify-docs/api/acs/credentials/errors.mdx @@ -0,0 +1,70 @@ +--- +title: 'Credential Warnings' +description: 'Warnings that Seam reports on the Credential resource, each with its code and meaning.' +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "waiting_to_be_issued", + "message": "Indicates that the credential is waiting to be issued.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + +### `being_deleted` + +Indicates that the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) is being deleted. + +--- + +### `needs_to_be_reissued` + +Access permissions for the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) have changed. [Reissue](https://docs.seam.co/low-level-apis/access-systems/working-with-card-encoders-and-scanners/creating-and-encoding-card-based-credentials) (re-encode) the credential. This issue may affect the proper functioning of the credential. + +--- + +### `schedule_externally_modified` + +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. + +--- + +### `schedule_modified` + +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. + +--- + +### `unknown_issue_with_acs_credential` + +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. + +--- + +### `waiting_to_be_issued` + +Indicates that the [credential](https://docs.seam.co/low-level-apis/access-systems/managing-credentials) is waiting to be issued. + +--- diff --git a/mintlify-docs/api/acs/entrances/errors.mdx b/mintlify-docs/api/acs/entrances/errors.mdx new file mode 100644 index 000000000..d6e08bbbf --- /dev/null +++ b/mintlify-docs/api/acs/entrances/errors.mdx @@ -0,0 +1,58 @@ +--- +title: 'Entrance Warnings' +description: 'Warnings that Seam reports on the Entrance resource, each with its code and meaning.' +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "salto_ks_entrance_access_code_support_removed", + "message": "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.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + +### `entrance_setup_required` + +Indicates that this entrance requires additional configuration in the access control system before Seam can fully manage it. + +--- + +### `entrance_shares_zone` + +Indicates that this entrance shares a zone with other entrances in Avigilon Alta and cannot be added to an access group individually. + +--- + +### `salto_ks_entrance_access_code_support_removed` + +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. + +--- + +### `salto_ks_privacy_mode` + +Indicates that this entrance is in privacy mode. When privacy mode is enabled, access codes, mobile keys, and remote unlocks will not work unless the user has admin access. + +--- diff --git a/mintlify-docs/api/acs/systems/errors.mdx b/mintlify-docs/api/acs/systems/errors.mdx new file mode 100644 index 000000000..b78f71ffe --- /dev/null +++ b/mintlify-docs/api/acs/systems/errors.mdx @@ -0,0 +1,143 @@ +--- +title: 'ACS System Errors and Warnings' +description: 'Errors and warnings that Seam reports on the ACS System resource, each with its code and meaning.' +--- + +## Errors + +Each error is an object with the following shape: + +```json Example error +{ + "error_code": "seam_bridge_disconnected", + "message": "Indicates that the Seam API cannot communicate with Seam Bridge, for example, if Seam Bridge executable has stopped or if the computer running the Seam Bridge executable is offline.\n This error might also occur if Seam Bridge is connected to the wrong workspace.\n See also Troubleshooting Your Access Control System.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of error. Enables quick recognition and categorization of the issue. + + One of the error codes listed below. + + + + Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the error. + + + + Indicates whether the error is related to the [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge). + + + + +### `account_disconnected` + +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. + +--- + +### `acs_system_disconnected` + +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. + +--- + +### `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. + +--- + +### `salto_ks_certification_expired` + +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. + +--- + +### `salto_ks_subscription_limit_exceeded` + +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. + +--- + +### `seam_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. + This error might also occur if Seam Bridge is connected to the wrong [workspace](https://docs.seam.co/core-concepts/workspaces). + 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). + +--- + +### `visionline_instance_unreachable` + +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). + For 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). + See 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). + +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "salto_ks_subscription_limit_almost_reached", + "message": "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.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + The misconfigured acs entrance ids. + + + + +### `salto_ks_subscription_limit_almost_reached` + +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. + +--- + +### `setup_required` + +Indicates that the access control system requires additional setup before it can be fully operational. Follow the instructions in the warning message to complete the setup. + +--- + +### `time_zone_does_not_match_location` + +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). + +--- diff --git a/mintlify-docs/api/acs/users/errors.mdx b/mintlify-docs/api/acs/users/errors.mdx new file mode 100644 index 000000000..4bd25b232 --- /dev/null +++ b/mintlify-docs/api/acs/users/errors.mdx @@ -0,0 +1,124 @@ +--- +title: 'ACS User Errors and Warnings' +description: 'Errors and warnings that Seam reports on the ACS User resource, each with its code and meaning.' +--- + +## Errors + +Each error is an object with the following shape: + +```json Example error +{ + "error_code": "deleted_externally", + "message": "Indicates that the access system user was deleted from the access system outside of Seam.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + The error code. + + One of the error codes listed below. + + + + Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the error. + + + + +### `deleted_externally` + +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. + +--- + +### `failed_to_create_on_acs_system` + +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). + +--- + +### `failed_to_delete_on_acs_system` + +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). + +--- + +### `failed_to_update_on_acs_system` + +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). + +--- + +### `latch_conflict_with_resident_user` + +Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) was created from the Seam API but also exists on Mission Control. This is unsupported. Contact Seam [support](mailto:support@seam.co). + +--- + +### `salto_ks_subscription_limit_exceeded` + +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. + +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "being_deleted", + "message": "Indicates that the access system user is being deleted from the access system. This is a temporary state, and the access system user will be deleted shortly.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + The warning code. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + +### `being_deleted` + +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. + +--- + +### `latch_resident_user` + +Indicates that the [access system user](https://docs.seam.co/low-level-apis/access-systems/user-management) was created on Latch Mission Control. Please use the Latch Mission Control to manage this user. + +--- + +### `salto_ks_user_not_subscribed` + +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. + +--- + +### `unknown_issue_with_acs_user` + +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. + +--- diff --git a/mintlify-docs/api/connected_accounts/errors.mdx b/mintlify-docs/api/connected_accounts/errors.mdx new file mode 100644 index 000000000..d16250031 --- /dev/null +++ b/mintlify-docs/api/connected_accounts/errors.mdx @@ -0,0 +1,154 @@ +--- +title: 'Connected Account Errors and Warnings' +description: 'Errors and warnings that Seam reports on the Connected Account resource, each with its code and meaning.' +--- + +## Errors + +Each error is an object with the following shape: + +```json Example error +{ + "error_code": "account_disconnected", + "message": "Indicates that the account is disconnected.", + "created_at": "2025-01-01T00:00:00.000Z", + "is_bridge_error": true, + "is_connected_account_error": true +} +``` + + + + + Unique identifier of the type of error. Enables quick recognition and categorization of the issue. + + One of the error codes listed below. + + + + Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the error. + + + + Indicates whether the error is related to [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge). + + + + Indicates whether the error is related specifically to the connected account. + + + + Salto KS metadata associated with the connected account that has an error. + + + + +### `account_disconnected` + +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). + +--- + +### `dormakaba_sites_disconnected` + +Indicates that one or more dormakaba sites associated with the connected account could not be connected. Contact dormakaba support. + +--- + +### `salto_ks_subscription_limit_exceeded` + +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. + +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "scheduled_maintenance_window", + "message": "Indicates that scheduled downtime is planned for the connected account.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + Salto KS metadata associated with the connected account that has a warning. + + + + +### `account_reauthorization_requested` + +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. + +--- + +### `being_deleted` + +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. + +--- + +### `dormakaba_sites_unapproved` + +Indicates that one or more dormakaba sites associated with the connected account are not approved. Contact support@getseam.com to finish setting up your account. + +--- + +### `provider_service_unavailable` + +Indicates that the connected account's provider service is temporarily unavailable. Seam will automatically retry and reconnect when the service becomes available again. + +--- + +### `salto_ks_subscription_limit_almost_reached` + +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. + +--- + +### `scheduled_maintenance_window` + +Indicates that scheduled downtime is planned for the connected account. + +--- + +### `setup_required` + +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. + +--- + +### `unknown_issue_with_connected_account` + +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. + +--- diff --git a/mintlify-docs/api/devices/errors.mdx b/mintlify-docs/api/devices/errors.mdx new file mode 100644 index 000000000..b085e49f6 --- /dev/null +++ b/mintlify-docs/api/devices/errors.mdx @@ -0,0 +1,352 @@ +--- +title: 'Device Errors and Warnings' +description: 'Errors and warnings that Seam reports on the Device resource, each with its code and meaning.' +--- + +## Errors + +Each error is an object with the following shape: + +```json Example error +{ + "error_code": "account_disconnected", + "message": "Indicates that the account is disconnected.", + "created_at": "2025-01-01T00:00:00.000Z", + "is_connected_account_error": true, + "is_device_error": true +} +``` + + + + + Unique identifier of the type of error. Enables quick recognition and categorization of the issue. + + One of the error codes listed below. + + + + Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the error. + + + + Indicates whether the error is related to [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge). + + + + Indicates that the error is a [connected account](https://docs.seam.co/api/connected_accounts/object) error. + + + + Indicates that the error is not a device error. + + + + +### `account_disconnected` + +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. + +--- + +### `device_offline` + +Indicates that the device is offline. + +--- + +### `device_removed` + +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. + +--- + +### `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. + +--- + +### `subscription_required` + +Indicates that a subscription is required to connect. + +--- + +### `ttlock_lock_not_paired_to_gateway` + +Indicates that the lock is not paired with a gateway. + +--- + +### Access Codes + +#### `empty_backup_access_code_pool` + +Indicates that the [backup access code pool](https://docs.seam.co/low-level-apis/smart-locks/access-codes/backup-access-codes) is empty. + +--- + +### Locks + +#### `august_lock_missing_bridge` + +Indicates that the lock is not connected to a bridge. + +--- + +#### `august_lock_not_authorized` + +Indicates that the user is not authorized to use the August lock. + +--- + +#### `salto_ks_subscription_limit_exceeded` + +Indicates that the Salto site user limit has been reached. + +--- + +### Thermostats + +#### `auxiliary_heat_running` + +Indicates that the auxiliary heat is running. + +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "partial_backup_access_code_pool", + "message": "Indicates that the backup access code is unhealthy.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + Number of active access codes on the device when the warning was set. + + + + Maximum number of active access codes supported by the device. + + + + +### `device_communication_degraded` + +Indicates that the device appears to be unresponsive. + +--- + +### `device_has_flaky_connection` + +Indicates that the device has a flaky connection. + +--- + +### `lockly_time_zone_not_configured` + +Indicates that Seam detected that the Lockly device does not have a time zone configured. Time-bound codes may not work as expected. + +--- + +### `salto_ks_subscription_limit_almost_reached` + +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. + +--- + +### `scheduled_maintenance_window` + +Indicates that a scheduled maintenance window has been detected. + +--- + +### `third_party_integration_detected` + +Indicates that a third-party integration has been detected. + +--- + +### `ttlock_weak_gateway_signal` + +Indicates that the gateway signal is weak. + +--- + +### `two_n_device_missing_timezone` + +Indicates that the 2N device does not have a time zone configured. Configure a time zone on the device to enable access codes. + +--- + +### `ultraloq_time_zone_unknown` + +Indicates that Seam does not know the time zone of the Ultraloq device. Set a time zone to enable time-bound access codes. + +--- + +### `wyze_device_missing_gateway` + +Indicates that the Wyze Lock is not connected to a gateway. + +--- + +### Access Codes + +#### `many_active_backup_codes` + +Indicates that there are too many backup codes. + +--- + +#### `max_access_codes_reached` + +Indicates that the device has reached its maximum number of active access codes. Delete existing codes before creating new ones. + +--- + +#### `partial_backup_access_code_pool` + +Indicates that the backup access code is unhealthy. + +--- + +#### `provider_issue` + +Indicates a provider-specific issue that may affect device functionality. + +--- + +#### `salto_ks_lock_access_code_support_removed` + +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. + +--- + +#### `salto_ks_office_mode` + +Indicates that the Salto KS lock is in Office Mode. Access Codes will not unlock doors. + +--- + +#### `salto_ks_privacy_mode` + +Indicates that the Salto KS lock is in Privacy Mode. Access Codes will not unlock doors. + +--- + +### Locks + +#### `accessory_keypad_setup_required` + +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. + +--- + +#### `hub_required_for_additional_capabilities` + +Indicates that a hub or relay must be connected to unlock additional capabilities such as remote unlock. + +--- + +#### `insufficient_permissions` + +Indicates that the connected Kwikset account has member-level access to this lock's home. Admin or owner access is required to manage access codes and control the lock remotely. + +--- + +#### `keynest_unsupported_locker` + +Indicates that the key is in a locker that does not support the access codes API. + +--- + +#### `power_saving_mode` + +Indicates that the device is in power saving mode and may have limited functionality. + +--- + +#### `ttlock_lock_gateway_unlocking_not_enabled` + +Indicates that the Remote Unlock feature is not enabled in the settings." + +--- + +#### `unreliable_online_status` + +Indicates that the device may optimistically be reported as online because the provider does not reliably report its online status. + +--- + +### Phones + +#### `unknown_issue_with_phone` + +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. + +--- + +### Thermostats + +#### `temperature_threshold_exceeded` + +Indicates that the temperature threshold has been exceeded. + +--- diff --git a/mintlify-docs/api/devices/unmanaged/errors.mdx b/mintlify-docs/api/devices/unmanaged/errors.mdx new file mode 100644 index 000000000..dd2b6cae0 --- /dev/null +++ b/mintlify-docs/api/devices/unmanaged/errors.mdx @@ -0,0 +1,352 @@ +--- +title: 'Unmanaged Devices Errors and Warnings' +description: 'Errors and warnings that Seam reports on the Unmanaged Devices resource, each with its code and meaning.' +--- + +## Errors + +Each error is an object with the following shape: + +```json Example error +{ + "error_code": "account_disconnected", + "message": "Indicates that the account is disconnected.", + "created_at": "2025-01-01T00:00:00.000Z", + "is_connected_account_error": true, + "is_device_error": true +} +``` + + + + + Unique identifier of the type of error. Enables quick recognition and categorization of the issue. + + One of the error codes listed below. + + + + Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the error. + + + + Indicates whether the error is related to [Seam Bridge](https://docs.seam.co/capability-guides/seam-bridge). + + + + Indicates that the error is a [connected account](https://docs.seam.co/api/connected_accounts/object) error. + + + + Indicates that the error is not a device error. + + + + +### `account_disconnected` + +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. + +--- + +### `device_offline` + +Indicates that the device is offline. + +--- + +### `device_removed` + +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. + +--- + +### `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. + +--- + +### `subscription_required` + +Indicates that a subscription is required to connect. + +--- + +### `ttlock_lock_not_paired_to_gateway` + +Indicates that the lock is not paired with a gateway. + +--- + +### Access Codes + +#### `empty_backup_access_code_pool` + +Indicates that the [backup access code pool](https://docs.seam.co/low-level-apis/smart-locks/access-codes/backup-access-codes) is empty. + +--- + +### Locks + +#### `august_lock_missing_bridge` + +Indicates that the lock is not connected to a bridge. + +--- + +#### `august_lock_not_authorized` + +Indicates that the user is not authorized to use the August lock. + +--- + +#### `salto_ks_subscription_limit_exceeded` + +Indicates that the Salto site user limit has been reached. + +--- + +### Thermostats + +#### `auxiliary_heat_running` + +Indicates that the auxiliary heat is running. + +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "partial_backup_access_code_pool", + "message": "Indicates that the backup access code is unhealthy.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + Number of active access codes on the device when the warning was set. + + + + Maximum number of active access codes supported by the device. + + + + +### `device_communication_degraded` + +Indicates that the device appears to be unresponsive. + +--- + +### `device_has_flaky_connection` + +Indicates that the device has a flaky connection. + +--- + +### `lockly_time_zone_not_configured` + +Indicates that Seam detected that the Lockly device does not have a time zone configured. Time-bound codes may not work as expected. + +--- + +### `salto_ks_subscription_limit_almost_reached` + +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. + +--- + +### `scheduled_maintenance_window` + +Indicates that a scheduled maintenance window has been detected. + +--- + +### `third_party_integration_detected` + +Indicates that a third-party integration has been detected. + +--- + +### `ttlock_weak_gateway_signal` + +Indicates that the gateway signal is weak. + +--- + +### `two_n_device_missing_timezone` + +Indicates that the 2N device does not have a time zone configured. Configure a time zone on the device to enable access codes. + +--- + +### `ultraloq_time_zone_unknown` + +Indicates that Seam does not know the time zone of the Ultraloq device. Set a time zone to enable time-bound access codes. + +--- + +### `wyze_device_missing_gateway` + +Indicates that the Wyze Lock is not connected to a gateway. + +--- + +### Access Codes + +#### `many_active_backup_codes` + +Indicates that there are too many backup codes. + +--- + +#### `max_access_codes_reached` + +Indicates that the device has reached its maximum number of active access codes. Delete existing codes before creating new ones. + +--- + +#### `partial_backup_access_code_pool` + +Indicates that the backup access code is unhealthy. + +--- + +#### `provider_issue` + +Indicates a provider-specific issue that may affect device functionality. + +--- + +#### `salto_ks_lock_access_code_support_removed` + +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. + +--- + +#### `salto_ks_office_mode` + +Indicates that the Salto KS lock is in Office Mode. Access Codes will not unlock doors. + +--- + +#### `salto_ks_privacy_mode` + +Indicates that the Salto KS lock is in Privacy Mode. Access Codes will not unlock doors. + +--- + +### Locks + +#### `accessory_keypad_setup_required` + +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. + +--- + +#### `hub_required_for_additional_capabilities` + +Indicates that a hub or relay must be connected to unlock additional capabilities such as remote unlock. + +--- + +#### `insufficient_permissions` + +Indicates that the connected Kwikset account has member-level access to this lock's home. Admin or owner access is required to manage access codes and control the lock remotely. + +--- + +#### `keynest_unsupported_locker` + +Indicates that the key is in a locker that does not support the access codes API. + +--- + +#### `power_saving_mode` + +Indicates that the device is in power saving mode and may have limited functionality. + +--- + +#### `ttlock_lock_gateway_unlocking_not_enabled` + +Indicates that the Remote Unlock feature is not enabled in the settings." + +--- + +#### `unreliable_online_status` + +Indicates that the device may optimistically be reported as online because the provider does not reliably report its online status. + +--- + +### Phones + +#### `unknown_issue_with_phone` + +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. + +--- + +### Thermostats + +#### `temperature_threshold_exceeded` + +Indicates that the temperature threshold has been exceeded. + +--- diff --git a/mintlify-docs/api/user_identities/errors.mdx b/mintlify-docs/api/user_identities/errors.mdx new file mode 100644 index 000000000..f0c1df407 --- /dev/null +++ b/mintlify-docs/api/user_identities/errors.mdx @@ -0,0 +1,92 @@ +--- +title: 'User Identity Errors and Warnings' +description: 'Errors and warnings that Seam reports on the User Identity resource, each with its code and meaning.' +--- + +## Errors + +Each error is an object with the following shape: + +```json Example error +{ + "error_code": "issue_with_acs_user", + "message": "Indicates that there is an issue with an access system user associated with this user identity.", + "created_at": "2025-01-01T00:00:00.000Z", + "acs_system_id": "00000000-0000-0000-0000-000000000000", + "acs_user_id": "00000000-0000-0000-0000-000000000000" +} +``` + + + + + Unique identifier of the type of error. Enables quick recognition and categorization of the issue. + + One of the error codes listed below. + + + + Detailed description of the error. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the error. + + + + ID of the access system that the user identity is associated with. + + + + ID of the access system user that has an issue. + + + + +### `issue_with_acs_user` + +Indicates that there is an issue with an access system user associated with this user identity. + +--- + +## Warnings + +Each warning is an object with the following shape: + +```json Example warning +{ + "warning_code": "being_deleted", + "message": "Indicates that the user identity is currently being deleted.", + "created_at": "2025-01-01T00:00:00.000Z" +} +``` + + + + + Unique identifier of the type of warning. Enables quick recognition and categorization of the issue. + + One of the warning codes listed below. + + + + Detailed description of the warning. Provides insights into the issue and potentially how to rectify it. + + + + Date and time at which Seam created the warning. + + + + +### `acs_user_profile_does_not_match_user_identity` + +Indicates that the ACS user's profile does not match the user identity's profile + +--- + +### `being_deleted` + +Indicates that the user identity is currently being deleted. + +--- diff --git a/mintlify-docs/docs.json b/mintlify-docs/docs.json index 096aa5b3a..fb5e2122e 100644 --- a/mintlify-docs/docs.json +++ b/mintlify-docs/docs.json @@ -398,6 +398,7 @@ "pages": [ "api/access_grants/object", "api/access_grants/events", + "api/access_grants/errors", "POST /access_grants/request_access_methods", "POST /access_grants/create", "POST /access_grants/delete", @@ -420,6 +421,7 @@ "pages": [ "api/access_methods/object", "api/access_methods/events", + "api/access_methods/errors", "POST /access_methods/assign_card", "POST /access_methods/delete", "POST /access_methods/encode", @@ -446,6 +448,7 @@ "pages": [ "api/devices/object", "api/devices/events", + "api/devices/errors", "POST /devices/get", "POST /devices/list_device_providers", "POST /devices/list", @@ -467,6 +470,7 @@ "pages": [ "api/devices/unmanaged/object", "api/devices/unmanaged/events", + "api/devices/unmanaged/errors", "POST /devices/unmanaged/get", "POST /devices/unmanaged/list", "POST /devices/unmanaged/update" @@ -576,6 +580,7 @@ "pages": [ "api/acs/access_groups/object", "api/acs/access_groups/events", + "api/acs/access_groups/errors", "POST /acs/access_groups/add_user", "POST /acs/access_groups/get", "POST /acs/access_groups/list", @@ -590,6 +595,7 @@ "pages": [ "api/acs/users/object", "api/acs/users/events", + "api/acs/users/errors", "POST /acs/users/add_to_access_group", "POST /acs/users/create", "POST /acs/users/delete", @@ -608,6 +614,7 @@ "pages": [ "api/acs/credentials/object", "api/acs/credentials/events", + "api/acs/credentials/errors", "POST /acs/credentials/assign", "POST /acs/credentials/create", "POST /acs/credentials/delete", @@ -639,6 +646,7 @@ "pages": [ "api/acs/entrances/object", "api/acs/entrances/events", + "api/acs/entrances/errors", "POST /acs/entrances/get", "POST /acs/entrances/grant_access", "POST /acs/entrances/list_credentials_with_access", @@ -651,6 +659,7 @@ "pages": [ "api/acs/systems/object", "api/acs/systems/events", + "api/acs/systems/errors", "POST /acs/systems/get", "POST /acs/systems/list", "POST /acs/systems/list_compatible_credential_manager_acs_systems", @@ -680,6 +689,7 @@ "pages": [ "api/connected_accounts/object", "api/connected_accounts/events", + "api/connected_accounts/errors", "POST /connected_accounts/delete", "POST /connected_accounts/get", "POST /connected_accounts/list", @@ -697,6 +707,7 @@ "group": "User Identities", "pages": [ "api/user_identities/object", + "api/user_identities/errors", "POST /user_identities/add_acs_user", "POST /user_identities/create", "POST /user_identities/delete", @@ -817,6 +828,7 @@ "pages": [ "api/access_codes/object", "api/access_codes/events", + "api/access_codes/errors", "POST /access_codes/create", "POST /access_codes/create_multiple", "POST /access_codes/delete", @@ -838,6 +850,7 @@ "pages": [ "api/access_codes/unmanaged/object", "api/access_codes/unmanaged/events", + "api/access_codes/unmanaged/errors", "POST /access_codes/unmanaged/convert_to_managed", "POST /access_codes/unmanaged/delete", "POST /access_codes/unmanaged/get",