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.

Live reads.

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

GET/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

GET/api/v1/products/{id}/sales-channels?store_id=…pim:read
GET/api/v1/variants/{id}/sales-channels?store_id=…pim:read
GET/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

ParameterTypeRequiredDescription
store_iduuidYesWhich 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
}
Empty is an answer, not an error.

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

StatusWhen
200The channel list — possibly empty.
400Entity reads only: store_id missing or invalid (validation_failed).
401 / 403Bad credential, or a key without pim:read.
404No such entity or store in this account.
429Over the rate-limit budget.
502The store could not be reached — Shopify's availability, not ours.

Notes