Attribute types
Attribute fields
Each select attribute owns a ranked list of values (
ProductAttributeValue), managed by the operator in the Admin Panel.
Global vs product-scoped
- Global attributes (
product_id = null) live in the marketplace-wide catalog. They can be attached to any product and linked to categories, so the right attributes surface for the right product types. - Product-scoped attributes are created inline from a single product’s form — a one-off axis or field that doesn’t belong in the shared catalog. They don’t appear in the global attribute list.
Variant axes and native product options
Attributes markedis_variant_axis are not a parallel system — a variant-axis attribute is backed by a native Medusa global product option. The attribute and its values mirror one-to-one onto a ProductOption and its option values:
- A global axis attribute maps to a shared product option that many products link to, each restricted to its selected subset of values.
- A product-scoped axis attribute maps to an exclusive, product-owned option.
variants[].options maps axis titles to value names, exactly as in a plain Medusa project. Non-axis attributes never become options; they attach as plain value links.
Only multi_select attributes can be variant axes — an axis needs an enumerable set of values to combine into variants.
Attaching attributes to products
Products manage their attributes through a single batch endpoint that adds, removes, and updates in one request:id (with the selected value_ids, or a value for text/unit/toggle types) or defines an inline one by title — created product-scoped on the fly.
At product create time, the same shape is passed as a unified attributes[] array.
Who manages what
Attribute changes on products submitted by vendors flow through the same change-request pipeline as other product edits.
Next steps
Products
The master catalog attributes describe.
Product Requests & Approvals
How attribute edits are reviewed.