import { CodeTabs, CodeTab } from "docs-ui" export const metadata = { title: `Examples of the User Module`, } # {metadata.title} In this guide, you’ll find common examples of how you can use the User Module in your application. You should only use the User Module's main service when implementing complex customizations. For common cases, check out [available workflows instead](../../../medusa-workflows-reference/page.mdx). ## Create a User ```ts import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" import { Modules } from "@medusajs/framework/utils" export async function POST( req: MedusaRequest, res: MedusaResponse ): Promise { const userModuleService = req.scope.resolve( Modules.USER ) const user = await userModuleService.createUsers({ email: "user@example.com", first_name: "John", last_name: "Smith", }) res.json({ user }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeUserModule } from "@medusajs/medusa/user" export async function POST(request: Request) { const userModuleService = await initializeUserModule() const user = await userModuleService.createUsers({ email: "user@example.com", first_name: "John", last_name: "Smith", }) return NextResponse.json({ user, }) } ``` --- ## List Users ```ts import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" import { Modules } from "@medusajs/framework/utils" export async function GET( req: MedusaRequest, res: MedusaResponse ): Promise { const userModuleService = req.scope.resolve( Modules.USER ) res.json({ users: await userModuleService.listUsers(), }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeUserModule } from "@medusajs/medusa/user" export async function GET(request: Request) { const userModuleService = await initializeUserModule() return NextResponse.json({ users: await userModuleService.listUsers(), }) } ``` --- ## Update a User ```ts import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" import { Modules } from "@medusajs/framework/utils" export async function POST( req: MedusaRequest, res: MedusaResponse ): Promise { const userModuleService = req.scope.resolve( Modules.USER ) const user = await userModuleService.updateUsers({ id: "user_123", last_name: "Smith", }) res.json({ user }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeUserModule } from "@medusajs/medusa/user" export async function POST(request: Request) { const userModuleService = await initializeUserModule() const user = await userModuleService.updateUsers({ id: "user_123", last_name: "Smith", }) return NextResponse.json({ user, }) } ``` --- ## Delete a User ```ts import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" import { Modules } from "@medusajs/framework/utils" export async function DELETE( req: MedusaRequest, res: MedusaResponse ): Promise { const userModuleService = req.scope.resolve( Modules.USER ) await userModuleService.deleteUsers(["user_123"]) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeUserModule } from "@medusajs/medusa/user" export async function DELETE(request: Request) { const userModuleService = await initializeUserModule() await userModuleService.deleteUsers(["user_123"]) } ``` --- ## Invite User ```ts import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" import { Modules } from "@medusajs/framework/utils" export async function POST( req: MedusaRequest, res: MedusaResponse ): Promise { const userModuleService = req.scope.resolve( Modules.USER ) const invite = await userModuleService.createInvites({ email: "user2@example.com", }) res.json({ invite, }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeUserModule } from "@medusajs/medusa/user" export async function POST(request: Request, { params }: ContextType) { const userModuleService = await initializeUserModule() const invite = await userModuleService.createInvites({ email: "user2@example.com", }) return NextResponse.json({ invite, }) } ``` --- ## Accept Invite ```ts import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" import { Modules } from "@medusajs/framework/utils" export async function POST( req: MedusaRequest, res: MedusaResponse ): Promise { const userModuleService = req.scope.resolve( Modules.USER ) const invite = await userModuleService.validateInviteToken("secret_123") const user = await userModuleService.createUsers({ email: invite.email, metadata: invite.metadata, }) await userModuleService.updateInvites({ id: invite.id, accepted: true, }) res.json({ user, }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeUserModule } from "@medusajs/medusa/user" export async function POST(request: Request, { params }: ContextType) { const userModuleService = await initializeUserModule() const invite = await userModuleService.validateInviteToken("secret_123") const user = await userModuleService.createUsers({ email: invite.email, metadata: invite.metadata, }) await userModuleService.updateInvites({ id: invite.id, accepted: true, }) return NextResponse.json({ user, }) } ``` --- ## Refresh Invite ```ts import { MedusaRequest, MedusaResponse } from "@medusajs/framework/http" import { Modules } from "@medusajs/framework/utils" export async function POST( req: MedusaRequest, res: MedusaResponse ): Promise { const userModuleService = req.scope.resolve( Modules.USER ) const invites = await userModuleService.refreshInviteTokens(["invite_123"]) res.json({ invite: invites[0], }) } ``` ```ts import { NextResponse } from "next/server" import { initialize as initializeUserModule } from "@medusajs/medusa/user" export async function POST(request: Request, { params }: ContextType) { const userModuleService = await initializeUserModule() const invites = await userModuleService.refreshInviteTokens(["invite_123"]) return NextResponse.json({ invite: invites[0], }) } ``` --- ## More Examples The [User Module's main service reference](/references/user) provides a reference to all the methods available for use with examples for each.