{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":[]},"type":"markdown"},"seo":{"title":"Data Model","siteUrl":"https://docs.apiera.io","projectTitle":"Apiera Docs","description":"Entity relationships and how resources connect in the Apiera API","lang":"en","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"data-model","__idx":0},"children":["Data Model"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Apiera PIM data model is organized around ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["products"]}," as the central entity, with supporting resources for"," ","taxonomy, content, assets, and distribution."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"core-entities","__idx":1},"children":["Core entities"]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"product","__idx":2},"children":["Product"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The central entity. A product represents a single item in your catalog."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Field"},"children":["Field"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["simple"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parent"]}," (variant parent), or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["variant"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["familyUuid"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional. Links to a product family that defines its data structure."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parentUuid"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["For variants only. Links to the parent product."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["brandUuid"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Optional. Links to a brand."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Products connect to most other entities in the system through sub-resources:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ProductAttribute"]}," - Links a product to an attribute (e.g. \"Color\")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ProductAttributeTerm"]}," - Links a product attribute to a specific term (e.g. \"Red\")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ProductCategory"]}," - Links a product to a category."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ProductTag"]}," - Links a product to a tag."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ProductAsset"]}," - Links a product to an asset (image, document, etc.) with a type and sort order."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ProductRelation"]}," - Links a product to another product with a relation type (e.g. \"accessory\", \"spare part\")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ProductInputValue"]}," - Stores a product's field values, scoped by channel and locale."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"product-family","__idx":3},"children":["Product family"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A template that defines the data structure for a group of products. Families specify which attributes, categories,"," ","asset types, input types, and relation types are relevant for their products, along with requirement levels."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Sub-resource"},"children":["Sub-resource"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Purpose"},"children":["Purpose"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["FamilyAttribute"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Which attributes apply, with requirement level (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["must"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["should"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["may"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["mustNot"]},")."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["FamilyCategory"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Which categories apply, with requirement level."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["FamilyAssetType"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Which asset types apply, with min/max counts and product type applicability."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["FamilyInputType"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Which input types apply, with requirement level and product type applicability."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["FamilyRelationType"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Which relation types apply, with min/max counts."]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Families support ",{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["hierarchy"]}," through a ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parentUuid"]}," field, allowing child families to inherit configuration from"," ","their parent."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"taxonomy","__idx":4},"children":["Taxonomy"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Taxonomy resources organize and classify products:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Attribute"]}," - A product property (e.g. \"Color\", \"Material\"). Contains attribute terms."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["AttributeTerm"]}," - A specific value for an attribute (e.g. \"Red\", \"Cotton\")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Category"]}," - A hierarchical classification (supports parent/child via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["parentUuid"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Tag"]}," - A flat label for flexible grouping."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Brand"]}," - A product brand."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ProductAssetType"]}," - Defines types of assets (e.g. \"Main Image\", \"Datasheet\"). Has an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["isFeatured"]}," flag."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ProductRelationType"]}," - Defines types of product relations with direction and optional reverse relation."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"asset","__idx":5},"children":["Asset"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["An asset represents a file (image, document, video, etc.) in the system:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Asset"]}," - The container with metadata, category, and storage location."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["File"]}," - An individual file version within an asset, with MIME type, checksum, and storage key."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["AssetMetadata"]}," - Key-value pairs for additional metadata (dimensions, EXIF data, etc.)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Collection"]}," - A hierarchical folder structure for organizing assets."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"input-type","__idx":6},"children":["Input type"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Input types define the data fields available for product content:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["TypeGroup"]}," - Groups related input types together. Scoped by entity type."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["InputType"]}," - A specific field definition with data type, validation rules (min/max length, pattern), and flags"," ","for localizability and uniqueness."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"channel","__idx":7},"children":["Channel"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A channel represents a distribution target (e.g. \"Web Store\", \"Print Catalog\"):"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Channel"]}," - The distribution target with a code and display name."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["ChannelInputType"]}," - Defines which input types are available in a channel, with requirement level and whether"," ","the value is scopable."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"locale","__idx":8},"children":["Locale"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A locale defines a language/region for localized content, using BCP 47 codes (e.g. ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["en-US"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["nb-NO"]},"). One locale per"," ","organization is marked as the default."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"how-entities-connect","__idx":9},"children":["How entities connect"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The product sits at the center of the data model, connecting to taxonomy, content, and distribution:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"                        Product Family\n                        (template)\n                             |\n                             | familyUuid\n                             v\nBrand  ---brandUuid--->  Product  <---parentUuid--- Product (variant)\n                          |   |\n            +-------------+   +-------------+\n            |             |                 |\n            v             v                 v\n     ProductAttribute  ProductAsset   ProductInputValue\n            |              |               |    |\n            v              v               v    v\n       Attribute        Asset          Channel  Locale\n            |\n            v\n      AttributeTerm\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Key patterns:"]}]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Products reference taxonomy by UUID."]}," A ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ProductAttribute"]}," stores the product UUID and the attribute UUID."," ","The attribute itself is managed in the taxonomy service."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Input values are scoped."]}," Each ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ProductInputValue"]}," can be scoped to a specific channel and locale, enabling"," ","per-market, per-language content."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Families define structure, products hold data."]}," The family says \"products in this group should have a Color"," ","attribute\". The product actually links to the Color attribute and its terms."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Assets are shared."]}," An asset exists independently and can be linked to multiple products via ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ProductAsset"]},"."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"identifiers","__idx":10},"children":["Identifiers"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All entities use UUID v7 as their primary identifier. UUIDs are generated server-side and returned in creation"," ","responses. You cannot specify your own UUIDs."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"timestamps","__idx":11},"children":["Timestamps"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["All entities include ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["createdAt"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["updatedAt"]}," timestamps in UTC. Entities that support soft deletion also include"," ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["removedAt"]},". Products additionally include ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["archivedAt"]},"."]}]},"headings":[{"value":"Data Model","id":"data-model","depth":1},{"value":"Core entities","id":"core-entities","depth":2},{"value":"Product","id":"product","depth":3},{"value":"Product family","id":"product-family","depth":3},{"value":"Taxonomy","id":"taxonomy","depth":3},{"value":"Asset","id":"asset","depth":3},{"value":"Input type","id":"input-type","depth":3},{"value":"Channel","id":"channel","depth":3},{"value":"Locale","id":"locale","depth":3},{"value":"How entities connect","id":"how-entities-connect","depth":2},{"value":"Identifiers","id":"identifiers","depth":2},{"value":"Timestamps","id":"timestamps","depth":2}],"frontmatter":{"seo":{"title":"Data Model","description":"Entity relationships and how resources connect in the Apiera API"}},"lastModified":"2026-03-16T10:52:36.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/concepts/data-model","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}