Executive summary
- What: From Admin API 2027-01, passing includeRestOfWorld as true in DiscountCountriesInput returns a BAD_REQUEST error. Apps must list countries explicitly.
- Why: Rest of World is a legacy shipping zone concept being retired as Shopify moves to market driven shipping, where eligibility is explicit countries.
- Who: Apps and integrations that create or update shipping discounts. Merchants running bespoke discount tooling or promotion apps inherit the risk.
What changed
The field stays in DiscountCountriesInput, but on 2027-01 and later, sending true returns an error stating the value is no longer supported and that country codes must be specified. Sending false keeps its behaviour and null remains a no-op.
The replacement is an explicit list. Where a mutation previously sent a couple of codes in add alongside includeRestOfWorld set to true, it now sends the complete set of countries where the discount should apply, and nothing else.
Apps on 2026-10 and earlier keep the old behaviour while those versions are supported. Public apps explicitly requesting unstable get the new behaviour as soon as it ships, which is the earliest place a surprise appears.
The reasoning is architectural. Rest of World was a dynamic bucket: everything not otherwise named. Under market driven shipping that bucket has no stable definition, so Shopify is removing the dependency before the concept disappears. Expect the field to be dropped from the schema eventually.
Why it matters
For most merchants this is invisible until it is not. Shipping discounts are usually configured in the admin, and the admin is not what breaks. What breaks is app created discounts, and enterprise stores tend to have several: a loyalty platform issuing free shipping codes, a promotions engine generating market specific offers, or an internal tool provisioning discounts alongside campaign setup.
The migration has a subtlety worth attention. Replacing a dynamic bucket with a static list changes behaviour permanently, not just syntactically. If you enumerate the 40 countries you sell into today, adding a 41st market next year silently excludes it from the discount. Rest of World used to catch that. Nothing does now.
That makes this a process change as much as a code change. Any team enumerating country lists needs a market launch runbook step that revisits them whenever a market is added. Merchants across many markets should fold that into their international selling setup rather than treating it as a one time patch.
The timeline is generous, since 2026-10 remains supported. The risk is not the deadline, it is forgetting that the enumerated list now needs maintenance.
Role-specific impact
- Marketers: Confirm which promotion tools create shipping discounts through the API. Ask whether a newly launched market is automatically eligible for existing free shipping offers, because after this change the honest answer is often no.
- Developers: Search discount create and update mutations for includeRestOfWorld. Replace true with a full country list in add, and stop sending the field at all so the eventual schema removal is a non-event.
- Store admins: Keep a documented list of the countries each app created shipping discount covers, and review it whenever markets change.
Use-case example
Real-world scenario
A Plus merchant sells into 22 countries and uses an internal tool to provision free shipping codes for campaigns. It sends US and CA in add with includeRestOfWorld set to true, so every other market inherits the offer. On 2027-01 that mutation fails outright. The fix is to enumerate all 22 codes. The team also adds a check that reads active markets before provisioning and fails the build if the list is missing a live market, closing the drift a static list introduces. Testing on a development store confirms the discount contains 22 countries rather than the 2 shown before.
Implementation checklist
- Grep every codebase and integration for includeRestOfWorld, including scripts and tooling outside the main app.
- For each occurrence sending true, determine the intended country set rather than copying the current market list blindly.
- Replace the field with a complete list of codes in add, and remove includeRestOfWorld from the payload entirely.
- Test the updated mutations against 2027-01 in a development store and confirm the discount contains the expected countries.
- Add a market launch runbook step that reviews discount country lists when a market is added.
- If you cannot migrate now, stay on a supported earlier version and schedule the work before it ages out.
FAQ
Q: Will our existing discounts break on 2027-01?
A: Existing discounts are unaffected. The error occurs when a mutation sends includeRestOfWorld as true, so creation and updates fail, not discounts already in place.
Q: Is sending false or omitting the field safe?
A: Yes. False retains its behaviour and null is a no-op. Omitting the field is best, since it removes the dependency ahead of the eventual schema removal.
Resources
DiscountCountriesInput reference
Need guidance? Talk to Makro.