status that decides who can see it and whether it’s for sale. Mercur uses that status as a review gate: stores submit products as proposed, and an operator decides whether each one joins the published catalog.
The four statuses
The status lives in thestatus field of Medusa’s Product model. Mercur re-exports the values as ProductStatus from @mercurjs/types. The model default is draft.
Review transitions
Mercur ships one workflow per review step. Each one reads the product, checks its status withvalidateProductsStatusStep, records a confirmed ProductChange, and emits an event.
The three review workflows run only on
proposed products. A product in any other status fails with a NOT_ALLOWED error that lists each product id and its current status.
Starting status
The status a product starts in depends on who creates it.createProductsWorkflow passes the status you give it to Medusa, which falls back to draft.
- Vendor API: defaults to
proposed; a store may also senddraft - Admin API: uses the request’s
status, ordraftwhen it has none - Your own code: whatever you pass, or
draft
product_request feature flag, which is on by default. Turn it off with MEDUSA_FF_PRODUCT_REQUEST=false and stores can create products in any status, including published.
.env
Changes outside the review workflows
Mercur ships no workflow that moves adraft to proposed, or a published product back. Those changes go through a regular product update. The admin API runs Medusa’s updateProductsWorkflow for that, which accepts any status.
Related
- Publish or reject a product to run the review workflows
- Workflows reference for inputs and hooks
- Change pipeline for how edits to existing products are reviewed