> ## Documentation Index
> Fetch the complete documentation index at: https://developer.fabric.inc/llms.txt
> Use this file to discover all available pages before exploring further.

# Create update and delete item attributes

> Item attributes allow you to define specific characteristics for items. Common examples of attributes include size, color, and material. Well-defined attributes are important because they enable item discovery and make catalog management easier. <br /> This endpoint creates and updates item attributes to be assigned later. <br /> **Note**: <br /> 1) You can add and manage unlimited attributes for your items. Once they are created, they appear as a selectable option on product pages. <br /> 2) In addition, you can assign attributes to items on an individual level or in bulk.



## OpenAPI

````yaml pim post /api-product/v1/product/attribute/bulk
openapi: 3.0.0
info:
  title: Product Catalog
  description: >-
    As brands and retailers grow, they often expand their item catalogs,
    resulting in the need to enrich and manage more product (commonly referred
    to as item in fabric) data. fabric Product Catalog alleviates the burden of
    managing large amounts of item data by means of a central storage
    repository. fabric Product Catalog helps you with improved data quality,
    consistent customer experience, reduced time to market, easy integration
    with external systems, reduced management costs and risks, faster and easier
    updates, and easy scaling. You can create, import, enrich, validate,
    distribute, and manage complex item information, centrally. As a result, you
    deliver product experiences that drive sales through every channel. <br />
    <br /> During onboarding, you are given the necessary credentials to access
    Product Catalog - Copilot UI, APIs, or both. As a prerequisite, you create
    the items to be sold, identify their unique as well as common properties,
    and envision their organization into categories and sub categories. A basic
    workflow is: <br /> 1) **Create item attributes** using POST
    /api-product/v1/product/attribute/bulk. <br /> 2) **Update attribute
    mapping** using POST /api-product/v1/product/attribute/mapping <br /> 3)
    **Create Primary category** using the POST /api-category/v1/category to
    create the original organizational structure. <br /> 4) **Assign item
    attributes** to Primary category using POST
    /api-category/v1/category/item-attribute. <br /> 5) **Create items** using
    POST /api-product/v1/product/bulk/insert. <br /> 6) **Create Alternate
    category**, for distribution management and fulfilling various merchandising
    objectives.
  version: 2.0.0
  contact:
    email: support@fabric.inc
  license:
    name: fabric API License
    url: https://fabric.inc/api-license
servers:
  - url: https://live.copilot.fabric.inc
    description: Production
security: []
tags:
  - name: Category
    description: >-
      Categories (also called hierarchies or nodes) are hierarchical structures
      to organize items and services into intuitive groups. Organizing items in
      this way simplifies item discovery and lifecycle management. There are two
      types of categories - **Primary** and **Alternate**. They enable you to
      create, organize, and distribute item data.  - Primary category is the
      original catalog tree with nested levels of categories that place each
      item where it belongs, within a category. For example, `Computers` is a
      parent category with `Laptops` and `Desktops` as children categories, and
      `MacBook Pro` is an item within `Laptops`. This organization can be
      represented as Computers > Laptops > MacBook Pro.  - Alternate categories
      serve as alternate organizations of the Primary category. Their main
      purpose is distribution management by displaying items on your website
      based on separate browsing structure configurations you set to help you
      achieve various merchandizing objectives, such as organizational
      requirements, multi-regional assortments, multi-channel assortments, and
      collections. For example, a company that sells, repairs, and supports
      computers and related items and services will have a Primary category
      containing a full list of their SKUs. However, this Primary category is
      not granular enough to use on their storefront. Hence, multiple Alternate
      hierarchies are created to target specific shopper segment experiences.
      For laptop consumers they'll have one Alternate category, which lists all
      the laptops and PCs. For large businesses they'll have  another Alternate
      category, which lists all commercial laptops, PCs, printers, and servers.
      Both of the Alternate categories act as filters of the Primary category,
      tailored to the purpose of that merchandising strategy.  **Category**, a
      subset of Product Catalog endpoints, aims to simplify catalog management
      by letting you create, update, and get one or more categories, category
      attributes, and item attributes. In addition, you can add and update
      category sources, source exclusions, and item attribute conditions.  
      **Note**: The root name of primary category is PRIMARY, and it cannot be
      changed.
  - name: Product
    description: >-
      **Product**, a subset of Product Catalog endpoints, aims at making item
      management more efficient. They create, update, and get items, which may
      be individual items or collection of items (called bundles). Each item has
      a title, item ID, description, category, and assigned attributes. Multiple
      options of a given item become variants of that item. For example, a
      t-shirt with three sizes may have small, medium, and large variants. Each
      variant has its own item ID, attributes, and other data points. Each
      variant is nested under its parent item, allowing the different options to
      appear on the same product page. You can also create or update one or more
      item attributes and attribute groups.
  - name: Attributes
    description: >-
      Item attributes are the objective and factual descriptions of items that
      shoppers see when they browse through your site. Attributes may be
      technical specifications like size, weight, etc., design specifications
      like color, material, etc., or basic specifications like name,
      description, and ID. Ites attributes are crucial as they directly
      influence purchasing decisions. Complete and correct item information help
      shoppers narrow down their search and filter items with minimal cognitive
      load.
  - name: Bulk Import
    description: >-
      Set of endpoints to help bulk import of items, bundles, categories and
      attributes through CSV files
