Tax-Inclusive Pricing

In this document, you’ll learn about tax-inclusive pricing and how it's used when calculating prices.

What is Tax-Inclusive Pricing?#

A tax-inclusive price is a price of a resource that includes taxes. Medusa calculates the tax amount from the price rather than adds the amount to it.

For example, if a product’s price is $50, the tax rate is 2%, and tax-inclusive pricing is enabled, then the product's price is $49, and the applied tax amount is $1.


How is Tax-Inclusive Pricing Set?#

The PricePreference data model holds the tax-inclusive setting for a context. It has two properties that indicate the context:

  • attribute: The name of the attribute to compare against. For example, region_id or currency_code.
  • value: The attribute’s value. For example, reg_123 or usd.
Note: Only region_id and currency_code are supported as an attribute at the moment.

The is_tax_inclusive property indicates whether tax-inclusivity is enabled in the specified context.

For example:

Code
1{2  "attribute": "currency_code",3  "value": "USD",4  "is_tax_inclusive": true,5}

In this example, tax-inclusivity is enabled for the USD currency code.


Tax-Inclusive Pricing in Price Calculation#

Tax Context#

As mentioned in the Price Calculation documentation, The calculatePrices method accepts as a parameter a calculation context.

To get accurate tax results, pass the region_id and / or currency_code in the calculation context.

Returned Tax Properties#

The calculatePrices method returns two properties related to tax-inclusivity:

Tip: Learn more about the returned properties in this guide.
  • is_calculated_price_tax_inclusive: Whether the selected calculated_price is tax-inclusive.
  • is_original_price_tax_inclusive : Whether the selected original_price is tax-inclusive.

A price is considered tax-inclusive if:

  1. It belongs to the region or currency code specified in the calculation context;
  2. and the region or currency code has a price preference with is_tax_inclusive enabled.

Tax Context Precedence#

A region’s price preference’s is_tax_inclusive's value takes higher precedence in determining whether a price is tax-inclusive if:

  • both the region_id and currency_code are provided in the calculation context;
  • the selected price belongs to the region;
  • and the region has a price preference

Tax-Inclusive Pricing with Promotions#

When you enable tax-inclusive prices for regions or currencies, this can impact how promotions are applied to the cart. So, it's recommended to enable tax-inclusiveness for promotions as well.

Learn more in the Tax-Inclusive Promotions guide.

Was this page helpful?
Ask Anything
Ask any questions about Medusa. Get help with your development.
You can also use the Medusa MCP server in Cursor, VSCode, etc...
FAQ
What is Medusa?
How can I create a module?
How can I create a data model?
How do I create a workflow?
How can I extend a data model in the Product Module?
Recipes
How do I build a marketplace with Medusa?
How do I build digital products with Medusa?
How do I build subscription-based purchases with Medusa?
What other recipes are available in the Medusa documentation?
Chat is cleared on refresh
Line break