Skip to main content

Partner Subscription Plans

Partners are assigned subscription plans that control access to features.

Plans

PlanPriceFeatures
SimpleFree5 pages, 50 products, basic theme
Pro2,000 INR/month50 pages, 500 products, custom domain, full theme, analytics
Max5,000 INR/monthUnlimited pages/products, custom domain, full theme, analytics, priority support

All new partners are auto-assigned the Simple (free) plan.

Managing Plans (Partner Dashboard)

  1. Go to Settings > Plan & Billing
  2. View your current plan, billing period, and payment status
  3. Click Upgrade on any plan card to switch
  4. Paid plans can be canceled from this page

Payment Providers

The system automatically selects the payment provider based on the partner's region:

  • India (INR) — PayU
  • International — Stripe

Admin Management

Seed Plans (first-time setup)

npx medusa exec src/scripts/seed-partner-plans.ts

This is idempotent — running it again skips existing plans.

Assign a Plan to a Specific Partner

Edit the constants at the top of src/scripts/assign-plan-to-partner.ts:

const PARTNER_HANDLE = "partner-handle"
const PLAN_SLUG = "pro" // simple | pro | max
const PAYMENT_PROVIDER = "payu" // payu | stripe | manual

Then run:

npx medusa exec src/scripts/assign-plan-to-partner.ts

Record a Payment (Admin API)

POST /admin/partner-subscriptions/:id/payments
{
"amount": 2000,
"currency_code": "inr",
"provider": "payu",
"provider_reference_id": "payu_txn_123"
}

This extends the subscription period by 1 month.

View Payment History (Admin API)

GET /admin/partner-subscriptions/:id/payments

Automatic Renewal

A daily scheduled job (check-subscription-expiry) runs at midnight:

  1. Free plans — auto-renewed, $0 payment recorded
  2. Paid plans past due — marked past_due, pending payment created
  3. Past due > 7 days — marked expired

Data Model

PartnerPlan (name, slug, price, currency, interval, features)
└── PartnerSubscription (status, payment_provider, period_start/end)
└── SubscriptionPayment (amount, provider, provider_ref, paid_at)
└── Partner (via module link)

API Reference

EndpointMethodAuthDescription
/admin/partner-plansGETAdminList all plans
/admin/partner-plansPOSTAdminCreate a plan
/admin/partner-plans/seedPOSTAdminSeed default plans
/admin/partner-plans/:idGET/PUT/DELETEAdminManage single plan
/admin/partner-subscriptionsGET/POSTAdminList/create subscriptions
/admin/partner-subscriptions/:idGET/DELETEAdminView/cancel subscription
/admin/partner-subscriptions/:id/paymentsGET/POSTAdminPayment history/recording
/partners/subscriptionGETPartnerCurrent plan + available plans
/partners/subscriptionPOSTPartnerSubscribe/upgrade
/partners/subscriptionDELETEPartnerCancel subscription