Skip to main content

Product attributes

Route: /org/inventory/attributes · Module: org_inv_attributes — 6 permissions Permission to view: View Product atributes

The permission prefix does not match the module name

This module is org_inv_attributes, but its permissions are all org.inventory.prodcat.attribute.* — under the product category prefix, not an attributes one. The permission to grant is View Product atributes. See Permissions.


1. What a product attribute is​

A reusable option set. Spice Level is an attribute; Mild, Medium, Hot, Extra Hot are its values. Attributes are defined once here and then used across many products.

They exist to produce variations. A product with a Serving Size attribute of Single / Half / Full has three sellable rows, each with its own SKU and price.

AttributeCategoryUnit
AnswersWhich version of this product?What kind of thing is this?How is it counted?
StructureFlat list of valuesA nested treeA single code
Customer seesThe variation selectorNavigation"6 Pieces"
Figure 1 — The Attribute Library. Six attributes, values shown as chips.

2. How attributes spread through the application​

SurfaceUses attributes to
Product editorBind values to each variation
VariationsDistinguish one sellable row from another
Storefront product pageRender the option selector a customer picks from
External APIExpose the option set under inventory:config:read

3. Step by step​

Step 1 · Read an existing attribute​

Figure 2 — One card: name, technical code, description, values.

Each card carries four things.

The name is what staff read. The technical code beneath it — cooking_method — is the stable identifier used by analytics and the API.

The description explains the attribute's purpose to whoever picks values later.

The chips are the attribute's values, in order.

The code, not the name, is the stable handle

Renaming Cooking Method to Preparation changes the label everywhere. The code cooking_method stays, and it is what an API consumer or a report is matching on. Change the code only if you are prepared to update those.

Step 2 · Create an attribute​

Figure 3 — The create drawer. Values start empty.

Create Attribute opens a right-hand drawer.

Attribute Name and Technical Code — the code's helper text says "Technical identifier used for analytics", and the placeholder suggests the convention: spice_lvl, lower snake case.

The Active toggle defaults on.

Attribute Values starts empty — "No values defined yet." — with Add the first value.

Step 3 · Add values​

Add Value appends a row; the counter beside the section heading tracks how many. The helper line states the intent plainly: "Values define the options available for this attribute (e.g., Red, Blue for Color)."

An attribute with no values does nothing

It saves happily, appears in the library, and produces no variations — because there is nothing to choose between. An attribute is only useful once it has at least two values.

Step 4 · Use it on a product​

Attributes are not assigned to products on this screen. Binding happens in the product editor, per variation.


4. Field reference​

FieldTypeRequiredNotes
Attribute Nametext✅The staff-facing label
Technical Codetext✅Lower snake case by convention. Used by analytics and the API
Activetoggle—Defaults on. Inactive attributes are not offered on new variations
Descriptiontextarea—Shown on the card
Attribute Valuesrepeating rows—Added one at a time; the count shows beside the heading

Language Context​

English · Bengali · Hindi, in the header. As on the other master-data screens, it selects which stored translation is displayed rather than translating anything.


5. The admin contract​

Must be trueOr else
A project is selectedThe library renders empty
The role holds View Product atributesThe screen is not reachable
The attribute has ≥ 1 valueIt produces no variations
The attribute is ActiveIt is not offered on new variations

6. Downstream — what changes when this changes​

ChangeEffect
Rename the attributeLabel changes everywhere, including the storefront selector
Change the technical codeAnalytics and API consumers matching on the old code stop matching
Add a valueAvailable immediately for new variations; existing variations unchanged
Remove a valueVariations already bound to it keep their binding
DeactivateExisting variations unaffected; not offered for new ones

7. Don't confuse this with…​

CategoriesClassify products against each other. Attributes distinguish variants within a product
VariationsThe sellable row that results from attribute values
TagsFree labels on a product, used for filtering only

8. Troubleshooting​

SymptomCause
Library is emptyNo project selected
A role with "attributes" permissions sees nothingThe prefix is prodcat.attribute.* — see the warning at the top
The attribute produces no variationsIt has no values
A value is missing from the variation editorThe attribute is inactive, or the value was added after the variation was built
Deleting an attribute is refusedDELETE is gated on prodcat.attribute.**edit**, not .delete — the .delete permission is never checked. See Permissions