From 9164c5d68c0dc7b55cb463b1c8275709799350b7 Mon Sep 17 00:00:00 2001 From: Andrea Dao Date: Wed, 25 Sep 2024 16:15:32 -0500 Subject: [PATCH 01/10] add draft --- .../pricing/tax-localization.mdx | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 docs/store-operations/pricing/tax-localization.mdx diff --git a/docs/store-operations/pricing/tax-localization.mdx b/docs/store-operations/pricing/tax-localization.mdx new file mode 100644 index 000000000..2d026ce93 --- /dev/null +++ b/docs/store-operations/pricing/tax-localization.mdx @@ -0,0 +1,56 @@ +# MSF International Enhancements + + + This feature is currently in beta. + + +Price Lists - Can assign to storefront channels (to localize a storefront). + +Price display on stores - tax inclusive or tax exclusive for shopper expectations. Historically, whether prices display inclusive or exclusive of tax + +Tax region used to determine whether tax inclusive or exclusive - + + + +Currently, you use separate storefront channels for each country/region to localize the shopping experience. While price lists can be assigned per storefront, there's an issue: some regions require tax-inclusive pricing, while others use tax-exclusive pricing. The current system only supports one global tax setting, so it becomes difficult for you to set appropriate pricing strategies for different regions with varying tax expectations. + +- Define whether prices on a price list are inclusive or exclusive of tax. +- Aassign tax-inclusive or tax-exclusive price lists to multiple storefronts or customer groups. + +## Out of Scope + +- Stores using Catalog V2, due to fixed pricing rules. +- Product modifier rules. +- Mixing inclusive and exclusive pricing within a single price list. +- Multi-geo setup on a single storefront. +- Gift wrapping feature. +- Catalog price "fallthrough"; you must use the "lowest variant price" settings for PLP and PDP. + +## Settings + +- Price lists will include a new setting to specify whether prices are tax-inclusive, tax-exclusive, or global. + +- Global Price Lists: + +Global price lists follow the current setup, inheriting the global tax setting. They will function as they do today and allow for product modifiers and gift wrapping. + +- Tax-Inclusive/Exclusive Price Lists: + +You must explicitly set a price list as inclusive or exclusive. Once set, these lists won't inherit global tax settings and will not default to catalog prices if a price is missing. Products on such lists will not display or be purchasable without an entered price. Product modifiers, gift wrapping, and shipping will follow the entered prices. + +## Technical Details + +- Price lists will have their own "entered as" setting, which overrides the global store setting. This can be either tax-inclusive, tax-exclusive, or global. +- If not explicitly set, a price list will inherit the global setting. +- You can change the "entered as" setting on a price list at any time. + +``` + +``` + + +## Additional resources + +- [Introduction to Multi-Storefront](/docs/storefront/multi-storefront) +- [Price Lists](/docs/store-operations/pricing/price-lists) overview +- [Tax Settings]() \ No newline at end of file From 39c8a65c75e125f45b87a5cf36f65bc8855ef322 Mon Sep 17 00:00:00 2001 From: Andrea Dao Date: Wed, 25 Sep 2024 16:16:49 -0500 Subject: [PATCH 02/10] update title --- docs/store-operations/pricing/tax-localization.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/store-operations/pricing/tax-localization.mdx b/docs/store-operations/pricing/tax-localization.mdx index 2d026ce93..a91b7c896 100644 --- a/docs/store-operations/pricing/tax-localization.mdx +++ b/docs/store-operations/pricing/tax-localization.mdx @@ -1,4 +1,4 @@ -# MSF International Enhancements +# International Enhancements for Multi-Storefront This feature is currently in beta. From 3796b9892b812a5ee79890fd278f9ea09643909a Mon Sep 17 00:00:00 2001 From: Andrea Dao Date: Thu, 26 Sep 2024 11:18:10 -0500 Subject: [PATCH 03/10] update yml file --- reference/price_lists.v3.yml | 69 ++++++++++++++++++++++++++++++++++-- 1 file changed, 66 insertions(+), 3 deletions(-) diff --git a/reference/price_lists.v3.yml b/reference/price_lists.v3.yml index 6f26168b4..f1e621a5b 100644 --- a/reference/price_lists.v3.yml +++ b/reference/price_lists.v3.yml @@ -77,7 +77,11 @@ paths: tags: - Price Lists summary: Get All Price Lists - description: Returns a list of *Price Lists*. Optional parameters can be passed in. + description: | + Returns a list of *Price Lists*. Optional parameters can be passed in. + + > #### Beta + > * The `prices_entered_with_tax` field is in beta. Features may change based on user feedback or internal testing. operationId: getPriceLists parameters: - name: name @@ -186,6 +190,14 @@ paths: description: | Boolean value that specifies whether this `Price List` and its prices are active or not. Defaults to `true`. example: true + prices_entered_with_tax: + type: string + description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + enum: + - use_global + - entered_inclusive + - entered_exclusive + default: use_global description: Specifies the Common Price List properties. meta: title: Collection Meta @@ -256,6 +268,9 @@ paths: **Required Fields** * name + + > #### Beta + > * The `prices_entered_with_tax` field is in beta. Features may change based on user feedback or internal testing. operationId: createPriceList parameters: - $ref: '#/components/parameters/ContentType' @@ -282,6 +297,14 @@ paths: description: | Boolean value that specifies whether this `Price List` and its prices are active or not. Defaults to `true`. example: true + prices_entered_with_tax: + type: string + description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + enum: + - use_global + - entered_inclusive + - entered_exclusive + default: use_global description: Specifies the Common Price List properties. required: true responses: @@ -331,6 +354,14 @@ paths: description: | Boolean value that specifies whether this `Price List` and its prices are active or not. Defaults to `true`. example: true + prices_entered_with_tax: + type: string + description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + enum: + - use_global + - entered_inclusive + - entered_exclusive + default: use_global description: Specifies the Common Price List properties. meta: $ref: '#/components/schemas/Meta' @@ -441,7 +472,11 @@ paths: tags: - Price Lists summary: Get a Price List - description: ' Returns a single *Price List*.' + description: | + Returns a single *Price List*. + + > #### Beta + > * The `prices_entered_with_tax` field is in beta. Features may change based on user feedback or internal testing. operationId: getPriceList parameters: - name: price_list_id @@ -494,6 +529,14 @@ paths: description: | Boolean value that specifies whether this `Price List` and its prices are active or not. Defaults to `true`. example: true + prices_entered_with_tax: + type: string + description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + enum: + - use_global + - entered_inclusive + - entered_exclusive + default: use_global description: Specifies the Common Price List properties. meta: $ref: '#/components/schemas/Meta' @@ -515,7 +558,11 @@ paths: tags: - Price Lists summary: Update a Price List - description: Updates a *Price List*. + description: | + Updates a *Price List*. + + > #### Beta + > * The `prices_entered_with_tax` field is in beta. Features may change based on user feedback or internal testing. operationId: updatePriceList parameters: - name: price_list_id @@ -549,6 +596,14 @@ paths: description: | Whether or not this `Price List` and its prices are active. Defaults to `true`. example: true + prices_entered_with_tax: + type: string + description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + enum: + - use_global + - entered_inclusive + - entered_exclusive + default: use_global description: Common Price List properties. required: true responses: @@ -598,6 +653,14 @@ paths: description: | Whether or not this `Price List` and its prices are active. Defaults to `true`. example: true + prices_entered_with_tax: + type: string + description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + enum: + - use_global + - entered_inclusive + - entered_exclusive + default: use_global description: Common Price List properties. meta: $ref: '#/components/schemas/Meta' From e8d9e3d68038293d59e24bfea113821aeafc5c4e Mon Sep 17 00:00:00 2001 From: Andrea Dao Date: Thu, 26 Sep 2024 16:52:35 -0500 Subject: [PATCH 04/10] update overview, yml endpoints --- .../msf-international-enhancements.mdx | 94 +++++++++++++++++++ .../pricing/tax-localization.mdx | 56 ----------- reference/price_lists.v3.yml | 24 +++-- reference/pricing.sf.yml | 56 +++++------ 4 files changed, 136 insertions(+), 94 deletions(-) create mode 100644 docs/store-operations/pricing/msf-international-enhancements.mdx delete mode 100644 docs/store-operations/pricing/tax-localization.mdx diff --git a/docs/store-operations/pricing/msf-international-enhancements.mdx b/docs/store-operations/pricing/msf-international-enhancements.mdx new file mode 100644 index 000000000..96d2e4f08 --- /dev/null +++ b/docs/store-operations/pricing/msf-international-enhancements.mdx @@ -0,0 +1,94 @@ +# Price Lists - International Enhancements for Multi-Storefront + + + Tax-inclusive or exclusive price lists are in beta. Features may change based on user feedback or internal testing. + + +_International Enhancements for Multi-Storefront_ allow you to deliver localized experiences to fit different shopper needs. + +Shoppers expect storefront prices to include or exclude tax depending on their region when you sell internationally. + +When you create separate storefront channels for each region, you may need some storefronts to display prices that include tax, while others display prices that exclude tax. + +To do so, specify whether a price list has prices that include or exclude tax when entered. Then assign the price list to storefront channels. + +## Limitations + +- Stores using [Catalog V2](/docs/store-operations/catalog/migration) have fixed pricing and will use global store settings. +- You cannot enter price changes due to product modifier rules, gift wrapping features, and fixed shipping prices into a price list. These inherit global settings and always apply on top of the price list. +- You cannot mix inclusive and exclusive pricing within a single price list. +- You must [set the display price](https://support.bigcommerce.com/s/article/Product-Display-Settings?language=en_US#settings) to the lowest variant price when a shopper's preselected options don't match to a price. + +If your store doesn't have multiple storefronts, you can still create tax-inclusive or exclusive price lists and assign them to customer groups. + +## Settings + +Price lists will have a `prices_entered_with_tax` setting, which overrides the (default) global store setting. Use this setting to choose whether the price list is tax-inclusive or exclusive, or inherits the global settings. For details, see the [Price List endpoints](/docs/rest-management/price-lists) in the REST Management APIs. + +When you're using tax-inclusive price lists, tax-inclusive prices remain the same across all tax zones; the tax amount will vary based on the shopper's location. + +If you're inheriting global tax settings, there is an additional option for tax-inclusive prices. The store can subtract the item's store tax rate before calculating tax using the shopper's tax zone. For information on the global settings, see the [Tax Settings](/docs/rest-management/tax-settings) endpoint of the REST Management API. + +## Example + +The following example creates a tax-inclusive price list by sending a request to the [Create a Price List](/docs/rest-management/price-lists#create-a-price-list) endpoint. + + + + + ```http filename="Example request: Create a tax-inclusive price list" showLineNumbers copy + POST https://api.bigcommerce.com/stores/{{store_hash}}/v3/pricelists + X-Auth-Token: {{ACCESS_TOKEN}} + Accept: application/json + Content-Type: application/json + + { + "name": "Wholesale", + "active": true, + "prices_entered_with_tax": "entered_inclusive" + } + ``` + + + + + ```json filename="Example response: Create a tax-inclusive price list" showLineNumbers copy + { + "data": { + "id": 4, + "name": "Wholesale Group - Trade Show", + "date_created": "2022-09-17T18:41:59Z", + "date_modified": "2022-09-17T18:41:59Z", + "active": false, + "prices_entered_with_tax": "entered_inclusive" + }, + "meta": {} + } + ``` + + + + + +## Fallback behavior + +The following fallback behavior applies if you set a product as available for purchase, but the price list doesn't have a price entered for the product. + +When a price list inherits global settings: +- Price lists will default to catalog prices if a price is missing. + +When a price list overrides the global store setting: +- Prices returned will be `null` if a price is missing in the price list. This applies for the prices returned in the [Pricing](/docs/rest-management/pricing/products) endpoint of the REST Management API and the [GraphQL Storefront API](/docs/storefront/graphql). +- On Stencil storefronts, the product, but not the price, will still be visible. You won't be able to purchase it, but you can still add to wishlist. + + + [Update your Stencil theme](https://support.bigcommerce.com/s/article/Marketplace-Theme-Updates) for your Stencil storefront to display these features. + + +## Additional resources + +- [Introduction to Multi-Storefront](/docs/storefront/multi-storefront) +- [Price Lists](/docs/store-operations/pricing/price-lists) overview +- [Tax Settings](/docs/rest-management/tax-settings) endpoint reference +- [Pricing](/docs/rest-management/pricing/products) endpoint reference +- [Update your Stencil theme](https://support.bigcommerce.com/s/article/Marketplace-Theme-Updates) support article \ No newline at end of file diff --git a/docs/store-operations/pricing/tax-localization.mdx b/docs/store-operations/pricing/tax-localization.mdx deleted file mode 100644 index a91b7c896..000000000 --- a/docs/store-operations/pricing/tax-localization.mdx +++ /dev/null @@ -1,56 +0,0 @@ -# International Enhancements for Multi-Storefront - - - This feature is currently in beta. - - -Price Lists - Can assign to storefront channels (to localize a storefront). - -Price display on stores - tax inclusive or tax exclusive for shopper expectations. Historically, whether prices display inclusive or exclusive of tax - -Tax region used to determine whether tax inclusive or exclusive - - - - -Currently, you use separate storefront channels for each country/region to localize the shopping experience. While price lists can be assigned per storefront, there's an issue: some regions require tax-inclusive pricing, while others use tax-exclusive pricing. The current system only supports one global tax setting, so it becomes difficult for you to set appropriate pricing strategies for different regions with varying tax expectations. - -- Define whether prices on a price list are inclusive or exclusive of tax. -- Aassign tax-inclusive or tax-exclusive price lists to multiple storefronts or customer groups. - -## Out of Scope - -- Stores using Catalog V2, due to fixed pricing rules. -- Product modifier rules. -- Mixing inclusive and exclusive pricing within a single price list. -- Multi-geo setup on a single storefront. -- Gift wrapping feature. -- Catalog price "fallthrough"; you must use the "lowest variant price" settings for PLP and PDP. - -## Settings - -- Price lists will include a new setting to specify whether prices are tax-inclusive, tax-exclusive, or global. - -- Global Price Lists: - -Global price lists follow the current setup, inheriting the global tax setting. They will function as they do today and allow for product modifiers and gift wrapping. - -- Tax-Inclusive/Exclusive Price Lists: - -You must explicitly set a price list as inclusive or exclusive. Once set, these lists won't inherit global tax settings and will not default to catalog prices if a price is missing. Products on such lists will not display or be purchasable without an entered price. Product modifiers, gift wrapping, and shipping will follow the entered prices. - -## Technical Details - -- Price lists will have their own "entered as" setting, which overrides the global store setting. This can be either tax-inclusive, tax-exclusive, or global. -- If not explicitly set, a price list will inherit the global setting. -- You can change the "entered as" setting on a price list at any time. - -``` - -``` - - -## Additional resources - -- [Introduction to Multi-Storefront](/docs/storefront/multi-storefront) -- [Price Lists](/docs/store-operations/pricing/price-lists) overview -- [Tax Settings]() \ No newline at end of file diff --git a/reference/price_lists.v3.yml b/reference/price_lists.v3.yml index f1e621a5b..835d53c45 100644 --- a/reference/price_lists.v3.yml +++ b/reference/price_lists.v3.yml @@ -81,7 +81,8 @@ paths: Returns a list of *Price Lists*. Optional parameters can be passed in. > #### Beta - > * The `prices_entered_with_tax` field is in beta. Features may change based on user feedback or internal testing. + > * The `prices_entered_with_tax` setting is in beta. Features may change based on user feedback or internal testing. + > * For more information on this setting, see [Price Lists - International Enhancements for Multi-Storefront](/docs/store-operations/pricing/price-lists-international-enhancements-for-multi-storefront). operationId: getPriceLists parameters: - name: name @@ -192,7 +193,7 @@ paths: example: true prices_entered_with_tax: type: string - description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + description: Specifies whether the entered prices include or exclude tax. You can also use global settings or override them. enum: - use_global - entered_inclusive @@ -270,7 +271,8 @@ paths: * name > #### Beta - > * The `prices_entered_with_tax` field is in beta. Features may change based on user feedback or internal testing. + > * The `prices_entered_with_tax` setting is in beta. Features may change based on user feedback or internal testing. + > * For more information on this setting, see [Price Lists - International Enhancements for Multi-Storefront](/docs/store-operations/pricing/price-lists-international-enhancements-for-multi-storefront). operationId: createPriceList parameters: - $ref: '#/components/parameters/ContentType' @@ -299,7 +301,7 @@ paths: example: true prices_entered_with_tax: type: string - description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + description: Specifies whether the entered prices include or exclude tax. You can also use global settings or override them. enum: - use_global - entered_inclusive @@ -356,7 +358,7 @@ paths: example: true prices_entered_with_tax: type: string - description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + description: Specifies whether the entered prices include or exclude tax. You can also use global settings or override them. enum: - use_global - entered_inclusive @@ -476,7 +478,8 @@ paths: Returns a single *Price List*. > #### Beta - > * The `prices_entered_with_tax` field is in beta. Features may change based on user feedback or internal testing. + > * The `prices_entered_with_tax` setting is in beta. Features may change based on user feedback or internal testing. + > * For more information on this setting, see [Price Lists - International Enhancements for Multi-Storefront](/docs/store-operations/pricing/price-lists-international-enhancements-for-multi-storefront). operationId: getPriceList parameters: - name: price_list_id @@ -531,7 +534,7 @@ paths: example: true prices_entered_with_tax: type: string - description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + description: Specifies whether the entered prices include or exclude tax. You can also use global settings or override them. enum: - use_global - entered_inclusive @@ -562,7 +565,8 @@ paths: Updates a *Price List*. > #### Beta - > * The `prices_entered_with_tax` field is in beta. Features may change based on user feedback or internal testing. + > * The `prices_entered_with_tax` setting is in beta. Features may change based on user feedback or internal testing. + > * For more information on this setting, see [Price Lists - International Enhancements for Multi-Storefront](/docs/store-operations/pricing/price-lists-international-enhancements-for-multi-storefront). operationId: updatePriceList parameters: - name: price_list_id @@ -598,7 +602,7 @@ paths: example: true prices_entered_with_tax: type: string - description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + description: Specifies whether the entered prices include or exclude tax. You can also use global settings or override them. enum: - use_global - entered_inclusive @@ -655,7 +659,7 @@ paths: example: true prices_entered_with_tax: type: string - description: Specifies whether the entered prices include or exclude tax. You can also use global settings rather than overriding them. + description: Specifies whether the entered prices include or exclude tax. You can also use global settings or override them. enum: - use_global - entered_inclusive diff --git a/reference/pricing.sf.yml b/reference/pricing.sf.yml index a6086a157..e6a6199b8 100644 --- a/reference/pricing.sf.yml +++ b/reference/pricing.sf.yml @@ -118,7 +118,7 @@ paths: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -134,7 +134,7 @@ paths: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -151,7 +151,7 @@ paths: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number @@ -173,7 +173,7 @@ paths: entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number @@ -191,7 +191,7 @@ paths: entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -208,7 +208,7 @@ paths: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -227,7 +227,7 @@ paths: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -243,7 +243,7 @@ paths: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -263,7 +263,7 @@ paths: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -279,7 +279,7 @@ paths: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -468,7 +468,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -484,7 +484,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -500,7 +500,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -516,7 +516,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -532,7 +532,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -551,7 +551,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -567,7 +567,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -587,7 +587,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -603,7 +603,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -668,7 +668,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -684,7 +684,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -702,7 +702,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -741,7 +741,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -757,7 +757,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -773,7 +773,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -789,7 +789,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -805,7 +805,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. @@ -824,7 +824,7 @@ components: description: The price provided by the merchant, as entered in their catalog/price list; may include or exclude tax. entered_inclusive: type: boolean - description: Determines whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction. + description: Indicates whether the `as_entered` price is inclusive or exclusive of tax, based on the store's tax jurisdiction or the price list applied to the channel. tax_exclusive: type: number description: The estimated tax-exclusive price for this product based on the provided customer group. From 0a3af1871862e486f54667b9d74c320f9f93b208 Mon Sep 17 00:00:00 2001 From: Andrea Dao Date: Thu, 26 Sep 2024 17:27:01 -0500 Subject: [PATCH 05/10] edit tax settings overview, add error code --- .../msf-international-enhancements.mdx | 2 +- docs/store-operations/tax/index.mdx | 2 +- reference/price_lists.v3.yml | 34 ++++++++++++++++--- 3 files changed, 32 insertions(+), 6 deletions(-) diff --git a/docs/store-operations/pricing/msf-international-enhancements.mdx b/docs/store-operations/pricing/msf-international-enhancements.mdx index 96d2e4f08..ef1d3bcda 100644 --- a/docs/store-operations/pricing/msf-international-enhancements.mdx +++ b/docs/store-operations/pricing/msf-international-enhancements.mdx @@ -1,6 +1,6 @@ # Price Lists - International Enhancements for Multi-Storefront - + Tax-inclusive or exclusive price lists are in beta. Features may change based on user feedback or internal testing. diff --git a/docs/store-operations/tax/index.mdx b/docs/store-operations/tax/index.mdx index 509a823be..3d01d2493 100644 --- a/docs/store-operations/tax/index.mdx +++ b/docs/store-operations/tax/index.mdx @@ -4,7 +4,7 @@ Tax settings allow you to choose how a store handles tax calculation and price d ## Estimate taxes and display prices based on tax zone -The Tax Settings API supports cross-border transactions. You can localize storefront prices for shoppers from different regions. For example, you can display tax-inclusive or exclusive prices depending on the tax zone. This benefits single-storefront stores that sell to shoppers from different regions. This functionality applies to Stencil and GraphQL-powered storefronts. +The Tax Settings API supports cross-border transactions. You can localize storefront prices for shoppers from different regions. For example, you can display tax-inclusive or exclusive prices depending on the tax zone. These global tax settings benefit single-storefront stores that sell to shoppers from different regions. If your store has multiple storefronts, see the [Price Lists - International Enhancements for Multi-Storefront](/docs/store-operations/pricing/price-lists-international-enhancements-for-multi-storefront) overview for price display settings. This functionality applies to Stencil and GraphQL-powered storefronts. To support cross-border transactions, the store identifies a tax zone for the shopper. The store then applies the tax zone and its settings to estimate taxes and display prices. For logged-in customers, the store uses the customer address to identify the tax zone. For guest shoppers, the store can use the shopper's geolocation to identify the zone if you enable this setting. Otherwise, the store uses the provided guest shopper tax zone ID. diff --git a/reference/price_lists.v3.yml b/reference/price_lists.v3.yml index 835d53c45..4d35f36fa 100644 --- a/reference/price_lists.v3.yml +++ b/reference/price_lists.v3.yml @@ -81,7 +81,7 @@ paths: Returns a list of *Price Lists*. Optional parameters can be passed in. > #### Beta - > * The `prices_entered_with_tax` setting is in beta. Features may change based on user feedback or internal testing. + > * The `prices_entered_with_tax` setting is in beta. > * For more information on this setting, see [Price Lists - International Enhancements for Multi-Storefront](/docs/store-operations/pricing/price-lists-international-enhancements-for-multi-storefront). operationId: getPriceLists parameters: @@ -271,7 +271,7 @@ paths: * name > #### Beta - > * The `prices_entered_with_tax` setting is in beta. Features may change based on user feedback or internal testing. + > * The `prices_entered_with_tax` setting is in beta. > * For more information on this setting, see [Price Lists - International Enhancements for Multi-Storefront](/docs/store-operations/pricing/price-lists-international-enhancements-for-multi-storefront). operationId: createPriceList parameters: @@ -433,6 +433,32 @@ paths: The error title describing the particular error. type: type: string + '400': + description: | + `prices_entered_with_tax` allowed values: `use_global`. + content: + application/json: + schema: + title: Error Response + type: object + properties: + errors: + title: Detailed Errors + type: object + properties: {} + additionalProperties: true + instance: + type: string + status: + type: integer + description: | + The HTTP status code. + title: + type: string + description: | + The error title describing the particular error. + type: + type: string delete: tags: - Price Lists @@ -478,7 +504,7 @@ paths: Returns a single *Price List*. > #### Beta - > * The `prices_entered_with_tax` setting is in beta. Features may change based on user feedback or internal testing. + > * The `prices_entered_with_tax` setting is in beta. > * For more information on this setting, see [Price Lists - International Enhancements for Multi-Storefront](/docs/store-operations/pricing/price-lists-international-enhancements-for-multi-storefront). operationId: getPriceList parameters: @@ -565,7 +591,7 @@ paths: Updates a *Price List*. > #### Beta - > * The `prices_entered_with_tax` setting is in beta. Features may change based on user feedback or internal testing. + > * The `prices_entered_with_tax` setting is in beta. > * For more information on this setting, see [Price Lists - International Enhancements for Multi-Storefront](/docs/store-operations/pricing/price-lists-international-enhancements-for-multi-storefront). operationId: updatePriceList parameters: From aa91197b7ff7b4a8bbf9a5b29a0d7f2c2275139e Mon Sep 17 00:00:00 2001 From: Andrea Dao Date: Thu, 26 Sep 2024 18:20:01 -0500 Subject: [PATCH 06/10] update intro in overview & description for 400 error --- .../msf-international-enhancements.mdx | 23 +++++++++---------- reference/price_lists.v3.yml | 2 +- 2 files changed, 12 insertions(+), 13 deletions(-) diff --git a/docs/store-operations/pricing/msf-international-enhancements.mdx b/docs/store-operations/pricing/msf-international-enhancements.mdx index ef1d3bcda..200f299e3 100644 --- a/docs/store-operations/pricing/msf-international-enhancements.mdx +++ b/docs/store-operations/pricing/msf-international-enhancements.mdx @@ -1,16 +1,15 @@ # Price Lists - International Enhancements for Multi-Storefront - Tax-inclusive or exclusive price lists are in beta. Features may change based on user feedback or internal testing. + Tax-inclusive and exclusive price lists are in beta. Features may change based on user feedback or internal testing. -_International Enhancements for Multi-Storefront_ allow you to deliver localized experiences to fit different shopper needs. +When you sell internationally, you may need your storefront to display prices that either include or exclude tax based on regional expectations. You may need some storefront channels to display prices that include tax, while others display prices that exclude tax. -Shoppers expect storefront prices to include or exclude tax depending on their region when you sell internationally. +To localize your storefronts, you can do the following: +- Specify whether a price list has prices that include or exclude tax when entered. +- Assign the price list to storefront channels (or customer groups). -When you create separate storefront channels for each region, you may need some storefronts to display prices that include tax, while others display prices that exclude tax. - -To do so, specify whether a price list has prices that include or exclude tax when entered. Then assign the price list to storefront channels. ## Limitations @@ -74,15 +73,15 @@ The following example creates a tax-inclusive price list by sending a request to The following fallback behavior applies if you set a product as available for purchase, but the price list doesn't have a price entered for the product. -When a price list inherits global settings: -- Price lists will default to catalog prices if a price is missing. +- When a price list inherits global settings, price lists will default to catalog prices if a price is missing. +- When a price list overrides the global store setting, prices returned will be `null` if a price is missing in the price list. -When a price list overrides the global store setting: -- Prices returned will be `null` if a price is missing in the price list. This applies for the prices returned in the [Pricing](/docs/rest-management/pricing/products) endpoint of the REST Management API and the [GraphQL Storefront API](/docs/storefront/graphql). -- On Stencil storefronts, the product, but not the price, will still be visible. You won't be able to purchase it, but you can still add to wishlist. + This applies for the prices returned in the [Pricing](/docs/rest-management/pricing/products) endpoint of the REST Management API and the [GraphQL Storefront API](/docs/storefront/graphql). + + On Stencil storefronts, the product, but not the price, will still be visible. You won't be able to purchase it, but you can still add to wishlist. - [Update your Stencil theme](https://support.bigcommerce.com/s/article/Marketplace-Theme-Updates) for your Stencil storefront to display these features. + You must [update your Stencil theme](https://support.bigcommerce.com/s/article/Marketplace-Theme-Updates) for your Stencil storefront. ## Additional resources diff --git a/reference/price_lists.v3.yml b/reference/price_lists.v3.yml index 4d35f36fa..d963f759e 100644 --- a/reference/price_lists.v3.yml +++ b/reference/price_lists.v3.yml @@ -435,7 +435,7 @@ paths: type: string '400': description: | - `prices_entered_with_tax` allowed values: `use_global`. + (For Catalog V2 stores) `prices_entered_with_tax` allowed values: `use_global`. content: application/json: schema: From 60736333472596add0595e2758d21124c4e47cb2 Mon Sep 17 00:00:00 2001 From: bc-andreadao <96258747+bc-andreadao@users.noreply.github.com> Date: Thu, 10 Oct 2024 10:01:26 -0700 Subject: [PATCH 07/10] update limitations wording Co-authored-by: Meg Desko --- .../store-operations/pricing/msf-international-enhancements.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/store-operations/pricing/msf-international-enhancements.mdx b/docs/store-operations/pricing/msf-international-enhancements.mdx index 200f299e3..1e28c14ef 100644 --- a/docs/store-operations/pricing/msf-international-enhancements.mdx +++ b/docs/store-operations/pricing/msf-international-enhancements.mdx @@ -13,7 +13,7 @@ To localize your storefronts, you can do the following: ## Limitations -- Stores using [Catalog V2](/docs/store-operations/catalog/migration) have fixed pricing and will use global store settings. +- Stores using [Catalog V2](/docs/store-operations/catalog/migration) have may have fixed pricing rules and are not eligible to use inc/ex tax price lists. - You cannot enter price changes due to product modifier rules, gift wrapping features, and fixed shipping prices into a price list. These inherit global settings and always apply on top of the price list. - You cannot mix inclusive and exclusive pricing within a single price list. - You must [set the display price](https://support.bigcommerce.com/s/article/Product-Display-Settings?language=en_US#settings) to the lowest variant price when a shopper's preselected options don't match to a price. From fe6c02b917e4b0ac60c9dd49d5b85dd3dce058b8 Mon Sep 17 00:00:00 2001 From: bc-andreadao Date: Thu, 10 Oct 2024 10:55:15 -0700 Subject: [PATCH 08/10] update settings & limitations section --- .../pricing/msf-international-enhancements.mdx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/docs/store-operations/pricing/msf-international-enhancements.mdx b/docs/store-operations/pricing/msf-international-enhancements.mdx index 1e28c14ef..9a5277822 100644 --- a/docs/store-operations/pricing/msf-international-enhancements.mdx +++ b/docs/store-operations/pricing/msf-international-enhancements.mdx @@ -8,6 +8,7 @@ When you sell internationally, you may need your storefront to display prices th To localize your storefronts, you can do the following: - Specify whether a price list has prices that include or exclude tax when entered. +- Add prices (of your desired `prices_entered_with_tax`) setting to the price list in your desired currency. - Assign the price list to storefront channels (or customer groups). @@ -16,7 +17,7 @@ To localize your storefronts, you can do the following: - Stores using [Catalog V2](/docs/store-operations/catalog/migration) have may have fixed pricing rules and are not eligible to use inc/ex tax price lists. - You cannot enter price changes due to product modifier rules, gift wrapping features, and fixed shipping prices into a price list. These inherit global settings and always apply on top of the price list. - You cannot mix inclusive and exclusive pricing within a single price list. -- You must [set the display price](https://support.bigcommerce.com/s/article/Product-Display-Settings?language=en_US#settings) to the lowest variant price when a shopper's preselected options don't match to a price. +- For the best experience, [set the display price](https://support.bigcommerce.com/s/article/Product-Display-Settings?language=en_US#settings) to the lowest variant price when a shopper's preselected options don't match to a price. If your store doesn't have multiple storefronts, you can still create tax-inclusive or exclusive price lists and assign them to customer groups. @@ -24,9 +25,10 @@ If your store doesn't have multiple storefronts, you can still create tax-inclus Price lists will have a `prices_entered_with_tax` setting, which overrides the (default) global store setting. Use this setting to choose whether the price list is tax-inclusive or exclusive, or inherits the global settings. For details, see the [Price List endpoints](/docs/rest-management/price-lists) in the REST Management APIs. -When you're using tax-inclusive price lists, tax-inclusive prices remain the same across all tax zones; the tax amount will vary based on the shopper's location. +When you're using tax-inclusive price lists, tax-inclusive prices will remain the same across all tax zones; the tax amount will vary based on the shopper's location. +To ensure that you keep prices as entered , go to **Settings > Tax > Store Tax Settings** in the control panel. Turn on "Keep prices as entered" for "When calculating the taxes on sales made outside the pricing tax zone." For more information, see the [Tax Overview](https://support.bigcommerce.com/s/article/Tax-Overview?language=en_US#tax-settings) support article. -If you're inheriting global tax settings, there is an additional option for tax-inclusive prices. The store can subtract the item's store tax rate before calculating tax using the shopper's tax zone. For information on the global settings, see the [Tax Settings](/docs/rest-management/tax-settings) endpoint of the REST Management API. +If you're inheriting global tax settings, you have an additional option for tax-inclusive prices. You can choose to subtract the item's store tax rate before calculating tax using the shopper's tax zone. For information on the global settings, see the [Tax Settings](/docs/rest-management/tax-settings) endpoint of the REST Management API. ## Example From d75ad33dd6e5a7f7080bb5b1263b0538f170f5e6 Mon Sep 17 00:00:00 2001 From: bc-andreadao Date: Thu, 10 Oct 2024 14:04:08 -0700 Subject: [PATCH 09/10] add usage example, update limitations based on feedback --- .../msf-international-enhancements.mdx | 29 +++++++++++++++++-- 1 file changed, 26 insertions(+), 3 deletions(-) diff --git a/docs/store-operations/pricing/msf-international-enhancements.mdx b/docs/store-operations/pricing/msf-international-enhancements.mdx index 9a5277822..4919e56cf 100644 --- a/docs/store-operations/pricing/msf-international-enhancements.mdx +++ b/docs/store-operations/pricing/msf-international-enhancements.mdx @@ -7,15 +7,15 @@ When you sell internationally, you may need your storefront to display prices that either include or exclude tax based on regional expectations. You may need some storefront channels to display prices that include tax, while others display prices that exclude tax. To localize your storefronts, you can do the following: -- Specify whether a price list has prices that include or exclude tax when entered. -- Add prices (of your desired `prices_entered_with_tax`) setting to the price list in your desired currency. +- Specify whether a price list has prices that include or exclude tax when entered (i.e., `prices_entered_with_tax`). +- Add prices (of your desired `prices_entered_with_tax`) setting to the price list in your desired [currency for a storefront](https://support.bigcommerce.com/s/article/Multi-Storefront?language=en_US#currencies). - Assign the price list to storefront channels (or customer groups). ## Limitations - Stores using [Catalog V2](/docs/store-operations/catalog/migration) have may have fixed pricing rules and are not eligible to use inc/ex tax price lists. -- You cannot enter price changes due to product modifier rules, gift wrapping features, and fixed shipping prices into a price list. These inherit global settings and always apply on top of the price list. +- You cannot enter price changes due to product modifier rules, gift wrapping features, and fixed shipping prices into a price list. During checkout, the global prices for these features will be applied as is on top of the prices shown for the current shopper. Effectively, these features will inherit the `prices_entered_with_tax` setting from the price list. - You cannot mix inclusive and exclusive pricing within a single price list. - For the best experience, [set the display price](https://support.bigcommerce.com/s/article/Product-Display-Settings?language=en_US#settings) to the lowest variant price when a shopper's preselected options don't match to a price. @@ -32,6 +32,29 @@ If you're inheriting global tax settings, you have an additional option for tax- ## Example +### Usage + +The following describes an example usage: + +1. Your store has the following prices entered globally in US dollars, exclusive of tax: +- $5 modifier rule +- $1.99 fixed shipping +- +$3 for gift wrapping + +2. You add a tax-inclusive price list and assign it to a storefront that uses Australian dollars: +- $55.97 (AUD) for the price of the product + +3. The currency conversion of 2 AUD to 1 USD will apply to the prices you entered previously, so you end up with the following: +- $10 modifier rule +- $3.98 fixed shipping +- $6 gift wrapping + +These prices will be added as is, on top of the product price from the price list, effectively inheriting the price list setting. + +The cart total for the item with the modifier rule selected will be $55.97 + $10 + $6 + $3.98 = **$75.95 AUD** + +### Price list setting + The following example creates a tax-inclusive price list by sending a request to the [Create a Price List](/docs/rest-management/price-lists#create-a-price-list) endpoint. From e37cf725e247e547d7e3af38a7ea11e97b286e87 Mon Sep 17 00:00:00 2001 From: bc-andreadao Date: Fri, 11 Oct 2024 11:35:49 -0700 Subject: [PATCH 10/10] add null price handling --- .../pricing/msf-international-enhancements.mdx | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/docs/store-operations/pricing/msf-international-enhancements.mdx b/docs/store-operations/pricing/msf-international-enhancements.mdx index 4919e56cf..6dd67808f 100644 --- a/docs/store-operations/pricing/msf-international-enhancements.mdx +++ b/docs/store-operations/pricing/msf-international-enhancements.mdx @@ -103,11 +103,17 @@ The following fallback behavior applies if you set a product as available for pu This applies for the prices returned in the [Pricing](/docs/rest-management/pricing/products) endpoint of the REST Management API and the [GraphQL Storefront API](/docs/storefront/graphql). - On Stencil storefronts, the product, but not the price, will still be visible. You won't be able to purchase it, but you can still add to wishlist. +### Update Cornerstone theme - - You must [update your Stencil theme](https://support.bigcommerce.com/s/article/Marketplace-Theme-Updates) for your Stencil storefront. - +If you have an empty price for a product (or variant) in a inclusive or exclusive price list, [update to Cornerstore](https://support.bigcommerce.com/s/article/Marketplace-Theme-Updates) version 6.15 or make adjustments to your current theme to handle `null` prices. You can view the changes required in the [Cornerstone reference PR](https://github.com/bigcommerce/cornerstone/pull/2486/files). + +If you update the theme, and you have an empty price, the product, but not the price, will still be visible on the PDP. You won't be able to purchase it, but you can still add to wishlist. + +If you do not update the theme, the following will occur: +- If the variant is the default selection on the PDP, the entire html for the price section will not load. If you change to a variant with a price, the price will still not show. +- If the variant is not the default selection, the price will load on the PDP without issue. However, when you make the selection to a variant without a price, the price will not change and will display the price of the previously selected variant. + +If one of these issues occurs on the theme, and the merchant can not update their theme, entering a price for the product (or variant) causing an issue will resolve the problem. If there is always a price entered for all products on the inclusive or exclusive price list, then no issues will occur. ## Additional resources