Skip to main content
Skip to main content

Payment Module

The Payment Module is the @medusajs/payment NPM package that provides payment-related features in your Medusa and Node.js applications.


Add Payment Functionalities to Any Resource

The Payment Module provides payment functionalities that allow you to process payment of any resource, such as a cart.

All payment processing starts with creating a payment collection.

const paymentCollection =
await paymentModuleService.createPaymentCollections({
region_id: "reg_123",
currency_code: "usd",
amount: 5000,

Authorize, Capture, and Refund Payment

The Payment Module provides essential features to receive and handle payments, including authorizing, capturing, and refunding payment.

await paymentModuleService.capturePayment({
payment_id: "pay_1",

Integrate Third-Party Payment Providers

Use payment providers like Stripe and PayPal to handle and process payments.

const payment =
await paymentModuleService.createPaymentSession(
provider_id: "stripe",
amount: 1000,
currency_code: "usd",
data: {
// necessary data for the payment provider

Handle Webhook Events

The Payment Module allows you to handle webhook events from third-party providers and process the associated payment.

await paymentModuleService.processEvent({
provider: "stripe",
payload: {
// webhook payload

Configure Payment Module

After installing the @medusajs/payment package in your Medusa application, add it to the modules object in medusa-config.js:

const modules = {
// ...
apiKey: {
resolve: "@medusajs/payment",
options: {
// ...

Module Options



A number indicating the delay in milliseconds before processing a webhook event.




The number of times to retry the webhook event processing in case of an error.




An array of payment providers to install and register. Learn more here.



How to Use Payment Module's Service

You can use the Payment Module's main service by resolving from the dependency container the resource ModuleRegistrationName.PAYMENT imported from @medusajs/modules-sdk.

For example:

import { MedusaRequest, MedusaResponse } from "@medusajs/medusa"
import { IPaymentModuleService } from "@medusajs/types"
import { ModuleRegistrationName } from "@medusajs/modules-sdk"

export async function GET(
req: MedusaRequest,
res: MedusaResponse
): Promise<void> {
const paymentModuleService: IPaymentModuleService =

await paymentModuleService.listPaymentCollections(),
Was this section helpful?