openapi: 3.0.1 info: title: Cart Actions Endpoints Attributes API description: fabric's **Cart API** lets you add, update, and remove items from your Storefront cart, either as a guest user or as a logged-in user. It also provides functionality to merge carts when you switch from guest user to logged-in user, and apply coupons and other attributes (for example, gift wrapping) to the line items. Additionally, the API supports more advanced tasks such as using multiple carts within a B2B organization, sharing carts, and supporting a unified cart experience for multi-region and multi-brand businesses.
The Cart API provides high performance, scalability, multi-tenancy, and configurability to the end-to-end order processing actions that start from the item being added to the cart; through the pre-checkout stage that includes billing, shipping, and payment details; to the checkout stage where the order is processed and confirmed by fabric's Order Management System (OMS)
contact:
name: Cart Support
email: support.cnc@fabric.inc
license:
name: fabric API License
url: https://fabric.inc/api-license
version: 3.0.0
servers:
- url: https://api.fabric.inc/v3
security:
- bearerAuth: []
tags:
- 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.
paths:
/api-category/v1/category/attribute/bulk:
post:
tags:
- Attributes
summary: Create, Update and Delete Category Attributes
description: 'Creates, updates and deletes category attributes. The primary purpose is to create and edit the attributes to be assigned to categories.
**Note**: They are generic category attributes and not specific to a category.'
operationId: postCategoryAttributeBulk
security:
- authorization: []
- api_key: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BulkAttributeRequest'
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'
/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.
This endpoint creates and updates item attributes to be assigned later.
**Note**:
1) You can add and manage unlimited attributes for your items. Once they are created, they appear as a selectable option on product pages.
2) In addition, you can assign attributes to items on an individual level or in bulk.'
operationId: postProductAttributeBulk
security:
- authorization: []
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'
/api-product/v1/product/attribute-group:
post:
tags:
- Attributes
summary: Create, Update and Delete Attribute Groups
description: 'Using attribute groups, you can group various attributes together to make it easier to manage large volume of item information.
Use this endpoint to create, update, or delete attribute groups.
**Note**: In the context of Product Catalog, attribute group is optional. When created, it must have at least one attribute.'
operationId: modifyAttributeGroups
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeGroupRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeGroupResponse'
'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'
/api-product/v1/product/attribute-group/search:
post:
tags:
- Attributes
summary: Find Attribute Groups
description: Find attribute groups based on the given search criteria. You will get a paginated response, which you can narrow down using filter criteria such as `page` and `size`.
operationId: searchAttributeGroups
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeGroupSearchRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeGroupSearchResponse'
'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'
/api-product/v1/product/attribute/mapping/search:
post:
tags:
- Attributes
summary: Find Attribute Mapping
description: Searches for attribute mapping based on the given search criteria. You will get a paginated response, which you can narrow down using filter criteria such as `page` and `size`.
operationId: searchAttributeMappings
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeMappingSearch'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeMappingPaginationResponse'
'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'
/api-product/v1/product/attribute/mapping:
post:
tags:
- Attributes
summary: Create and Update Attribute Mappings
description: Set your attribute mapping to begin configuring your catalog. You can update the mappings only if there are no SKUs present in the catalog.
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
operationId: modifyAttributeMappings
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeMappingModify'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeMappingResponse'
'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'
/v2/attributes/import:
post:
summary: Import Attributes from CSV
description: 'Upload a CSV file to import attribute definitions for the specified brand/domain. The import is processed asynchronously.
**Expected CSV columns**
- **attribute_name** (required): Attribute display name
- **attribute_key** (optional): Machine-readable key
- **description** (optional): Attribute description
- **data_type** (optional): Data type
- **scope** (optional): Attribute scope
- **enum_values** (optional): Allowed values, pipe-delimited (e.g. `S|M|L`)
- **allow_ai_content** (optional): Allow AI to generate values (`true`/`false`)
- **source** (optional): `MERCHANT` or `GOLD_STANDARD`
- **guideline_reason** (optional): Guidance for AI enrichment
'
operationId: importAttributes
parameters:
- $ref: '#/components/parameters/DomainHeader'
requestBody:
required: true
content:
multipart/form-data:
schema:
type: object
required:
- file
properties:
file:
type: string
format: binary
description: CSV file containing attribute definitions.
name:
type: string
description: Human-friendly import name.
example: Spring attributes import
responses:
'202':
description: Import accepted for asynchronous processing
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeImportAcceptedResponse'
example:
import_id: e2716438-b763-4be8-82d2-36abe0cb92b1
name: attribute_test.csv
status: PENDING
total_rows: 36
processed_rows: 0
created_count: 0
updated_count: 0
skipped_count: 0
failed_count: 0
input_filename: attribute_test.csv
input_file_url: null
error_file_url: null
error_message: null
errors: []
started_at: null
completed_at: null
created_at: '2026-03-12T18:04:03.879876Z'
'400':
description: Bad request - invalid CSV or missing file
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'401':
description: Unauthorized - missing or invalid token
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
tags:
- Attributes
/v2/attributes/import/{import_id}:
get:
summary: Get Attribute Import Status
description: Retrieve the current status and results of an attribute import created using `POST /v2/attributes/import`.
operationId: getAttributeImportStatus
parameters:
- $ref: '#/components/parameters/DomainHeader'
- name: import_id
in: path
required: true
description: Import ID returned from `POST /v2/attributes/import`.
schema:
type: string
format: uuid
example: e2716438-b763-4be8-82d2-36abe0cb92b1
responses:
'200':
description: Import status
content:
application/json:
schema:
$ref: '#/components/schemas/AttributeImportStatusResponse'
example:
import_id: e2716438-b763-4be8-82d2-36abe0cb92b1
name: attribute_test.csv
status: COMPLETED
total_rows: 36
processed_rows: 36
created_count: 35
updated_count: 0
skipped_count: 0
failed_count: 1
input_filename: attribute_test.csv
input_file_url: https://example.com/input.csv
error_file_url: https://example.com/errors.csv
error_message: null
errors:
- 'Row 35: invalid data_type ''BOOLREAN'''
started_at: '2026-03-12T18:04:03.998437Z'
completed_at: '2026-03-12T18:04:04.724584Z'
created_at: '2026-03-12T18:04:03.879876Z'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'404':
description: Import not found
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/errorResponse'
tags:
- Attributes
components:
schemas:
AttributeGroupSearchRequest:
type: object
properties:
page:
description: Page number to be retrieved
example: 0
type: number
size:
description: Number of records (attribute groups) per page
example: 10
type: number
include:
type: object
properties:
attributes:
type: boolean
description: 'true: Includes attributes
false: Excludes attributes'
match:
type: object
properties:
target:
description: Search target. Currently, supports only ITEM.
example: ITEM
type: string
or:
type: array
items:
type: object
properties:
name:
description: Attribute group name
example: weight
type: string
sort:
type: array
items:
type: object
properties:
field:
description: Field on which the results must be sorted
example: priorityOrder
type: string
direction:
description: Direction (ascending or descending) or sorting the response
example: DESC
type: string
enum:
- ASC
- DESC
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
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).
**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`.
**Note**: Most attributes do not have a mapping, in which case this will be null.
**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.
**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
false: Attribute is optional'
type: boolean
inheritable:
description: 'true: Parent attributes inherited to children items
false: Parent attributes not inherited to children items'
type: boolean
inverse:
description: 'true: Inverts existing validation (example - requires that the validation does not pass)
false: Follows existing validation'
type: boolean
unique:
description: 'true: Specified value is unique across all items or nodes
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
AttributeMappingModify:
type: object
properties:
mappings:
type: array
items:
type: object
properties:
attributeId:
description: Attribute ID
type: string
example: ATTR1234
mapping:
description: Attribute mapping
type: string
example: SKU
name:
description: Name of the attribute mapping
type: string
description:
description: Description of the attribute mapping
type: string
example: Item SKU
validation:
$ref: '#/components/schemas/AttributeValidation'
required:
description: 'true: Mapping is mandatory
false: Mapping is optional'
type: boolean
StatusResponse:
type: object
properties:
code:
description: Status code
type: string
type:
description: Status type
type: string
enum:
- ATTRIBUTE
- ATTRIBUTE_VALUE
- ITEM
- BUNDLE
- NODE
- HIERARCHY
source:
description: Status source
type: string
enum:
- PIM
- WAM
name:
description: Status name
type: string
description:
description: Status description
type: string
createdOn:
description: Time of file creation
type: string
format: date-time
createdBy:
description: User ID that created the file
type: string
example: broma0
modifiedOn:
type: string
format: date-time
description: Time when file was last modified
modifiedBy:
type: string
example: broma0
description: User ID that last modified the file
AttributeMappingResponse:
type: object
properties:
attributeId:
description: A 24-character system-generated attribute ID
type: string
example: 62e2ae29c3004a000950ad5f
attribute:
$ref: '#/components/schemas/AttributeResponse'
description: 'Represents the mapped attributes. Only populated when `include.attribute` is true.
**Note**: Not applicable for an attribute mapping modify request'
mapping:
description: Attribute mapping
type: string
example: SKU
target:
description: Returns attribute mapping for the specified target
type: string
example: ITEM
name:
description: Name of attribute mapping
type: string
example: Item SKU
description:
description: Description for attribute mapping
type: string
example: Item SKU
required:
description: 'true: Mapping is mandatory;
false: mapping is optional'
type: boolean
validation:
$ref: '#/components/schemas/AttributeValidation'
createdOn:
description: Time of attribute creation (UTC format)
type: string
format: date-time
example: '2021-09-23T17:47:04.231Z'
createdBy:
description: User ID that created item attribute
type: string
example: broma0
modifiedOn:
description: Time of when the attribute was last modified
type: string
format: date-time
modifiedBy:
description: User ID that last modified item attribute
type: string
example: broma0
AttributeMappingSort:
description: Sorting preference
type: array
items:
type: object
description: Individual fields to sort
properties:
field:
type: string
enum:
- createdOn
- updatedOn
- mapping
description: The field to sort must be specified. Sorting is based on the attribute's *raw* value.
direction:
type: string
enum:
- ASC
- DESC
description: Sorting direction
AttributeImportStatusResponse:
type: object
required:
- import_id
- status
- total_rows
- processed_rows
- created_at
properties:
import_id:
type: string
format: uuid
name:
type: string
example: attribute_test.csv
status:
type: string
example: COMPLETED
total_rows:
type: integer
example: 36
processed_rows:
type: integer
example: 36
created_count:
type: integer
example: 35
updated_count:
type: integer
example: 0
skipped_count:
type: integer
example: 0
failed_count:
type: integer
example: 1
input_filename:
type: string
example: attribute_test.csv
input_file_url:
type: string
format: uri
nullable: true
example: https://example.com/input.csv
error_file_url:
type: string
format: uri
nullable: true
example: https://example.com/errors.csv
error_message:
type: string
nullable: true
example: null
errors:
type: array
items:
type: string
example:
- 'Row 35: invalid data_type ''BOOLREAN'''
started_at:
type: string
format: date-time
nullable: true
completed_at:
type: string
format: date-time
nullable: true
created_at:
type: string
format: date-time
BulkAttributeRequest:
type: array
items:
type: object
required:
- type
- name
- action
properties:
action:
type: string
enum:
- CREATE
- UPDATE
- DELETE
example: UPDATE
description: 'Action type.
**Note**:
1) Attribute ID is required only for `UPDATE` and `DELETE` actions (not for CREATE).
2) `CREATE` action replaces any existing category attribute with the same name.'
id:
description: A 24-character system-generated attribute ID
example: 61ba11691a29d52cb2842541
type: string
name:
description: Attribute name
example: weight
type: string
description:
description: Accurate description of the attribute and what it represents
example: Item weight, in KG
type: string
type:
description: Supported attribute types for the attribute
example: INTEGER
type: string
enum:
- TEXT
- BOOLEAN
- SERIAL
- DECIMAL
- INTEGER
- DATETIME
- OPTIONS
textSubType:
description: Conditionally required for `TEXT` attribute type
example: HTML
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.
example: 1000
type: number
optionsType:
description: Conditionally required to indicate the selectable values for `OPTIONS` attribute type
type: string
example: DATETIME
enum:
- TEXT
- BOOLEAN
- DECIMAL
- INTEGER
- DATETIME
format:
description: Attribute format. Currently used only for `DATETIME` attribute type.
type: string
example: YYYY-MM-DD
formula:
description: 'JavaScript expression to dynamically compute the attribute value. The data type returned by this expression must match the attribute''s data type.
**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
false: Attribute is optional'
type: boolean
inheritable:
description: 'true: Parent attributes inherited to children items
false: Parent attributes not inherited to children items'
type: boolean
example: true
inverse:
description: 'true: Inverts existing validation (example - requires that the validation does not pass)
false: Follows existing validation'
type: boolean
unique:
description: 'true: Value is unique across all items or categories
false: 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
contains:
description: Specified value must contain this string
type: string
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
errorResponse:
description: Error response
properties:
errors:
description: Errors
items:
$ref: '#/components/schemas/errorResponse'
type: array
message:
description: Error message
example: Bad request
type: string
type:
description: Error type
example: CLIENT_ERROR
type: string
type: object
WorkflowAttributes:
type: object
properties: {}
AttributeResponse:
type: object
properties:
id:
description: Attribute ID
type: string
statuses:
description: For 'attribute modify request', the `PIM` statuses (if applicable). For 'attribute search request', the statuses defined by the `include.status` request parameter.
type: array
items:
$ref: '#/components/schemas/StatusResponse'
files:
description: Array of file's associated with an item
type: array
items:
$ref: '#/components/schemas/FileResponse'
name:
description: Attribute name
type: string
description:
description: Attribute description
type: string
locales:
type: array
items:
type: object
properties:
locale:
description: Locale identifier
type: string
example: fr-ca
name:
description: Localized string value
type: string
example: Un Nom Français
localizable:
description: 'true: attribute can be localized
false: attribute cannot be localized'
type: boolean
mapping:
description: 'Attribute mapping.
**Note**: Most attributes will not have a mapping, resulting in null value.'
nullable: true
type: string
type:
description: Data type of the attribute
type: string
enum:
- TEXT
- BOOLEAN
- SERIAL
- DECIMAL
- INTEGER
- DATETIME
serialStart:
description: Conditionally required to indicate the starting value of `SERIAL` attribute type. When enabled, the subsequent attribute values increment by 1.
type: number
target:
description: Indicates whether the attribute is for categories or items.
type: string
enum:
- NODE
- ITEM
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.
**Note**: The type returned must match the attribute''s type.'
type: string
example: value < 10 || value > 20
validation:
$ref: '#/components/schemas/AttributeValidation'
createdOn:
description: Time of attribute creation
type: string
format: date-time
createdBy:
description: ID that created the attribute
type: string
example: broma0
modifiedOn:
description: Time when the attribute was last modified
type: string
format: date-time
modifiedBy:
description: User ID that last modified the attribute
type: string
example: broma0
AttributeValidation:
type: object
properties:
required:
description: Indicates mandatory attribute
type: boolean
inheritable:
description: 'true: Parent attributes are inherited to children items
false: Parent attributes are not inherited to children items.'
type: boolean
example: true
inverse:
description: 'true: Inverts existing validation (example - requires that the validation does not pass)
false: Follows existing validation'
type: boolean
example: false
unique:
description: 'true: Value is unique across all items or categories
false: 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
items:
type: string
enum:
- TEXT
- BOOLEAN
- SERIAL
- DECIMAL
- INTEGER
- ASSET
- DATETIME
contains:
description: Specified value must contain this string
type: string
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: Match the value if it is one of these.
oneOf:
- type: array
items:
type: string
- type: array
items:
type: number
- type: array
items:
type: boolean
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.
ImpactedAttributes:
type: object
properties: {}
AttributeGroupTypeRequest:
type: object
properties:
action:
description: 'Action type.
**Note**:
1) Attribute ID is required only for `UPDATE` and `DELETE` actions (not for CREATE).
2) The Create action replaces any existing category attribute with the same name.'
type: string
enum:
- ADD
- UPDATE
- DELETE
example: UPDATE
id:
description: A 24-character system-generated ID of item attribute
example: 6245f16d11ae770009f19292
type: string
order:
description: Order of item attributes within the attribute group. Relevant for sorting in the UI.
example: 0
type: number
AttributeMappingMatch:
description: Specification for matching attribute mapping.
type: object
properties:
target:
description: Attribute mapping for the specified target
type: string
mapping:
description: Attribute mapping
type: string
attributeId:
description: A 24-character system-generated Attribute ID
type: string
example: 62e2ae29c3004a000950ad5f
name:
description: Mapping for an attribute whose name contains the specified value
type: string
description:
description: Mapping for an attribute whose description contains the specified value.
type: string
required:
description: 'true: Returns only the attribute mappings that are mandatory'
type: boolean
example: true
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
AttributeGroupTypeResponse:
type: object
properties:
_id:
description: A 24-character system-generated ID, for internal use
example: 6259ec8defc2116dd6c0f3fc
type: string
attributeGroupId:
description: A 24-character system-generated ID of attribute group
example: 6259ec8d006b0d00092b3189
type: string
attributeId:
description: A 24-character system-generated attribute ID
example: 6245f16d11ae770009f19292
type: string
isEditable:
type: boolean
description: 'true: Attribute is editable
false: Attribute is non-editable'
createdOn:
description: Time of attribute creation (UTC format)
example: '2022-04-15T22:07:09.932Z'
type: string
modifiedOn:
description: Time when attribute was last updated (UTC format)
example: '2022-04-15T22:10:05.444Z'
type: string
order:
description: Order of items within the attribute group
example: 0
type: number
attribute:
type: array
items:
type: object
properties:
_id:
description: A 24-character system-generated attribute ID
example: 6259ec8defc2116dd6c0f3fc
type: string
description:
description: Accurate description of attribute and what it represents
example: Item weight, in KG.
type: string
formulaManuallyOverWritten:
type: boolean
example: false
description: 'true: Formula can be manually overwritten
false: Formula cannot be manually overwritten'
formula:
description: Formula for the item attribute
example: null
type: string
type:
description: Attribute type
example: TEXT
type: string
name:
description: Attribute name
example: weight
type: string
textSubType:
description: Conditionally required sub-type for `TEXT` attribute type
example: SMALL_TEXT
type: string
attributeValidationId:
example: 624d92f8caa34e0009b5d849
type: string
description: Attribute validation ID
modifiedBy:
description: User ID that modified item attribute
example: 60aad2c835c5fb000885f679
type: string
createdOn:
description: Time of attribute creation (UTC format)
example: '2022-04-15T22:07:09.932Z'
type: string
modifiedOn:
description: Time when the attribute was last modified (UTC format)
example: '2022-04-15T22:10:05.444Z'
type: string
AttributeMappingPaginationResponse:
type: object
properties:
totalSize:
description: Total number of records
type: number
example: 100
pageSize:
description: Number of records in a page
type: number
example: 10
pages:
description: Total number of pages in the response
type: number
example: 10
mappings:
type: array
items:
$ref: '#/components/schemas/AttributeMappingResponse'
AttributeMappingSearch:
type: object
required:
- page
- size
properties:
include:
type: object
properties:
attribute:
type: boolean
description: 'true: include the `attribute` in the response;
false: exclude `attribute` in the response'
sort:
$ref: '#/components/schemas/AttributeMappingSort'
match:
$ref: '#/components/schemas/AttributeMappingMatch'
page:
description: 'Page number to be retrieved.
**Note**:
1) Applicable only in a paginated response.
2) Always paired with `size`'
type: number
example: 0
size:
description: 'Number of records per page
**Note**:
1) Applicable only in a paginated response.
2) Always paired with `page`'
type: number
example: 10
AttributeGroupRequest:
type: object
required:
- transactional
properties:
transactional:
description: 'true: All updates succeed or fail as a unit
false: Some can succeed or fail'
type: boolean
attributeGroup:
type: array
items:
type: object
properties:
action:
type: string
enum:
- CREATE
- UPDATE
- DELETE
example: UPDATE
description: Action type. For `CREATE`, 'priorityOrder', 'type', 'name,' and 'editableAttributes' are mandatory. For `UPDATE` and `DELETE`, only `id` is mandatory.
type:
description: Type of attribute group
example: COLLECTION
type: string
enum:
- WORKFLOW
- COLLECTION
description:
description: Accurate description of attribute and what it represents
example: Item weight, in KG
type: string
name:
description: Attribute group nam
example: weight
type: string
priorityOrder:
description: 'Attribute groups can be assigned a priority order. This is used for attributes that are under multiple attribute groups. They will be returned just once in the attribute group that has the highest priority.
**Note**: Mandatory attribute for ''CREATE'', must be unique and start from 0 for the first group.'
example: 1
type: number
id:
description: A 24-character system-generated attribute group ID. Applicable only for `UPDATE` and `DELETE` actions. To be omitted for 'CREATE'.
example: 6259ec8d006b0d00092b3189
type: string
editableAttributes:
type: array
items:
$ref: '#/components/schemas/AttributeGroupTypeRequest'
AttributeImportAcceptedResponse:
type: object
required:
- import_id
- name
- status
- total_rows
- processed_rows
- created_count
- updated_count
- skipped_count
- failed_count
- input_filename
- errors
- created_at
properties:
import_id:
type: string
format: uuid
description: Identifier for the attribute import job.
example: e2716438-b763-4be8-82d2-36abe0cb92b1
name:
type: string
description: Import name.
example: attribute_test.csv
status:
type: string
example: PENDING
total_rows:
type: integer
example: 36
processed_rows:
type: integer
example: 0
created_count:
type: integer
example: 0
updated_count:
type: integer
example: 0
skipped_count:
type: integer
example: 0
failed_count:
type: integer
example: 0
input_filename:
type: string
example: attribute_test.csv
input_file_url:
type: string
format: uri
nullable: true
example: null
error_file_url:
type: string
format: uri
nullable: true
example: null
error_message:
type: string
nullable: true
example: null
errors:
type: array
items:
type: string
example: []
started_at:
type: string
format: date-time
nullable: true
example: null
completed_at:
type: string
format: date-time
nullable: true
example: null
created_at:
type: string
format: date-time
example: '2026-03-12T18:04:03.879876Z'
FileResponse:
type: object
properties:
type:
description: Status type
type: string
enum:
- IMPORT
- EXPORT
name:
description: File name
type: string
statuses:
description: Current status of the file
type: array
items:
$ref: '#/components/schemas/StatusResponse'
progress:
description: Import progress in percentage
type: number
example: 100
createdOn:
description: Time of file creation
type: string
format: date-time
createdBy:
description: User ID that created the file
type: string
example: broma0
modifiedOn:
description: Time when file was last modified
type: string
format: date-time
modifiedBy:
type: string
example: broma0
description: User ID that last modified the file
secondsTakenToImport:
description: Time taken to import the file (doesn't include the whole time for the full bulk import process).
type: number
secondsTakenToProcess:
description: Time taken to process the file after the file was read
type: number
AttributeGroupResponse:
type: array
items:
type: object
properties:
_id:
description: A 24-character system-generated attribute group ID
example: 6259ec8d006b0d00092b3189
type: string
description:
description: Accurate description of attribute group and what it represents
example: Item weight, in KG
type: string
type:
description: Attribute group type
example: COLLECTION
type: string
enum:
- WORKFLOW
- COLLECTION
name:
description: Attribute group name
example: weight
type: string
priorityOrder:
description: Order of priority of the attribute group
example: 1
type: number
createdOn:
description: Time of attribute group creation (UTC format).
example: '2022-04-15T22:07:09.921Z'
type: string
modifiedOn:
description: Time when attribute group was last modified (UTC format).
example: '2022-04-15T22:10:05.427Z'
type: string
attributes:
type: array
items:
type: object
properties:
_id:
description: A 24-character system-generated attribute ID
example: 6259ec8defc2116dd6c0f3fc
type: string
attributeGroupId:
description: A 24-character system-generated attribute group ID of items
example: 6259ec8d006b0d00092b3189
type: string
attributeId:
description: A 24-character system-generated attribute ID. This is same as the `_id`.
example: 6245f16d11ae770009f19292
type: string
isEditable:
type: boolean
description: 'true: Attribute is editable
false: Attribute is non-editable'
createdOn:
description: Time of attribute creation (UTC format)
example: '2022-04-15T22:07:09.932Z'
type: string
modifiedOn:
description: Time of when attribute was last modified (UTC format).
example: '2022-04-15T22:10:05.444Z'
type: string
order:
description: Order of item within the attribute group
example: 0
type: number
AttributeGroupSearchResponse:
type: object
properties:
totalSize:
description: Total number of records (attribute group)
example: 7
type: number
pageSize:
description: Number of records (attribute group) per page
example: 10
type: number
pages:
description: Number of pages for the given `pageSize`
example: 1
type: number
attributeGroups:
type: array
items:
type: object
properties:
_id:
description: A 24-character system-generated ID of the attribute group
example: 6259ec8d006b0d00092b3189
type: string
description:
description: Accurate description of the attribute and what it represents
example: Item weight, in KG
type: string
type:
description: Attribute group type
example: COLLECTION
type: string
enum:
- WORKFLOW
- COLLECTION
name:
description: Attribute group name
example: weight
type: string
priorityOrder:
description: Priority order of attribute group
example: 1
type: number
createdOn:
description: Time of attribute group creation (UTC format)
example: '2022-04-15T22:07:09.921Z'
type: string
modifiedOn:
description: Time when attribute group was last modified (UTC format)
example: '2022-04-15T22:10:05.427Z'
type: string
totalAttributes:
description: Number of attributes in the attribute group
example: 1
type: number
EditableAttributes:
type: array
items:
$ref: '#/components/schemas/AttributeGroupTypeResponse'
ReadOnlyAttributes:
type: array
items:
$ref: '#/components/schemas/AttributeGroupTypeResponse'
WorkflowAttributes:
items:
description: Uses same response as AttributeGroupTypeResponse
$ref: '#/components/schemas/WorkflowAttributes'
ImpactedAttributes:
items:
description: Uses same response as AttributeGroupTypeResponse
$ref: '#/components/schemas/ImpactedAttributes'
parameters:
DomainHeader:
name: domain
in: header
required: true
schema:
type: string
example: vessel.com
description: The brand domain name (for example, `vessel.com` or `containerstore.com`) used to scope the request to a specific brand's data and configuration. The authenticated principal must be authorized for the specified brand.
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"}'
securitySchemes:
bearerAuth:
type: http
scheme: bearer
bearerFormat: JWT
description: 'This is the authorization token used to authenticate the request. You must pass the access token generated from the system app. For more information, see the [Making your first API request](/v3/api-reference/getting-started/getting-started-with-fabric-apis#procedure) section.
'