Admin GraphQL API / 2026-07

Deliver different discounts per market
Target discounts to specific markets

DiscountContextInput now includes markets , letting you apply discounts per regional market / retail location / B2B company location. Supports all discount types (Basic / BXGY / App / Free Shipping, both automatic and code).

On this page
  1. What's actually changing (in 30 seconds)
  2. How it works: market types and inheritance rules
  3. Supported discount types
  4. How it relates to existing eligibility (mutually exclusive)
  5. What the API looks like
  6. Version boundary: 2026-07 is the dividing line
  7. 5 key points for developers
  8. 3 practical use cases
  9. A one-line summary you can use in a pitch

1What's actually changing

Until now, the axes for narrowing a discount's target were "everyone," "customer segments," and "specific customers" — just these three.
Now, "market (regional / retail / B2B company location)" has been added as a fourth axis.

Before: you could only narrow by "who"

Targeting across three axes: all / customerSegments / customers."which market" There was no way to narrow by a geographic or channel axis like this.

New: now you can narrow by "where" too

markets , and just by specifying the target markets you can deliver different discounts by region, by retail location, or by B2B partner.

2How it works: market types and inheritance rules

The three market types are "separate worlds": discounts aren't inherited across them ① Regional market North America Canada USA Mexico Apply it to a parent and it cascades to children automatically Example: North America → Canada By country, currency, and language ② Retail location Shibuya store Shinjuku store Enables store-level promotions Integrated with POS For store-specific campaigns ③ B2B company locations Client A headquarters Client B branch office Individual pricing per client B2B only Company-specific campaigns
Inheritance applies only within the same market type. A discount applied to a regional market doesn't flow down to B2B or Retail.Within the same market type, parent→child inheritance applies(e.g., apply it to "North America" and it's automatically applied to the child "Canada" too).

3Supported discount types

All discount types supported: for both automatic and code-based discounts, markets can be specified.

%
Basic
Standard discount
B G
BXGY
Buy X get Y
App
App-based
Free Shipping
Free shipping
For both automatic and code-based discounts,markets can be specified. No exceptions.

4Relationship with existing eligibility (mutual exclusivity)

Pattern A: filter by market markets : [Japan, Korea] + all / customers can be combined ⭕ Specifications like "specific customers in Japan" are OK Pattern B: filter by customer segment customerSegments : [VIP] cannot be specified together with markets ❌ "VIP segment in Japan" can't be expressed with this mechanism
Eligibility combinationsSupported?Notes
markets only OK Applies broadly at the market level
markets + all OK Applies to all customers within the market
markets + customers OK Applies to specified customers within the market
markets + customerSegments Not allowed Markets and customer segments are mutually exclusive

5API usage example

On create/update: pass markets to DiscountContextInput

# mutation 抜粋(イメージ)
discountCodeBasicCreate(
 basicCodeDiscount: {
 title: "JP Spring Sale",
 discountContext: {
 markets: ["gid://shopify/Market/123"] # ← 今回追加
 # customers / customerSegments / all はここに並ぶ
 }
 ...
 }
)

Reverse lookup from the market side

# Market から紐づくディスカウントを取得
{
 market(id: "gid://shopify/Market/123") {
 discountsCount
 discounts(first: 50) { nodes { ... } }
 }
}

Filter the discount list by market

Broadly

context:market

For bulk-fetching all "discounts that have some market eligibility attached."

Narrowly

market_ids

Only the discounts tied to a specific market discountNodes for fetching from it.

* The code above is a conceptual illustration based on the article's description. Verify the exact field names and arguments in the Admin GraphQL API reference.

6Version boundary: 2026-07 is the turning point

~ 2026-04 2026-07 2026-10 and later Market eligibility is filtered out Cannot be represented even via node/ID lookups Market eligibility unlocked DiscountContextInput.markets Available from this version onward Still available Functionality retained in the latest version
If the API version is older than 2026-07, discounts with market eligibility are "treated as nonexistent" and filtered out.They can't be fetched via a node query or by specifying the ID directly. First-party/partner apps that keep running on older versions risk "can't fetch / miss discounts" incidents , so a version-upgrade plan is essential before you start operating with this feature.

