> This page is for Developer.

> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://docs.bigcommerce.com/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://docs.bigcommerce.com/_mcp/server.

# Building Storefront Channels

This article documents how to use [Channels Toolkit](/developer/docs/integrations/channels/channels-toolkit-reference) to install a storefront channel in a store's [Channel Manager (Help Center)](https://support.bigcommerce.com/s/article/Selling-Everywhere-with-Channel-Manager) during a [single-click app](/developer/docs/integrations/apps/guide/types-of-apps) installation. This article assumes you're an experienced app and headless storefront developer familiar with channels on BigCommerce.

### Prerequisites

* [Familiarity with channels on BigCommerce](/developer/docs/integrations/channels)
* [Experience building apps](/developer/docs/integrations/getting-started)
* [Experience building headless storefronts](/developer/docs/storefront/headless)

## Creating a channel

After receiving the final response of the [single-click app OAuth flow](/developer/docs/integrations/apps/guide/auth#receiving-the-access_token-response) `auth` callback, create a channel on the merchant's store. Creating a dedicated channel for a storefront allows merchants to assign the storefront selected product listings and configure storefront-specific settings. To create a storefront channel, set `type` to `storefront` in a request to the [Create a channel](/developer/api-reference/rest/admin/management/channels/create-channel) endpoint.

**`Example request: Create a channel`**

```http title="Example request: Create a channel" showLineNumbers={false}
POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/channels
X-Auth-Token: {{ACCESS_TOKEN}}
Content-Type: application/json
Accept: application/json

{
  "name": "Custom PWA Storefront",
  "type": "storefront",
  "platform": "custom",
  "external_id": "",
  "status": "connected",
  "is_listable_from_ui": true,
  "is_visible": true
}
```

## Specifying the platform

Specify the headless storefront's platform by assigning an [accepted value](#accepted-values) for `platform` in the request to the [Create a channel](/developer/api-reference/rest/admin/management/channels/create-channel) endpoint.

**`Example request: Create a channel`**

```http title="Example request: Create a channel" showLineNumbers={false}
POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/channels
X-Auth-Token: {{ACCESS_TOKEN}}
Content-Type: application/json
Accept: application/json

{
  "name": "Deity PWA Storefront",
  "type": "storefront",
  "platform": "deity",
  ...
}
```

### Accepted values

See the list of [Channels Platform types](/developer/api-reference/rest/admin/management/channels#platform) in the Channels API reference. You can use any platform with `storefront` as an accepted type.

## Configuring UI sections

Define and configure the navigation menu items displayed in the channel's dedicated control panel menu using the [Create a channel menu](/developer/api-reference/rest/admin/management/channels/menus/create-channel-menus) endpoint.

**`Example request: Create channel menus`**

```http title="Example request: Create channel menus" showLineNumbers={false}
POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/channels/{{CHANNEL_ID}}/channel-menus
X-Auth-Token: {{ACCESS_TOKEN}}
Content-Type: application/json
Accept: application/json

{
  "bigcommerce_protected_app_sections": [],
  "custom_app_sections": [
    {
      "title": "Overview",
      "query_path": "overview"
    }
  ]
}
```

## Protected UI sections

BigCommerce allows the developer to toggle the location and scope of the following BigCommerce-managed settings pages between the storewide menu and channel-specific menus:

| Menu item / settings page | API Argument          | Description                                       |
| :------------------------ | :-------------------- | :------------------------------------------------ |
| Overview                  | `overview`            | Renders a channel-specific overview page.         |
| Storefront Settings       | `storefront_settings` | Renders channel-specific storefront settings.     |
| Localization              | `localization`        | Renders channel-specific localization settings.   |
| Carousel                  | `carousel`            | Renders channel-specific carousel settings.       |
| Script Manager            | `script_manager`      | Renders channel-specific script manager settings. |
| Currencies                | `currencies`          | Renders channel-specific currency settings.       |
| Payments                  | `payments`            | Renders channel-specific payments settings.       |
| Checkout                  | `checkout`            | Renders channel-specific checkout settings.       |
| Domains                   | `domains`             | Renders channel-specific domain settings.         |
| Notifications             | `notifications`       | Renders channel-specific notification settings.   |
| Social                    | `social`              | Renders channel-specific social media settings.   |
| Web pages                 | `pages`               | Renders channel-specific pages settings.          |
| Data solutions            | `data_solutions`      | Renders channel-specific data solutions settings. |

The term *protected section* refers to the settings on the corresponding menu pages. Settings in protected sections override the default settings configured at the storewide level. Include these protected sections in requests to the [Create channel menus](/developer/api-reference/rest/admin/management/channels/menus/create-channel-menus) endpoint to display BigCommerce-provided, channel-specific settings pages and corresponding menu items. Enabled protected sections precede custom sections in a channel's menu.

**`Example request: Create channel menus`**

```http title="Example request: Create channel menus" showLineNumbers={false}
POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/channels/{{CHANNEL_ID}}/channel-menus
X-Auth-Token: {{ACCESS_TOKEN}}
Content-Type: application/json
Accept: application/json

{
  "bigcommerce_protected_app_sections": [
    "storefront_settings",
    "currencies",
    "domains"
  ],
  "custom_app_sections": []
}
```

![Protected Sections](/_fern-img/0c23130741d1ef6ac0ae7cd04d9af70420bf9d969f0a9f1a874a705c490160d4.webp)

## Storefront settings

Include the `storefront_settings` [protected section](#protected-ui-sections) in a Channel Menu's `bigcommerce_protected_app_sections` array to render the BigCommerce-provided **Storefront Settings** menu item in the channel's navigation and corresponding settings page, and protect channel storefront settings from those set for the store in general.

![Channel Storefront Settings](/_fern-img/fe5330d46943f0efae1f96d18e29f8768717f83d3aad852bea5ddee6ee0bd15b.webp)

Read channel-specific storefront settings using the [Settings API](/developer/api-reference/rest/admin/management/settings). For example, you can see a storefront's category settings using the [Get storefront category settings](/developer/api-reference/rest/admin/management/settings/storefront-category/get-settings-storefront-category) endpoint.

#### Request

**`Example request: Get storefront category settings`**

```http title="Example request: Get storefront category settings"
GET /stores/{{STORE_HASH}}/v3/settings/storefront/category?channel_id={{CHANNEL_ID}}
Host: api.bigcommerce.com
X-Auth-Token: {{ACCESS_TOKEN}}
Content-Type: application/json
Accept: application/json
```

#### Response

**`Example response: Get storefront category settings`**

```json title="Example response: Get storefront category settings"
{
  "data": {
    "listing_mode": null,
    "default_product_sort": "bestselling",
    "category_tree_depth": 0
  },
  "meta": {}
}
```

## Currencies settings

Include the `currencies` [protected section](#protected-ui-sections) in a Channel Menu's `bigcommerce_protected_app_sections` array to render the BigCommerce-provided **Currencies** menu item in the channel's navigation and corresponding settings page, and protect channel currency settings from storewide currency settings.

![Channel Currency Settings](/_fern-img/af5ded808ff0b1848e5876ce79d5df46c26c46321243a9b08bb7a8333d3daf86.webp)

You can manage channel specific currency settings using the Channels API [Currency Assignments](/developer/api-reference/rest/admin/management/currencies) endpoints. For example, you can use the [Get channel currency assignments](/developer/api-reference/rest/admin/management/channels/currency-assignments/get-single-channel-currency-assignments) endpoint to learn more about a channel's currency assignments.

#### Request

**`Example request: Get channel currency assignments`**

```http title="Example request: Get channel currency assignments"
GET https://api.bigcommerce.com/stores/{{STORE_HASH}}/v3/channels/{{CHANNEL_ID}}/currency-assignments
X-Auth-Token: {{ACCESS_TOKEN}}
Content-Type: application/json
Accept: application/json
```

#### Response

**`Example response: Get channel currency assignments`**

```json title="Example response: Get channel currency assignments"
{
  "data": {
    "channel_id": 1,
    "default_currency": "USD",
    "enabled_currencies": ["USD", "CAD"]
  },
  "meta": {}
}
```

## Notification settings

Include the `notifications` [protected section](#protected-ui-sections) in a Channel Menu's `bigcommerce_protected_app_sections` array to render the BigCommerce-provided **Notifications** menu item in the channel's navigation and corresponding settings page, and protect channel notifications from storewide notifications settings.

![Channel Notification Settings](/_fern-img/d802817e7ca4effb30f70d435b40da064655231530f245c1d195ec9a121cd6e2.webp)

## Related resources

### Articles

* [Building Apps](/developer/docs/integrations/getting-started)
* [Building Channels](/developer/docs/integrations/channels)
* [Find an App's ID](/developer/docs/integrations/apps/guide/id)

### Endpoints

* [Channels API Reference](/developer/api-reference/rest/admin/management/channels)
* [Settings API Reference](/developer/api-reference/rest/admin/management/settings)