Executive summary
- What: Shopify removes the automaticDiscounts query from the GraphQL Admin API in version 2027-01, along with the DiscountAutomaticConnection and DiscountAutomaticEdge types.
- Why: discountNodes already returns both automatic and code-based discounts through one connection and one filter vocabulary, so the older query no longer earns its place in the schema.
- Who: Any app, middleware job, or internal script that reads automatic discounts and requests 2027-01 or later. Anything pinned to 2026-10 or earlier keeps working while those versions are supported.
What changed
As of API version 2027-01, automaticDiscounts no longer exists on QueryRoot. A request that includes it does not quietly return empty data: it fails validation, so the entire operation errors out. The two types that only that query returned, DiscountAutomaticConnection and DiscountAutomaticEdge, are removed alongside it.
The replacement is discountNodes with query: "method:automatic". It returns DiscountNode objects, each exposing the discount itself on a discount field. The filters you already rely on carry over, including status, discount_type, discount_class, created_at, and starts_at. The practical difference is nesting. Inline fragments that used to sit directly on nodes now sit one level deeper, on discount.
One trap worth flagging: automaticDiscountNodes is also deprecated in favour of discountNodes. Migrating there buys you a second migration later. Go straight to discountNodes.
Why it matters
On the storefront, this change is invisible. It matters because of what sits on top of it. Promotional logic on enterprise stores rarely lives in one place: a custom app writes campaign discounts, a middleware job reconciles them against an ERP promotions table, and a reporting pipeline reads them for margin analysis. Each of those is a separate codebase with its own API version pin, and each one fails independently.
The consolidation is a real improvement for teams running layered promotions. Reading automatic and code-based discounts through a single paginated list removes the merge step most teams wrote by hand, and new automatic discount types will not require new query fields. If you are already managing complex discount logic at enterprise scale, that is one less branch to maintain.
Role-specific impact
- Marketers: no change to how you build or schedule discounts in the admin. The risk is indirect. If an internal dashboard reporting on active promotions is built on the removed query, it goes blank rather than degrading gracefully.
- Developers: audit for automaticDiscounts and for generated types referencing DiscountAutomaticConnection or DiscountAutomaticEdge. Code generation breaks at build time, which is the good case. Hand-written query strings fail at runtime, which is not.
- Store admins: nothing to configure. Ask whoever maintains your custom apps and integrations to confirm 2027-01 readiness before the upgrade is scheduled.
Use-case example
Real-world scenario
A Plus merchant running roughly 40 concurrent automatic discounts across four markets has a nightly job that pulls every active automatic discount and reconciles it against the promotions calendar in NetSuite. The job is pinned to 2026-10. The team upgrades the app to 2027-01 without auditing the query, so it fails validation, the job records zero active discounts, and the reconciliation report flags all 40 campaigns as unbudgeted. Nothing breaks at checkout, so nobody notices until finance queries the variance three weeks later. The migration itself is about an hour of work. Cleaning up after a silent failure is a week.
Implementation checklist
- Search every repository, including generated GraphQL types, for automaticDiscounts, DiscountAutomaticConnection, and DiscountAutomaticEdge.
- Replace the query with discountNodes and pass query: "method:automatic".
- Move existing inline fragments one level deeper, onto the discount field of DiscountNode, adding one fragment per automatic discount type you read.
- Regenerate your GraphQL types or schema snapshot against 2027-01 so the shapes match.
- Run the updated queries against a development store on 2027-01 and diff the results against what 2026-10 returned.
- Confirm pagination and filter behaviour hold, then raise the version pin.
FAQ
Q: Do we have to act before 2027-01 ships?
A: Only if you intend to upgrade. Apps requesting 2026-10 or earlier keep working for as long as those versions are supported, and Shopify overlaps stable versions by at least nine months. Treat this as scheduled work in a sprint, not an emergency.
Q: Will this change the discounts our customers actually receive?
A: No. This is a read-path change in the Admin API. Discount behaviour at checkout is unaffected. The exposure is in the systems that read discount data, not in the discounts themselves.
Resources
discountNodes query reference in the GraphQL Admin API
Need guidance? Talk to Makro.