Managing channel connections
Channel connections represent authenticated links between a Shopify store and external platforms. Each connection ties a channel specification to a specific seller account on the external platform. A single app can manage multiple channel connections — for example, an Amazon app can connect Amazon US, Amazon CA, and Amazon DE as separate connections, each with its own specification, account, and product feeds.
Anchor to What you'll learnWhat you'll learn
In this guide, you'll learn how to do the following tasks:
- Create a channel connection using the
channelCreatemutation - Update and delete channel connections using
channelUpdateandchannelDelete - Query channel connections for your app
- Trigger a full product sync using
channelFullSync
Anchor to RequirementsRequirements
- Your app is registered as a sales channel.
- You have deployed a channel config extension with at least one channel specification.
- Your app has the
read_product_listingsaccess scope.
Anchor to How channel connections workHow channel connections work
When you call channelCreate with a specification handle and account details, Shopify:
- Reads the specification to determine regional coverage (countries, languages, currencies)
- Finds the store's markets that intersect with the specification's covered countries
- Creates product feeds for each covered country, which immediately begin emitting events to your app's webhook subscriptions
When a channel connection is deleted via channelDelete, all associated product feeds are removed.
Anchor to Create a channel connectionCreate a channel connection
After a merchant completes authentication with their external platform account, call channelCreate to establish the connection:
POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json
channelCreate mutation
Input variables
JSON response
Anchor to Input fieldsInput fields
| Field | Type | Required | Description |
|---|---|---|---|
handle | String | No | A unique identifier for the channel connection, for example "amazon-us-A1B2C3D4E5F6G7". If not provided, a handle is auto-generated from the specification handle and account ID. |
specificationHandle | String | Yes | The handle of a channel specification deployed via the channel config extension. |
accountId | String | Yes | A unique identifier for the merchant's account on the external platform. |
accountName | String | Yes | A human-readable name for the merchant's account, displayed in the Shopify admin when referencing the connection. |
Anchor to Online store parity requirementsOnline store parity requirements
If the channel specification declares requirements.expectsOnlineStoreParity = true (traffic-driving channels like Google or Meta), channelCreate requires the store to have at least one region market with a valid web presence covering the specification's countries. If no matching markets exist, the mutation returns an error.
Anchor to Update a channel connectionUpdate a channel connection
Use channelUpdate to modify account information or reassign a channel specification:
POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json
channelUpdate mutation
Input variables
JSON response
channelUpdate is also used to migrate legacy automatic channel records to explicit connections. See Migrating to a multi-channel app for details.
channelUpdate is also used to migrate legacy automatic channel records to explicit connections. See Migrating to a multi-channel app for details.
Anchor to Delete a channel connectionDelete a channel connection
When a merchant disconnects their external account or a channel connection is no longer valid, remove it with channelDelete. This removes all associated product feeds.
POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json
channelDelete mutation
Input variables
Anchor to Query channel connectionsQuery channel connections
Anchor to Query a single channel by IDQuery a single channel by ID
channel query
For the full list of fields available on Channel, refer to the Channel object in the GraphQL Admin API reference.
Anchor to Query a channel by handleQuery a channel by handle
channelByHandle query
Anchor to List all channels for the appList all channels for the app
channels query
A sales channel app cannot query channels belonging to other apps.
A sales channel app cannot query channels belonging to other apps.
Anchor to Trigger a full sync for a channelTrigger a full sync for a channel
After establishing a channel connection and subscribing to product feed webhooks, trigger a full sync to receive the merchant's published product catalog. A full sync is triggered by default when your feed is first created, but if you need a full reconciliation you can trigger a full sync manually using the following mutation:
POST https://{shop}.myshopify.com/admin/api/{api_version}/graphql.json
channelFullSync mutation
Input variables
JSON response
The country and language parameters are optional. If omitted, all feeds for the channel are synced.
If your channel manages feeds manually, create the feeds first and trigger productFullSync for each feed instead. See Contextual product feeds.
Anchor to Typical integration flowTypical integration flow
A typical sales channel app integrates channel connections as part of its post-authentication flow:
- Merchant installs the app and completes OAuth
- App presents the external platform authentication (for example, Amazon Seller Central login)
- Merchant authenticates with their external account
- App calls
channelCreatewith the appropriate specification handle and account details - Shopify creates product feeds
- App subscribes to product feed webhooks and triggers a full sync
- Product data begins flowing to the app
For apps supporting multiple channel connections, repeat steps 2–6 for each additional connection.
Anchor to Next stepsNext steps
- Channel config extension: Set up the extension and describe your channel's capabilities.
- Contextual product feeds: Subscribe to product feed events.
- Migrating to a multi-channel app: Upgrade an existing single-channel app.