--- sidebar_label: "Send Notification" tags: - notification - how to - server --- import { TypeList } from "docs-ui" export const metadata = { title: `Send Notification with the Notification Module`, } # {metadata.title} In this guide, you'll learn about the different ways to send notifications using the Notification Module. ## Using the Create Method In your resource, such as a [subscriber](!docs!/learn/fundamentals/events-and-subscribers), resolve the Notification Module's main service and use its `create` method: export const highlights = [ ["12", "notificationModuleService", "Resolve the Notification Module."], ["15", "create", "Create the notification to be sent."], [ "17", '"email"', "Use the module provider defined for the `email` channel to send an email.", ], [ "18", '"product-created"', "The ID of the template defined in the third-party service, such as SendGrid.", ], [ "19", "data", "The data to pass to the template defined in the third-party service.", ], ] ```ts title="src/subscribers/product-created.ts" highlights={highlights} collapsibleLines="1-7" expandButtonLabel="Show Imports" import type { SubscriberArgs, SubscriberConfig, } from "@medusajs/framework" import { Modules } from "@medusajs/framework/utils" import { INotificationModuleService } from "@medusajs/framework/types" export default async function productCreateHandler({ event: { data }, container, }: SubscriberArgs<{ id: string }>) { const notificationModuleService: INotificationModuleService = container.resolve(Modules.NOTIFICATION) await notificationModuleService.createNotifications({ to: "user@gmail.com", channel: "email", template: "product-created", data, }) } export const config: SubscriberConfig = { event: "product.created", } ``` The `create` method accepts an object or an array of objects having the following properties: `", description: "The data to pass along to the template, if necessary.", }, ]} sectionTitle="Use the Create Method" /> For a full list of properties accepted, refer to [this guide](/references/notification-provider-module#create). --- ## Using the sendNotificationsStep If you want to send a notification as part of a workflow, You can use the [sendNotificationsStep](/references/medusa-workflows/steps/sendNotificationsStep) in your workflow. For example: ```ts title="src/workflows/send-email.ts" import { createWorkflow } from "@medusajs/framework/workflows-sdk" import { sendNotificationsStep, useQueryGraphStep, } from "@medusajs/medusa/core-flows" type WorkflowInput = { id: string } export const sendEmailWorkflow = createWorkflow( "send-email-workflow", ({ id }: WorkflowInput) => { const { data: products } = useQueryGraphStep({ entity: "product", fields: [ "*", "variants.*", ], filters: { id, }, }) sendNotificationsStep({ to: "user@gmail.com", channel: "email", template: "product-created", data: { product_title: product[0].title, product_image: product[0].images[0]?.url, }, }) } ) ``` For a full list of input properties accepted, refer to the [sendNotificationsStep](/references/medusa-workflows/steps/sendNotificationsStep) reference. You can then execute this workflow in a subscriber, API route, or scheduled job. For example, you can execute it when a product is created: ```ts title="src/subscribers/product-created.ts" import type { SubscriberArgs, SubscriberConfig, } from "@medusajs/framework" import { sendEmailWorkflow } from "../workflows/send-email" export default async function productCreateHandler({ event: { data }, container, }: SubscriberArgs<{ id: string }>) { await sendEmailWorkflow(container).run({ input: { id: data.id, }, }) } export const config: SubscriberConfig = { event: "product.created", } ```