List products
The published products in your catalog, ordered by the instance's configured priority then name. A child instance reads its parent's catalog, narrowed to the subset configured for it; products outside that subset are absent, exactly as if they did not exist.
Products that publish styles are never listed — see the Product schema for how to model each look as its own product.
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
Query Parameters
1-based page number.
1 <= value1Items per page.
1 <= value <= 10020Restrict to a product category by slug. Matches the category itself and any of its descendants. An unrecognized slug is a filter that matches nothing — a 200 with an empty page, not a 404.
Response Body
application/problem+json
application/problem+json
application/problem+json
application/problem+json
curl -X GET "https://example.com/products?category=roller-blinds"{ "data": [ { "id": "prod_3xK9aQ0ZbW7mNc2LpRvT", "name": "Elite Roller Blind", "description": "string", "image": { "url": "https://api.viewa.com/api/media/file/roller-charcoal-512.jpg", "alt": "Charcoal roller blind" }, "restrictions": { "width": { "min": 300, "max": 3000 }, "height": { "min": 300, "max": 2700 }, "sceneOnly": true }, "categories": [ { "slug": "roller-blinds", "name": "Roller Blinds" } ] } ], "pagination": { "page": 1, "limit": 1, "totalItems": 0, "totalPages": 0 }}