Skip to main content

Channel config extension

Tip

Ensure you have the latest version of Shopify CLI installed to access all channel config extension features.


Channel config extension declares your app as a sales channel and configures its properties. Adding this extension to your app enables the following:

  • Your app appears as a sales channel to merchants in the Shopify admin.
  • Merchants can publish products to your channel.
  • You control which products are published via channel specifications.
  • You can receive contextual product feeds for your channel's supported countries and languages.

You can scaffold an example channel config extension using Shopify CLI:

Terminal

shopify app generate extension --template channel_config --name channel-config
Note

If you've previously declared your app as a sales channel app using the deprecated Partner Dashboard, your app continues to be treated as a sales channel even if this extension isn't present. To migrate an existing app, follow Migrating to a multi-channel app.

Channel config extension directory tree

└── extensions
└── channel-config
├── shopify.extension.toml
└── specifications/
├── example-us.toml
├── example-us-icon.svg
├── example-de.toml
└── example-de-icon.svg

Anchor to [object Object]shopify.extension.toml

Like all app extensions, the primary configuration file for the channel config extension is shopify.extension.toml.

Example shopify.extension.toml

[[extensions]]
uid = "..."
type = "channel_config"
handle = "channel-config"

Anchor to Channel specificationsChannel specifications

Channel specifications describe a channel's capabilities, regional coverage, product schema, internationalization, and UI extensibility.

A sales channel app can define one or more specifications. Marketplaces like Amazon and eBay often create one specification per country because listing management is scoped to that region. Channels like Google and Meta might define one specification that covers multiple countries so a single connection can emit listings for each covered region.

Each specification has a unique handle. That handle becomes the specificationHandle you pass to channelCreate to bind a merchant's external account to the correct channel configuration.

Specifications are declared as TOML or JSON files in the specifications/ folder of the extension. Deploy specifications to Shopify using Shopify CLI:

Terminal

shopify app deploy

Anchor to Specification formatSpecification format

Example: Amazon US channel specification

handle = "amazon-us"
label = "Amazon - US"
icon = "amazon-us-icon.svg"

[capabilities]
bundles = true

[requirements]
expectsOnlineStoreParity = false
merchantOfRecord = "channel"

[[countries]]
code = "US"
languages = ["en"]
currency = "USD"

Anchor to Specification propertiesSpecification properties

Anchor to Top-level propertiesTop-level properties

FieldTypeRequiredDescription
handleStringYesUnique human-friendly identifier for the channel specification. Referenced in code when calling channelCreate.
labelStringYesDisplay text for the channel as it appears in the Shopify admin, for example in Markets or the view-as context. Should match the application name, decorated with regional or channel-specific attributes: "Amazon - US", "Google Local Inventory", "TikTok Shops".
nameStringYesName of the extension.
descriptionStringNoBrief description of the channel specification.
iconStringNoFile name for an SVG icon to represent the channel within Markets and other admin surfaces. The viewbox of the SVG icon MUST be 20 x 20 with origin in 0.
productFeedManagementEnumNo"automatic" or "manual". When automatic (default), product feeds are created and destroyed based on the channel's market configuration. When manual, the app controls feed lifecycle using the productFeedCreate API.

Describes what types of product features and selling plans the channel supports. All capability fields default to false if omitted.

FieldTypeRequiredDescription
capabilities.bundlesBooleanNoWhether the channel can sell bundled products. Defaults to false.
capabilities.digitalProductsBooleanNoWhether the channel can sell products that don't require physical shipping. Defaults to false.
capabilities.subscriptionsBooleanNoWhether the channel supports recurring subscription selling plans. Defaults to false.
capabilities.unlistedProductsBooleanNoWhether the channel can sell products that aren't publicly listed in search results. Defaults to false.
capabilities.combinedListingsBooleanNoWhether the channel can sell combined listings. Defaults to false.
capabilities.scheduledPublishingBooleanNoWhether the channel can support merchants scheduling the publishing of their products. Defaults to false.

FieldTypeRequiredDescription
requirements.expectsOnlineStoreParityBooleanNoWhether the channel expects product listings to match the merchant's online store pricing and availability. Channels like Google and Meta that drive traffic back to the merchant's store set this to true. Marketplace channels with their own checkout like Amazon and Walmart set this to false. Defaults to false.
requirements.merchantOfRecordEnumNoIdentifies who processes the transaction. Set to "channel" when the external platform handles checkout and payment (marketplaces like Amazon and Walmart). Set to "merchant" when the merchant's own checkout handles the transaction (traffic-driving channels like Google and Meta). Defaults to merchant

The countries array defines the regional coverage of the channel. Each entry describes a country the channel operates in and the languages and currency it supports for that country.

FieldTypeRequiredDescription
countries[].codeStringYesISO 3166-1 alpha-2 country code.
countries[].languagesArrayYesISO 639-1 language codes. For each supported language that matches available translations on the store, the product feed payload incorporates available translations.
countries[].currencyStringYesISO 4217 currency code. If the channel currency matches the market currency, no conversion is applied. If they differ, a currency conversion step is applied in the product feed.

Multiple countries in a single specification mean each product generates multiple feed entries — one per country — assuming that the store has market coverage for those countries.

Anchor to Multiple specifications per appMultiple specifications per app

A sales channel app can deploy multiple specifications to support different regional configurations or channel variants. For example, an Amazon app might deploy:

Multiple specifications

specifications/
├── amazon-us.toml # Amazon.com (US, English, USD)
├── amazon-ca.toml # Amazon.ca (CA, English + French, CAD)
├── amazon-de.toml # Amazon.de (DE, German, EUR)
└── amazon-uk.toml # Amazon.co.uk (GB, English, GBP)

Each specification has its own handle, and merchants can establish separate channel connections for each.


Anchor to Existing channel appsExisting channel apps

If you have an existing sales channel app that was created using the Partner Dashboard before the channel config extension was available, you'll need to set create_legacy_channel_on_app_install = true in your shopify.extension.toml to preserve backward compatibility.

Legacy channel configuration

[[extensions]]
uid = "..."
type = "channel_config"
handle = "channel-config"
create_legacy_channel_on_app_install = true

For a complete migration guide, see Migrating to a multi-channel app.



Was this page helpful?