openapi: 3.0.1
info:
title: Cart Actions Endpoints Product 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.<p>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: 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.'
paths:
/api-product/v1/product/bulk/insert:
post:
tags:
- Product
summary: Create Items and Bundles
description: 'Creates multiple items or bundles along with their attributes. In addition, this endpoint supports data validation to ensure accuracy and consistency. <br /> **Note**: <br /> 1) As a prerequisite category and attributes must be created beforehand. <br /> 2) To add an item variant, parentSku must be additionally specified. <br /> 3) An item is assigned to only one category but it can be fetched from Alternate categories. <br /> 4) Up to 50 items or bundles can be added.'
operationId: createProducts
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProductCreate'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProductResponse'
'400':
description: Client error
content:
application/json:
schema:
$ref: '#/components/schemas/ClientError'
'422':
description: Failing items
content:
application/json:
schema:
$ref: '#/components/schemas/ProductModifyError'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
/api-product/v1/product/bulk/update:
post:
tags:
- Product
summary: Update Items and Bundles
description: 'With this endpoint, you can update multiple items or bundles, along with their attributes. <br /> **Note**: <br /> 1) You can update up to 50 items or bundles. <br /> 2) By specifying the attribute `value` as NULL, a reserved keyword, you can remove the existing attribute value.'
operationId: updateProducts
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProductUpdate'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProductResponse'
'400':
description: Client error
content:
application/json:
schema:
$ref: '#/components/schemas/ClientError'
'422':
description: Failing items
content:
application/json:
schema:
$ref: '#/components/schemas/ProductModifyError'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
/api-product/v1/product/bulk/upsert:
post:
tags:
- Product
summary: Upsert Items and Bundles
description: 'With this endpoint, you can create or update items or bundles along with their attributes. <br /> **Note**: <br /> 1) If the SKU already exists, then the given item or bundle is updated. Otherwise, a new item or bundle is created with that SKU. <br /> 2) You can add or update up to 50 items or bundles. <br /> 3) By specifying the attribute `value` as NULL, a reserved keyword, you can remove the existing attribute value.'
operationId: upsertProducts
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/ProductCreate'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProductResponse'
'400':
description: Client error
content:
application/json:
schema:
$ref: '#/components/schemas/ClientError'
'422':
description: Failing items
content:
application/json:
schema:
$ref: '#/components/schemas/ProductModifyError'
'500':
description: Internal server error
content:
application/json:
schema:
$ref: '#/components/schemas/ServerError'
/api-product/v1/product/bundle/update:
post:
tags:
- Product
summary: Update Items in Bundle
description: Updates bundle by adding or removing items and adjusting quantities.
operationId: updateBundles
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
requestBody:
content:
application/json:
schema:
$ref: '#/components/schemas/BundleUpdateRequest'
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/BundleUpdateResponse'
'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:
get:
tags:
- Product
summary: Get Items and Children Items
description: 'Items can be individual items or a bundle of items. This endpoints allows you to retrieve items - individual items and bundles, along with their attributes, children items and their details. <br /> **Note**: <br /> 1) Optional filter parameters can be passed in as query to narrow down the search results. <br /> 2) This API will only return the count and details of Parent SKU and not its variants'
operationId: getProducts
security:
- authorization: []
parameters:
- 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"}'
- in: query
name: skus
description: 'Stock Keeping Units (SKUs). <br /> **Note**: Either `skus` or `itemIds` can be used to get specific items. If they are omitted, all items are returned in a paginated response. Using the query parameters `page` and `size`, you can narrow down the search results.'
schema:
type: array
items:
type: string
example:
- BUNDLE-01
- BUNDLE-02
explode: false
- in: query
name: itemIds
description: 'Item IDs. Applicable only when `skus` are omitted. <br /> **Note**: Either `skus` or `itemIds` can be used to get specific items. If they are omitted, all items are returned in a paginated response. Using the query parameters `page` and `size`, you can narrow down the search results.'
schema:
type: array
items:
type: number
example:
- 4
- 5
explode: false
- in: query
name: page
description: Page number to be retrieved. Applicable only in a paginated response and always paired with `size`.
schema:
type: number
example: 1
- in: query
name: size
description: Number of records per page. Applicable only in a paginated response and always paired with `page`.
schema:
type: number
example: 10
- in: query
name: status
description: 'Item status. <br /> **Note**: <br /> 1) Returns a paginated response. <br /> 2) When used as the only criteria, must be paired with `size` and `page` to narrow down the search results.'
schema:
type: string
enum:
- ACTIVE
- INACTIVE
example: ACTIVE
- in: query
name: createdAfter
description: 'Lists items created after a specific date. Valid date formats are ''YYYY/MM/DD'', ''YYYY-MM-DDTHH:mm:ss.SSSZ''. <br /> **Note**: <br /> 1) Applicable only when `skus` and `itemIds` are omitted. <br /> 2) Returns paginated response. <br /> 3) Must be paired with `size` and `page` to narrow down the search results.'
schema:
type: string
example: '2021-05-28T16:36:50.055Z'
- in: query
name: createdBefore
description: 'Lists items created before a specific date. Valid date formats are ''YYYY/MM/DD'', ''YYYY-MM-DDTHH:mm:ss.SSSZ''. <br /> **Note**: <br /> 1) Applicable only when `skus` and `itemIds` are omitted. <br /> 2) Returns paginated response. <br /> 3) Must be paired with `size` and `page` to narrow down the search results.'
schema:
type: string
example: '2021-05-28T16:36:50.055Z'
- in: query
name: modifiedAfter
description: 'Lists items modified after a specific date. Valid date formats are ''YYYY/MM/DD'', ''YYYY-MM-DDTHH:mm:ss.SSSZ''. <br /> **Note**: <br /> 1) Applicable only when `skus` or `itemIds` are omitted. <br /> 2) Returns paginated response. <br /> 3) Must be paired with `size` and `page` to narrow down the search results.'
schema:
type: string
example: '2021-05-28T16:36:50.055Z'
- in: query
name: modifiedBefore
description: 'Gets items modified before a specific date. Valid date formats are ''YYYY/MM/DD'', ''YYYY-MM-DDTHH:mm:ss.SSSZ''. <br /> **Note**: <br /> 1) Applicable only when `skus` and `itemIds` are omitted. <br /> 2) Returns paginated response. <br /> 3) Must be paired with `size` and `page` to narrow down the search results.'
schema:
type: string
example: '2021-05-28T16:36:50.055Z'
- in: query
name: onlyIncludeAttributes
description: Attributes are included based on their exact, case-sensitive names. For example, if you specify the values as xyZ and Abc, the response will include these attributes in both parent and child objects.
schema:
type: array
items:
type: string
example:
- Image
- Title
- in: query
name: onlyExcludeAttributes
description: 'Attributes are excluded based on their exact, case-sensitive names. For example, if you specify the values as xyZ and Abc, the response will exclude these attributes from both parent and child objects. <br /> **Note**: When both `onlyIncludeAttributes` and `onlyExcludeAttributes` are used, the `onlyIncludeAttributes` takes precedence. As a result, attributes are first filtered based on `onlyIncludeAttributes`, and then `onlyExcludeAttributes` is applied to further refine the selection.'
schema:
type: array
items:
type: string
example:
- Image
- Title
responses:
'200':
description: OK
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/ItemProductsResponse'
- $ref: '#/components/schemas/BundleProductsResponse'
- $ref: '#/components/schemas/NoProductsResponse'
'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/v2/product:
get:
tags:
- Product
summary: Get Items and Limited Children Items
description: 'Gets items (single item or bundles) by `skus` or parent `skus`. When a parent SKU is sent as query parameter, you''ll get children items of those SKUs. When `parentSKU` is not specified, children items are not retrieved. Optionally, `page` and `size` can be used as query parameters. **Note**: <br /> 1) `status` and `date` query parameters works only with pagination when `parentSku` is omitted. Separate responses are shown for bundle and product.<br /> 2) when `parentSku` is passed as request parameter, it will only return the paginated response of children of `parentSKU`.'
operationId: getProductsV2
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
- in: query
name: skus
description: 'Stock Keeping Units (SKUs). <br /> **Note**: Either `skus` or `itemIds` can be used to get specific items. If they are omitted, all items are returned in a paginated response. Using the query parameters `page` and `size`, you can narrow down the search results.'
schema:
type: string
example: BUNDLE-01
- in: query
name: page
description: Page number to be retrieved. Applicable only in a paginated response and always paired with `size`.
schema:
type: number
example: 1
- in: query
name: size
description: Number of records per page. Applicable only in a paginated response and always paired with `page`.
schema:
type: number
example: 10
- in: query
name: status
description: 'Item status. <br /> **Note**: <br /> 1) Returns a paginated response. <br /> 2) When used as the only criteria, must be paired with `size` and `page` to narrow down the search results.'
schema:
type: string
enum:
- ACTIVE
- INACTIVE
example: ACTIVE
- in: query
name: type
description: 'Item type. **Note**: Set page and size to use this filter.'
schema:
type: string
enum:
- ITEM
- BUNDLE
- in: query
name: createdAfter
description: 'Items created after a specific date. Valid date formats are ''YYYY/MM/DD'', ''YYYY-MM-DDTHH:mm:ss.SSSZ''. <br /> **Note**: <br /> 1) Applicable only when `skus` and `itemIds` are omitted. <br /> 2) Returns paginated response. <br /> 3) Must be paired with `size` and `page` to narrow down the search results.'
schema:
type: string
example: '2021-05-28T16:36:50.055Z'
- in: query
name: createdBefore
description: 'Items created before a specific date. Valid date formats are ''YYYY/MM/DD'', ''YYYY-MM-DDTHH:mm:ss.SSSZ''. <br /> **Note**: <br /> 1) Applicable only when `skus` and `itemIds` are omitted. <br /> 2) Returns paginated response. <br /> 3) Must be paired with `size` and `page` narrow down the search results.'
schema:
type: string
example: '2021-05-28T16:36:50.055Z'
- in: query
name: modifiedAfter
description: 'Items modified after a specific date. Valid date formats are ''YYYY/MM/DD'', ''YYYY-MM-DDTHH:mm:ss.SSSZ''. <br /> **Note**: <br /> 1) Applicable only when `skus` or `itemIds` are omitted. <br /> 2) Returns paginated response. <br /> 3) Must be paired with `size` and `page` to narrow down the search results.'
schema:
type: string
example: '2021-05-28T16:36:50.055Z'
- in: query
name: modifiedBefore
description: 'Items modified before a specific date. Valid date formats are ''YYYY/MM/DD'', ''YYYY-MM-DDTHH:mm:ss.SSSZ''. <br /> **Note**: <br /> 1) Applicable only when `skus` and `itemIds` are omitted. <br /> 2) Returns paginated response. <br /> 3) Must be paired with `size` and `page` to narrow down the search results.'
schema:
type: string
example: '2021-05-28T16:36:50.055Z'
- in: query
name: parentSku
description: Parent SKU to get its children items. <br /> **Note** <br /> 1) To get a p paginates response, optionally, `size` and `page` can be used as query parameters. When they are omitted, this endpoint returns all children. <br /> 2) Only `page` and `size` are supported with this query parameter, to narrow down the search results.
schema:
type: string
example: parent123
responses:
'200':
description: OK
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/ItemProductsV2Response'
- $ref: '#/components/schemas/BundleProductsResponse'
- $ref: '#/components/schemas/NoProductsResponse'
'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/search:
get:
tags:
- Product
summary: Find Items
description: Finds items - both individual items and bundles. You will get a paginagted response, which you can narrow down using filter parameters, including `page` and `size`.
operationId: productSearch
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
- in: query
name: keyword
description: Keywords related to SKU or title
schema:
type: string
example: MOBO-1024
- in: query
name: skus
description: 'Searches for items based on SKU. <br /> **Note**: If omitted, all items are retrieved. <br /> Applicable only when `keyword` is omitted.'
schema:
type: array
items:
type: string
example:
- MOBO-1024
- MOBO-1025
explode: false
- in: query
name: itemIds
description: 'Item IDs. <br /> **Note**: If omitted, all items are retrieved <br /> Applicable only when `keyword` and `skus` are omitted.'
schema:
type: array
items:
type: string
example:
- 4
- 5
explode: false
- in: query
name: page
description: Page number to be retrieved.
schema:
type: number
example: 10
- in: query
name: size
description: 'Number of records per page. <br />**Note**: 1) Always paired with `page`. <br />2) Applicable only in a paginated response.'
schema:
type: integer
example: 10
- in: query
name: type
description: Item type
schema:
type: string
enum:
- ITEM
- BUNDLE
- ALL
example: ITEM
- in: query
name: allAttributes
description: 'true: Gets all attributes. false: Gets only the mapped attributes. <br /> **Note**: Always clubbed with `page` and `size`. When they are not specified, you will get up to 10 records.'
schema:
type: boolean
example: true
- in: query
name: excludeChildren
description: 'true: Excludes children items <br /> false: Includes children items'
schema:
type: boolean
example: false
- in: query
name: onlyChildren
description: 'true: Excludes parent items <br /> false: Includes parent items'
schema:
type: boolean
example: true
responses:
'200':
description: OK
content:
application/json:
schema:
oneOf:
- $ref: '#/components/schemas/ItemProductSearchResponse'
- $ref: '#/components/schemas/BundleProductSearchResponse'
- $ref: '#/components/schemas/NoProductsResponse'
'400':
description: OK
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:
get:
tags:
- Product
summary: Get Item Attributes
description: 'Item attributes define characteristics of an item. For example, item name, its identifiers, and description are the common attributes of any item. Attributes are key-value pairs (color: red) that hold information for each property of an item. <br /> This endpoint gets all attributes of an item, by SKU or itemId. <br /> **Note**: The *Get item* (GET /v1/product) gets item details and their attribute. So, this endpoint is recommended when you have the item SKU or item ID, and only require its attributes.'
operationId: getProductAttribute
security:
- authorization: []
parameters:
- $ref: '#/components/parameters/xSiteContent'
- in: query
name: sku
description: 'Stock Keeping Unit (SKU) of item. <br /> **Note**: If omitted `itemId` becomes mandatory.'
schema:
type: string
example: MOBO-1024
- in: query
name: itemId
description: 'Item ID. <br /> **Note**: If omitted `sku` becomes mandatory.'
schema:
type: number
example: 3
responses:
'200':
description: OK
content:
application/json:
schema:
$ref: '#/components/schemas/ProductAttributePage'
'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'
components:
schemas:
BundleProductsResponse:
type: object
properties:
totalSize:
type: number
example: 100
description: Total number of records
pageSize:
type: number
example: 10
description: Number of records in a page
pages:
type: number
example: 10
description: Number of pages for the given `pageSize`
products:
type: array
items:
$ref: '#/components/schemas/Bundle'
Bundle:
type: object
properties:
sku:
type: string
example: BUNDLE-01
description: Stock Keeping Unit (SKU), a unique identifier of bundle
itemId:
type: number
example: 4
description: Item ID
type:
description: Item type - Bundle (default) or Item
type: string
example: BUNDLE
status:
type: boolean
example: true
description: 'true: Bundle is active <br /> false: Bundle is inactive'
bundleItems:
type: array
items:
$ref: '#/components/schemas/GetBundleItems'
categories:
type: array
items:
$ref: '#/components/schemas/ProductCategory'
attributes:
type: array
items:
$ref: '#/components/schemas/ProductAttribute'
createdOn:
type: string
example: '2022-03-07T22:50:10.668Z'
description: Time of bundle creation (UTC format)
modifiedOn:
type: string
example: '2022-03-07T22:52:01.720Z'
description: Time when bundle was last updated (UTC format)
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
ItemProductSearchResponse:
type: object
properties:
totalSize:
type: number
example: 100
description: Total number of records
pageSize:
type: number
example: 10
description: Number of records per page
pages:
type: number
example: 10
description: Number of pages for the given pageSize
products:
type: array
items:
$ref: '#/components/schemas/ProductSearch'
ProductResponse:
type: object
properties:
success:
type: array
items:
type: object
properties:
sku:
type: string
example: sku1
description: Stock Keeping Unit (SKU) of item
itemId:
type: string
example: 611686da50fb7e0c5df78c2e
description: Item ID
itemIdSeq:
type: number
example: 12
description: Item ID, which increments sequentially
message:
type: string
example: SKU created successfully.
description: Success message
errorAttributes:
type: array
items:
type: object
properties:
name:
type: string
example: Inactive
description: Error reason
message:
type: string
example: Attribute value is invalid.
description: Human-readable error message
errorBundles:
type: array
items:
type: object
properties:
name:
type: string
description: Error reason
message:
type: string
description: Human-readable error message
failed:
type: array
items:
type: object
properties:
sku:
type: string
example: sku1
description: Stock Keeping Unit (SKU), a unique identifier of item
message:
type: string
example: Failed because of validation
description: Failure message
itemIds:
description: Item IDs
example:
- 611686da50fb7e0c5df78c2e
- 711686da50fb7e0c5df78c22
type: array
items:
type: string
BundleItems:
type: object
required:
- sku
- quantity
properties:
sku:
description: Stock Keeping Unit (SKU) of item that must be added to bundle
type: string
example: sku123
quantity:
description: Item quantity to be added to bundle
type: number
example: 6
AttributeValue:
type: object
properties:
name:
type: string
example: Mobile
description: Attribute name
value:
type: string
example: AMD X570 mobo
description: Attribute value
ProductV2:
type: object
properties:
sku:
type: string
example: MOBO-X570
description: Stock Keeping Unit (SKU) of item
itemId:
type: number
example: 4
description: Item ID
childrenSize:
description: Number of children or variants of the item
type: number
default: 0
type:
description: Item type - ITEM or BUNDLE
type: string
example: ITEM
default: ITEM
status:
type: boolean
example: true
description: 'true: Item is Active <br /> false: Item is Inactive'
categories:
type: array
items:
$ref: '#/components/schemas/ProductCategory'
attributes:
type: array
items:
$ref: '#/components/schemas/ProductAttribute'
ProductSearch:
allOf:
- $ref: '#/components/schemas/SearchResponse'
- type: object
properties:
children:
type: array
items:
$ref: '#/components/schemas/ProductChild'
InheritItemAttributesInsert:
type: array
items:
type: object
properties:
name:
type: string
description: Name of the attribute that can be inherited
example: color
action:
description: Action to set the inherited attribute
example: SET
type: string
enum:
- SET
required:
- name
- action
minItems: 1
SearchResponse:
type: object
properties:
sku:
type: string
example: MSI-Z490
description: Stock Keeping Unit (SKU) of item
itemId:
type: number
example: 2
description: Item ID
type:
description: Item type - either ITEM or BUNDLE
type: string
example: ITEM
default: ITEM
categories:
type: array
items:
$ref: '#/components/schemas/ProductCategory'
attributes:
type: array
items:
$ref: '#/components/schemas/ProductAttribute'
dependents:
description: Children SKUs
type: array
items:
type: string
example:
- Child1
- Child2
createdOn:
type: string
example: '2021-05-28T16:36:50.055Z'
description: Time when the item
# --- truncated at 32 KB (47 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/fabric-com/refs/heads/main/openapi/fabric-com-product-api-openapi.yml