import { CodeTabs, CodeTab } from "docs-ui" export const metadata = { title: `Promotion Module`, } # {metadata.title} The Promotion Module provides promotion-related features in your Medusa and Node.js applications. ## How to Use the Promotion Module's Service You can use the Promotion Module's main service by resolving from the Medusa container the resource `Modules.PROMOTION` imported from `@medusajs/framework/utils`. For example: ```ts title="src/workflows/hello-world/step1.ts" import { createStep } from "@medusajs/framework/workflows-sdk" import { Modules } from "@medusajs/framework/utils" const step1 = createStep("step-1", async (_, { container }) => { const promotionModuleService = container.resolve( Modules.PROMOTION ) const promotions = await promotionModuleService.listPromotions() }) ``` ```ts title="src/api/store/custom/route.ts" import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" import { Modules } from "@medusajs/framework/utils" export async function GET( request: MedusaRequest, res: MedusaResponse ): Promise { const promotionModuleService = request.scope.resolve( Modules.PROMOTION ) res.json({ promotions: await promotionModuleService.listPromotions(), }) } ``` ```ts title="src/subscribers/custom-handler.ts" import { SubscriberArgs } from "@medusajs/framework" import { Modules } from "@medusajs/framework/utils" export default async function subscriberHandler({ container }: SubscriberArgs) { const promotionModuleService = container.resolve( Modules.PROMOTION ) const promotions = await promotionModuleService.listPromotions() } ``` --- ## Features ### Discount Functionalities A promotion discounts an amount or percentage of a cart's items, shipping methods, or the entire order. The Promotion Module allows you to store and manage promotions. ```ts const promotion = await promotionModuleService.createPromotions({ code: "10%OFF", type: "standard", application_method: { type: "percentage", target_type: "order", value: "10", currency_code: "usd", }, }) ``` ### Flexible Promotion Rules A promotion has rules that restricts when it's applied. For example, you can create a promotion that's only applied to VIP customers. ```ts const promotion = await promotionModuleService.createPromotions({ code: "10%OFF", type: "standard", application_method: { type: "percentage", target_type: "order", value: "10", currency_code: "usd", }, rules: [ { attribute: "customer_group_id", operator: "eq", values: ["VIP"], }, ], }) ``` ### Campaign Management A campaign combines promotions under the same conditions, such as start and end dates. A campaign can also have an identifier for tracking purposes, such as tracking through tools like Google Analytics. ```ts const campaign = await promotionModuleService.createCampaigns({ name: "Summer Discounts", campaign_identifier: "G-123445", starts_at: new Date("2024-05-02"), ends_at: new Date("2024-07-20"), }) ```