viewa/docs
API Reference

List the materials offered in one of a product's slots

GET
/products/{ref}/materials

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.

Authorization

AuthorizationBearer <token>

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

ref*string

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

slot*string

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.

page?integer

1-based page number.

Range1 <= value
Default1
limit?integer

Items per page.

Range1 <= value <= 100
Default20
category?string

Restrict 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  }}