> 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.

# Product custom fields

[*International Enhancements for Multi-Storefront*](/developer/docs/admin/multi-storefront/msf-international-enhancements/overview)

> **Note**
>
> This feature is currently available for Performance plan stores and Partner Sandboxes. If the feature is not working as expected, please contact technical support, as the feature likely needs to be enabled for the individual store.
> If you are interested in upgrading to the Performance plan, [contact our sales team](https://bigcommerce.com/contact-sales/).

Using the Catalog features of the Admin API, you can localize custom fields for a product in a storefront channel.

You must first create the custom field through the control panel or [Create product custom field](/developer/api-reference/rest/admin/catalog/products/custom-fields/create-product-custom-field) endpoint of the REST Management API.

You can perform the following:

* [Set attributes for the custom field](#set-product-custom-fields):

  The `setProductCustomFieldsInformation` mutation lets you set global values for the store that channels inherit by default. The mutation also lets you set overrides for a channel locale, which will override global store information.
* [Remove overrides for a channel locale](#remove-product-custom-fields-for-a-locale). A channel then inherits global values.
* [Query custom fields](#query-product-custom-fields), those set at the global level and the overrides.

For a full schema, see the [GraphQL Admin API reference](/developer/api-reference/graphql/account/overview).

## Input fields

Setting or removing information requires that you specify ID fields in the input. For more information on how to specify ID fields, see [Input fields](/developer/docs/admin/multi-storefront/msf-international-enhancements/overview#input-fields).

## Set product custom fields

The following example sets custom fields for the global store and the specified channel locale.

#### Request

**`Example mutation: Set product custom fields`**

```graphql title="Example mutation: Set product custom fields"
POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/graphql
X-Auth-Token: {{ACCESS_TOKEN}}
Content-Type: application/json
Accept: application/json

mutation ($input: UpdateProductCustomFieldsInput!) {
  product {
    updateProductCustomFields (input: $input) {
      product {
        customFields {
          edges {
            node {
              id

              # For the global store
              name
              value

              # For the channel locale
              overrides (context: { channelId: "bc/store/channel/1", locale: "en-US" }) {
                edges {
                  node {
                  ... on ProductCustomFieldOverridesForChannelLocale {
                      name
                      value
                      isVisible
                      context {
                        channelId
                        locale
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
```

**`GraphQL variables`**

```json title="GraphQL variables"
{
  "input": {
    "productId": "bc/store/product/111",
    "data": [
      {
        "customFieldId": "bc/store/productCustomField/1",

        // For the global store
        "name": "Global custom field name",
        "value": "Global custom field value",

        // For the channel locale
        "overrides": [
          {
            "channelLocaleOverrides": {
              "context": {
                "channelId": "bc/store/channel/1",
                "locale": "en-US"     
              },
              "data": {
                "name": "Custom field name override",
                "value": "Custom field value override",
                "isVisible": true
              }
            }
          }
        ]
      }
    ]
  }
}
```

#### Response

**`Example mutation: Set product custom fields`**

```json title="Example mutation: Set product custom fields"
{
  "data": {
    "product": {
      "updateProductCustomFields": {
        "product": {
          "customFields": {
            "edges": [
              {
                "node": {
                  "id": "bc/store/productCustomField/1",

                  // For the global store
                  "name": "Global custom field name",
                  "value": "Global custom field value",

                  // For the channel locale
                  "overrides": {
                    "edges": [
                      {
                        "node": {
                          "name": "Custom field name override",
                          "value": "Custom field value override",
                          "isVisible": true,
                          "context": {
                            "channelId": "bc/store/channel/1",
                            "locale": "en-US"
                          }
                        }
                      }
                    ]
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}
```

## Remove product custom fields for a locale

The following example removes product custom fields for the specified channel locale.

Omitting the `attributes` field from the input removes *all* overrides for the custom fields from the locale.

#### Request

**`Example mutation: Remove product custom fields for a locale`**

```graphql title="Example mutation: Remove product custom fields for a locale"
POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/graphql
X-Auth-Token: {{ACCESS_TOKEN}}
Content-Type: application/json
Accept: application/json

mutation ($input: RemoveProductCustomFieldsOverridesInput!) {
  product {
    removeProductCustomFieldsOverrides(input: $input) {
      product {
        customFields {
          edges {
            node {
              id

              # For the global store
              name
              value

              # For the channel locale
              overrides (context: { channelId: "bc/store/channel/1", locale: "en-US" }) {
                edges {
                  node {
                    ... on ProductCustomFieldOverridesForChannelLocale {
                      name
                      value
                      isVisible
                      context {
                        channelId
                        locale
                      }
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
```

**`GraphQL variables`**

```json title="GraphQL variables"
{
  "input": {
    "productId": "bc/store/product/111",
    "data": [
      {
        "customFieldId": "bc/store/productCustomField/1",
        "channelLocaleContextData": {
          "context": {
            "channelId": "bc/store/channel/1",
            "locale": "en-US"
          },
          "attributes": ["NAME", "VALUE", "IS_VISIBLE"]
        }
      }
    ]
  }
}
```

#### Response

**`Example mutation: Remove product custom fields for a locale`**

```json title="Example mutation: Remove product custom fields for a locale"
{
  "data": {
    "product": {
      "removeProductCustomFieldsOverrides": {
        "product": {
          "customFields": {
            "edges": [
              {
                "node": {
                  "id": "bc/store/productCustomField/1",

                  // For the global store
                  "name": "Custom Field Name",
                  "value": "Custom Field Value",

                  // For the channel locale
                  "overrides": {
                    "edges": []
                  }
                }
              }
            ]
          }
        }
      }
    }
  }
}
```

## Query product custom fields

The following example retrieves custom fields. You can retrieve global information for the store and overrides for the specified channel locale.

#### Request

**`Example query: Get product custom fields`**

```graphql title="Example query: Get product custom fields"
POST https://api.bigcommerce.com/stores/{{STORE_HASH}}/graphql
X-Auth-Token: {{ACCESS_TOKEN}}
Content-Type: application/json
Accept: application/json

query {
  store {
    product(id: "bc/store/product/111") {
      customFields {
        edges {
          node {
            id

            # For the global store
            name
            value

            # For the channel locale
            overrides (context: { channelId: "bc/store/channel/1", locale: "en-US" }) {
              edges {
                node {
                  ... on ProductCustomFieldOverridesForChannelLocale {
                    name
                    value
                    isVisible
                    context {
                      channelId
                      locale
                    }
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
```

#### Response

**`Example query: Get product custom fields`**

```json title="Example query: Get product custom fields"
{
  "data": {
    "store": {
      "product": {
        "customFields": {
          "edges": [
            {
              "node": {
                "id": "bc/store/productCustomField/1",

                // For the global store
                "name": "Global Custom Field Name",
                "value": "Global Custom Field Value",

                // For the channel locale
                "overrides": {
                  "edges": [
                    {
                      "node": {
                        "name": "Custom Field Name Override",
                        "value": "Custom Field Value Override",
                        "isVisible": true,
                        "context": {
                          "channelId": "bc/store/channel/1",
                          "locale": "en-US"
                        }
                      }
                    }
                  ]
                }
              }
            }
          ]
        }
      }
    }
  }
}
```