An attribute is a typed field definition, such as material, weight or meta_title. Attributes are data, not code: you add one through the admin or the API, attach it to an attribute family, and products in that family can carry a value for it immediately. No migration, no deploy.
In the admin
Attributes live under Catalog → Attributes, which has three sections: Product families, Attributes and Groups.
- In Attributes, click New.
- Enter a Code (lowercase snake_case, used as the JSON key) and an English label.
- Pick a Type (see Attribute types) and optionally a Group.
- Set the flags: Localizable (different value per locale), Scopable (different value per channel), Variant axis (defines variants).
- Choose a Requirement: Required, Suggested or Available. New attributes start as Suggested in the admin.
- Optionally set a Default value (see Default values) and type-specific Validation, then click Create attribute.
Click Edit on an attribute to change it later. Delete there first shows how many records hold a value for it.
With the API
| Method | Path | What it does |
|---|---|---|
| GET | /v1/attributes?entityKind=product | List attributes of one kind |
| POST | /v1/attributes | Create |
| GET / PATCH / DELETE | /v1/attributes/{id} | Read, update, delete |
| GET | /v1/attributes/{id}/usage | Count products, variants, content pages, categories and brands holding a value |
| GET / POST | /v1/attribute-groups | List or create editor groups |
curl -X POST https://api.minipim.com/v1/attributes \
-H "Authorization: Bearer pim_…" \
-H "Content-Type: application/json" \
-d '{
"code": "weight",
"label": { "en_US": "Weight" },
"type": "measurement",
"requirement": "suggested",
"validation": { "unitFamily": "mass" }
}'
entityKind is product (default), content, category or brand. Full reference: api.minipim.com/docs.
Requirement levels
required: must be filled before a product can go active, and counts toward readiness.suggested: always shown on edit screens, never counted.available: part of the family but hidden on a record until it has a value or someone picks it from Add a field….
The API defaults to available. A family can override the level per attribute. isRequired is still accepted and returned for older clients; requirement wins when both are sent.
Rules and limits
- Codes must match
^[a-z][a-z0-9_]*$. - Codes are unique per organization and entity kind, so products, content pages, categories and brands can each have their own
description. entityKindcan’t be changed after creation. Delete and recreate instead.- A value on a non-localizable attribute must have
locale: null; on a non-scopable one,channel: null. A localizable attribute’s values must name a locale. Scopable attributes acceptchannel: nullas the fallback for every channel. The API doesn’t check locale or channel codes in values against the ones you’ve configured, so watch for typos. - Changing an attribute’s code or type doesn’t migrate values already stored under it.
- Deleting an attribute deletes every stored value under its code, on every record of that kind, and detaches it from all families. Check
/usagefirst. Theattribute.deletedevent reports how many rows were touched. selectandmultiselectattributes created through the API or admin start with an open list: an unlisted value is accepted and added to the options. Setvalidation.allowNewValues: false(in the admin, untick Let editors add values as they go) for a closed list.- Groups only organize the product editor. They don’t affect validation.
- Variant-axis attributes appear on variants, not in the product’s attribute editor. Making one required blocks products from going active.
See also
- Attribute types — All 19 minipim attribute types, the JSON value shape each one accepts, the validation options per type, and which types the admin can create, edit and default.
- Attribute families — Attribute families define which attributes a minipim product carries: attaching attributes, requirement overrides, ordering, moving products, deletion.
- Default values — Give a minipim product attribute a default value that is filled in when new products are created. Which types qualify, when defaults apply and when they don't.
- Locales and translations — Add locales, mark attributes localizable, enter translated values, and read them back with ?locale=. Covers the default locale and how fallback works.