Operations
Markets
Every Shopify market in the account, with its per-store records and the catalogs attached to it — the region, currency, and price-list structure a pricing or localization integration reads before it writes store-local values.
List markets
/api/v1/marketspim:read
The account's markets. The list is bounded by the account, so the whole set is
returned in one response and next_cursor is always null —
there is nothing to paginate.
curl "https://api.peak-pim.com/api/v1/markets" \
-H "Authorization: Bearer $PEAK_PIM_KEY"
Response — 200
{
"data": [
{
"id": "7c9a2f1e-4b6d-4e2a-9c1f-3d8b5a7e6f01",
"name": "Europe",
"pending_publish": false,
"stores": [
{
"store_id": "1e8e4c2a-9f3b-4d7c-8a5e-6b2d9c1f7a30",
"store_domain": "acme-eu.myshopify.com",
"shopify_gid": "gid://shopify/Market/74940973366",
"name": "Europe",
"regions": ["FR", "DE", "NL", "BE"],
"currency": "EUR",
"web_presences": [],
"pending_publish": false,
"last_publish_status": "published"
}
],
"catalogs": [
{
"id": "b3f1d8c4-2a7e-4c9b-8d1a-5e6f2b9c4d72",
"title": "EU wholesale",
"slug": "eu-wholesale",
"pending_publish": false,
"stores": [
{
"store_id": "1e8e4c2a-9f3b-4d7c-8a5e-6b2d9c1f7a30",
"store_domain": "acme-eu.myshopify.com",
"shopify_gid": "gid://shopify/Catalog/29130588214",
"status": "ACTIVE",
"currency": "EUR",
"price_adjustment": "-10%",
"auto_publish": true,
"price_list_gid": "gid://shopify/PriceList/28439871542",
"publication_gid": "gid://shopify/Publication/178150375478",
"pending_publish": false,
"last_publish_status": "published"
}
]
}
]
}
],
"next_cursor": null
}
Errors: 401, 403, 429 — the
standard envelope.
Get one market
/api/v1/markets/{id}pim:read
One market, as a single object with the same shape as a list item. A market id
that belongs to another account, or an id of a different kind of entity, answers
404 not_found.
Path parameters
| Parameter | Type | Description |
|---|---|---|
id | uuid | The market's id, from the list. |
The market shape
| Field | Type | Description |
|---|---|---|
id | uuid | The market's id in Peak PIM. |
name | string | The market's name. |
pending_publish | boolean | The market has unpublished changes. |
stores | array | One record per store the market exists on — see below. |
catalogs | array | The catalogs attached to the market — see below. |
Each entry in stores is one store's version of the market:
| Field | Type | Description |
|---|---|---|
store_id | uuid | The store, as returned by GET /api/v1/stores. |
store_domain | string | The Shopify domain. |
shopify_gid | string | The market's GID on that store. |
name | string | The store-local market name. |
regions | array of string | The country/region codes the market covers. |
currency | string | The market's currency. |
web_presences | — | The market's web presences, as Shopify returned them. |
pending_publish | boolean | The store record has unpublished changes. |
last_publish_status | enum | never_published, pending, published, or failed. |
Catalogs
A catalog carries id, title, slug,
pending_publish, and its own stores array. The store
records are where a pricing integration finds the handles it addresses Shopify by:
| Field | Type | Description |
|---|---|---|
store_id / store_domain | uuid / string | Which store this record belongs to. |
shopify_gid | string | The catalog's GID on that store. |
status | string | The catalog's status on that store. |
currency | string | The catalog's currency. |
price_adjustment | string | The catalog's price adjustment. |
auto_publish | boolean | Whether the catalog publishes automatically. |
price_list_gid | string | The Shopify price-list handle for fixed or adjusted prices. |
publication_gid | string | The Shopify publication handle for catalog membership. |
pending_publish | boolean | Unpublished changes on this record. |
last_publish_status | enum | Same publish-state values as everywhere else. |
A pricing integration should read the market's catalogs first and address Shopify
by price_list_gid and publication_gid, rather than
rebuilding that mapping itself. See the
translations & markets guide.
Notes
- Part of the 2026-07-31 operations surface (private beta). Fields are additive within v1 — ignore ones you do not know.
- Every 200 carries an
ETag; send it back asIf-None-Matchfor a free304on unchanged markets. - Store-scoped values change per store — a market can differ between stores, so read the
storesarray rather than assuming one record.