All articles
Shopify publishable variants7 May 2026

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: false where needed
  • Update publishablePublish / publishableUnpublish calls to accept variant IDs
  • Plan support for variant_publication webhooks 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

Frequently Asked Questions

Yes. Starting with API version 2026-07, ProductVariant implements the Publishable interface. You can use the publishableUnpublish mutation, passing the variant ID and the specific publication ID, without changing the parent product's visibility on other channels.

No. The product level always takes precedence. If the product isn't active on a channel, no variant will be visible on that channel, regardless of the individual variant's publication status.

You need to explicitly set variant.published: false within the productSet or productVariantBulkCreate mutations at creation time. Without this setting, variants created after the product is published inherit the published status across all active publications of the parent product.