Skip to main content
Skip to main content

Pricing Module Overview

The Pricing module is the @medusajs/pricing NPM package that provides advanced pricing features in your Medusa and Node.js applications. It can be used to add prices to any resource, such as products or shipping options.

Features

Price Management

With the Product module, you can store the prices of a resource and manage them through the main interface method. Prices are grouped in a price set, allowing you to add more than one price for a resource based on different conditions, such as currency code.

const priceSet = await pricingService.create({
rules: [],
prices: [
{
amount: 500,
currency_code: "USD",
rules: {},
},
{
amount: 400,
currency_code: "EUR",
min_quantity: 0,
max_quantity: 4,
rules: {},
},
],
})

Advanced Rule Engine

You can create custom rules and apply them to prices. This gives you more flexibility in how you condition prices, filter them, and ensure the best prices are retrieved for custom contexts.

const ruleTypes = await pricingService.createRuleTypes([
{
name: "Region",
rule_attribute: "region_id",
},
])

const priceSet = await pricingService.addPrices({
priceSetId,
prices: [
{
amount: 500,
currency_code: "EUR",
rules: {
region_id: "PL",
},
},
],
})

Price Lists

Price lists allow you to group prices and apply them only in specific conditions. You can also use them to override existing prices for the specified conditions.

const priceList = await pricingService.createPriceLists({
title: "My Sale",
type: "sale",
starts_at: Date.parse("01/10/2023"),
ends_at: Date.parse("31/10/2023"),
rules: {
region_id: ["DE", "DK"],
},
prices: [
{
amount: 400,
currency_code: "EUR",
price_set_id: priceSet.id,
},
],
})

Price Calculation Strategy

The module’s main interface provides a calculatePrices method to retrieve the best price for a given context. You can benefit from your custom rules here to find the best price for the specified rule values.

const price = await pricingService.calculatePrices(
{ id: [priceSetId] },
{
context: {
currency_code: "EUR",
region_id: "PL",
},
}
)

How to Use the Pricing Module

The Pricing Module can be used in many use cases, including:

  • Medusa Backend: The Medusa backend uses the pricing module to implement some features. However, it's guarded by the experimental feature flag. If you want to use the pricing module in your backend's customizations, follow this installation guide.
  • Serverless Application: Use the Pricing Module in a serverless application, such as a Next.js application, without having to manage a fully-fledged ecommerce system. You can use it by installing it in your Node.js project as an NPM package.
  • Node.js Application: Use the Pricing Module in any Node.js application. Follow this guide to learn how to install it.

Up Next

Was this section helpful?