75 key points engineers should keep in mind

markets

1. The entry point is DiscountContextInput.markets

A new option added alongside the existing eligibility. It applies to all types—Basic / BXGY / App / Free Shipping—and to both automatic and code discounts.

Market Seg

2. markets and customerSegments are mutually exclusive

You can't build an AND condition like "the VIP segment in the Japan market" with this feature alone. If you need both, handle it on the market side, or substitute a customer list (customers) narrowed down within the market.

3. Inheritance only applies within the same market type

Assign it to a parent region (e.g., North America) and it's inherited by children (Canada) too. However, there is no inheritance across Region ↔ B2B ↔ Retail. You need a design that accounts for the type.

Market discounts

4. You can look it up in reverse from Market

Market.discounts/discountsCount , letting you directly retrieve the list/count of discounts tied to a market.Auditing campaigns by market becomes easier.

2026-07 Below this: not allowed

5. Be careful with API versions below 2026-07

Apps and integration ETLs hitting older versions cannot fetch discounts with market eligibility at all (they're implicitly filtered out). This causes incidents where discounts "appear to disappear" on the order and analytics side, so before using this feature, audit the versions across all clients .

8Three use cases you can put to work

JP -15% US free shipping EU BXGY
USE CASE 1

Run country-by-country campaigns from a single store for cross-border commerce

Challenge
You sell to multiple countries from a single Shopify store, but the promotions you want to run differ by country (15% off for Mother's Day in Japan, a BXGY summer sale in the EU, a free shipping campaign in the US). Until now, you got by with splitting into separate stores or running complex code-based setups.
Solution
Create each campaign with the markets you specify. Apply it to "North America" and it automatically cascades down to Canada, the USA, and Mexico.
Impact
No need to split stores and no more code sprawl; for campaign audits, Market.discounts gives you a one-shot reverse lookup.
Technical note
Note that inheritance does not span across market types. If you want a regional campaign to also apply to B2B customers, create it separately on the B2B side as well.
Shibuya Shinjuku Umeda -20%
USE CASE 2

Systematize store-by-store promotions for physical (POS) locations

Challenge
Promotions like a closing sale only at the Shibuya store or a grand-reopening special only at the Shinjuku store—these kinds of store-level promotions had to be hand-built on the POS side every time.
Solution
Create discounts targeting Retail markets (store locations). Works with both code-based and automatic discounts.
Impact
No per-POS operations needed. Staff just check out as usual, and the discount applies only at the target stores. Managed centrally from headquarters.
Technical note
Measure per-store performance by aggregating Market.discounts + the order's payment/store information. Turn consistent location identification into an operational rule.
Customer A Customer B Customer C Customer D Individual rates per company
USE CASE 3

Express each B2B customer's "contract rate" as a discount

Challenge
The contractual discount rate differs for each B2B customer (15% for Company A, 20% for Company B, free shipping for Company C). There are also campaign insertions that can't be fully captured with Catalog alone.
Solution
Link a discount to each company location with the markets you specify. Limited-time campaigns can also be layered on per customer.
Impact
Express per-customer final unit prices without distorting catalog prices. For the sales side, framing it as "contract location = the unit of discount configuration" makes it easy to organize.
Technical notes
It can't be combined with customer segments. To express something like "VIP B2B customers only," directly list the locations of the relevant companies instead.

9A one-line summary you can use in a proposal

"You can now vary discounts by regional market / physical store / B2B customer .
Works with all discount types, with automatic inheritance from the parent market — but markets and customer segments are mutually exclusive API version 2026-07 or later is required.
You can centralize operations for cross-border ecommerce, multi-store POS, and B2B contract rates without splitting stores."