Medusa Docs

Platform Admin

Promo Codes

Create, monitor and disable discount codes used by Medusa subscription checkout.

Open Promo Codes

  1. 1Sign in with an authorized Medusa platform-admin account.
  2. 2Open /dashboard/admin/promo-codes.
  3. 3Review the summary counters before creating or changing a code.

Create a promo code

  1. 1Enter the Code.
  2. 2Choose Percentage or Fixed USD amount.
  3. 3Enter the Discount value. Percentage discounts can be configured up to 100%.
  4. 4Optionally set an Expiry date.
  5. 5Choose the package scope: Basic + Advanced, Basic only or Advanced only.
  6. 6Choose the billing scope: Monthly + Yearly, Monthly only or Yearly only.
  7. 7Optionally set Max total uses. Leave it empty for an unlimited global count.
  8. 8Set Uses per user.
  9. 9Click Create Promo Code.

100% discount behavior

A 100% percentage promo produces a final checkout amount of zero. The free activation still uses a server-created, order-bound reference and a promo reservation, but no USDC transfer is required. Checkout presents the action as Activate Free rather than asking the customer to send a zero-value transaction.

100% is still audited

The free path remains tied to the validated promo reservation and subscription order so global and per-user usage limits continue to apply.

Usage counters

  • Redeemed: completed promo uses.
  • Reserved: currently held checkout reservations that have not yet completed or expired.
  • Remaining: remaining global uses when the code has a Max total uses limit.
  • Active codes: codes that can still be applied to new eligible checkouts.

Disable a code

  1. 1Find the code under the existing promo-code list.
  2. 2Disable the code.
  3. 3Confirm its state changes to disabled.

Disable instead of deleting history

A disabled code remains available for operational history but is rejected for new checkout validation.

If the promo list cannot refresh

A technical load error should be treated separately from an authorization error. The Promo Codes page is designed to preserve the administration view and expose a retry path for technical refresh failures rather than presenting every backend error as lost platform-admin access.

Still need help? Follow the troubleshooting checklist before escalating the issue.Open troubleshooting →