List Products
GET /cdp/commerce/products lists your brand’s Shopify product catalog through
the CDP API. Products come from Shopify Admin GraphQL at request time, with a
short read-through cache in front of Shopify. The response is normalized so your
app does not depend on Shopify’s raw Admin API shape.
Requires the beta:cdp-commerce permission on your brand and a connected
Shopify token that can read products — read_products, or write_products
(which Shopify treats as granting read access).
Request
Section titled “Request”GET /cdp/commerce/productsAuthorization: Bearer vyg_...Query parameters
Section titled “Query parameters”| Param | Type | Default | Description |
|---|---|---|---|
limit | integer | 25 | Page size, clamped to a maximum of 100. |
cursor | string | - | Shopify cursor from nextCursor on the previous page. |
Response 200
Section titled “Response 200”{ "list": [ { "id": "gid://shopify/Product/123", "title": "Classic Tee", "status": "ACTIVE", "variants": [ { "id": "gid://shopify/ProductVariant/456", "price": "29.00", "sku": "TEE-BLK-M" } ], "images": [ { "id": "gid://shopify/MediaImage/789", "url": "https://cdn.shopify.com/...", "altText": "Black classic tee" } ] } ], "pageSize": 25, "scope": "your-shop.myshopify.com", "nextCursor": "eyJsYXN0X2lkIjoxMjN9"}| Field | Type | Description |
|---|---|---|
list | array | Normalized products. |
pageSize | integer | Effective page size. |
scope | string | null | Your brand’s connected shop domain. |
nextCursor | string | null | Cursor for the next Shopify page, or null at the end. |
Example
Section titled “Example”curl -s "https://cdp.vyg.app/cdp/commerce/products?limit=25" \ -H "Authorization: Bearer vyg_your_key_here"Errors
Section titled “Errors”| Status | When |
|---|---|
400 | Invalid page size. |
401 | Missing or invalid credential. |
403 | Brand not enrolled in the commerce beta, no connected Shopify integration, or the token cannot read products (needs read_products or write_products). |
429 | Shopify throttled the catalog request after bounded retry. The response includes Retry-After. |
405 | Non-GET method. |
502 | Shopify returned an unexpected upstream error. |
The products proxy never exposes Shopify credentials or the raw Admin API response. See Get Product for the single-product contract.