Skip to main content
The Supported Device Table is an embeddable web component that renders Seam’s device database on your own site. Your customers can search it, filter it by capability, and see exactly which of their locks, thermostats, or access control systems work with your product—without you maintaining a compatibility list by hand. The table reads from the same database that powers Seam’s own integration guides, so it stays current as Seam adds device support. Here it is embedded in this page, restricted to three lock manufacturers:

Before You Begin

To embed the table, you need an embed token from Seam. Email support@getseam.com and include every domain you plan to embed the table on. Seam creates the token for you and replies with it. This is a manual step on Seam’s side, so request your token before you need it.
Send full origins, including the scheme and any non-default port—not bare hostnames. Seam matches them against the browser’s Origin header, so example.com matches nothing while https://example.com matches. Include every environment you’ll embed on:
Wildcards are supported per path segment, so https://*.preview.example.com covers your preview subdomains. Ask for a localhost origin at the port your dev server uses if you want the table working while you build.

Add the Table to Your Site

1

Load the component

Add the script tag to your page. 0.0.16 is the current release—see Pin a Version for how versioning works.
2

Place the element

Add the device-list-by-capability element wherever you want the table to appear, and set capability-name to the capability your customers care about.
3

Confirm it loads

Open the page on one of the domains you registered with Seam. You should see devices grouped by manufacturer with a search box above them.If you see nothing or an error, see Troubleshooting.
The component renders inside a shadow root and brings its own styles, so it cannot inherit from or interfere with the CSS on the rest of your page.

How the Embed Token Works

An embed token is not a Seam API key and carries no account access. It identifies your embed, and it only works on the domains you registered. Seam matches the browser’s Origin header against the origins registered for your token:
  • A request from a registered origin succeeds.
  • A request from any other origin returns 403 Origin not allowed for this token.
  • A request with no Origin header at all also returns 403.
Matching is on the whole origin string, scheme included. https://example.com and http://example.com are different origins, and so is the same host on a different port. Because of this, the token is safe to include in your page’s HTML, where anyone can read it. Someone who copies it cannot use it on their own site.
Because a missing Origin is rejected too, the token will not work from curl, from a page opened over file://, or from a native app shell that sends no Origin header. The component expects a page served over HTTP(S) from a domain you have registered.
To add or remove domains later, email support@getseam.com.

How Support Is Reported

Each device row carries a support badge for the selected capability, rather than a plain yes-or-no: A device is reported as Conditionally whenever caveats exist, even if the underlying record says the capability is supported. The same applies when a device matches the capability more than once and those matches disagree—the table reports the more cautious answer rather than the optimistic one. This is the main reason to embed the table instead of publishing a static list: your customers see the caveat attached to the specific model they own, and it updates as Seam’s compatibility data changes. Use initial-supported-filter="true" to open the table with only supported devices shown.

Attributes

Seam can also preset any of these on your token, so the table renders the way you want without you repeating attributes on every page. Attributes you set on the element always win over the presets, so you can override a default on a single page. Ask support if you’d like defaults configured.

Capabilities

Set capability-name to one or more of the following. These are the same capability flags the Seam API reports on a device, so a capability you filter by here is one you can check in code later.
Use the full can_* flag names exactly as written above. Shorthand names such as remoteunlock are not recognized, and the table renders empty when it receives one.

Examples

Offer several capabilities

Pass multiple capabilities to give your customers a dropdown, and use initial-capability to choose which one loads first.

Show only the manufacturers you integrate with

Exclude specific manufacturers

Useful when you want the full catalog minus a few brands you do not resell.

Build a compact thermostat table

Hide the search box, show more rows per manufacturer, and open with only supported devices visible.

Render the table in French

en, fr, and pt are available. Seam can also set a default locale on your token, so the table renders in your language without the attribute.

Dark Mode

The table follows a dark class on any ancestor element rather than the browser’s color-scheme preference. This lets it match whatever your site’s own theme toggle does.
If your theme switcher toggles a class on <html> or <body>, the table picks up the change automatically—no extra wiring required.

Pin a Version

Versioned CDN URLs are immutable: the contents of /v/0.0.16/ never change once published. Pin an explicit version in production so a new release cannot alter your page unexpectedly.
https://cdn.devicedb.seam.co/v/latest/DeviceListByCapability.global.js also works and always serves the newest release. It is convenient for a quick trial, but avoid it in production. To upgrade, change the version in the URL. To roll back, point at the previous version.

Framework Notes

The table is a standard custom element, so plain HTML, Vue, Svelte, and Angular render it directly. React needs one extra step. React does not manage custom elements the way it manages its own components, and a component that mutates the DOM during hydration can throw a hydration error. Rendering the table inside an <iframe> sidesteps this by giving it its own document, fully outside React’s tree. The postMessage listener keeps the frame’s height matched to its content, so the table reads as an inline part of the page rather than a fixed-height box with its own scrollbar.
Report the height from a timer, not from a ResizeObserver. A srcdoc iframe that the browser treats as non-rendered has its animation loop throttled, so ResizeObserver and requestAnimationFrame never fire—but timers and load still do. Reading scrollHeight inside the timer forces a reflow, so the value stays correct even while the render loop is idle, and it re-syncs when the table rewraps on window resize.
This is the same approach Seam uses to embed the table throughout these docs, including the example at the top of this page.
The iframe inherits your page’s origin, so your registered domains keep working without any additional configuration.

Troubleshooting

Check your capability-name values against the capability list. The attribute must use the full can_* flag—can_remotely_unlock, not remoteunlock. An unrecognized capability matches no devices and renders an empty table.If you also set manufacturers, confirm the slugs are correct. A misspelled slug filters everything out.
The domain serving the page is not on your token’s list. Email support@getseam.com with the domain to have it added.This also appears when the page sends no Origin header—when opened over file://, for example. Serve the page over HTTP(S) from a registered domain.
The token was not recognized. Check for a truncated or misquoted value in your HTML, and confirm you are using the embed token Seam sent you rather than a Seam API key.
Confirm the script tag includes type="module" and that the CDN URL resolves. Custom elements upgrade once their definition loads, so a blocked or misspelled script URL leaves the element on the page with nothing inside it.
The table reflects Seam’s device database. To report a missing device or an incorrect status, email support@getseam.com with the manufacturer and model.

Next Steps

If you have questions or want to report an issue, email support@getseam.com.