externalDocs:
  description: Find out more about Product Catalog
  url: /v3/product-catalog/user-guides/product-catalog/overview
paths:
  /api-product/v1/product/attribute/bulk:
    post:
      tags:
        - Attributes
      summary: Create update and delete item attributes
      description: >-
        Item attributes allow you to define specific characteristics for items.
        Common examples of attributes include size, color, and material.
        Well-defined attributes are important because they enable item discovery
        and make catalog management easier. <br /> This endpoint creates and
        updates item attributes to be assigned later. <br /> **Note**: <br /> 1)
        You can add and manage unlimited attributes for your items. Once they
        are created, they appear as a selectable option on product pages. <br />
        2) In addition, you can assign attributes to items on an individual
        level or in bulk.
      operationId: postProductAttributeBulk
      parameters:
        - $ref: '#/components/parameters/xSiteContent'
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/BulkProductAttributeRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/BulkAttributeResponse'
        '400':
          description: Client error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ClientError'
        '500':
          description: Internal server error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServerError'
      security:
        - authorization: []
components:
  parameters:
    xSiteContent:
      name: x-site-context
      in: header
      description: >-
        The `x-site-context` header is a JSON object that contains information
        about the source you wish to pull from. The mandatory `account` is the
        24 character identifier found in Copilot. The `channel` (Sales channel
        ID), `stage` (environment name), and `date` attributes can be used to
        further narrow the scope of your data source.
      required: true
      schema:
        type: string
        example: >-
          {"date": "2023-01-01T00:00:00.000Z", "channel": 12, "account":
          "1234abcd5678efgh9ijklmno","stage":"production"}
  schemas:
    BulkProductAttributeRequest:
      type: array
      items:
        type: object
        properties:
          action:
            type: string
            description: >-
              Action to perform. `id` is required only for `UPDATE`, or `DELETE`
              (not for CREATE). <br /> **Note**: `CREATE` action replaces any
              existing item attribute with the same name, if one already exists.
            enum:
              - CREATE
              - UPDATE
              - DELETE
            example: UPDATE
          id:
            description: A 24-character system-generated attribute ID
            type: string
            example: 621c1122ff2e4507c199b75d
          name:
            description: >-
              Attribute name, which is visible on all relevant Product Catalog
              pages.
            type: string
            example: Weight
          locales:
            type: array
            items:
              type: object
              properties:
                locale:
                  type: string
                  description: Language locale
                  example:
                    - fr-ca
                    - es-us
                name:
                  type: string
                  description: Localized value of 'name' for this attribute
                  example: le poids
          description:
            description: Attribute description
            type: string
            example: Example description.
          mapping:
            description: >-
              Attribute mapping of item. This corresponds to the `Attribute
              Mapping` settings of Product Catalog: `sku`, `title`, `image`,
              `active`, `isVariant`. <br /> **Note**: Most attributes do not
              have a mapping, in which case this will be null. <br />
              **Warning**: Exercise caution while adding or removing mappings of
              attributes, as it could lead to bad data.
            type: string
            example: title
          type:
            description: Attribute type
            type: string
            enum:
              - TEXT
              - BOOLEAN
              - SERIAL
              - DECIMAL
              - INTEGER
              - DATETIME
              - OPTIONS
          textSubType:
            description: Conditionally required sub-type for `TEXT` attribute type
            type: string
            enum:
              - SMALL_TEXT
              - TEXT_AREA
              - HTML
          serialStart:
            description: >-
              Conditionally required to indicate the starting value of `SERIAL`
              attribute type. When enabled, the subsequent attribute values
              increment by 1.
            type: number
            example: 1
          optionsType:
            description: >-
              Conditionally required to indicate the selectable values for the
              `OPTIONS` attribute type
            type: string
            enum:
              - TEXT
              - BOOLEAN
              - DECIMAL
              - INTEGER
              - DATETIME
          format:
            description: >-
              Attribute format. Currently used only for the attribute type
              `DATETIME`.
            type: string
            example: YYYY-MM-DD
          formula:
            description: >-
              JavaScript expression to dynamically compute the attribute's
              value. The type returned must match the attribute's type. If the
              attribute is weight, this formula helps calculate the weight. <br
              /> **Note**: When this is provided, `validation` is ignored.
            type: string
            example: '`${item.weightValue} ${item.weightUnit}`'
          validation:
            type: object
            properties:
              required:
                description: >-
                  true: Attribute is mandatory <br /> false: Attribute is
                  optional
                type: boolean
              inheritable:
                description: >-
                  true: Parent attributes inherited to children items <br />
                  false: Parent attributes not inherited to children items
                type: boolean
              inverse:
                description: >-
                  true: Inverts existing validation (example - requires that the
                  validation does not pass) <br /> false: Follows existing
                  validation
                type: boolean
              unique:
                description: >-
                  true: Specified value is unique across all items or nodes <br
                  /> false: Specified value is not unique
                type: boolean
              exact:
                description: Specified value must exactly match this value
                oneOf:
                  - type: string
                  - type: number
                  - type: boolean
              attributeTypes:
                description: Attribute types
                type: array
                example:
                  - Serial
                  - Integer
                items:
                  type: string
                  enum:
                    - TEXT
                    - BOOLEAN
                    - SERIAL
                    - DECIMAL
                    - INTEGER
                    - ASSET
                    - DATETIME
                    - RESOURCE
                    - DYNAMIC_LOV
              contains:
                description: Specified value must contain this string
                type: string
                example: Demo
              startWith:
                description: Sequence should start with this value
                type: number
                example: 1
              incrementBy:
                description: Sequence should increment by this value
                type: number
                example: 1
              range:
                description: Specified range of values must be between this min and/or max
                type: object
                properties:
                  min:
                    description: >-
                      Specified value must be greater than or equal to this
                      value
                    oneOf:
                      - type: string
                      - type: number
                  max:
                    description: Specified value must be less than or equal to this value
                    oneOf:
                      - type: string
                      - type: number
              formula:
                description: JavaScript expression to determine if the value matches
                type: string
                example: value < 10 || value > 20
              oneOf:
                description: Matches the value if it is one of these
                oneOf:
                  - type: array
                    items:
                      type: string
                  - type: array
                    items:
                      type: number
                  - type: array
                    items:
                      type: boolean
    BulkAttributeResponse:
      type: object
      properties:
        attributes:
          type: object
          properties:
            success:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                    example: 622932439c73c975335cb654
                    description: A 24-character system-generated attribute ID
                  name:
                    type: string
                    example: name
                    description: Attribute name
                  message:
                    type: string
                    description: Success message
                    example: Attribute created successfully
            failed:
              type: array
              items:
                type: object
                properties:
                  name:
                    type: string
                    example: ITEM_ATTRIBUTE_VALUE_IS_INVALID
                    description: Failure reason as stored backend
                  errors:
                    type: array
                    items:
                      type: string
                      example:
                        - Attribute value is invalid
                        - Attribute value not found
                      description: Human-readable failure reasons
    ClientError:
      type: object
      properties:
        code:
          description: Error code for machine consumption
          type: string
          example: 400
        message:
          description: Human-readable error description
          type: string
          example: Client error
    ServerError:
      type: object
      properties:
        code:
          description: Error code
          type: string
          example: 500
        message:
          description: Human-readable error description
          type: string
          example: >-
            An internal error occurred. If the issue persists please contact
            support@fabric.inc.
  securitySchemes:
    authorization:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: S2S access token (JWT) from fabric Identity service (during Login)

````