> ## Documentation Index
> Fetch the complete documentation index at: https://www.seam.co/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Manufacturer API

> Read everything Seam publishes about your brand, including device models, capabilities, integrations, and compatible apps, with one API call.

Seam publishes a profile for every manufacturer it supports: your brand, your device models with their images and variants, what each model can do through each integration, and the apps that work with your devices through Seam. The Manufacturer API lets you read all of it, so you can build product pages, sync your catalog, or check how Seam describes your devices.

It is the same data that powers Seam's [Ecosystem Components](/docs/ui-components/overview/ecosystem-components/index), and it reads only what Seam has published.

## What You Can Retrieve

| Endpoint | Returns |
| - | - |
| [`/manufacturer_content/get`](/docs/device-manufacturer-guidance/manufacturer-api/manufacturer-content) | Your manufacturer profile, device models, the providers that connect them, and the compatible apps per device category, in one response. |
| [`/device_models/summaries/list`](/docs/device-manufacturer-guidance/manufacturer-api/device-model-summaries) | Device models in the same slim shape, with filters for device type, provider, and capability. |

The API reference also covers the full device model, manufacturer, provider, device type, and capability reads, the compatible apps and partner directory, and embed key resolution.

The base URL is `https://ecosystem.seam.co/v1`. The reference is generated from the API's public OpenAPI spec at [`https://ecosystem.seam.co/openapi.json`](https://ecosystem.seam.co/openapi.json), which you can also use to generate a client.

## Try It

All published content is public, so you can try the API without a key by naming a manufacturer:

```bash theme={"dark"}
curl --compressed -G \
  "https://ecosystem.seam.co/v1/manufacturer_content/get" \
  -d manufacturer_slug=schlage \
  -d limit=5
```

With your own manufacturer key, you can leave out `manufacturer_slug`, because the key implies your brand. From your servers, send a secret key as a bearer token:

```bash theme={"dark"}
curl --compressed \
  -H "Authorization: Bearer eco_sk_your_secret_key" \
  "https://ecosystem.seam.co/v1/manufacturer_content/get"
```

See [Keys and Authentication](/docs/device-manufacturer-guidance/manufacturer-api/keys) for the two kinds of key, how to get them, and what they unlock.

## Requests

* Every endpoint accepts `GET` with query parameters, or `POST` with the same parameters as a JSON body.
* For list parameters, such as `slugs`, repeat the parameter or separate values with commas.
* Successful responses include `"ok": true`.
* The API allows cross-origin requests, so you can call it from a browser with an [embed key](/docs/device-manufacturer-guidance/manufacturer-api/keys#embed-keys).

## Pagination

Device models are returned in pages, ordered by slug. Set `limit` (1–500) to choose the page size. When `pagination.has_next_page` is `true`, pass `pagination.next_page_cursor` as `page_cursor` to get the next page:

```bash theme={"dark"}
curl --compressed -G \
  "https://ecosystem.seam.co/v1/device_models/summaries/list" \
  -d manufacturer=schlage \
  -d limit=10 \
  -d page_cursor=connected-keypads
```

## Localization

Capability reports, the text that explains how a capability works for a device, are available in English (`en`, the default) and French (`fr`). Set `locale` to choose one. Unknown locales fall back to English, and the response reports the locale it used.

## Compression and Caching

* Responses are compressed with Brotli or gzip when your client sends `Accept-Encoding`. A large manufacturer's content is several megabytes uncompressed and about a tenth of that compressed, so always request compression. With curl, use `--compressed`.
* Responses to anonymous and embed-key requests can be cached by shared caches such as CDNs for five minutes (`Cache-Control: public, s-maxage=300, stale-while-revalidate=86400`). They include an `ETag`, so you can send `If-None-Match` to get `304 Not Modified` when nothing has changed.
* Responses to secret-key requests are never cached (`Cache-Control: no-store`), because they can include data that is not public. Cache them on your own servers if you need to.

## Rate Limits

The API limits how many requests you can make per minute:

* Anonymous requests are limited per client IP address.
* Embed-key requests are limited per key and per visitor IP address, so one visitor cannot use up your page's budget.
* Secret-key requests are limited per key.

The limits are well above typical use. If you exceed one, the API returns `429` with the error type `rate_limited` and a `Retry-After` header with the number of seconds to wait. The error's `data.limit_per_minute` shows the limit that applied.

## Errors

Errors return a non-2xx status and a JSON body:

```json theme={"dark"}
{
  "ok": false,
  "error": {
    "type": "manufacturer_slug_required",
    "message": "Provide manufacturer_slug or use a manufacturer key",
    "request_id": "95af67b3-983b-4ffe-969a-a9b3209aee33"
  }
}
```

| Status | `error.type` | Meaning |
| - | - | - |
| 400 | `invalid_params` | A parameter is missing or invalid. `error.data.issues` lists each problem. |
| 400 | `manufacturer_slug_required` | The request has no `manufacturer_slug` and no manufacturer key. |
| 401 | `embed_key_required` | A browser request from a site other than seam.co sent no embed key to an endpoint that needs one. |
| 401 | `invalid_embed_key` | The embed key is unknown or was revoked. |
| 401 | `invalid_secret_key` | The secret key is unknown or was revoked. |
| 401 | `unsupported_credential` | The `Authorization` header holds something other than an `eco_sk_` secret key, such as a Seam API key. |
| 403 | `origin_not_allowed` | The page's origin is not registered for the embed key. |
| 403 | `manufacturer_mismatch` | A manufacturer key named a different manufacturer. |
| 404 | `manufacturer_not_found` | No published manufacturer has this slug. |
| 429 | `rate_limited` | Too many requests. Wait for the number of seconds in `Retry-After`. |

Include the `request_id` when you contact Seam about an error.

## Next Steps

* Get your keys in [Keys and Authentication](/docs/device-manufacturer-guidance/manufacturer-api/keys).
* Read your brand's content with [Get Manufacturer Content](/docs/device-manufacturer-guidance/manufacturer-api/manufacturer-content).
* Embed your device list on your website with [Supported Devices](/docs/ui-components/overview/ecosystem-components/supported-devices).

If you have questions or want to correct how Seam describes your devices, email [support@getseam.com](mailto:support@getseam.com).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.