import { CodeTabs, CodeTab } from "docs-ui" export const metadata = { title: `Customer Module`, } # {metadata.title} The Customer Module is the `@medusajs/customer` NPM package that provides customer-related features in your Medusa and Node.js applications. ## Features ### Customer Management With the Customer Module, store and manage customers in your store. ```ts const customer = await customerModuleService.create({ first_name: "Peter", last_name: "Hayes", email: "peter.hayes@example.com", }) ``` ### Customer Organization You can organize customers into groups. This has a lot of benefits and supports more use cases, such as provide discounts for specific customer groups using the Promotion Module. ```ts const customerGroup = await customerModuleService.createCustomerGroup({ name: "VIP", }) await customerModuleService.addCustomerToGroup({ customer_id: "cus_123", customer_group_id: customerGroup.id, }) ``` --- ## Configure Customer Module After installing the `@medusajs/customer` package in your Medusa application, add it to the `modules` object in `medusa-config.js`: ```js title="medusa-config.js" const modules = { // ... customer: { resolve: "@medusajs/customer", }, } ``` --- ## How to Use Customer Module's Service You can use the Customer Module's main service by resolving from the Medusa container the resource `ModuleRegistrationName.CUSTOMER` imported from `@medusajs/modules-sdk`. For example: ```ts title="src/api/store/custom/route.ts" import { MedusaRequest, MedusaResponse } from "@medusajs/medusa" import { ICustomerModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/modules-sdk" export async function GET( request: MedusaRequest, res: MedusaResponse ) { const customerModuleService: ICustomerModuleService = request.scope.resolve(ModuleRegistrationName.CUSTOMER) res.json({ customers: await customerModuleService.list(), }) } ``` ```ts title="src/subscribers/custom-handler.ts" import { SubscriberArgs } from "@medusajs/medusa" import { ICustomerModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/modules-sdk" export default async function subscriberHandler({ container, }: SubscriberArgs) { const customerModuleService: ICustomerModuleService = container.resolve(ModuleRegistrationName.CUSTOMER) const customers = await customerModuleService.list() } ``` ```ts title="src/workflows/hello-world/step1.ts" import { createStep } from "@medusajs/workflows-sdk" import { ICustomerModuleService } from "@medusajs/types" import { ModuleRegistrationName } from "@medusajs/modules-sdk" const step1 = createStep("step-1", async (_, context) => { const customerModuleService: ICustomerModuleService = context.container.resolve(ModuleRegistrationName.PRODUCT) const customers = await customerModuleService.list() }) ```