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 Wildcards are supported per path segment, so
Origin header, so example.com matches nothing while https://example.com matches. Include every environment you’ll embed on: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.
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’sOrigin 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
Originheader at all also returns403.
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.
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
Setcapability-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.
Examples
Offer several capabilities
Pass multiple capabilities to give your customers a dropdown, and useinitial-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 adark 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.
<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.
The iframe inherits your page’s origin, so your registered domains keep working without any additional configuration.
Troubleshooting
The table is empty, with no error
The table is empty, with no error
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.Requests fail with 403 Origin not allowed for this token
Requests fail with 403 Origin not allowed for this token
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.Requests fail with 401 Invalid token
Requests fail with 401 Invalid token
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.
Nothing renders at all
Nothing renders at all
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.A device is missing or its support status looks wrong
A device is missing or its support status looks wrong
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
- Browse Seam’s own device and system integration guides to see the table in context.
- Check capabilities programmatically with Device and System Capabilities.
- Build device management UI into your app with Seam Components.