Catalog Attribute Family — Detail
Returns a single attribute family record by ID, including all attribute groups and — within each group — all attributes associated via the attribute_group_mappings pivot (with their pivot position and column).
This is the read endpoint to call when an admin needs the complete structure of an attribute family — e.g. when opening the edit form in the Catalog → Attribute Families UI.
Endpoint
| Endpoint | Method | Authentication |
|---|---|---|
/api/admin/catalog/families/{id} | GET | Admin Bearer token |
{id} must be a positive integer. Non-numeric values are rejected by a route requirement (\d+) — this prevents the {id} segment from matching any other path under /catalog/families/.
Path Parameter
| Parameter | Type | Required | Description |
|---|---|---|---|
id | integer | Yes | The numeric attribute family ID |
Response Shape
The response is a single JSON object (not wrapped in { data }) with the following fields:
| Field | Type | Description |
|---|---|---|
id | integer | Attribute family ID |
code | string | Family code (e.g. default, apparel) |
name | string | Family display name (e.g. Default, Apparel) |
attributeGroups | array | All attribute groups belonging to this family (see below) |
attributeGroups[] item shape
Each entry in the attributeGroups array corresponds to one row in attribute_groups:
| Field | Type | Description |
|---|---|---|
id | integer | Attribute group ID |
code | string | Group code (e.g. general, price) |
name | string | Group display name (e.g. General, Price) |
column | integer | Layout column position for the group (typically 1 or 2) |
position | integer | Display order position of the group within the family |
attributes | array | Attributes mapped to this group (see below) |
attributeGroups[].attributes[] item shape
Each entry represents one attribute mapped to the group via attribute_group_mappings:
| Field | Type | Description |
|---|---|---|
id | integer | Attribute ID |
code | string | Attribute code (e.g. sku, name, color) |
type | string | Attribute type (e.g. text, select, boolean) |
isRequired | integer | 1 = required on product forms, 0 = optional |
column | integer | Layout column position of this attribute within the group |
position | integer | Display order position of this attribute within the group |
attributeGroups and the nested attributes arrays arrive as plain inline JSON — no IRI strings, no sub-resource links — so one call returns the family's whole structure. Every id inside is numeric.
Errors
| HTTP Status | Cause |
|---|---|
401 Unauthorized | Missing, expired, or revoked admin Bearer token |
401 Unauthorized | Missing or invalid admin Bearer token |
404 Not Found | The specified {id} does not exist in the database |
Notes
attributeGroupsis a plain JSON array, not a sub-resource IRI. Groups and their nested attributes are embedded directly in the response — no follow-up requests are needed.attributeGroupsisnullin listing rows. TheGET /api/admin/catalog/familieslisting returns onlyid,code, andname. The full nested payload is only available from this detail endpoint.- No timestamps. The
attribute_familiestable has$timestamps = false— there are nocreatedAtorupdatedAtfields on the family itself. Theattribute_groupstable similarly carries no timestamps. columnandpositionfields come from theattribute_group_mappingspivot and control where each attribute is rendered in the product-creation form layout.columnis typically1or2(left or right panel);positioncontrols vertical order.- The
{id}route parameter must be a digit. The route carries arequirements: ['id' => '\d+']constraint — non-numeric path segments are rejected with404before reaching the provider. - Attribute detail fields are slim. Only the fields needed for family-structure display are returned per attribute (
id,code,type,isRequired,column,position). For the full attribute payload (translations, options, validation), useGET /api/admin/catalog/attributes/{id}.

