Operations
Sales channels
Which Shopify sales channels a store owns, and which of them a product, variant,
or collection is published to on that store. These reads query Shopify live —
they are the only v1 endpoints that can answer 502.
Sales-channel reads go to Shopify rather than Peak PIM's own rows, so they carry
Shopify's latency rather than ours, and they depend on Shopify's availability:
a store that cannot be reached answers 502 with the
standard error envelope. Treat 502 as
retryable with backoff.
List a store's sales channels
/api/v1/stores/{id}/sales-channelspim:read
Every Shopify sales channel the store owns — the set an entity's own channel
membership is drawn from. {id} is the store's id, as returned by
GET /api/v1/stores. next_cursor is always
null.
curl "https://api.peak-pim.com/api/v1/stores/1e8e4c2a-9f3b-4d7c-8a5e-6b2d9c1f7a30/sales-channels" \
-H "Authorization: Bearer $PEAK_PIM_KEY"
Response — 200
{
"data": [
{ "id": "gid://shopify/Publication/178150375478", "name": "Online Store" },
{ "id": "gid://shopify/Publication/178150408246", "name": "Point of Sale" },
{ "id": "gid://shopify/Publication/181662777398", "name": "Shop" }
],
"next_cursor": null
}
Each channel is a Shopify publication: id is the publication GID,
name its display name. Errors: 401, 403,
404, 429, 502.
List an entity's sales channels on one store
/api/v1/products/{id}/sales-channels?store_id=…pim:read/api/v1/variants/{id}/sales-channels?store_id=…pim:read/api/v1/collections/{id}/sales-channels?store_id=…pim:read
The Shopify sales channels the entity is published to on the named store, in the
same {"data": […], "next_cursor": null} shape as the store read.
Query parameters
| Parameter | Type | Required | Description |
|---|---|---|---|
store_id | uuid | Yes | Which store to answer for. Sales-channel membership is per store, so there is no cross-store answer to give. Missing or malformed: 400 validation_failed. |
curl "https://api.peak-pim.com/api/v1/products/5b2e9c1a-7d4f-4a8b-9e6c-3f1d8a5b2c70/sales-channels?store_id=1e8e4c2a-9f3b-4d7c-8a5e-6b2d9c1f7a30" \
-H "Authorization: Bearer $PEAK_PIM_KEY"
Response — 200
{
"data": [
{ "id": "gid://shopify/Publication/178150375478", "name": "Online Store" }
],
"next_cursor": null
}
A product that is not on the store, or is on it but was never published, is a
member of zero sales channels — you get an empty data array, not a
404. A 404 means the entity or store itself does not
exist in this account.
Status codes
| Status | When |
|---|---|
200 | The channel list — possibly empty. |
400 | Entity reads only: store_id missing or invalid (validation_failed). |
401 / 403 | Bad credential, or a key without pim:read. |
404 | No such entity or store in this account. |
429 | Over the rate-limit budget. |
502 | The store could not be reached — Shopify's availability, not ours. |
Notes
- Part of the 2026-07-31 operations surface (private beta).
- Because these reads are live, they are the slowest reads on v1 — budget for Shopify's latency, cache what you can, and prefer the store-level read when you only need the channel catalog.
- Catalog publications also appear as
publication_gidon a market's catalogs — see Markets.