Marketplace Platform (Old)
Marketplaces on an open-source foundation
Build flexible, scalable
multi-vendor marketplaces
Medusa gives you full control to build and scale custom marketplaces.
With support for multiple vendors, custom payouts, and open architecture,
Medusa provides the commerce logic you need to power your marketplace.
Trusted by leading marketplaces
Everything you need to launch a marketplace
Flexible infrastructure for multi-vendor commerce
Medusa is a developer-first platform designed to power custom marketplaces. Add seller roles, automate payouts, and build tailored experiences for every user. All backed by an open, composable architecture that fits your stack.
- Split payments & automated payouts
- Vendor verification & onboarding
- Commission management
- Multi-vendor unified checkouts
- Complete seller dashboards
- Advanced search & filtering
Flexibility at the core
Seamless multi-vendor shopping experience
Give customers a smooth experience with unified checkout, fast search, vendor profiles, reviews, messaging, and more.

Vendor dashboard
Let vendors manage their commerce with ease
Vendors get a full dashboard to manage products, orders, and earnings. Product listing is streamlined and payouts are automated through Stripe Connect.

Medusa Cloud
Infrastructure for your MercurJS project
MercurJS projects can be easily deployed on Medusa Cloud, so you can benefit from features like push-to-deploy workflows, auto-scaling, instant preview environments, and more.

Core commerce primitives
Headless marketplace software with no limits
Medusa gives you the building blocks for core commerce like carts, products, and orders. Orchestrate them for your unique marketplace business model. Integrate with any service, connect to your existing tools, and own the full user experience across both sides of the marketplace.
Cloud platform
Open-source flexibility with cloud reliability
Medusa Cloud lets you scale your marketplace with confidence. Get the freedom to customize with the security, uptime, and support of cloud infrastructure — all while avoiding vendor lock-in.

Real-world examples
Trusted by leading marketplaces
Medusa is the world’s most popular open-source commerce platform. Learn why leading marketplaces choose our flexibility.
Connecting 1000+ sellers
Seamlessly integrated multiple ERPs to handle large order volumes
Custom features in half the time
Aid distribution to 500k individuals through Medusa
TTM -30%, traffic +34%
Boosting performance for Poland's biggest vintage marketplace
+€4bn revenue
Building the Booking.com for mobile heating and cooling
Framework for customizations
Faster time to market with our framework
Our framework tooling lets you build custom integrations and features in no time. Easily add custom data models, modules, workflows, UI extensions, and API endpoints.
store.medusajs.com
create-order-in-erp.ts
sync-order-to-erp.ts
A workflow step performs a query or action in a system. Steps can receive inputs from previous steps and return data to be used in subsequent steps. You can resolve services in your steps, allowing you to build business logic involving Medusa’s core commerce modules, third-party systems, or custom systems.
To connect multiple steps together you create a Workflow. Creating a Workflow is like writing any other function. Behind the scenes Medusa generates a representation of your workflow that enables automatic retries of steps if they fail.
If step retries don't succeed, Medusa will rollback previous steps. A rollback will call a step's compensation method, ensuring your data is kept consistent across systems.
You can trigger your workflows anywhere in Medusa. Use your workflows in Subscribers to start them in response to an event. Start them in response to requests with API Routes. Or have them run on a defined schedule with Scheduled Jobs.
src > workflows > steps > create-order-in-erp.ts
1
A workflow step performs a query or action in a system. Steps can receive inputs from previous steps and return data to be used in subsequent steps. You can resolve services in your steps, allowing you to build business logic involving Medusa’s core commerce modules, third-party systems, or custom systems.
create-order-in-erp.ts
sync-order-to-erp.ts
src > workflows > steps > create-order-in-erp.ts
123456789101112import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"export const createOrderInERP = createStep("create-order-in-erp"async (order: StepInput, { container }) => {const erpService = container.resolve("erp")const createdOrder = await erpService.createOrder(order)return new StepResponse(createdOrder)})
To connect multiple steps together you create a Workflow. Creating a Workflow is like writing any other function. Behind the scenes Medusa generates a representation of your workflow that enables automatic retries of steps if they fail.
create-order-in-erp.ts
sync-order-to-erp.ts
src > workflows > sync-order-to-erp.ts
1234567891011121314151617181920import { createWorkflow, WorkflowResponse } from "@medusajs/framework/workflows-sdk"import { createOrderInERP, transformOrder } from "./steps"export const syncOrderToERP = createWorkflow("sync-order-to-erp",(input: WorkflowInput, { container }) => {const medusaOrder = retrieveOrder(input.order_id)const createdOrder = when({ medusaOrder }, ({ medusaOrder }) => {return medusaOrder.status === "completed"}).then(() => {const preparedOrder = transformOrder(medusaOrder)return createOrderInERP(preparedOrder)})return new WorkflowResponse(createdOrder)})
If step retries don't succeed, Medusa will rollback previous steps. A rollback will call a step's compensation method, ensuring your data is kept consistent across systems.
create-order-in-erp.ts
sync-order-to-erp.ts
src > workflows > accept-quote.ts
123456789101112131415161718import { createStep, StepResponse } from "@medusajs/framework/workflows-sdk"export const createOrderInERP = createStep("create-order-in-erp"async (order: StepInput, { container }) => {const erpService = container.resolve("erp")const createdOrder = await erpService.createOrder(order)return new StepResponse(createdOrder, createdOrder)},// In the face of errors, we roll back and delete the orderasync (createdOrder, { container }) => {const erpService = container.resolve("erp")await erpService.deleteOrder(createdOrder)})
You can trigger your workflows anywhere in Medusa. Use your workflows in Subscribers to start them in response to an event. Start them in response to requests with API Routes. Or have them run on a defined schedule with Scheduled Jobs.
create-order-in-erp.ts
sync-order-to-erp.ts
src > subscribers > sync-order-to-erp.ts
123456789101112131415161718192021222324import {type SubscriberConfig,} from "@medusajs/framework"import syncOrderToErp from "../workflows/sync-order-to-erp"export default async function handleOrderPlaced({event: { data },container,}) {const orderService = container.resolve("order")const order = await orderService.retrieve(id)await syncOrderToErp(container).run({input: {order},})}export const config: SubscriberConfig = {event: "order.placed",}
Let’s talk
Ready to launch your marketplace?
Book a demo to see how Medusa powers modern marketplaces. Add vendors, automate payouts, and create flexible commerce experiences with open source technology.

