List the materials offered in one of a product's slots
The materials a product offers in a single material slot, with material-set membership expanded into individual materials and de-duplicated. Ordered by the instance's configured priority then name.
Materials are deliberately not subset-filtered for child instances: a child sees its parent's full material catalog, mirroring the first-party app.
Send Accept: text/toon to receive the same envelope encoded as TOON (see Catalog concepts); JSON is the default and errors are always problem+json.
Publishable key (browser-safe), sent as Authorization: Bearer pk_…. This is the lower API-key tier and is sufficient for browser-safe routes that require the pk tier. Requests using a publishable key are additionally validated against the key's domain allowlist via the Origin header. Used for upload, areas, renders, polling, catalog reads, and history (history additionally requires a visitor token).
In: header
Path Parameters
Either a prod_… public id or a SKU you have registered for the product on your instance — one path serves both.
Disambiguation is by reserved prefix, not by trial: a value starting with any reserved prefix is only ever read as a public id, so a malformed one (wrong suffix length or a character outside base62) returns the uniform 404 rather than falling back to SKU matching. This also means a SKU can never be registered under a reserved prefix.
SKU matching is case-insensitive and ignores surrounding whitespace; ELITE-ROLLER-01, elite-roller-01 and Elite-Roller-01 all resolve to the same registration, which is stored exactly as it was entered.
Query Parameters
A slot_… token taken verbatim from materialOptions[].optionId on the product detail response. Opaque — do not construct or unwrap it; an unprefixed value is rejected with the uniform 404, as is a slot that is not on this product.
1-based page number.
1 <= value1Items per page.
1 <= value <= 10020Restrict to a material category by slug, including its descendants. An unrecognized slug returns a 200 with an empty page.
Response Body
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/products/prod_3xK9aQ0ZbW7mNc2LpRvT/materials?slot=slot_66c1f2a9e4b1c2d3f4a5b6c7&category=blockout"{ "data": [ { "id": "mat_7Bq2LmZ0xR4vNc9TgWpK", "name": "Vibe Charcoal", "description": "string", "image": { "url": "https://api.viewa.com/api/media/file/roller-charcoal-512.jpg", "alt": "Charcoal roller blind" }, "color": "#3b3b3d", "categories": [ { "slug": "roller-blinds", "name": "Roller Blinds" } ] } ], "pagination": { "page": 1, "limit": 1, "totalItems": 0, "totalPages": 0 }}