> For the complete documentation index, see [llms.txt](https://docs.violet.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.violet.io/ecom-platforms/shopify/sales-channel/enablement.md).

# Enablement & Rollout

Prerequisites for turning on Shopify sales channel publishing, what happens when a merchant connects, and how to roll the feature out to existing merchants.

This page is for channel partners preparing to turn on Shopify sales channel publishing, and the Violet solutions team supporting them. It assumes the concepts on [Sales Channel Publishing on Shopify](/ecom-platforms/shopify/sales-channel.md).

## Prerequisites

All four must be in place before any merchant can be provisioned. If any is missing, channel creation fails quietly and affected merchants continue on full-catalog sync; there is no error surfaced to the merchant, so verify these up front.

**1. A deployed and released Shopify channel configuration extension.** Your Shopify app needs a `channel_config` extension that is both deployed *and* released. Shopify rejects channel creation for apps without one. The extension declares a specification handle that Violet references when creating the channel. See [Setting Up Your Sales Channel App](/ecom-platforms/shopify/sales-channel/setup.md).

**2. Sales channel behavior enabled on the Violet app.** Set `sales_channel_behavior.enabled` on the app configuration. Two optional settings sit alongside it:

* `specification_handle`: the handle from your `channel_config` extension. If omitted, Violet derives it from the app name by lowercasing and replacing spaces with hyphens, so an app named `Violet Marketplace` produces `violet-marketplace`. Set it explicitly whenever your deployed handle doesn't match that convention.
* `channel_name`: the display name merchants see in their Shopify admin. Defaults to the app name.

**3. The `read_publications` Shopify scope.** This must be declared as a custom Shopify scope on the app. It is **not** included in the generalized product scopes. An app requesting only generalized scopes will not receive it, and provisioning will fail to resolve the publication. This is the easiest prerequisite to miss.

**4. Merchant authorization under the new scopes.** Merchants must authorize the connection after the scopes above are in place.

## What happens when a merchant connects

1. The merchant authorizes the connection as usual.
2. Violet creates a channel on their store, named after your app, and identifies the publication attached to it.
3. Violet turns on publication-scoped syncing for that merchant and registers publication webhooks.
4. From that point on, the channel's catalog is the merchant's published set.

Three properties of this sequence are worth knowing:

**It's all-or-nothing.** Publication-scoped syncing is enabled only after both the channel and its publication are confirmed. A partial failure leaves the merchant on full-catalog syncing. There is no half-enabled state where a merchant has publication webhooks but an unfiltered catalog.

**It's non-fatal.** If channel creation fails for any reason, the connection still succeeds and the merchant syncs normally. Nothing about onboarding breaks.

**It's idempotent and self-healing.** Reconnecting an already-provisioned merchant does not create a duplicate channel. If an earlier attempt created the channel but failed to record the publication, reconnecting repairs it.

## Rollout to existing merchants

**Merchants already connected are not migrated automatically.** They continue with full-catalog syncing until they re-authorize the connection.

This is deliberate. Existing merchants have neither a channel on their store nor the Shopify permissions needed to create one. Re-authorization is what grants the new permissions, and it is also what triggers channel creation, so the two cannot be separated, and there is no backfill that can enable a merchant without their involvement.

Practically, this means:

* Enabling the feature on your app changes nothing for your existing merchants until each one reconnects.
* Plan a merchant communication campaign around reconnection. A merchant who reconnects without warning will find their catalog scoped to an empty publication.
* **Sequence it carefully:** after reconnecting, a merchant's catalog is empty until they publish products to the new channel. Tell merchants to publish their products as part of the same session in which they reconnect. Walk them through the merchant-facing instructions in the [Merchant Help Center](https://merchant-help.violet.io/).

## Merchants connected to more than one Violet channel

A merchant can be connected to several Violet channels at once. Each connected app gets its own Shopify channel and its own publication, so:

* The merchant sees one checkbox per channel on each product.
* They can share different products with different channels.
* Publishing to one channel has no effect on any other.
* A merchant can be publication-scoped for one channel and full-catalog for another; for example, if one app has the feature enabled and another does not.

## Turning the feature off

Publication-scoped syncing can be disabled per merchant, which reverts them to full-catalog syncing. The Shopify channel remains on their store and is harmless; it simply stops being used as a filter. Talk to your Violet contact before doing this. Reverting a merchant to full-catalog syncing will expand their catalog back to the full store, which may not be what they agreed to.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.violet.io/ecom-platforms/shopify/sales-channel/enablement.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
