Shopify 2026-07: publishable product variants per channel
With API version 2026-07, Shopify introduces independent publishing of product variants per sales channel or catalog. A structural change for teams managing B2B, phased launches, and multi-channel feeds.
What's changing with the Shopify 2026-07 API
Up through the previous API version, hiding a variant from a specific sales channel required workarounds: deleting the variant, duplicating the entire product, or writing custom storefront-side logic. None of these options were architecturally clean.
With version 2026-07, Shopify solves the problem at its root: ProductVariant becomes a full-fledged Publishable entity, on par with Product and Collection.
Every variant can now be published or unpublished independently from its parent product, channel by channel or catalog by catalog.
A model shift for B2B and multi-channel
This isn't just an operational convenience. For teams managing complex scenarios, this is a paradigm shift:
- B2B catalogs: you can expose only certain sizes, configurations, or SKUs to wholesale customers, without duplicating products.
- Phased launches: a variant can be prepared and kept hidden on one channel while already active on another, enabling controlled rollouts.
- Multi-channel feeds: each marketplace or sales channel can receive a precise subset of available variants, without additional storefront logic.
This level of granularity was previously available only at the product level. Bringing it down to the variant level aligns Shopify with the real-world needs of teams managing complex catalogs.
What actually changes on the technical side
New GraphQL mutation capabilities
The publishablePublish and publishableUnpublish mutations now accept a ProductVariant ID as input. You no longer have to work exclusively at the Product object level.
mutation {
publishableUnpublish(
id: "gid://shopify/ProductVariant/123456789"
input: { publicationId: "gid://shopify/Publication/987654321" }
) {
publishable {
... on ProductVariant {
id
title
}
}
userErrors {
field
message
}
}
}
Implementation of the Publishable interface
ProductVariant now implements the Publishable interface, meaning it exposes the standard fields already familiar from products and collections, including resourcePublicationsV2, which returns the publication status for each individual publication.
Technical teams reading publication status via Admin GraphQL need to update their logic to query ProductVariant.resourcePublicationsV2 per channel, instead of relying solely on the parent product's status.
Behavior of variants created after publication
Variants created after the product has already been published automatically inherit the published status across all active publications of the parent product. This is the default behavior.
To create a variant that's hidden from the outset, you must explicitly set variant.published: false within the productSet or productVariantBulkCreate mutations.
Webhooks
Existing product webhooks already update when a variant changes its publication status on a feed. Dedicated variant_publication webhooks, currently still in development, will arrive shortly: it's worth planning support for them now rather than scrambling later.
What does NOT change
It's important to clarify the limits of the new system to avoid misunderstandings:
- Precedence still lies with the product level: if the product isn't active on a given channel, none of its variants will be visible on that channel, regardless of the individual variant's status.
- Existing apps don't require changes: applications that publish content at the product level continue to work with no intervention needed.
Per-variant granularity adds a layer of control, it doesn't replace the higher-level one.
Checklist for technical teams
If you're planning to adopt this feature, here are the concrete steps:
- Update Admin GraphQL queries to read
ProductVariant.resourcePublicationsV2 - Review variant creation mutations to include
variant.published: falsewhere needed - Update
publishablePublish/publishableUnpublishcalls to accept variant IDs - Plan support for
variant_publicationwebhooks before they're released - Verify that your business logic respects product-level precedence
For an assessment of implementation costs on an existing Shopify project, check out our Shopify developer pricing plans.
This feature was one of the most keenly felt gaps for teams working on Shopify Plus projects with complex catalogs. Its introduction signals the platform's maturation toward increasingly sophisticated enterprise and B2B scenarios.
FAQ