List a price list's customer groups
Which customer groups a price list applies to, paged. The same ids the price list carries inline on customer_group_ids, in the form that field cannot be: that array is unbounded on a resource whose page cap says nothing about how many groups it names, so a list targeting 5,000 tiers puts 5,000 ids into one row of a 100-row page. Read the array for the ordinary small case and this route when the set is large or you want to walk it. AN EMPTY PAGE MEANS EVERY CUSTOMER, not none. A price list with no targeting rows applies store-wide, so [] is the merchant’s most consequential setting rather than an unconfigured state. Do not treat it as a draft. A PRICE LIST THAT DOES NOT EXIST IS A 404, never an empty page, and given what an empty page means that distinction is not cosmetic: reading one as the other would say the store prices its whole catalogue at a wholesale tier. IDS ONLY, and the group’s name is deliberately not here. Names and metadata belong to the customer-groups family under read_customers, so a key holding only read_pricing cannot read the store’s segment names as a side effect of a price sync. Resolve an id with GET /api/v1/customer-groups/. WITH GET /api/v1/customer-groups//customers this is the whole B2B sync path: price list to groups to customers. created_at is when the GROUP WAS TARGETED. It is neither the price list’s nor the group’s own timestamp, and it is the cursor column. TARGETING IS READ-ONLY HERE. Nothing on this API adds or removes a target: a price list left with no targeting rows applies to every customer, so an untarget call would turn a wholesale tier into the public price and answer 204.
Authorizations
A secret API key. Publishable keys cannot reach this API. A key may carry an expiry, and an expired key is refused exactly like an unknown one, with a 401 that names no reason; check the key's expires_at in the dashboard rather than inferring it from a response. When a merchant rolls a key's secret they choose a grace window of up to 3 days, and for its duration BOTH the new secret and the one it replaced authenticate, so an integration moves over on its own deploy schedule instead of at the instant the button is pressed. Move before the window closes: after it, the old secret is refused. Nothing else about this contract moves with a roll. The key keeps its id and its scopes, so the only thing an integration updates is the credential itself.
Path Parameters
Query Parameters
Rows per page. Out of range is a 400 rather than a silent clamp, so a client asking for more than 100 learns it did not get it.
1 <= x <= 100The next_cursor from the previous page. Opaque: decode nothing from it and construct nothing by hand, since its encoding is not part of this contract. Omit it to read the first page.
