# Build, Extend, and Elevate
fabric’s API-first platform gives developers the control and flexibility to easily build from scratch or integrate with the existing stack, to compose the perfect commerce experiences.
Centralized source for all products.
Centralized source of order, inventory, and warehouse information.
Receive and track inventory across networks and locations.
Build fulfillment rules sets to direct orders to different fulfillment locations.
Launch, operate, and scale a curated assortment of products with unlimited dropship suppliers.
Launch, operate, and scale your product assortment across channels with your retailer partners.
# Adding Team Members
### Overview
fabric users with administrator privileges can invite new users to their organization’s fabric account by adding the new user’s email address in the **User Management** page in Copilot.
Adding a new user involves setting their role, which controls their level of access. This is called role-based access control. By assigning roles, you can prevent unintended changes or data entry errors. There are many different roles that are specific to different fabric products. Prior to adding any users, it's recommended to read through the [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control) topics.
### Related Topics
* [Inviting Users](/v3/guides/settings/user-management/inviting-users)
* [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control)
* [Product Catalog Roles](/v3/guides/settings/rbac/role-based-access-control-products-roles)
* [Experiences Roles](/v3/guides/settings/rbac/role-based-access-control-experiences-roles)
* [Offers Roles](/v3/guides/settings/rbac/role-based-access-control-offers-roles)
* [Orders and Inventory Roles](/v3/guides/settings/rbac/role-based-access-control-orders-roles)
* [Customers Roles](/v3/guides/settings/rbac/role-based-access-control-customers-roles)
# Copilot Overview
Copilot is the web-based user interface to access the features in the fabric commerce platform. The suite of applications available via Copilot provide solutions to manage digital commerce needs directly, using online forms and prebuilt web components thereby reducing dependence on technical development resources and custom code. These applications can be used as individual components that can be launched quickly and easily, regardless of your existing infrastructure, capabilities, or third-party partnerships.
### Prerequisites
You will need an active account to access Copilot. Contact your Copilot system administrator or fabric Customer Success Representative to obtain these credentials.
### Authentication
Users must be invited to Copilot by a system administrator. Once invited, they will receive an email containing a link to Copilot. On first log in, the user will set their password. Subsequent logins will require the Account ID, user email, and password for credentials.
### Navigation
Users navigate through Copilot applications using the left navigation. This navigation remains at the left-hand side of the page for easy access. Click the double-carat icon at the bottom-left to expand and contract the left navigation.
Users navigate within each Copilot application using navigation panels on the left-hand side of each individual application.
# Product Catalog AI
Product Catalog AI is [fabric AI’s](/v3/guides/get-started/fabric-ai/overview) specialized functionality for **Product Catalog**, designed to help retailers optimize and maintain high-quality product data.
By providing targeted insights and recommendations, Product Catalog AI enables merchandisers to enhance product visibility, align content with brand and SEO standards, and ensure accurate, engaging product information across channels.
## Key Capabilities
### Product description analysis
Product Catalog AI evaluates product descriptions using a set of proprietary criteria to surface content to users that's non-optimized. Some of the evaluation criteria used includes: accuracy, clarity, SEO, and unique merchant preferences such as tone of voice. A detailed analysis is shown to the user with a score of 'Good' or 'Poor' for each criteria, as well as a written explanation for how each score was determined. This analysis of descriptions is done in real time, reduces manual efforts by days, if not weeks, and helps merchandising teams focus on products that need optimization.
### Content generation
Product Catalog AI generates optimized product descriptions tailored to your industry, brand voice, and SEO requirements. For example, if you sell home decor, Product Catalog AI can update a generic description, such as "A stylish lamp for your living room" into "Elevate your living space with this modern table lamp featuring a sleek brushed metal finish and adjustable brightness—perfect for creating a cozy ambiance." These improvements help you create compelling content more efficiently.
### Automated Workflows
Product Catalog AI gives the user quick actions such as 'Apply Suggestion' to automatically navigate the user to the appropriate page to implement the recommended content. It makes analyzing, generating, and updating descriptions a breeze so merchandising teams can push their updated product data to all sales channels immediately.
## Use Case
A merchandiser at a home furnishings retailer receives a report that shows sales for the *decorative mirrors* category of products are under-performing, particularly in regards to SEO. They suspect the issue might lie with the product descriptions and metadata, but lack the time for a manual review.
### Using Product Catalog AI
The merchandiser uses Product Catalog AI to analyze the decorative mirrors category.
1. The merchandiser sends a custom query:
*How can I improve the SEO and conversion rates for decorative mirrors?*
2. The Product Catalog AI evaluates the category’s product descriptions and provides actionable insights in the following areas:
* Product descriptions are too generic and lack relevant keywords.
* Product Catalog AI generates custom descriptions that match the retailer’s brand voice and are optimized for SEO best practices.
1. After reviewing the recommendations, the merchandiser applies the updates with a single click.
The updated descriptions are published to sales channels in real-time to boost the category’s SEO rankings, driving more organic traffic to the retailer’s site. Improved product visibility might lead to increased customer engagement and higher conversion rates, addressing the initial issue efficiently.
## Related Topics
* [fabric AI Overview](/v3/guides/get-started/fabric-ai/overview)
* [Fulfillment AI](/v3/guides/get-started/fabric-ai/fulfillment-ai)
# Fulfillment AI
Fulfillment AI is [fabric AI’s](/v3/guides/get-started/fabric-ai/overview) assistant for optimizing order fulfillment and inventory processes. Designed to streamline operations and enhance decision-making, Fulfillment AI helps retailers address distribution inefficiencies and shipping issues while reducing costs and improving customer satisfaction.
Fulfillment AI offers a proactive, data-driven approach to managing complex fulfillment workflows by providing actionable insights and recommendations tailored to your unique inventory and order fulfillment needs.
## Key Capabilities
### Improve order consolidation rate
Fulfillment AI helps consolidate orders effectively by analyzing fulfillment patterns and identifying opportunities to combine shipments. This reduces the frequency of split shipments and minimizes shipping costs.
### Reduce overselling
By monitoring real-time inventory levels, Fulfillment AI ensures accurate stock availability across all sales channels. It identifies potential overselling risks and allows users to take corrective actions, such as reallocating stock or adjusting order limits, to maintain customer trust and satisfaction.
### Update fulfillment rules and inventory quickly
Fulfillment AI streamlines operational adjustments by offering users the ability to modify fulfillment rules and inventory settings directly within Copilot. This flexibility allows users to respond quickly to changing conditions, such as supply chain disruptions or shifts in demand, without requiring extensive manual intervention.
## Use Case
A national retailer specializing in electronics relies on fabric to manage its distributed fulfillment network, which includes regional warehouses and physical stores.
During a peak sales period, the retailer notices a spike in split shipments and delayed orders in certain regions. These inefficiencies are increasing shipping costs and putting delivery timelines at risk, potentially impacting customer satisfaction and eroding profit margins.
### Using Fulfillment AI
The retailer’s operations manager uses Fulfillment AI to investigate the root causes of delayed shipments and high split order rates. Fulfillment AI identifies a combination of low inventory levels in key locations and inefficient allocation rules as the primary issues. It suggests the following solutions:
* De-prioritize under-performing locations.
* Reallocate inventory to regions with higher demand.
In addition, Fulfillment AI proactively identifies SKUs contributing to the inefficiencies and provides tailored recommendations to adjust stock levels and allocation rules.
The operations manager reviews and applies the recommendations directly within Copilot. Fulfillment AI ensures that all updates meet predefined schema requirements and are implemented in real-time.
### Outcome
By using Fulfillment AI, the retailer reduces split shipments, improves order lead times, and lowers overall shipping costs. These improvements enhance customer satisfaction and optimize operational efficiency, helping the retailer maintain a competitive edge during high-demand periods.
## Related Topics
* [fabric AI Overview](/v3/guides/get-started/fabric-ai/overview)
* [Product Catalog AI](/v3/guides/get-started/fabric-ai/product-catalog-ai)
# Overview
fabric AI is an innovative business assistant that analyzes real-time data, identifies issues, and offers tailored solutions to provide actionable insights for retailers to streamline operations, optimize workflows, and improve decision-making.
fabric AI's natural language interface in Copilot allows users to ask their own questions, or select from prompts, such as *Which locations could be impacting my margins?* or *Which products need improved SEO descriptions?* to uncover and address potential issues before they escalate.
## Transforming Workflows
fabric AI's interface is accessible directly from Copilot's homepage. After navigating to modules such as **Product Catalog**, **Orders**, or **Inventory**, fabric AI shifts to the right panel. With fabric AI as an assistant through every phase of operational workflows, users can:
* **Interact with operational data:** Access and explore data to gain insights and implement changes directly within the system.
* **Analyze and optimize workflows:** Gain actionable insights to improve fulfillment performance, product content, order, and inventory management.
* **Automate repetitive tasks:** Reduce manual effort with recommendations and content generation.
* **Respond in real time:** Address issues and make informed decisions quickly, using real-time data and insights to minimize disruptions and improve outcomes.
## Use Case
A home furnishings retailer uses fabric to manage their product catalog, inventory, and fulfillment operations across its network of stores and distribution centers.
The retailer specializes in high-quality furniture and decor. Their business success depends on optimizing product visibility, maintaining efficient inventory levels, and ensuring seamless order fulfillment to meet customer expectations.
### Identifying challenges
During a weekly review, the merchandising team notes lagging SEO performance for several products, affecting site traffic and sales. At the same time, the fulfillment team observes an uptick in canceled orders and delayed deliveries, particularly in one region.
### Using fabric AI
The teams begin by using Product Catalog AI to analyze the SEO performance of their products by asking *Which products need SEO improvements?* Product Catalog AI evaluates their products and identifies a list of under-performing products with issues such as generic descriptions, missing keywords, and inconsistent metadata.
Next, they use Fulfillment AI to investigate the causes behind fulfillment inefficiencies by asking *What’s driving fulfillment issues this week?* Fulfillment AI pinpoints a cluster of stores in one region contributing to high bounce rates due to inventory shortages and performance inconsistencies.
fabric AI provides tailored recommendations for both areas:
* **Catalog optimization:** Product Catalog AI uncovers a popular dining table SKU identified as having poor SEO. It generates an optimized description aligned with the retailer’s branding and provides actionable metadata corrections to improve visibility. These updates are approved and published immediately.
* **Fulfillment rule updates:** Fulfillment AI suggests creating a new inventory rule to prioritize high-performing locations and adjusting order orchestration rules to prevent delays. The new rule is applied with a single click, ensuring orders are routed more efficiently.
### Unlocking new opportunities
With the immediate challenges addressed, fabric AI proactively identifies additional opportunities for growth. For example, it suggests expanding the product offering by adding matching chairs to the dining table category. It also recommends ongoing monitoring of fulfillment performance metrics to ensure continued optimization and identify future improvements.
It also helps the retailer overcome operational hurdles while unlocking strategic opportunities. By combining insights from Catalog AI and Fulfillment AI, the teams improve product visibility, enhance fulfillment efficiency, and ensure customer satisfaction.
These capabilities enable the retailer to maintain seamless operations, boost revenue, and uncover new growth opportunities—all while saving time and resources through AI-driven automation.
## fabric AI Rules
fabric AI uses a rules-based framework to govern operational processes such as inventory allocation, fulfillment logic, and product data optimization. By leveraging AI-driven insights and predefined logic, fabric AI dynamically updates rules to improve efficiency, reduce errors, and enhance performance.
The fabric AI rules framework operates through a structured process:
* **Data Analysis:**
fabric AI collects and evaluates operational data to identify inefficiencies and opportunities for improvement. Metrics and sub-metrics are tailored to each domain, such as fulfillment performance or product content quality.
* **Rule Evaluation and Suggestion:**
Existing rules are assessed against operational performance and predefined thresholds. fabric AI provides actionable updates to enhance efficiency and maintain consistency.
* **Implementation:**
Users can review and apply fabric AI’s suggestions directly in Copilot. Changes are validated for accuracy and implemented in real time, ensuring seamless integration into workflows.
## Related Topics
* [Product Catalog AI](/v3/guides/get-started/fabric-ai/product-catalog-ai)
* [Fulfillment AI](/v3/guides/get-started/fabric-ai/fulfillment-ai)
# Feature Descriptions
[Copilot](/v3/guides/get-started/copilot-overview) is the web-based user interface to access fabric's features, which are also called applications or products. These features enable operators to manage their digital commerce needs directly, using online forms and prebuilt web components thereby reducing dependence on technical development resources and custom code.
* [Product Catalog](/v3/guides/product-catalog/overview): fabric's powerful product information management system that enables complete product catalog administration to ensure accurate and up-to-date information across sales channels.
* [Offers](/v3/guides/offers/overview): fabric’s pricing and promotions engine with tools to manage price lists, item prices, and discounts.
* [Orders](/v3/guides/orders/overview): fabric's solution for centralized order, inventory, and warehouse information. Orders supports order placement, allocation, handling of back orders and pre-orders, exporting data, generating invoices, creating and managing shopping lists, sending notifications, handling cancellations and returns, order tracking, fraud checks, updating payment status, creating appeasements, creating and managing shipments, shipping methods, and more.
* [Inventory](/v3/guides/inventory/overview): fabric's resource for tracking inventory across networks and locations.
# Glossary
## A
### Access control
A method to verify that the user has permission to access the requested resource.
### Access token
A signed JSON web token provided to an application after successful authentication by fabric Identity. It serves as a Bearer token when starting fabric platform APIs.
### Account
The primary entity through which the commerce solutions are delivered to the fabric product customers. It acts as the dedicated repository for all their data. Customers have the option to create multiple accounts for different purposes, ensuring data segregation. When you log in to Copilot, you gain access to the specific contents of the account belonging to the customer of fabric products. This customer refers to the user of fabric products and not the customers of stores using fabric services.
### Account ID
A custom header used by the API to identify the tenant making the request, found in the Copilot application. Tenant ID is required to access any of fabric’s endpoints.
Related Terms:
* [Tenant ID](#tenant-id)
### [Allocation](/v3/api-reference/order/allocations/about-order-allocations)
The record specifying the locations from which an order is fulfilled, allowing retailers to manage order allocations.
### App
All API clients or applications that call any of the fabric platform APIs. Each application requires a bearer token authentication to interact with other fabric APIs. For example, Order Management System (OMS) or Enterprise Resource Planning (ERP).
### App name
The name of the application.
### App type
The type of the application, such as [system app](#system-app) or [user app](#user-app). The app type helps you determine the authentication process.
### [Attribute](/v3/guides/product-catalog/attributes/attributes)
A specific characteristic, quality, or feature of a product or category, used to describe, classify, or differentiate items within a system or platform. fabric Product Catalog supports two types of attributes, such as [product attributes](/v3/guides/product-catalog/attributes/product-attributes-overview) and [category attributes](/v3/guides/product-catalog/attributes/category-attributes-overview).
### [Attribute groups](/v3/api-reference/product-catalog/attribute-groups)
A collection of product attributes that helps categorize products into various semantic groups based on meaning and purpose, allowing for easier management and organization of products in the catalog.
### Authentication
The mechanism of validating the identity of an application or its end user with fabric Identity. After validating the identity, fabric Identity generates and signs an access token, used as a bearer token to call fabric platform APIs.
### Authorization
A method to restrict access to certain APIs after successful authentication, supporting role-based access control of fabric's platform APIs.
## B
### Base price
The regular amount that a merchant charge shoppers to purchase an item. These are specified within a [price lists](#price-lists).
### Base URL
The standard URL to which the requests are sent for all fabric APIs.
Related terms:
* [Location](#location)
## C
### Cart and Checkout (CnC)
fabric's service for the management of online shopping [carts](/v3/api-reference/cart/cart--3-0-0), including items and configuration of shipping, fulfillment, and payment options.
### Categories
[Categories](/v3/guides/product-catalog/categories/categories_overview), also called hierarchies or nodes, form a hierarchical tree structure to organize items and services into a group.
Related terms:
* [Hierarchy](#hierarchy)
* [Node](#node)
### Channel
A specific avenue or method through which a merchant sells their products or services. It indicates the source of a sale and can include various options such as web storefronts, retail stores, mobile apps, or other platforms.
### [Client ID](/v3/guides/settings/api-apps/getting-sysapp-credentials)
A unique ID that represents the [system app](#system-app), and is required for OpenID Connect authentication flows.
### [Client secret](/v3/guides/settings/api-apps/getting-sysapp-credentials)
An app-specific secret that allows fabric Identity to validate the app. This secret is mandatory for [system apps](#system-app) to integrate with fabric Identity.
### Collections
[Collections](/v3/guides/product-catalog/collections/collections) create a representational categorization of products and are primarily used by merchants for short-term marketing campaigns.
### [Copilot](https://live.copilot.fabric.inc/)
The web-based user interface to access all fabric applications.
### [Counters](/v3/api-reference/inventory/counters/overview)
Inventory positions such as, available, in-transit, on-hand, or other custom positions
### [Coupons](/v3/guides/offers/coupons)
Discounts on items, carts, or shipping that are applied to qualified purchases when shoppers provide a valid coupon code during the checkout process.
### Customer
The user of fabric products.
### Customer organization
A customer organization, also called a customer org, is a customer entity that can encompass multiple accounts or tenants. It provides a structure for managing multiple accounts within a single organization.
## E
### Endpoint
The API communications channel, which is a specific URL or address in a web service or API, where client applications can access or interact with the service to retrieve or send data.
Related terms:
* [Resource](#resource)
## F
### fabric Customer
fabric service that allows you to manage information for the customers and organizations you do business with, including the contracts you may have with them.
### fCP
fabric Commerce Platform (fCP) offers a range of features to manage various aspects of your storefront, including merchandising, pricing, promotions, inventory, order processing, and shopper data. For your business operations, you can interact with fCP through fabric's administration interface called [Copilot](https://live.copilot.fabric.inc/).
## H
### Header
This flag is used to include headers in the API request. The most commonly used headers in fabric APIs are described in the Getting Started with fabric API section.
### Hierarchy
A tree structure to organize items and services into a group.
Related terms:
* [Category](#categories)
* [Node](#node)
## I
### [Inventory](/v3/api-reference/inventory/inventory/overview)
A repository of product availability for order fulfillment.
### Item
A standalone service or commodity sold individually. An item is also referred to as a product.
### Item variant
A different version of a base product. An item variant is also referred to as a child product.
Related Terms:
* [Variant](#variants)
## L
### Location
The standard URL to which the requests are sent for all fabric APIs.
Related Terms:
* [Base URL](#base-url)
## M
### Mapping
Mapping, also called [attribute mapping](/v3/api-reference/product-catalog/attributes-mapping/overview), provides you the flexibility to create attributes with your preferred names.
### Merchant
The paying customer who uses fabric's services.
### Multichannel
A merchant who sells their products or services through multiple sales channels, which could encompass web, retail, mobile, and other diverse avenues, for reaching customers.
### Multi use
[Multi-use coupon code](#multi-use-coupon-code)
### Multi-use coupon code
A coupon code that can be used by multiple customers up to the specified limit.
### Multitenant
An infrastructure model used by fabric to manage multiple customers, the users of fabric products, on shared infrastructure, including shared compute and storage resources.
## N
### Network
A group of locations that share inventory.
### Node
A tree structure to organize items and services into a group.
Related terms:
* [Category](#categories)
* [Hierarchy](#hierarchy)
## O
### Offer
A combination of items, their respective prices, and any relevant discounts that a shopper can avail of. Offers remain valid for a limited duration and expires after that.
### [Offers](/v3/api-reference/offers/offers--3-0-0)
fabric’s pricing and promotions engine with tools to manage price lists, item prices, and discounts.
### OpenID Connect
An established standard based on [OAuth 2.0](https://oauth.net/2/), defining authentication flows specific to cloud-based applications.
### [OMS](/v3/guides/orders/overview)
fabric’s Order Management System (OMS), also called as fabric Orders, is a distributed order management (DOM) platform that helps retailers manage the order fulfillment process and provide inventory details, order fulfillment, and customer service.
### [Orders](/v3/guides/orders/overview)
[OMS](#oms)
## P
### [Price lists](/v3/api-reference/offers/price-lists/overview)
A collection of items and their assigned prices with start and end date and time for each price record.
### [Product Catalog](https://developer.fabric.inc/v3/guides/product-catalog/overview)
A single [product](/v3/api-reference/product-catalog/product-operations-by-id/products-api), also referred to as an item, is a service or a stand-alone item sold individually. Bundles are combinations of two or more products sold exclusively together or as individual products depending on the configuration. Within fabric, Product Catalog is used to denote the entire end-to-end product information management system.
### [Promotions](/v3/api-reference/offers/promotions/overview)
Discounts on items, carts, or shipping that are applied automatically if the required conditions are met.
### [RBAC](/v3/guides/settings/rbac/role-based-access-control)
[Role-Based Access Control (RBAC)](/v3/guides/settings/rbac/role-based-access-control). With role-based access control in fabric, you can control and limit the access to information and actions based on the roles assigned to the users.
### Redemption
The instance when a shopper uses a coupon code to make a purchase. Redemptions help track coupon limits across the site or per customer and are associated with specific orders.
### Resource
The API communications channel, which is a specific URL or address in a web service or API, where client applications can access or interact with the service to retrieve or send data.
Related terms:
* [Endpoint](#endpoint)
## S
### Sale price
The lowest amount that a merchant can charge shoppers to purchase an item without a promotion or coupon. These are specified within a [price list](#price-list).
### Scratch
[Scratch item](#scratch-item)
### Scratch Item
An item that's designated as unavailable within an order due to various reasons such as being damaged, out of stock, not found, or on hold.
### [Segment](/v3/api-reference/offers/segments/overview)
A group of customers that share similar characteristics, such as loyalty status, demographics, location, or device type.
### SKU
Stock Keeping Unit (SKU). A unique identifier for each item that can be purchased or sold. Each variant of a product will also have a unique SKU to differentiate it from other variations of the same product.
### Shopper
A shopper refers to the end user or consumer who interacts with a merchant's products or services, such as the storefront.
### Single-use
[Single-use coupon code](#single-use-coupon-code)
### Single-use coupon code
Large numbers of unique coupon codes that can be used once by an individual shopper.
### Stacking
Stacking refers to the ability to combine multiple discounts on a single item, cart, or shipping, increasing the total savings for the shopper.
Merchants can configure promotions and coupons to either allow stacking or prevent it.
### Store
A physical retail location for brick-and-mortar merchants or a web store. A web store represents a digital storefront where products or services are displayed and sold.
### System app
A [system app](/v3/guides/settings/api-apps/creating-system-app) (short for system application) is a software application that generates an access token to establish its identity by utilizing a [client ID](#client-id) and [client secret](#client-secret).
Unlike regular [user apps](#user-app), system apps don't rely on fabric Identity for authenticating end users. Instead, they employ system-to-system communication with fabric APIs to fulfill their intended functionalities and services.
## T
### Tenant
A customer or organization that uses fabric to manage and sell their products or services, typically through multiple channels.
### [Tenant ID](/v3/guides/settings/account-details/getting-the-account-id)
A custom header used by the API to identify the tenant making the request, found in the Copilot application. Tenant ID is required to access any of fabric’s endpoints.
Related Terms:
* [Account ID](#account-id)
## U
### User pool
The user directory where user credentials are stored.
### User app
A [user app](/v3/guides/settings/api-apps/creating-user-app) (short for user application) is a software application that uses the fabric identity service to authenticate end users.
## V
### Variants
A different version of a base product. An item variant is also referred to as a child product.
Related Terms:
* [Item variant](#item-variant)
## W
### Webhooks
The feature that sends real-time notifications to a designated URL when merchants subscribe to fabric events.
# Terms and Conventions
In the User Guide , the term *we* refers to fabric. The term *customers* may have different meanings depending on the context. Customer is used to denote the consumers of fabric's products and services and is also used to imply the service Customer, which is used to manage information for both individual customers and organizations with whom you conduct business, including any contracts in place.
The term customer, when lowercase, typically refers to the users of fabric's products. However, in certain contexts where it's capitalized, it indicates fabric’s [Customer](/v3/guides/customers/overview) feature.
The term product denotes any item or service available for sale. However, in specific contexts, it directly refers to fabric’s product information management tool, called [Product Catalog](/v3/guides/product-catalog/overview).
For all other terms used in fabric, see the [Glossary](/v3/guides/get-started/glossary).
# Overview
The Alerts feature in fabric Copilot notifies you of potential issues using the data within your account. You can use these notifications to identify and respond to system errors or data anomalies that could impact business operations. For example, you can set up alerts for high order failure rates, abnormal dips in prices, published SKU counts dropping significantly, and transactional failures.
You can subscribe to receive alerts by email when an event occurs, and view alerts on the **Alerts** dashboard in Copilot. Users with shared access to your organization’s account can view the alerts you set up and optionally subscribe to them.
Setting up and configuring alerts requires **Administrator** privileges in Copilot. For more detailed information on these settings, see [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control).
## Use Cases
Common use cases for alerts within fabric’s applications include:
* **Orders:** Alert that flags orders that might negatively impact trailing metrics, such as returns and cancellations.
* **Inventory:** Alert that creates a notification for any issues updating your inventory records.
* **Product Catalog:** Alert that creates a notification whenever a product information import fails.
## Alert Components
Creating an alert involves setting up three main components: the **Alert trigger conditions**, **Look-back period**, and **Severity threshold**.
### Alert Trigger Conditions
Alert trigger conditions consist of a series of statements that define the circumstances that trigger an alert. In these statements, you establish the components of an alert by selecting a fabric application, a service within that application, an attribute of that service, an operator, and a value for which you would like to set up the alert. When configuring these statements, you can use a variety of parameters, such as order statuses, inventory levels, and transaction outcomes, to create customized trigger conditions that meet your specific monitoring requirements.
It's important to note that when you are setting up an alert in Copilot, the values displayed in each field are entirely dependent upon the selection in the previous field.
The following table outlines the fields in the Alert trigger conditions section, and their values.
| Field Name | Description | Values |
| -------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **App** | The fabric application to set up the alert for. | - **Orders**
- **Inventory**
- **Product Catalog** |
| **Service:** | The service is the specific feature within the fabric application selected in the **App** field. | - Orders: **Order**, **Invoice**, and **Allocation**
- Inventory: **Inventory\_imports**
- Product Catalog: **Attribute**, **Bundle**, **Category**, **Product**, and **Collection** |
| **Attribute** | Specifies a characteristic or property of the selection in the **Service** field. | Includes options such as:
- **createdAt:** The time the service was created.
- **updatedAt:** The time the service was updated.
- **statusCode:** The service’s status code. |
| **Operator** | The **Operator** field describes the relationship between the **Attribute** field and the **Add Values** field. | - **IN:** Includes
- **NIN:** Doesn't include
- **EQ:** Is equal to
- **NEQ:** Not equal to
- **GT:** Is greater than
- **LT:** Is less than
- **GTE:** Is greater than or equal to
- **LTE:** Is less than or equal to |
| **Add Values** | The values represent specific states or conditions of the selected **Attribute**. | Time-based values include options such as:
- **NOW() - PT2H:** The time of the attribute is within the last two hours.
- **NOW() - PT6H:** The time of the attribute is within the last six hours.
- **NOW() - P2D:** The time of the attribute is within the last two days.
Status-based values include options such as:
- **ALLOCATED:** Indicates a status of allocated for the selected attribute.
- **PROCESSING:** Indicates a status of processing for the selected attribute.
- **FAILED:** Indicates a status of failed for the selected attribute. |
#### Alert trigger conditions example
As an example of how you can use the fields in alert trigger conditions to create statements, consider the Payments Failure Alert template. It’s an alert that’s generated from the Orders application whenever an invoice fails.
There are two statements required to create this alert; an **if** statement and an **and** statement. The **if** statement simply says, “if the Orders app invoicing service created an invoice more than two hours ago.” To create this statement in the alert trigger conditions, the **if** statement is configured as follows:
* **App:** is set to **Orders**
* **Service:** is set to **Invoice**
* **Attribute:** is set to **createdAt**
* **Operator:** is set to **GT**
* **Add value:** is set to **NOW() - PT2H**
This statement tells Alerts where to look and when, but what it’s looking for - the failed invoice - is incomplete. The **and** statement finishes the alert trigger condition by describing the type of invoice to look for. It says, "the status of the invoice includes the values `_failed_` or `_settlement failed_`." To create this statement in the alert trigger conditions, the **and** statement is configured as follows:
* **Service:** is set to **Invoice**
* **Attribute:** is set to **statusCode**
* **Operator:** is set to **IN**
* **Add Values:** is set to **FAILED** and **SETTLE\_FAILED**
Understanding alert trigger conditions is crucial for setting up effective alerts in your fabric applications. By configuring both `if` and `and` statements, you can specify the exact conditions that trigger an alert.
#### Adding and removing conditions
When creating an alert from scratch, you can refine your alert trigger conditions by adding **and** statements. This allows for even more nuanced and targeted alerting, so that you can specify combinations of attributes, operators, and values that must be met to trigger an alert. However, every condition for all your statements must be met to trigger the alert, which means too many **and** statements could cause you to miss an event that you want to monitor.
### Look-Back Period
The look-back period is the timeframe that fabric considers when assessing data for potential alerts.
For instance, if an alert is configured to trigger when order processing times exceed a certain threshold, the look-back period could be defined as the past 24 hours. In this scenario, fabric examines order processing times over the last day to determine if the current processing time deviates significantly from the average.
Configuring the look-back period helps provide context to alerts. A shorter look-back period may capture recent changes or sudden spikes in activity, while a longer look-back period can help identify sustained trends or recurring issues.
### Severity Threshold
The **Severity threshold** is the term for the required number of events to occur for an alert to be considered low, medium, or severe.
* **Low Severity:** Alerts with a low severity threshold are triggered when the specified event occurs infrequently. These alerts typically highlight events that might require attention but may not be of immediate concern.
* **Medium Severity:** A medium severity threshold indicates a moderate frequency of the event. Alerts in this category often point to events that may warrant closer monitoring due to their increased occurrence as a potential issue that should be addressed.
* **High Severity:** Alerts with a high severity threshold are triggered when the specified event reaches a significant frequency. These alerts usually require immediate attention, as they typically signify critical events or issues that require prompt resolution to prevent impact on business operations.
You can configure the severity threshold numbers to tailor alerts to your specific needs.
Keeping with the example of the Payments Failure Alert, you could set the **Low Severity** field in this template to five. This will generate a low severity alert when five payments have failed within the time frame you specified. From there, you could set **Medium Severity** to 10, so that a medium severity alert would be generated when 10 payments fail within your time frame. Setting **High Severity** to 15 would generate high severity alert when 15 payments have failed within your time frame.
You will need to adjust the severity thresholds until you get the alert dialed in to your needs. Typically, you want to avoid infrequent or minor events and focus on frequent and severe events. Adjusting the severity threshold will help you strike a balance between being notified of potential issues and avoiding unnecessary alert fatigue.
## Templates
You can use templates to set up alerts quickly without having to configure each trigger condition manually. These templates have pre-configured trigger conditions for common operational events, such as failed payments. With the predefined triggers for situations that often require immediate attention, you can address potential issues before they escalate into bigger problems.
## Related Topics
* [Alerts Conceptual Guide](/v3/guides/home/alerts/alerts-conceptual-guide)
* [Alerts Homepage](/v3/guides/home/alerts/alerts-page)
* [Creating Alerts](/v3/guides/home/alerts/creating-alerts)
* [Managing Alerts](/v3/guides/home/alerts/managing-alerts)
# Alerts Page
The Alerts page shows an overview of the alerts that have occurred. Alerts are organized into groups based on severity: **High Alerts**, **Medium Alerts**, **Low Alerts**, and **Total Alerts**.
The Alerts page only displays the alerts you created or subscribed to.
## Filter controls
The controls on the Alerts page allow you to filter and search for alerts. The following table describes each filter option.
| Filter | Description |
| ---------- | -------------------------------------------------------------------------------------------------------- |
| Search | Search for an alert by name. |
| Severity | Filter by severity, whether **High**, **Medium**, or **Low**. |
| App | Filter by the fabric application the event occurred in, whether **Products**, **Orders**, or **Offers**. |
| Created at | Filter by the date and time the alert was triggered. |
| All Time | Show alerts from a specific timeframe. |
## Field descriptions
You can see additional details about alerts in the table at the bottom of the page. The following table describes each field.
| Field | Description |
| ----------- | ---------------------------------------------------------------------------------------------- |
| Severity | The severity of the alert, whether **High**, **Medium**, or **Low**. |
| Alert Name | The name assigned to the alert. |
| App | The fabric application the event occurred in, whether **Products**, **Orders**, or **Offers**. |
| Issue count | The number of times the event occurred. |
| Created at | The date and time when the alert was created. |
## Related Topics
* [Alerts Overview](/v3/guides/home/alerts/alerts-overview)
* [Creating an Alert](/v3/guides/home/alerts/creating-alerts)
* [Managing Alerts](/v3/guides/home/alerts/managing-alerts)
# Creating Alerts
With the **Alerts** feature, you can set up notifications when business-impacting events occur within your fabric applications. For example, you can set up alerts for high order failure rates, abnormal dips in prices, published SKU counts dropping significantly, or transactional failures.
For an overview of the conceptual topics related to creating an alert, see the [Alerts Overview](/v3/guides/home/alerts/alerts-overview).
## Prerequisites
Ensure that you have **Administrator** privileges in Copilot. For more detailed information on these settings, see [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control).
## Create My Own Alert
1. In the left menu, click **Home** > **Alerts**.
The **Alerts** page is displayed.
2. Click **Create Alert**.
The **Create alert** page is displayed.
3. Click **Create My Own**.
The **Alert Details** page is displayed.
4. In the **Alert Name** field, enter a name for the alert.
5. In the **Description** field, enter a description of the alert.
6. In the **Alert trigger conditions** section, configure the following fields as required:
* **App:** Specifies the application you want to set up the alert for, such as **Orders** or **Inventory**.
* **Service:** Specifies the feature within the application to set up the alert for, such as **INVOICE** or **INVENTORY\_IMPORTS**.
The options available in the **Service** field are dependent on the selection you made in the **App** field.
* **Attributes:** Specifies the characteristics or properties, such as **createdAt** or **statusCode**.
The options available in the **Attributes** field are dependent on the selection you made in the **Service** field.
* **Operators:** Specifies an expression to filter data, such as greater than (**GT**) or less than or equal to (**LTE**).
The options available in the **Operators** field are dependent on the selection you made in the **Attributes** field.
* **Add Values:** Specifies the states, statuses, or outcomes related to the selections in the App, Service, and Attribute fields, such as **ALLOCATED** or **NOW() - PT4H**.
The options available in the **Add Values** field are dependent on the selection you made in the **App**, **Service**, and **Attribute** fields.
For more information on alert trigger conditions, see the [Alerts Overview](/v3/guides/home/alerts/alerts-overview).
7. In the **Look-back period** field, select the frequency you want the system to review and assess data for potential alerts.
Note: The **Look-back period** field is displayed depending on how you configure the Alert trigger conditions. If you don't see the **Look-back period** field, skip this step.
8. (Optional) To add another trigger condition to this alert, click **Add Condition**, and fill out the fields as required.
9. Enter a value in the **Low Severity**, **Medium Severity**, and **High Severity** fields.
For more information on setting the severity threshold, see the [Alerts Overview](/v3/guides/home/alerts/alerts-overview).
10. Click **Next**.
The **Review** page is displayed.
11. To receive email alerts about this event, in the **Alert notification** section, select **Subscribe to this alert**.
Choosing to receive email alerts will only send an email to the address associated with your fabric account. Other users with shared access to your organization’s fabric account can [subscribe to this alert](/v3/guides/home/alerts/managing-alerts#subscribing-to-an-alert) or view events that triggered this alert on the Alerts page.
12. Click **Save**.
The alert is created. You can access the alert in the **Configured Alerts** tab on the **Alerts** homepage.
### Alert Trigger Conditions Field Descriptions
When you are setting up an alert in Copilot, the values displayed in each field are entirely dependent on previously selected fields. The following table outlines the fields in the Alert trigger conditions section, and their values.
| Field Name | Description | Values |
| -------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **App** | The fabric application to set up the alert for. | - **Orders**
- **Inventory**
- **Product Catalog** |
| **Service:** | The service is the specific feature within the fabric application selected in the **App** field. | - Orders: **Order**, **Invoice**, and **Allocation**
- Inventory: **Inventory\_imports**
- Product Catalog: **Attribute**, **Bundle**, **Category**, **Product**, and **Collection** |
| **Attribute** | Specifies a characteristic or property of the selection in the **Service** field. | Includes options such as:
- **createdAt:** The time the service was created.
- **updatedAt:** The time the service was updated.
- **statusCode:** The service’s status code. |
| **Operator** | The **Operator** field describes the relationship between the **Attribute** field and the **Add Values** field. | - **IN:** Includes
- **NIN:** Doesn't include
- **EQ:** Is equal to
- **NEQ:** Not equal to
- **GT:** Is greater than
- **LT:** Is less than
- **GTE:** Is greater than or equal to
- **LTE:** Is less than or equal to |
| **Add Values** | The values represent specific states or conditions of the selected **Attribute**. | Time-based values include options such as:
- **NOW() - PT2H:** The time of the attribute is within the last two hours.
- **NOW() - PT6H:** The time of the attribute is within the last six hours.
- **NOW() - P2D:** The time of the attribute is within the last two days.
Status-based values include options such as:
- **ALLOCATED:** Indicates a status of allocated for the selected attribute.
- **PROCESSING:** Indicates a status of processing for the selected attribute.
- **FAILED:** Indicates a status of failed for the selected attribute. |
## Create an Alert with a Template
1. In the left menu, click **Home** > **Alerts**.
The **Alerts** page is displayed.
2. Click **Create Alert**.
The **Create alert** page is displayed.
3. Click **Use Template**.
4. In the **Use Template** section, do the following:
* Select the tab of the fabric application you want to set up the alert for; whether **Orders**, **Inventory**, or **Product Catalog**. The templates available for that application are displayed.
* Select a template.
5. Click **Next**.
The **Alert details** section is displayed.
6. In the **Alert Name** field, enter a name for the alert.
7. In the **Description** field, enter a description of the alert.
**Note:** The fields in **Alert trigger conditions** are disabled when creating an alert from a template since they come pre-configured to trigger based on a specific event. For more details on editing the **Alert trigger conditions** fields, see the [create an alert from scratch](/v3/guides/home/alerts/creating-an-alert) section.
8. In the **Look-back period** field, select the frequency at which fabric checks for events that could have triggered the alert.
9. Enter a value in the **Low Severity**, **Medium Severity**, and **High Severity** fields. For more detailed information on setting the severity threshold, see the [Alerts Conceptual Guide](/v3/guides/home/alerts/alerts-conceptual-guide).
10. Click **Next**.
The **Review** section is displayed.
11. To receive email alerts about this event, in the **Alert notification** section, select **Subscribe to this alert**.
Choosing to receive email alerts will only send an email to the address associated with your fabric account. Other users with shared access to your organization’s fabric account can \[subscribe to this alert]\(link to configured alerts tab) or view events that triggered this alert on the Alerts homepage.
12. Click **Save**.
The alert is created. You can access the alert in the **Configured Alerts** tab on the **Alerts** homepage.
## Related Topics
* [Alerts Overview](/v3/guides/home/alerts/alerts-overview)
* [Alerts Homepage](/v3/guides/home/alerts/alerts-page)
* [Managing Alerts](/v3/guides/home/alerts/managing-alerts)
# Managing Alerts
This document covers the process of editing an alert's details, subscribing to an alert, managing an alert's status, and browsing alert templates.
## Prerequisites
Ensure that you have **Administrator** privileges in Copilot. For more detailed information on these settings, see [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control).
### Editing an alert’s details
1. In the left menu, click **Home > Alerts**.
The Alerts page is displayed.
2. Click **Configured alerts**.
The **Configured alerts** tab is displayed.
3. Click on an alert’s title.
The alert details page is displayed.
4. Edit the alert’s details as required.
Depending on the configuration for the alert, editing for certain fields might be disabled.
5. Click **Save**.
The alert’s details are saved. You can access the alert in the **Configured Alerts** tab on the **Alerts** homepage.
### Subscribing to an alert
1. In the left menu, click **Home > Alerts**.
The **Alerts** page is displayed.
2. Click **Configured Alerts**.
The **Configured Alerts** tab is displayed.
3. Click on the title of an alert.
The alert details page is displayed.
4. In the **Alert notification** section, select **Subscribe to this alert**.
5. In the **Subscribe by level of severity** fields select the alerts you want to subscribe to.
6. In the **Subscription alert notification method** field, select whether you want to receive email alerts or only see the alert on the **Alerts** page.
7. Click **Save**.
You are subscribed to the alert. You will receive email notifications whenever an event triggers the alert conditions.
### Assigning users to alerts
fabric users with admin access to their organization’s account can assign alerts to other users in their organization.
1. In the left menu, click **Home > Alerts**.\
The **Alerts** page is displayed.
2. Click **Configured Alerts**.\
The **Configured Alerts** tab is displayed.
3. To edit who is notified when an alert is triggered, click the **Alert** name.\
The alert details page is displayed.
4. In the **Alert notifications** section, select **Users**.\
A list of users in your organization who already have alert notifications set up is displayed.
5. To assign or edit alert settings, choose one of the following options:
* To assign alerts to a user or users who don't already have alerts set up, do the following:
* Click **Add Users**.
The **Add users** window is displayed.
* In the **Users** field, select one or more users.
* In the **Subscribe by level of severity** fields, select the severity you want to subscribe the user or users to.
* In the **Subscription alert notification method** field, select whether you want the user to receive email alerts or only see the alert on the **Alerts** page.
* Click **Add Users**.
* To edit a single user's existing subscription settings, do the following:
* Mouse over the user in the table and click the pencil icon.
The **Edit alert notifications window** is displayed.
* In the **Subscribe by level of severity** fields, select the severity you want to subscribe the user to.
* In the **Subscription alert notification method** field, select whether you want the user to receive email alerts or only see the alert on the **Alerts** page.
* Click **Save**.
* To batch edit the subscription settings for multiple users, do the following:
* Select one or more users in the list and click the **Edit** button.
The **Are you sure you want to edit alert notifications for these users?** window is displayed.
* (Optional) In the **Users** add or remove the users you are editing.
* In the **Subscribe by level of severity** fields, select the severity you want to subscribe the user to.
* In the **Subscription alert notification method** field, select whether you want the user to receive email alerts or only see the alert on the **Alerts** page.
* Click **Save**.
The user or users are subscribed to receive alerts based on the settings you selected.
### Managing an alert’s status
1. In the left menu, click **Home > Alerts**.
The **Alerts** page is displayed.
2. Click **Configured alerts**.
The **Configured alerts** tab is displayed.
3. Click the alert name.
The alert details page is displayed.
4. Click the **Active** toggle button.
* If the alert is already in an active state, the **Are you sure you want to deactivate alert?** popup is displayed.
* To confirm deactivation, click **Yes, I’m Sure**.
* To cancel, click **Cancel**.
5. Click **Save**.
The alert’s status is updated. You can access the alert in the **Configured Alerts** tab on the **Alerts** homepage.
### Browsing alert templates
1. In the left menu, click **Home > Alerts**.
The **Alerts** page is displayed.
2. Click **Templates**.
The **Templates** tab is displayed. Templates are organized by fabric application.
3. To browse templates by fabric application, click the arrow icon to the right of a product menu to expand or collapse that application menu.
4. To learn more about an individual template, click its **View Details** button.
The **Template details** menu is displayed. It shows the template’s name, description, severity threshold, and trigger conditions.
5. Take one of the following actions:
* To create an alert from this template, click **Use**.
The **Create alert** page is displayed. For detailed instructions on creating an alert from a template, see [Creating an Alert from a Template](/v3/guides/home/alerts/creating-an-alert-from-template).
* To resume browsing, click **Cancel**.
The **Template details** menu closes.
## Related Topics
* [Alerts Overview](/v3/guides/home/alerts/alerts-overview)
* [Alerts Homepage](/v3/guides/home/alerts/alerts-page)
* [Creating an Alert](/v3/guides/home/alerts/creating-alerts)
# Coupons
Create codes that customers can enter at checkout to receive a discount
## Introduction
The Coupons tab displays a list of your coupons with controls to search and sort and a **Create new** button at the top right.
Use the search bar to find specific coupons. Results will auto populate as you type.
## Setting up a Coupon
From the Coupons menu, click **Create coupon** to create a new coupon, or click on an existing coupon’s title to edit it. Both options direct you to the **Edit coupon** screen to complete the following sections.
### Coupon details
* Coupon title - enter a name for the coupon. This will be displayed in the list of coupons on the main Coupons menu.
* Start and End dates and time - the date and time range the coupon is valid.
* Coupon usage
* Multiple-use coupons can be redeemed repeatedly without restriction. Use the Coupon code field to enter the code customers will need to use at checkout to receive the discount (SPRINGSALE20).
* Single-use coupon codes can only be redeemed once. Fill out the Prefix, Starting number, and Total coupon count fields, and click the Generate Codes link. fabric will use the information you provided to create a series of unique coupon codes. For example, say you fill out the fields with the following information:
* Prefix - SPRING
* Starting number - 200
* Total coupon count - 10fabric would generate 10 coupons: SPRING201, SPRING202, SPRING203, etc. The codes Offers creates will be available for download from the coupon listing page.
* Price list selection
* All - the coupon will apply to all eligible SKUs on all eligible price lists.
* Select price list - the coupon will only apply to eligible SKUs from the price lists you select. (Each price list selected must have the same currency)
* The specific price types (Base & Sale) from the price list can be selected to enable discounts on sale prices or prevent over-discounting on sale prices.
* Both Sale & Base Price - the discount will be applied if either price type is being used
* Sale Price - the discount will ONLY be applied if the Sale price is used and passed to Offers
* Base Price - the discount will ONLY be applied if the Base price is used and passed to Offers
### Coupon Stacking
Coupons have four different settings to control how they stack (combine) with other discounts running: **Stackable**, **Exclusive**, **Type Exclusive**, and **Universal**.
**Stackable**
The Stackable setting allows the coupon to stack with any other discount, except for those set to exclusive. The discounts “stack” on top of each other, increasing the total discount amount if the discounts apply to the same items in the cart. Stackable coupons require a priority. The priority defines the order in which stackable coupons are evaluated. Starting with priority 1, coupons are evaluated and applied in ascending order.
Use the Stacking Priority dropdown to select the coupon’s priority.
Priority 1 uses the price list price to apply the discounts to the target (product/cart). Priority 2 coupons are evaluated with their applicable discounts stacked on top of the discounted price from priority 1 coupons. Evaluation continues until all stackable priorities have been evaluated and applied.
**Exclusive**
The Exclusive setting means a coupon can't be combined with other discounts (except Universal). Only one non-stackable coupon will be applied to the cart, even if other items would be eligible. This is considered “Globally” exclusive. In these cases, Offers will apply the coupons with the largest monetary discount to the customer’s cart. If two coupons have the same monetary discount amount, the most recently published coupons will be applied.
**Type Exclusive**
This setting prevents coupons of the same type from being stacked. There are three types based on the discount target:
* Product - Coupon types that discount products with \$ off, % off, fixed price, typically these types SKUs, SKU quantity, Buy/Get SKU.
* Order - Coupon types that discount part of or the entire cart, for example, Buy/Get Cart.
* Shipping - Coupon types that discount shipping, for example, SKU - Shipping, Buy/Get Shipping.
**Universal**
This setting is used when you always want a coupon evaluated and applied (if it qualifies). These discounts are applied last and can stack on any other coupon regardless of its stacking setting.
### SKU selection
Products can be included or excluded from coupons using several criteria.
The first step is to set the inclusion criteria by first selecting the product target. Based on the criteria selected, products will be included in the coupon scope.
* ALL SKUs - All products in your catalog are eligible for the coupon
* SKUs - Select a specific list of products from your catalog
* Category - Select specific categories from your product catalog. Products assigned to these categories will be included in the coupon.
* Bulk Upload SKUs - upload a specific list of products from your catalog
Please note:
* Global exclusions continue to be considered regardless of coupon-specific rules.
* Browse/Select SKU and Upload SKU are only enabled if the ‘OR’ condition is selected
* If multiple values are selected in Category, Collection, or Attribute, these are treated as an ‘OR’ where only one must be true for the products to match the conditions.
Next, select the condition that can be used to decide how the criteria for inclusions interact.
* AND = ALL conditions must be met for the coupon to qualify
* OR = Only ONE of the criteria must be met for the coupon to qualify
Finally, you can exclude a subset of products.
* ALL SKUs - All products in your catalog are eligible for the promotion or coupon
* SKUs - Select a specific list of products from your catalog
* Category - Select specific categories from your product catalog. Products assigned to these categories will be included in the coupon.
* Bulk Upload SKUs - upload a specific list of products from your catalog
Please note:
* Global exclusions continue to be considered regardless of coupon-specific rules.
* Browse/Select SKU and Upload SKU are only enabled if the ‘OR’ condition is selected
* If multiple values are selected in Category, Collection, or Attribute, these are treated as an ‘OR’ where only one must be true for the products to match the conditions.
### Coupon type
**Coupon is applicable on** has three buttons to select the whether the coupon applies to:
* Specific SKUs
* A customer’s Cart Value
* The Quantity of items in a customer’s cart
After you set up the Coupon type, you can add additional discounts with the **Add Another Discount Type** button. For example, you can create a coupon that gives shoppers both 10 percent off and free shipping. You can add up to three total discounts.
Use the **Add Notes** section to jot down any important information while creating or updating a coupon. The notes section has a character limit of 100. Changes to the notes section replace prior versions of the notes. Prior versions of the notes aren't saved for retrieval.
## SKUs coupons
Use the Coupon type drop-down menu in conjunction with the Value field to choose whether the coupon will give the customer a Percentage off, an Amount off, or a discount applied to the shipping costs with Shipping off. Percent off and Amount off are applied individually on all the valid SKUs in the cart.
When **Shipping off** is selected, the **Shipping type** and **Shipping-Coupon-type** drop-down menus appear.
Use the Shipping-coupon-type drop-down menu to choose between Percentage off, Amount off, or Free. The Value field will change based on selection to allow for a percentage, dollar amount, or disappear, respectively.
Each fabric customer account can be configured to further discount the SKUs with clearance prices. Consult with your fabric representative to set up this custom configuration.
## Quantity coupons
Enter a number in the Minimum quantity of SKUs field to set the minimum number of items the customer must have in their cart before being eligible for the coupon.
Use the Coupon type drop-down menu in conjunction with the Value field to choose whether the coupon will give the customer a Percentage off or an Amount off.
The **Add another tier** feature allows you to create progressive coupons based on increasing minimum cart value thresholds. An example of a tiered coupon would be as follows
* 10% discount once the cart reaches 3 items
* 15% discount once the cart reaches 4 items
* 20% discount once the cart reaches 5 items
Click the Add another tier button to add a tier and its corresponding Delete button to remove the tier. You can create up to six tiers.
### Most Expensive/Cheapest Item Discount Application
You can optionally specify to ONLY apply a discount to the most expensive or cheapest product in a customer’s cart, rather than all of the eligible items.
This setting is available for the following discount types:
* Percentage off
* Amount off
* Fixed price
* Free
It can't apply to shipping discounts.
### Next-most Expensive Discount
This promotion strategy enhances savings by applying discounts to the next-most expensive items in a shopper's cart. This is applicable only for the Buy-Get type of discounts where shoppers get SKU discounts.
In the next-most expensive type of promotion, the most expensive item in a shopper's cart is used to qualify them for the promotion. Of the remaining items in the cart that qualify for the promotion, the next-most expensive item is discounted. If multiple items in the cart qualify for the promotion, then each of the next-most expensive items is discounted. For example, a shopper adds four items to their cart: A for \$40, B for \$30, C for \$20, and D for \$10. In this case:
* Item A being the most expensive in the list doesn't get discounted.
* Item B, being the next-most expensive one, receives a discount.
* After applying the discount to B, the system checks the remaining two items in the cart - C and D.
* Item C being the most expensive in the list doesn't get discounted.
* Item D, being the next-most expensive one, receives a discount.
As a result, items B and D get discounted through this promotion.
## Buy X Get Y Coupons
Buy X Get Y coupons allow you to discount products based on customers purchasing them in a bundle or spending over a minimum amount. The most common use is for “Buy one, get one” coupons.
### Customer buys
There are three options:
* SKUs - This allows you to choose alternative sets of SKUs. A customer must purchase the required quantity from at least 1 SKU set.
* Bundle - This allows you to choose multiple sets of SKUs. A customer must purchase the required quantity from all SKU sets.
* Cart Value - This lets you set a minimum amount that the customer must spend in order to get a discount on a specific SKU. You won't use ‘SKU sets’ for this option; instead, you can select SKUs that will be included in the total spend amount.
Use **Browse SKUs**to select the SKUs in the SKU set and enter the minimum quantity of SKUs that must be added to the cart.
Use **+ Add another set of SKUs** to display an additional section for adding SKUs.
Each SKU set will be labeled with a letter as an identifier, starting from A and going in alphabetical order.
You must select the SKUs and the minimum quantity before you can move onto ‘Customer Gets.'
### Customer Gets
Choose the discount the customer will receive.
* SKU - This option allows you to choose specific SKUs to be discounted. You can also specify if you would like to give an item for ‘free’.
* Cart - This option allows you to discount the total cart value by an amount or percentage.
* Shipping - This option allows you to discount the shipping cost. You will be able to select shipping methods that you have configured in fabric Orders.
For the SKU option, you can select a set of SKUs that can be discounted. You can choose the same set you created before in the ‘customer buys’ section, or you can choose to create a new SKU set by clicking on **+ Add another set of SKUs**.
Then choose the maximum quantity that can be discounted and how much they should be discounted by.
You can add additional sets of SKUs to be discounted by selecting **+ Add another discount**. All SKU sets will be included when calculating the discount.
### Discount type
There are four discount types:
* **Percentage off** - Reduces the price of the items, cart, or shipping by a percentage. The percentage value range from 1 to 100%.
* **Amount off** - Reduces the price of the items, cart, or shipping by a specific monetary amount. The currency used for the discount corresponds to the price list associated with the promotion. The amount can range from 1 to the total price. If the discount amount exceeds the price, the price becomes zero.
* **Shipping off** - Reduces the shipping cost based on the chosen shipping method by either a percentage or amount. You can also set the discount as `Free` to indicate a 100% discount.
* **Shipping methods** - The offers service uses the shipping methods configured in fabric OMS. This means you must use fabric OMS to apply shipping discounts. Multiple shipping methods can be selected; however, only a single discount type can be applied per method. You can create separate promotions to apply discount types for each shipping method.
* **Shipping discount qualifications** - On a shipping-type promotion or coupon, you can choose whether the discount applies to the entire shipment or just the items in the cart that qualify for the discount.
* **Entire cart:** With this option selected, every item in a cart must qualify for the promotion to apply regardless of ship-to locations.
* **Entire Shipment:** With this option selected, Only the items that share the same ship-to locations qualify for the promotion. For example, in the event of multi-fulfillment orders, when part of the order ships to home and part is picked up in-store, only items that qualify within the same ship-to qualify for the promotion.
* **Fixed price** - Assigns a fixed price to the items, cart, or shipping. The currency used for the discount corresponds to the price list associated with the promotion. In a "Buy X-Get Y" promotions, the fixed price is applied to each unit of the discounted items. **Note:** This option isn't applicable to promotions based on Cart Value.
### Most/Least Expensive Item Discount Application
You can optionally specify to ONLY apply a discount to the most or least expensive product in a customer’s cart, rather than all of the eligible items.
This setting is available for the following discount types:
* Percentage off
* Amount off
* Fixed price
* Free
It can't apply to shipping discounts.
## Dynamic Discounts
Dynamic discounting allows coupons to have variable discount amounts to prevent over-discounting when coupons stack. For example, if one coupon discounts an item or cart by 40%, you can limit a subsequent discount to 10%.
Use the toggle button to turn dynamic discounts on or off.
The If no discount already exists field allows you to set the maximum percentage off of the first applicable discount.
The If discount already exists field allows you to set the maximum percentage off of any subsequent applicable discounts.
Dynamic Discounts can be set on SKU or SKU Quantity coupons including:
* Percentage off
* Amount off
* Shipping off
* Fixed price
Dynamic Discounts aren't eligible for Buy/Get or Spend/Get coupons.
## Coupon Limits
There are two ways to limit coupon use: per user and site-wide.
Limiting coupons on a per-user basis allows you to choose how many times an individual redeems the coupon. This feature requires everyone redeeming the coupon to be registered and signed in to your web store.
Limiting coupons site-wide allows you to choose how many times a coupon can be redeemed in total, by any user.
These features can be used individually or in conjunction with each other for more control. For example, you may set a site-wide coupon limit at 100. To prevent one person from repeatedly using the coupon, you can also limit usage on a per-user basis, and set per-user redemption to one or two.
### Coupon Attributes
You can add custom metadata to existing promotions and coupons by using attributes. By adding coupon attributes, you can query the coupon using the assigned attribute values.
For example, you can create a *Brand* attribute with different brands as the attribute values. When you create a coupon, you can assign the *Brand* attribute with any of the predefined brand values. This method helps you specify your coupons more precisely and limit their use to certain conditions, such as specific brands, email types, or loyalty programs.
#### Prerequisites
Ensure that all required attributes are created in the [Offers Settings](/v3/guides/offers/settings) page.
#### Adding coupon attributes
1. In the left menu, click **Offers** > **All coupons**.\
The **Coupons** page is displayed.
2. Click **Create Coupon**.\
The **Create Coupon** page is displayed.
3. Scroll to the **Coupon attributes** section.
4. In the **Attribute name** drop-down menu, select the attribute you want added to the coupon.\
When an attribute is selected, the **Attribute values** are automatically populated.
5. (Optional) Remove any attribute values you don't want by selecting the **Attribute values** drop-down menu and un-checking the value.\
You can also click the `x` next to an attribute value to remove the value. Note that at least 1 value must be present.
6. (Optional) Click **Add another attribute** to add additional attributes.
7. To create the coupon, you must enter the remaining required information in each section. Each section for creating a coupon is outlined in this document.
#### Editing an existing coupon attributes
1. In the left menu, click **Offers** > **All Coupons**.\
The **Coupons** page is displayed.
2. To edit coupon attributes, do one of the following:
* Click the name of the existing coupon.
* Click the pencil icon at the rightmost of the existing coupons row.\
The edit coupon page is displayed with the coupons name.
3. Scroll to the **Coupon attributes** section.
4. Edit the coupon attributes as required.\
See the steps outlined in [adding coupon attributes](#adding-coupon-attributes) for information on changing values.
5. (Optional) To edit the attribute name and add or remove attribute values, see the editing steps outlined in [Offers Settings](/v3/guides/offers/settings).
#### Removing an existing coupon attribute
1. In the left menu, click **Offers** > **All Coupons**.\
The **Coupons** page is displayed.
2. To delete coupon attributes, do one of the following:
* Click the name of the existing coupon.
* Click the pencil icon at the rightmost of the existing coupons row.\
The edit coupon page is displayed with the coupons name.
3. Scroll to the **Coupon attributes** section.
4. Click the reset icon.\
If more than one coupon attribute exists, a trash icon is displayed instead of the reset icon.
5. Click **Update**
## Customer Segments
Offers lets you target coupons at specific groups of customers. However, before targeting a customer segment, you must first [create a customer segment in Offers Settings](/v3/guides/offers/settings#customer-segments).
After you have created a customer segment, you can target that segment with coupons.
* Target audience - choose whether the coupon will apply to:
* All - the coupon will be available to all shoppers.
* Segment - the coupon will be available to shoppers within the segment you have identified.
* Segment name - Select the segment you wish to link to the coupon.
* Segment values - The values will be populated here. You can choose to select specific values that you want to link to the coupon.
You can add multiple segment types by clicking on ‘+Add another segment.’
**Please note:**
The segment values will be ‘printed’ on the coupon once it's created:
* If you delete a segment from settings, the segment value on the coupon will remain to maintain the state of the coupon that was live.
* You can edit segment values on a coupon by editing the coupon itself.
* If a segment is no longer supported, the coupon is unlikely to be applied as Storefront and Cart are required to identify the segment and use it when applying coupon.
* If a segment is no longer supported, the coupon is unlikely to be applied as Storefront and Cart are required to identify the segment and use it when applying coupon.
#### Excluding a Segment
Segments can be excluded from coupons. To do this, first specify the included target audience, either "All" or a specific segment/value combination. Next, click on the **+Add exclusion list** link under the Exclude Segments subsection and add the details.
* Segment name - Select the segment you wish to exclude from the coupon.
* Segment values - The values will be populated here. Select specific values that you want to link to the coupon and exclude.
You can add multiple segments to exclude by clicking on **+Add another segment**.
## Define Terms & Conditions (optional)
The title and description fields provide space for the coupon’s terms and conditions, if any. The Add another condition feature allows you to expand the terms and conditions. Click the Add another tier button to add a tier and its corresponding Delete button to remove the tier.
# Overview
Offers is fabric's pricing and promotions engine with tools to manage your pricing, promotions, and coupons in one place.
fabric Offers works in conjunction with Product Catalog to set up and manage Stock Keeping Unit (SKU) prices. Its wide range of coupon and promotion features let you design discounts ranging from single-use, customer-specific coupons to site-wide promotions.
Offers must be connected to a front-end such as a web storefront or mobile app to display content and facilitate interaction.
You must be an active user of fabric's Product Catalog service to use Offers. Product data must be available in Product Catalog to enable the creation of prices, price lists, promotions, and coupons within Offers.
## Role-Based Access Control (RBAC)
fabric Copilot provides the ability to restrict the access of different users to information and actions available to them through roles. For more information and instructions on how to set up these controls for Offers, see [the RBAC](/v3/guides/offers/role-based-access-control) documentation.
## Accessing Offers in Copilot
1. Log in to your Copilot account.
If you do not have an active Copilot account, [click here](https://live.copilot.fabric.inc/auth/v2/login) to sign up for a free trial, or [contact support](https://support.fabric.inc/hc/en-us/requests/new) for help.
2. On the left menu, click **Offers**, and then click one of the following options as required:
* [Pricing](/v3/guides/offers/pricing): Sets and tracks the price of items in your web store.
* [Promotions](/v3/guides/offers/promotions/overview): Automatically applies discounts at checkout.
* [Coupons](/v3/guides/offers/coupons): Provides discount codes that customers can apply at checkout.
* [Settings](/v3/guides/offers/settings): Sets and updates price lists.
# Adding Bulk Price
The **Add Bulk Price** feature allows you to upload a [CSV file](/v3/guides/offers/pricing/price_template.csv) with details such as cost, price, and clearance price. This streamlined process eliminates the need for manual data entry, reduces errors, and saves time.
## CSV File Guidelines
fabric doesn't support any other data or file formats. Here are the key points to consider:
* The headers, represented in the first row of the CSV file, should match the product details.
* Empty rows and columns are ignored. Ensure that fields don't contain blank spaces, returns, line breaks, or other characters not supported in the CSV.
* fabric provides a CSV template file. Not following the parameters in the template can result in errors when uploading.
## Product Price Data Formatting
When preparing a CSV file for import, ensure that the product pricing data format aligns with the following column requirements:
| **Header** | **Description** |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **SKU ID** | The SKU ID of the item in Product Catalog. |
| **Cost** *Optional* | The cost of the item set by the distributor. |
| **Price** | The price set in fabric to charge buyers for their purchases. |
| **Clearance Price** *Optional* | The lowest price set in fabric to charge customers for their purchases. |
| **Start Date** | The date the price change begins. Dates must follow the `YYYY-MM-DDTHH:MM:00.000Z` format. For example, a price change scheduled for June 1, 2025 at noon would be `2025-06-01T12:00:00.000Z`. |
| **Price List Name** | The name assigned to a price list when created. |
Below is a sample of a valid CSV file for bulk price import:
| **SKU ID** | **Cost** | **Price** | **Clearance Price** | **Start Date (UTC)** | **Price List Name** |
| ------------- | -------- | --------- | ------------------- | ------------------------ | ------------------------ |
| SOME\_SKU\_ID | | 111 | | 2025-12-15T02:05:46.000Z | Default\_PriceList\_Name |
## Prerequisites
* Ensure that you have the **Offers Editor**, or **Administrator** privileges to fabric Offers. For more detailed information on these settings, see the [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control-offers-roles) section.
## Procedure
1. In the left menu, click **Offers**.\
The **Products Pricing** page is displayed.
2. Click **Add Bulk Price**.\
The **Import price CSV file** window is displayed.
3. Download the sample template by clicking Template: Price.
4. In the Import price CSV file window, do one of the following:
* Drag and drop your file to the window.
* Click **Select a File from your computer** and select your file.
5. Click **Import File**.
The CSV file is imported, and the prices are added to your products.
# Managing Prices
This topic covers the process of viewing price import history, viewing import errors, and manually editing prices.
## Viewing Import History
You can check the status of your upload by navigating to **Import History**. If the file contains errors, Offers flags the rows with issues. Once the upload is complete, you can download the CSV file with the errors, correct them, and re-upload the file.
### Procedure
1. In the left menu, click **Offers**.\
The **Products Pricing** page is displayed.
2. Click the **Import History** button.\
The **Pricing Import History** page is displayed.
3. Click the **>** icon under the **File Name** to expand for details.\
You can view the **Status** and **Message** about the import job.
4. (Optional) If the **Status** shows **Error**, click the **Download CSV** button under the **Message** column.
5. (Optional) Navigate to your downloads folder and open the CSV file.\
The CSV file is displayed with an **Error** column that specifies the error.
### Errors
| **Error** | **Description** |
| --------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------- |
| SKU ID not found | A SKU ID doesn’t match the SKU of any product in your Product Catalog account. |
| Headers don’t match the price template headers | The headers don’t match the headers in the template. |
| Only numeric and decimal values are allowed in cost | The cost column contains a character that isn’t a number or decimal. |
| Incorrect date format for Start/End Date (UTC). Use this date format YYYY-MM-DDTHH:MM:00.000Z | A date doesn’t match the correct format. |
| No price data found | The price columns don’t contain any data. |
| Start Date (UTC)/Price is required | Data is missing from one of these two required fields. |
| Clearance price/Price/Cost price should always be >= 0.00 | The data in these columns must be greater than or equal to 0. |
| Cost can’t be greater than its corresponding Price | The price must be greater than the cost. |
| Clearance price can’t be greater than or equal to its corresponding price | The price must be greater than the clearance price. |
| The header for an additional attributes column isn’t correctly formatted | The header for an additional attributes column doesn’t use the correct format and must follow the format additionalAttributes.exampleAttribute. |
## Manually Editing Price
On the **Products Pricing** page, you can edit price details. Use the **List View** or **Tile View** to adjust how items are displayed.
* **Tile View**: Displays images but includes less information.
* **List View**: Includes more information but doesn't display images.
To bulk edit the cost and price attributes for all variations of a product, such as colors, prints, or sizes, edit the parent product. To edit the cost and price attributes for a single product, such as only the green jacket, locate and edit the individual variant.
Offers supports up to five decimal places for price, cost, and clearance price values.
### Procedure
1. In the left menu, click **Offers**.\
The **Products Pricing** page is displayed.
2. To filter for a specific product, you can do the following:
* Search by product name or item ID.
* Click the dropdown menu to select a price list.
3. Click the product you want to edit.
The product information is displayed.
4. Click the **Edit SKU Price** button.
The **Edit Parent SKU Price** window is displayed.
5. In the **Edit Parent SKU Price** window, enter the following values:
* Cost
* Base Price
* Sale price
* Start date
* Start time
You must include the **Base Price**, **Start date**, and **Start time** values.
6. Click **Add Price**.
# Overview
Pricing is a core feature of the fabric platform, enabling merchants to manage product prices across their catalog. It works seamlessly with Product Catalog to ensure that the products you upload into your fabric account are automatically available for pricing.
## Key Benefits
* Seamless Integration: Pricing works directly with the Product Catalog, automatically displaying all uploaded products for efficient price management.
* Centralized Management: Access and configure all product prices from the **Offers> Pricing** page.
## Use Case
A merchant needs to set up and manage product prices for its online store. To achieve this, the merchant uploads products to the **Product Catalog** in fabric, making them available for pricing configuration through the **Offers > Pricing** page. This integration centralizes pricing tasks, enabling the merchant to define and control prices efficiently.
Through the **Offers > Pricing** page, the merchant sets base prices for each product. These base prices ensure consistent and accurate pricing for buyers across the platform. By managing prices for individual products or entire catalogs in one place, the merchant maintains full control over their pricing structure and strategies.
The merchant can also adjust prices for products as needed. Whether modifying the price of a single product or applying changes across an entire catalog, the merchant uses the **Offers > Pricing** page to make updates seamlessly. These adjustments are automatically reflected across the platform, ensuring alignment and accuracy across all channels.
With features like **clearance pricing** to prevent over-discounting during promotions or coupon campaigns, and real-time update capabilities, pricing empowers merchants to adapt quickly to market changes. This flexibility allows businesses to remain competitive while maintaining control over profitability and customer value.
# null
This topic covers the process of creating a buy-get promotion.
## Prerequisites
* Ensure that you have **Admin** or **Editor** privileges for Offers. For more detailed information on these settings, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control-offers-roles).
* Ensure that you have added at least one item in fabric Product Catalog. For more detailed information, see [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item).
* Ensure that you have created at least one price list in fabric Offers. For more information, see [Pricing](/v3/guides/offers/pricing).
* If you plan to create a promotion based on [Categories](/v3/guides/product-catalog/categories/categories) or [Collections](/v3/guides/product-catalog/collections/collections), ensure you have set up these features in Product Catalog and added items to them.
## Procedure
1. In the left menu, click **Offers > Promotions**.\
The **Promotions** page is displayed.
2. Click **Add Promotion**.
The **Create Promotion** page is displayed.
3. In the **Select type** field, select **Buy X - Get Y**.
4. Click **Next**.
The **Basic details** menu is displayed.
5. In the **Promotion name** field, enter a name for the promotion.
This name is for internal use only. fabric recommends giving it a unique, descriptive name that will help you differentiate this promotion from other promotions you may be running concurrently. For example, *Labor Day Dining Set Clearance*.
6. (Optional) In the **Notes** field, enter any internal-facing details that might be relevant to this promotion.
7. In the **Start date** and **Start time** fields, enter the date and time the promotion begins.
The start date and time must be in the future.
8. In the **End date** and **End time** fields, enter the date and time the promotion ends.
The end date and time must be after the start date and time.
9. In the **Price lists** field, select one or more price lists.
The promotion will only apply to eligible SKUs on the price lists you select. If selecting multiple price lists, they must all use the same currency. For more information, see [Price lists](/v3/guides/offers/promotions/overview#price-lists).
10. In the **Apply promotion to** field, select a price type.
For more information on price types, see [Price lists](/v3/guides/offers/promotions/overview#price-lists).
11. Click **Next**.
The **Conditions** menu is displayed.
12. To define the conditions that must be met to receive the promotional offer, do one of the following:
* Select **Buys min. qty of SKUs**.
* In the **A minimum of** field, enter a number of SKUs.
* Select **SPends a min. amount**.
* In the **A minimum amount of** field, enter a dollar amount.
13. To select the items that are eligible for the promotion, in the **From** field, make one or more selections.
For more information, see [Product eligibility definitions for promotions](/v3/guides/offers/promotions/overview#product-eligibility-definitions-for-promotions).
14. Click the **Browse** button.
The **Browse SKUs customers must buy** window is displayed.
15. Select the SKUs that are eligible for the promotion and click **Add**.
The SKUs you selected are added to the list of SKUs that are eligible for the promotion.
16. If you selected multiple conditions in step 12, select an operator to choose how your selections interact with each other.
For more information on these settings, see [Product eligibility definitions for promotions](/v3/guides/offers/promotions/overview#product-eligibility-definitions-for-promotions).
17. (Optional) To exclude items from the promotion, in the **Exclude** field, select one or more options and configure as required.
For more information on excluding products, see [Excluding products](/v3/guides/offers/promotions/overview#product-exclusions-from-promotions).
18. To set up the type of discount, in the **Customer gets** section, take one of the following steps.
For more information on the **Customer gets** section, see [Defining discounts and how they're applied](/v3/guides/offers/promotions/overview#defining-discounts-and-how-they-re-applied).
* To apply the discount to individual SKUs, in the **Discount on** field, select **SKU**.
a. In the **Discount type** field, select a discount type.
b. (Optional) To allow the promotion to have variable discount amounts to prevent over-discounting when promotions stack, click **Dynamic discount** and do the following:
* In the **Additional discount (If discount already exists)** field, enter a value.
c. In the **Discount value** field, enter a value.
* To apply the discount to the cost of shipping, in the **Discount on** field, select **Shipping** and do the following:
a. In the **Discount type** field, select a discount type.\
b. In the **Shipping type** field, choose one or more shipping methods the discount applies to.
c. In the **Applicable on** field, select **Entire Cart** or **Entire Shipment**.
d. (Optional) To allow the promotion to have variable discount amounts to prevent over-discounting when promotions stack, click **Dynamic discount** and do the following:
* In the **Additional discount (If discount already exists)** field, enter a value.
e. In the **Discount value** field, enter a value.
* To apply the discount to the entire cart, in the **Discount on** field, select **Cart** and do the following:
a. In the **Discount type** field, select a discount type.\
b. In the **Discount value** field, enter a value.
19. (Optional) To add another discount, select **Add Another Discount** and set up the discount as required.
20. Click **Next**.
The **Stacking & additional settings** menu is displayed.
21. To set how this promotion can be combined with or restricted by other promotions you are running, in the **Set promotion stacking** field, select a stacking type, and, if applicable, set the priority.
For more information on promotion stacking and priority, see [Stacking & additional settings](/v3/guides/offers/promotions/overview#stacking-and-additional-settings).
22. (Optional) To create tailored messaging about the promotion on various pages of your commerce site, click the arrow icon next to **Promotion messaging**.
* In the **Choose where to add messaging** field, select one or more places to add the messaging.
* In the **Locale set 1** field, select the locales where this messaging will appear.
* Enter a title for the message.
* Enter the message body.
For more information on promotion messaging, see [Promotion messaging](/v3/guides/offers/promotions/overview#promotion-messaging).
23. (Optional) To add interal-facing tags to help you identify or classify the promotion, click the arrow icon next to **Promotion attributes** and do the following:
* In the **Attribute name** field, select a name.
* In the **Attribute values** field, select one or more values.
Attribute names and attribute values are user-generated and can be created by visiting **Offers > Settings > Attributes** in Copilot. For more information, see [Creating an attribute](/v3/guides/offers/settings#attributes).
24. (Optional) To target the promotion to specific customer segments, click the arrow icon next to **Customer segments** and do the following:
* Select **Segment**.
* In the **Segment name** field, select a name.
* In the **Segment values** field, select one or more values.
* (Optional) To exclude segments, select **Exclude Segment**.
* In the **Segment name** field, select a name to exclude.
* In the **Segment values** field, select one or more values to exclude.
Segment names and segment values are user-generated and can be created by visiting **Offers > Settings > Customer segments** in Copilot. For more information, see [Customer segments](/v3/guides/offers/settings#customer-segments).
25. (Optional) To set the maximum number of times the promotion can be used, click the arrow icon next to **Usage limits** and enter a number.
26. Click **Next**.
The **Review & create** menu is displayed.
27. Verify that all promotion details are correct.
Use the **Back** button to move to previous steps in the process.
28. Click **Create**.
The promotion is created with the settings you specified.
## Related Topics
* [Promotions Overview](/v3/guides/offers/promotions/overview)
* [Creating a SKU Promotion](/v3/guides/offers/promotions/creating-a-sku-promotion)
* [Creating a SKU Quantity Promotion](/v3/guides/offers/promotions/creating-a-sku-quantity-promotion)
# null
This topic covers the process of creating a SKU promotion.
## Prerequisites
* Ensure that you have **Admin** or **Editor** privileges for Offers. For more detailed information on these settings, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control-offers-roles).
* Ensure that you have added at least one item in fabric Product Catalog. For more detailed information, see [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item).
* Ensure that you have created at least one price list in fabric Offers. For more information, see [Pricing](/v3/guides/offers/pricing).
* If you plan to create a promotion based on [Categories](/v3/guides/product-catalog/categories/categories) or [Collections](/v3/guides/product-catalog/collections/collections), ensure you have set up these features in Product Catalog and added items to them.
## Procedure
1. In the left menu, click **Offers > Promotions**.\
The **Promotions** page is displayed.
2. Click **Add Promotion**.
The **Create Promotion** page is displayed.
3. In the **Select type** field, select **SKU Promotion**.
4. Click **Next**.
The **Basic details** menu is displayed.
5. In the **Promotion name** field, enter a name for the promotion.
This name is for internal use only. fabric recommends giving it a unique, descriptive name that will help you differentiate this promotion from other promotions you may be running concurrently. For example, *Labor Day Dining Set Clearance*.
6. (Optional) In the **Notes** field, enter any internal-facing details that might be relevant to this promotion.
7. In the **Start date** and **Start time** fields, enter the date and time the promotion begins.
The start date and time must be in the future.
8. In the **End date** and **End time** fields, enter the date and time the promotion ends.
The end date and time must be after the start date and time.
9. In the **Price lists** field, select one or more price lists.
The promotion will only apply to eligible SKUs on the price lists you select. If selecting multiple price lists, they must all use the same currency. For more information, see [Price lists](/v3/guides/offers/promotions/overview#price-lists).
10. In the **Apply promotion to** field, select a price type.
For more information on price types, see [Price lists](/v3/guides/offers/promotions/overview#price-lists).
11. Click **Next**.
The **Conditions** menu is displayed.
12. To select the items that are eligible for the promotion, in the **From** field, make one or more selections.
For more information, see [Product eligibility definitions for promotions](/v3/guides/offers/promotions/overview#product-eligibility-definitions-for-promotions).
13. Click the **Browse** button.
The **Browse SKUs customers must buy** window is displayed.
14. Select the SKUs that are eligible for the promotion and click **Add**.
The SKUs you selected are added to the list of SKUs that are eligible for the promotion.
15. If you selected multiple conditions in step 12, select an operator to choose how your selections interact with each other.
For more information on these settings, see [Product eligibility definitions for promotions](/v3/guides/offers/promotions/overview#product-eligibility-definitions-for-promotions).
16. (Optional) To exclude items from the promotion, in the **Exclude** field, select one or more options and configure as required.
For more information on excluding products, see [Excluding products](/v3/guides/offers/promotions/overview#product-exclusions-from-promotions).
17. To set up the type of discount, in the **Customer gets** section, take one of the following steps.
For more information on the **Customer gets** section, see [Defining discounts and how they're applied](/v3/guides/offers/promotions/overview#defining-discounts-and-how-they-re-applied).
* To apply the discount to individual SKUs, in the **Discount on** field, select **SKU**.
a. In the **Discount type** field, select a discount type.
b. (Optional) To allow the promotion to have variable discount amounts to prevent over-discounting when promotions stack, click **Dynamic discount** and do the following:
* In the **Additional discount (If discount already exists)** field, enter a value.
c. In the **Discount value** field, enter a value.
* To apply the discount to the cost of shipping, in the **Discount on** field, select **Shipping** and do the following:
a. In the **Discount type** field, select a discount type.\
b. In the **Shipping type** field, choose one or more shipping methods the discount applies to.
c. In the **Applicable on** field, select **Entire Cart** or **Entire Shipment**.
d. (Optional) To allow the promotion to have variable discount amounts to prevent over-discounting when promotions stack, click **Dynamic discount** and do the following:
* In the **Additional discount (If discount already exists)** field, enter a value.
e. In the **Discount value** field, enter a value.
* To apply the discount to the entire cart, in the **Discount on** field, select **Cart** and do the following:
a. In the **Discount type** field, select a discount type.\
b. In the **Discount value** field, enter a value.
18. (Optional) To add another discount, select **Add Another Discount** and set up the discount as required.
19. Click **Next**.
The **Stacking & additional settings** menu is displayed.
20. To set how this promotion can be combined with or restricted by other promotions you are running, in the **Set promotion stacking** field, select a stacking type, and, if applicable, set the priority.
For more information on promotion stacking and priority, see [Stacking and additional settings](/v3/guides/offers/promotions/overview#stacking-and-additional-settings).
21. (Optional) To create tailored messaging about the promotion on various pages of your commerce site, click the arrow icon next to **Promotion messaging**.
* In the **Choose where to add messaging** field, select one or more places to add the messaging.
* In the **Locale set 1** field, select the locales where this messaging will appear.
* Enter a title for the message.
* Enter the message body.
For more information on promotion messaging, see [Promotion messaging](/v3/guides/offers/promotions/overview#promotion-messaging).
22. (Optional) To add interal-facing tags to help you identify or classify the promotion, click the arrow icon next to **Promotion attributes** and do the following:
* In the **Attribute name** field, select a name.
* In the **Attribute values** field, select one or more values.
Attribute names and attribute values are user-generated and can be created by visiting **Offers > Settings > Attributes** in Copilot. For more information, see [Creating an attribute](/v3/guides/offers/settings#attributes).
23. (Optional) To target the promotion to specific customer segments, click the arrow icon next to **Customer segments** and do the following:
* Select **Segment**.
* In the **Segment name** field, select a name.
* In the **Segment values** field, select one or more values.
* (Optional) To exclude segments, select **Exclude Segment**.
* In the **Segment name** field, select a name to exclude.
* In the **Segment values** field, select one or more values to exclude.
Segment names and segment values are user-generated and can be created by visiting **Offers > Settings > Customer segments** in Copilot. For more information, see [Customer segments](/v3/guides/offers/settings#customer-segments).
24. (Optional) To set the maximum number of times the promotion can be used, click the arrow icon next to **Usage limits** and enter a number.
25. Click **Next**.
The **Review & create** menu is displayed.
26. Verify that all promotion details are correct.
Use the **Back** button to move to previous steps in the process.
27. Click **Create**.
The promotion is created with the settings you specified.
## Related Topics
* [Promotions Overview](/v3/guides/offers/promotions/overview)
* [Creating a SKU Quantity Promotion](/v3/guides/offers/promotions/creating-a-sku-quantity-promotion)
* [Creating a Buy Get Promotion](/v3/guides/offers/promotions/creating-a-buy-get-promotion)
# null
This topic covers the process of creating a SKU quantity promotion.
## Prerequisites
* Ensure that you have **Admin** or **Editor** privileges for Offers. For more detailed information on these settings, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control-offers-roles).
* Ensure that you have added at least one item in fabric Product Catalog. For more detailed information, see [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item).
* Ensure that you have created at least one price list in fabric Offers. For more information, see [Pricing](/v3/guides/offers/pricing).
* If you plan to create a promotion based on [Categories](/v3/guides/product-catalog/categories/categories) or [Collections](/v3/guides/product-catalog/collections/collections), ensure you have set up these features in Product Catalog and added items to them.
## Procedure
1. In the left menu, click **Offers > Promotions**.\
The **Promotions** page is displayed.
2. Click **Add Promotion**.
The **Create Promotion** page is displayed.
3. In the **Select type** field, select **SKU Quantity**.
4. Click **Next**.
The **Basic details** menu is displayed.
5. In the **Promotion name** field, enter a name for the promotion.
This name is for internal use only. fabric recommends giving it a unique, descriptive name that will help you differentiate this promotion from other promotions you may be running concurrently. For example, *Labor Day Dining Set Clearance*.
6. (Optional) In the **Notes** field, enter any internal-facing details that might be relevant to this promotion.
7. In the **Start date** and **Start time** fields, enter the date and time the promotion begins.
The start date and time must be in the future.
8. In the **End date** and **End time** fields, enter the date and time the promotion ends.
The end date and time must be after the start date and time.
9. In the **Price lists** field, select one or more price lists.
The promotion will only apply to eligible SKUs on the price lists you select. If selecting multiple price lists, they must all use the same currency. For more information, see [Price lists](/v3/guides/offers/promotions/overview#price-lists).
10. In the **Apply promotion to** field, select a price type.
For more information on price types, see [Price lists](/v3/guides/offers/promotions/overview#price-lists).
11. Click **Next**.
The **Conditions** menu is displayed.
12. To select the items that are eligible for the promotion, in the **From** field, make one or more selections.
For more information, see [Product eligibility definitions for promotions](/v3/guides/offers/promotions/overview#product-eligibility-definitions-for-promotions).
13. Click the **Browse** button.
The **Browse SKUs customers must buy** window is displayed.
14. Select the SKUs that are eligible for the promotion and click **Add**.
The SKUs you selected are added to the list of SKUs that are eligible for the promotion.
15. If you selected multiple conditions in step 12, select an operator to choose how your selections interact with each other.
For more information on these settings, see [Product eligibility definitions for promotions](/v3/guides/offers/promotions/overview#product-eligibility-definitions-for-promotions).
16. (Optional) To exclude items from the promotion, in the **Exclude** field, select one or more options and configure as required.
For more information on excluding products, see [Excluding products](/v3/guides/offers/promotions/overview#product-exclusions-from-promotions).
17. To set the minimum quantity of SKUs the customer must purchase in order to be eligible for the promotion, in the **Buy min quantity of SKUs field**, enter a value.
18. To set up the type of discount, in the **Customer gets** section, take one of the following steps.
For more information on the **Customer gets** section, see [Defining discounts and how they're applied](/v3/guides/offers/promotions/overview#defining-discounts-and-how-they-re-applied).
* To apply the discount to individual SKUs, in the **Discount on** field, select **SKU**.
a. In the **Discount type** field, select a discount type.
b. (Optional) To allow the promotion to have variable discount amounts to prevent over-discounting when promotions stack, click **Dynamic discount** and do the following:
* In the **Additional discount (If discount already exists)** field, enter a value.
c. In the **Discount value** field, enter a value.
* To apply the discount to the cost of shipping, in the **Discount on** field, select **Shipping** and do the following:
a. In the **Discount type** field, select a discount type.\
b. In the **Shipping type** field, choose one or more shipping methods the discount applies to.
c. In the **Applicable on** field, select **Entire Cart** or **Entire Shipment**.
d. (Optional) To allow the promotion to have variable discount amounts to prevent over-discounting when promotions stack, click **Dynamic discount** and do the following:
* In the **Additional discount (If discount already exists)** field, enter a value.
e. In the **Discount value** field, enter a value.
* To apply the discount to the entire cart, in the **Discount on** field, select **Cart** and do the following:
a. In the **Discount type** field, select a discount type.\
b. In the **Discount value** field, enter a value.
19. (Optional) To add another discount, select **Add Another Discount** and set up the discount as required.
20. Click **Next**.
The **Stacking & additional settings** menu is displayed.
21. To set how this promotion can be combined with or restricted by other promotions you are running, in the **Set promotion stacking** field, select a stacking type, and, if applicable, set the priority.
For more information on promotion stacking and priority, see [Stacking and additional settings](/v3/guides/offers/promotions/overview#stacking-and-additional-settings).
22. (Optional) To create tailored messaging about the promotion on various pages of your commerce site, click the arrow icon next to **Promotion messaging**.
* In the **Choose where to add messaging** field, select one or more places to add the messaging.
* In the **Locale set 1** field, select the locales where this messaging will appear.
* Enter a title for the message.
* Enter the message body.
For more information on promotion messaging, see [Promotion messaging](/v3/guides/offers/promotions/overview#promotion-messaging).
23. (Optional) To add interal-facing tags to help you identify or classify the promotion, click the arrow icon next to **Promotion attributes** and do the following:
* In the **Attribute name** field, select a name.
* In the **Attribute values** field, select one or more values.
Attribute names and attribute values are user-generated and can be created by visiting **Offers > Settings > Attributes** in Copilot. For more information, see [Creating an attribute](/v3/guides/offers/settings#attributes).
24. (Optional) To target the promotion to specific customer segments, click the arrow icon next to **Customer segments** and do the following:
* Select **Segment**.
* In the **Segment name** field, select a name.
* In the **Segment values** field, select one or more values.
* (Optional) To exclude segments, select **Exclude Segment**.
* In the **Segment name** field, select a name to exclude.
* In the **Segment values** field, select one or more values to exclude.
Segment names and segment values are user-generated and can be created by visiting **Offers > Settings > Customer segments** in Copilot. For more information, see [Customer segments](/v3/guides/offers/settings#customer-segments).
25. (Optional) To set the maximum number of times the promotion can be used, click the arrow icon next to **Usage limits** and enter a number.
26. Click **Next**.
The **Review & create** menu is displayed.
27. Verify that all promotion details are correct.
Use the **Back** button to move to previous steps in the process.
28. Click **Create**.
The promotion is created with the settings you specified.
## Related Topics
* [Promotions Overview](/v3/guides/offers/promotions/overview)
* [Creating a SKU Promotion](/v3/guides/offers/promotions/creating-a-sku-promotion)
* [Creating a Buy Get Promotion](/v3/guides/offers/promotions/creating-a-buy-get-promotion)
# Overview
With the Promotions feature in fabric Offers, you can create targeted discounts, incentives, and pricing rules tailored to specific products, categories, collections, product attributes, and customer segments. You can also configure promotion conditions, set exclusions, and define how multiple promotions interact through stacking rules. The key elements of a promotion include:
| **Elements** | **Description** |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- |
| Eligible products | The SKUs, categories, and collections that qualify for the promotion. |
| Conditions | Criteria that define the requirements to activate the promotion, such as a minimum purchase quantity or specific product features. |
| Discount type | Formats of the discount, including percentage reductions, fixed amount discounts, or free shipping. |
| Promotion stacking | Rules determining how promotions combine, whether by allowing multiple discounts or making them exclusive. |
| Dynamic discounting | Controls the way discounts are applied when multiple promotions are eligible, preventing over-discounting by limiting how discounts stack. |
| Promotion messaging | Customizable promotional messages visible on product pages, in the customer's cart, or at checkout, tailored for specific customer segments. |
Promotions are applied automatically to a customer's order once the items in their cart meet the criteria you specify. Unlike [Coupons](/v3/guides/offers/coupons), customers don't need to provide a code to receive the discount.
## Types of Promotions
fabric supports three types of promotions:
* **SKU Promotion**: A discount targeting specific SKUs, where individual products are selected for eligibility, and a discount type is assigned. This promotion type is ideal for sales on specific products, clearing inventory, or spotlighting new arrivals. For example, a *Spring clearance* could offer a percentage discount on products from the previous year's collection.
* **SKU Quantity Promotion**: A discount applied when a customer buys a specific quantity of a particular SKU. This promotion is often used to clear inventory or promote high-margin products. For example, you can create a *Buy 3, get 15% off* promotion to encourage customers to purchase in bulk and increase average order value.
* **Buy X Get Y Promotion**: A free or discounted product,Y, is offered when customers purchase a designated product or quantity of X. This promotion is ideal for bundling complementary products, driving larger transactions, and increasing cart size. For example, you can create *Buy one, get one free* or *Buy two, get 50% off the third item* to offer an incentive when the customer's cart meets the minimum purchase threshold.
## Promotion Setup
Setting up a promotion includes configuring key elements such as price lists, product eligibility conditions, discount types, exclusions, and how multiple promotions interact, as described in the following workflow:
1. Choose a [price list](/v3/guides/offers/promotions/overview#price-lists) to establish the baseline pricing, ensuring that discounts apply correctly depending on whether items are full-price or already discounted.
2. Set the [conditions](/v3/guides/offers/promotions/overview#product-eligibility-definitions-for-promotions) that determine which products qualify for the promotion. This could include all products, specific SKUs, categories, or product attributes.
3. Apply [exclusions](/v3/guides/offers/promotions/overview#product-exclusions-from-promotions) to refine the promotion by targeting specific products or excluding certain items from the offer.
4. Specify the type of [discount](/v3/guides/offers/promotions/overview#defining-discounts-and-how-they-re-applied) the customer receives. For example, percentage off, amount off, or free shipping, and decide if it applies to individual items, shipping costs, or the entire cart.
5. Set up [stacking](/v3/guides/offers/promotions/overview#stacking-and-additional-settings) to apply multiple promotions simultaneously. Define how they interact by assigning priorities or making them exclusive.
6. Configure [promotion messaging](/v3/guides/offers/promotions/overview#promotion-messaging) to determine where details appear for customers, such as product pages, the cart, or the checkout. Customize messaging based on customer groups or regions.
### Price lists
Price lists determine how discounts are applied to products. By selecting a price list, you define whether the discount applies to full-price items, sale items, or both. This ensures that promotional pricing is applied as desired, without over-discounting. The following table outlines the different types of price lists and how they determine the application of discounts during a promotion:
| **Price list** | **Description** |
| ---------------------- | ---------------------------------------------------------------------------------------- |
| Only base price | The discount applies only if the item isn't already on sale. |
| Only sale price | The discount applies only if the item is on sale. |
| Both sale & base price | The discount applies regardless of whether the item is at base price or already on sale. |
For more information, see [the pricing guide](/v3/guides/offers/pricing).
### Product eligibility definitions for promotions
The **Customer buys** section allows you to define conditions that specify which products are eligible for the promotion. Setting these conditions ensures that the promotion is applied only to products that meet your defined criteria.
The following table describes the options to define product eligibility based on the price list or lists you selected:
| **Condition** | **Description** |
| ------------------ | ---------------------------------------------------------------------------------------------- |
| All SKUs | The promotion applies to all products. |
| Specific SKUs | The promotion applies to specific products you select. |
| Categories | The promotion applies to one or more categories of products that you select. |
| Collections | The promotion applies to one or more collections of products that you select. |
| Product Attributes | The promotion applies to products based on specific attributes, such as color, size, or brand. |
You can combine multiple conditions using operators to create a more targeted promotion. The **AND** condition requires all conditions to be met, while the **OR** condition allows the promotion to apply if any one condition is satisfied.
For example, if you select both the *Category: Apparel* and *Color: Red*, with the **AND** operator, only red apparel qualifies for the promotion.
On the other hand, if you use the **OR** operator, any items in the category *apparel* will qualify for the promotion.
Combining conditions allows you to ensure that the right products are included based on multiple criteria. For example, you can include all items in the *Apparel* category, but limit the promotion to products with the attribute *Color: Red* or *Size: Large*.
This allows you to ensure that the right products are included based on multiple conditions.
#### Product exclusions from promotions
After selecting your initial group of products based on SKUs, categories, collections, or product attributes, you can refine your promotion by excluding specific products. The **Exclude** field allows you to remove certain items from the promotion, even if they meet the initial promotion criteria.
For example, you might run a sale on all products in the *Apparel* category, but exclude premium brands or limited-edition items. Using the exclude field, you can remove these products by specifying their SKUs, categories, collections, or attributes.
You can exclude products in the following ways:
* SKUs: Specify the SKUs of individual products that you don’t want to include in the promotion.
* Category: Specify the categories that you don't want to include in the promotion.
* Collection: Specify the collections that you don't want to include in the promotion.
* Attributes: Specify the products by their attributes that you don't want to include in the promotion.
By using exclusions, you gain greater precision over which products are part of a promotion, avoiding unintended discounts on products that don’t align with your strategy.
### Defining discounts and how they're applied
Promotions offer various types of rewards, such as a percentage off, a fixed amount off, or free shipping, to customers when the promotion criteria are met. Different types of discounts can be applied to various aspects of a promotion. Here’s an overview of the most common discount applications:
| **Discount on** | **Description** |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| SKU | The discount applies to the specific SKU or SKUs you specify. Ideal for promotions highlighting specific products or for clearing inventory. |
| Shipping | The discount applies to shipping. |
| Cart | The discount applies to the total value of the customer's cart. Cart discounts incentivize customers to add more items to their carts to qualify for the discount. |
The discount type defines how the discount is applied to the promotion.
A promotion can support up to three different discounts. For example, you can create a promotion that gives shoppers 10 percent off and then create a second discount that offers free shipping.
There are several discount types available, each with their own function:
| Discount type | Description |
| -------------- | ------------------------------------------------------------- |
| Percentage off | Reduces the cost of eligible items by a specified percentage. |
| Amount off | Reduces the cost of eligible items by a specified amount. |
| Fixed price | Sets a specific price for eligible items. |
| Free | Only available when the discount applies to shipping. |
When creating a promotion that applies to the shipping method, you must select a fulfillment rule set that you configured in fabric Orders. For more information, see the [Creating a fulfillment rule set guide](/v3/guides/orders/order-fulfillment-logic/create-a-new-rule-set-ui).
#### Shipping discounts
Shipping discounts can be applied with one of the following options:
* Entire cart: Each item in a cart must qualify for the promotion to apply regardless of ship-to locations.
* Entire shipment: Only the items that share the same ship-to locations qualify for the promotion. For example, in the event of multi-fulfillment orders, when part of the order ships to home and part is picked up in-store, only items that qualify within the same ship-to qualify for the promotion.
You can use multiple shipping methods, such as home delivery, in-store pickup, or split shipments. However, only a single discount type can be applied per shipping method. This means if one part of the order is shipped and another part is picked up, you can apply a shipping discount to one method at a time.
### Dynamic discounting
Dynamic discounting allows promotions to have variable discount amounts, preventing over-discounting when multiple promotions stack. By enabling dynamic discounting, you can set limits on the discount percentage or amount applied, ensuring that the total discount remains controlled even when promotions overlap. For example, if one promotion discounts an item or cart by 40%, you can limit a subsequent discount to 10%.
Dynamic Discounts aren't eligible for buy/get or spend/get promotions.
## Stacking and Additional Settings
Promotion stacking refers to the ability to combine multiple promotions or discounts on the same cart. When promotion stacking is enabled, a customer can apply more than one discount to their cart, increasing the overall savings. For example, a customer could receive both a 10% discount for a storewide sale and an additional \$5 off for a specific product promotion.
Promotion stacking is controlled by assigning a priority to each promotion. Promotions with a lower priority number are applied first, and subsequent promotions are stacked on top, applying their discounts to the already-discounted price.
This allows for more control over how multiple promotions interact, ensuring that promotions with higher priority are considered before others.
Promotions are stacked using the following options:
* **Stackable**: The promotion can stack with any other discount, except for those set to exclusive. The discounts are applied on top of each other, increasing the total discount amount if the discounts apply to the same item. Stackable promotions require a priority, which defines the order in which stackable promotions are evaluated. Starting with priority 1, promotions are evaluated and applied in ascending order. Priority 1 uses the price on the price list to apply the discounts. Priority 2 promotions are evaluated with their applicable discounts stacked on top of the discounted price from priority 1 promotions. Evaluation continues until all stackable priorities have been evaluated and applied.
* **Exclusive**: The promotion can't be combined with other discounts, except Universal. Only one non-stackable promotion is applied to the cart, even if other items are eligible. This is considered globally exclusive. In these cases, Offers applies the promotions with the largest monetary discount. If two promotions have the same monetary discount amount, the most recently published promotions are applied.
* **Type exclusive**: This promotion can't be combined with other promotions of the same discount type, such as SKU, cart, or shipping. When multiple promotions of the same type are available, only the one with the highest level or best discount is applied to the customer’s order. This ensures that conflicting promotions don't overlap, preventing excessive discounts.
* **Universal**: The promotion is always evaluated and applied. These discounts are applied last and can stack on any other promotion regardless of its stacking setting.
### Promotion messaging
Promotion messaging allows you to create custom messages that notify customers about active promotions. The message can appear on any combination of the following pages:
The message can appear on Product Detail Page (PDP), Product List Page (PLP), customer's cart, and the checkout page, or any combination of these.
Additionally, you can target specific customer groups by choosing the locale, ensuring the message is displayed in the appropriate language or region. This feature helps ensure that your promotional offers are clearly communicated to the right audience.
### Promotion attributes
Promotion attributes are internal-facing tags to categorize and classify promotions for use in reporting and analytics.
For example, you can tag promotions with attributes such as *Seasonal Sales* and further define them with values such as *Summer* or *Fall*. This classification allows you to query and report on promotions based on the attributes you’ve assigned, making it easier to measure the performance of targeted campaigns.
For more information on creating these attributes, see the [Attributes guide](/v3/guides/offers/settings#attributes).
### Customer segments
You can define which customer segments are eligible for the promotion. Targeting customer segments allows you to apply discounts or special offers to specific groups of customers.
For more information on customer segments, see the [customer segments](https://developer.fabric.inc/v3/guides/offers/settings#customer-segments).
## Related Topics
* [Creating a SKU Promotion](/v3/guides/offers/promotions/creating-a-sku-promotion)
* [Creating a SKU Quantity Promotion](/v3/guides/offers/promotions/creating-a-sku-quantity-promotion)
* [Creating a Buy Get Promotion](/v3/guides/offers/promotions/creating-a-buy-get-promotion)
# Settings
## Introduction
To manage price lists, global exclusions, and customer segments, click on the **Settings** menu under Offers in the left-hand navigation.
### Price Lists
Price lists is the default view when accessing the Offers Settings menu.
For a new price list, enter a name under Price List Name and then click the **Add price list** button.
The new price list you create will be listed along with other existing prices lists under Manage Price List. Use the buttons at the left to choose which price list is set as the Default List.
The Default Price List serves as the master price list in cases of conflicting prices. For example, if you have a single SKU that appears at different prices on five different price lists, the SKU’s price as it appears in the Default Price List will be shown.
Sort price lists by clicking on the arrow next to Price List ID. To change a Price List Name, click on its corresponding pencil icon and enter a new name. Click the checkmark to save or the X to cancel.
### Global exclusions
Global Exclusions allows you to protect SKUs from being discounted by active promotions.
To set up Global exclusions, select **Global exclusions** from the Settings menu and click the **Create exclusion list** button.
* Give the list a title
* Set the start and end dates/times. This sets the duration that the SKUs in the list will be protected from discounts.
* Set whether you want the SKU price, Shipping price, or both to be protected
* SKU price - This protects the SKU’s price from being discounted
* Shipping price - This will ensure that the shipping price is applied during checkout for this SKU.
* Select the SKUs to be excluded from discounts
* Bulk upload - Use a CSV file to import SKUs
* Browse SKUs - Browse SKUs that are in your Product Catalog and select
* Click **Save**
To edit a Global exclusion list, mouse over the list and click on the edit icon that appears. Make your changes, and then click save.
To delete a Global exclusion list, mouse over the list, click on the delete icon that appears, and then click **confirm** in the dialog box.
## Customer Segments
Offers allows you to target promotions at specific groups of customers. To use this feature, your customers must first be segmented outside of fabric Offers. Segmentation can be achieved through one of the following external methods:
* **Third-party segmentation tools**: Group customers by their traits and behaviors. Each group is assigned a unique segment identifier that can be stored with the customer’s profile.
* **Customization of your online store**: Use browser-based information to segment customers by device type, location, or other factors.
* **Customer tagging**: Add custom traits to customer profiles, which can then be configured into segments.
After a customer is assigned to a segment, [fabric Cart](/v3/api-reference/carts-v3/overview) include the segment information when passing data to fabric Offers when evaluating promotions. The customer segment ID must be included in the **Profile** section of the promotion evaluation request.
The process of identifying and assigning customers to segments is handled entirely outside of fabric Offers.
### Creating a customer segment
1. To set up customer segments in fabric Offers, go to **Settings > Customer Segments** and click **Create Segment**, and do the following:
* **Segment name**: Enter a name for your segment type. For example, **Loyalty Tier** or **Region**.
* **Segment values**: Define multiple options within the segment type. For example, for a **Loyalty Tier** segment, values might include **Gold**, **Silver**, and **Bronze**. Enter each value and press Enter to save it.
Customer segments created in fabric Offers must align with the segment identifiers passed from your external tools through fabric Cart.
### Linking a customer segment to a promotion
After creating a customer segment in **Offers** > **Settings** menu, follow the steps in the [Offers Promotions](/v3/guides/offers/promotions) section to link the customer segment to a promotion. Linking customer segments allows you to target specific customer groups with custom discounts or incentives.
### Attributes
With the attributes feature, you can create internal-facing tags to help you identify or classify promotions and coupons.
For example, business intelligence or reporting tools can use the attribute and value you set up for querying purposes. Two attributes can share the same name, such as seasonal Sales, with values such as summer or fall to differentiate them.
**Creating an attribute**
1. In the left menu, click **Offers > Settings**.
The **Settings** page is displayed.
2. Select the **Attributes** tab.
The **Create attribute** tab is displayed.
3. In the **Attribute name** field, enter a name for the attribute.
4. In the **Attribute values** field, enter an attribute value.
5. Click **Create Attribute**.
The attribute is created. You can assign the attribute when creating or editing a promotion or coupon.
# Activity Log
The **Activity Log** tab displays a history of all your Order import and export events. By default, the most recent activities are displayed.
To find a specific file, in the search bar, enter the **File ID** and press Enter.
## Activity Log Table
| Field | Description |
| -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **File Id** | A unique system-generated file ID that's assigned upon starting the import or export process. |
| **Type** | The file type, such as **Import** or **Export**. |
| **Module** | Indicates which of the four Order modules the file relates to. Possible values are **Allocation**, **Invoice**, **Shipment**, and **Order**. |
| **Status** | The status of the activity, such as **Finished** or **System error**. |
| **Created on** | The date and time the file was created. |
| **Message** | A message displaying additional details for the import or export. Click the download icon to download a .zip file containing the import or export CSV and a separate logs file for debugging. |
# Creating a Rule Set
The following guide contains examples and field descriptions for the Order Fulfillment Logic (OFL) user interface.
## Basic Information
| Field name | Description | Values |
| ---------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| **Fulfillment Rule Set Name (Required)** | The name of the rule set. This name is displayed in the table on the Fulfillment Rules page. | String |
| **Description (optional)** | A description of the rule set. It's best practice to include a detailed description describing the purpose of the rule set for anyone viewing the rule set. If this is a cloned rule set with minor differences, describe the differences between each rule set. | String |
### Field descriptions
**Order Level Rule Groups** are run in order from the top down. If one of the rule conditions are met, this rule is executed and subsequent rules aren't run. If you wanted to move a rule up, you can drag and drop rules to change their order.
Item level rules runs in parallel and execute all rules even if a previous rule condition is met (including order level rules). This means item level rules override order level rules for the specified item.
### Condition fields
When creating any new rule, a condition is required. The condition is used to determine if a rule should be executed. A condition is used as the prerequisite to take an action.
Each condition you create executes from the top down. This means the order of your defined conditions matter. If you wanted to move a condition up, you can drag and drop conditions to change their order.
The following table outlines the available fields and their values for conditions.
| Field name | Description | Values |
| ------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Entity** | Entity is used to determine the attribute schema used to fulfill the condition. For **Order Level Rule Groups**, the Order schema is set as the default. For **Item Level Rule Groups**, the Item schema is set as the default. The default values can't be changed. | Order, Item |
| **Attribute** | The dropdown for attribute is populated based on the Order or Item attribute type. | Default values for Order are `type`, `subtype`, `orderId`, `channelId`, and `referenceId`. The default values for Item are `attributes`, `type`, `backOrdered`, `lineId`, `itemId`, `sku`. Additional values are available based on your Order or Item schema. For example, shippingInfo.address.city, price.itemUnitPrice. |
| **Operator** | A list of supported expressions. Each expression can be used to filter in different ways. Only supported expressions are displayed for an attribute. | • Equals
• Doesn't equal
• Contains
• Doesn't contain
• Less Than
• Less Than or Equal To
• Greater Than
• Greater Than or Equal To |
| **Value** | The value of an attribute. For example, an online order can have the attribute *type* with a value equal to *STH* (Ship to home). This value can also be *SDD* (Same day delivery). Multiple values are supported. | String |
### Action fields
Each action you create executes from the top down. This means the order of your defined actions matters. If you wanted to move an action up, you can drag and drop actions to change their order.
There are 3 different **Fulfillment Rule Type** options. These rule types determine which additional action field options are made available.
* **Provided location:** Buy online, pick up in store (BOPIS). The order itself has the location and it doesn't need to be provided.
* **Static Location:** Use this method if you want to predefine where all your orders will be fulfilled from when meeting a rule/condition. This can be any location that you provide along with the associated location number. For example, as a retailer you can choose to ship all web ship orders from the `DC 975` location. Additionally, you can use this method for item level rules to assign fulfillment locations for particular SKUs. For example, you can provide a SKU that starts with 1122 and set this SKUs specific fulfillment location.
* **Location Prioritization** Location prioritization allows for multiple inventory networks and additional features such as geo-location, split shipments, and item exclusions. This method is best used for retailers who have a lot of store presence or multiple warehouses in a particular region. It also provides the most flexibility if you want to split shipments from different locations for a single order.
Once an **Fulfillment Rule Type** is selected, depending on the selected type, different fields outlined in the table below are made available.
| Field name | Description | Value |
| ------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Location Numbers** | Used to configure the distribution location number. | String |
| **Allows Partial Fulfillment** | Set this value to Yes if you want to allow the order to be partially filled if one or more of the SKU’s aren't available at a particular location. For example, if an order had 5 table lamps and 1 chair but you did not have the chair available, the 5 table lamps are shipped and the chair is ignored. Setting this value to No cancels the order if it can't be fully fulfilled. | Yes/No |
| **Included Location Types** | A dropdown containing all the available configured inventory networks. This option is only available for the Location Prioritization action type. All the locations that are selected will be checked for inventory availability based on the additional geo locations, split shipment, and exclude fields selected. | Value is based on your available fulfillment locations. All configured locations are listed. For example: StoreDropshipDC |
| **Geolocation** | Enable this field if you want to fulfill shipments based on the customers shipping location. If this field is set to No, Initial Boundary, Increment Size, and Maximum Boundary aren't used. | Yes/No |
| **Initial Boundary** | The initial circumference boundary when determining geo-location. For example, if the value 100 is provided, fabric will look to see if any Included Location Types can fulfill the order within 100 miles of the shipping location. | Number |
| **Increment Size** | Incremental Boundary In Miles is the number of miles you want to add every time search is performed. This means if the Initial Boundary was unable to fulfill an order, the incremental circumference is increased by the number specified here. For example, we can set this value set to 50. If no stores were in the first 100 miles entered in Initial Boundary, the search boundary is increased to 100-150, then 150-200, until it reaches the Maximum Boundary value. | Number |
| **Maximum Boundary** | The maximum search radius. Once the Increment Size reaches this number and the order can't be fulfilled, the order is canceled. | Number |
| **Inventory Balancing** | The Inventory Balancing dropdown has two values, Distance and InventoryAvailability. Selecting Distance means the order fulfillment is completed by the nearest store with the items in stock. Selecting InventoryAvailability, means fabric looks at each of the eligible stores within your boundary and chooses the store with the most inventory. For example, if a store had 1 item remaining and another store had 5 of the same item within the search boundary, the order fulfillment would default to the store with more inventory. | DistanceInventoryAvailability |
| **Order Level Split Shipments** | Setting this value to Yes enables orders to be fulfilled through multiple stores if the SKU’s or items aren't available at a single location. Setting this value to No means that fabric must find a location that has every item for an order at a single fulfillment location. If fabric is unable to find all the items in the order at a single location, the entire order is canceled. | Yes/No |
| **Item Level Split Shipments** | Set this value to Yes if you want to look between locations to meet the item quantity request of an order. For example, if an order for 20 of the same office chair came in, and a location only had 15 available, the remaining 5 chairs would be sourced from another location. With this set to No, the remaining quantity of chairs are canceled and only the 15 at the first location are allocated. | Yes/No |
| **Maximum Splits allowed per order** | The maximum number of locations that a split order can be fulfilled from. | Number |
| **Item exclusions** | Allows you to create an additional condition based on an item attribute. For example, if an item is less than \$10, you can create a condition to ship it from a retail store near the customer to save on shipping costs. | Yes/No |
## Creating a Fulfillment Rule Set
Requirements:
* Allocate orders to different fulfillment locations based on a the selected shipping type during checkout.
* Configure geographic distance rules for same day shipping.
* Configure rules around split shipments.
* Configure a price/margin rule for items under a certain cost.
* Configure an auto cancel rule for shipments that can't be fulfilled.
* Create a default dropship rule to ship directly from the factory for orders that can't be fulfilled from the main fulfillment locations.
Using the above requirements, the examples outlined in this document assume that both a web store and retail locations are available. The web store allows customers to select two different types of shipping: default and expedited. In the `Order` attribute are the attribute types `STH` (ship to home) and `SDD` (same day delivery). The rules that are created must automatically send an order to a specific location based on the shipping type selected during checkout.
The following examples outline how to create a rule set for each requirement. Although the conditions and requirements are separate examples in this document, note that all of the following examples make up a single **Fulfillment Rule Set** and that only one rule set can be active at any given time.
All of the examples below build upon one another.
## Pre-requisites
Ensure you have the **Orders & Inventory Editor** or **Administrator** privilege for fabric Orders. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Create a new rule set
1. Using the left navigation, click **Orders** > **Fulfillment**.
* The **Fulfillment Rule Set** page is displayed.
2. To create a new rule, click **Create Rule Set**.
3. In the **Basic Information** section, provide a **Fulfillment rule set name**, and optionally a **description**.
* It's best practice to always provide a description indicating what the rule is doing and its purpose.
### Example 1 - Allocate orders to specific fulfillment locations
This example fulfills the following requirements:
* Allocates orders to different fulfillment locations based on a the selected shipping type during checkout.
* Geographic distance rules for same day shipping.
* Creates rules for split shipments.
To create a rule, you must first define the condition for when the rule should be executed.
1. In the **Setup your set of rules** section, a default rule is provided in the subsection for **Order Level Rule Group**. Click the edit icon to rename the default rule.
* In this example, the first rule is called **Allocate to fulfillment locations \[ STH ]**.
* Expanding the field reveals the **Add condition** and **Add action** buttons. A blank default condition and action are provided. The fields populated for **Attribute** are all based on your **Attribute type** which is automatically set to `Order`. This can't be changed.
2. In the **Attribute** field, select `type`.
3. In the **Operator** field, select `Equals`.
4. In the **Value** field, enter `STH` as the value.
* This condition makes it so an action is triggered when the condition for an order is `STH`. Note that in your instance, ship to home may not be equal to the value `STH`. For example, the value could be `Ship_To_Home`. It's suggested that you check your `Order` schema to determine what values are allowed/expected.
Once a condition is created, the **Fulfillment Rule Type** needs to be set. The **Fulfillment Rule Type** determines what happens when a condition is met. In this example, the action needs to direct `STH` orders to the `DC` fulfillment warehouse.
1. In the **Fulfillment Rule Type** field, select **Multi Location Single Ship Fulfillment**.
* Additional fields appear. If you only have a single fulfillment location and aren't expecting additional conditions, you can use **Configured Location** and enter the location number without needing to follow the remaining steps.
2. Set the **Included Location Types** field to where you want to fulfill `STH` orders.
* In this example, `STH` orders need to be fulfilled in `DC`.
3. The remaining available options aren't needed in the `STH` use case. For more information on each of these fields, visit the [Action fields table](#action-fields). The following list is an example of what the default values look like:
* Set **Geolocation** to `No`.
* Set **Order Level Split Shipments** to `No`.
* Set **Item Level Split Shipments** to `No`.
* Set **Allows Partial Fulfillment** to `Yes`.
* Set **Maximum Splits allowed per order** to `3`.
* Set **Item exclusions** set to `No`.
This creates our first rule which is executed when the shipping method `STH` is selected during checkout. However, in order to create a same day delivery `SSD` condition, an additional rule is needed.
1. Click **Add Rule**.
2. In the **Attribute** field, select `type`.
3. In the **Operator** field, select `Equals`.
4. In the **Value** field, enter `SDD` as the value.
* This condition makes it so an action is triggered when the condition for an order is `SDD` (same day delivery). Note that in your instance, same day delivery may not be equal to the value `SDD`. For example, the value could be `expedite` or `same_day_delivery`. It's suggested that you check your `Order` schema to determine what value is expected.
5. Set the **Included Location Types** field to the main warehouse `DC` and retail locations `Store`.
* If we had additional distribution methods, they could be selected here.
6. Set the **Geolocation** field to `Yes`.
* The **Geolocation** feature looks at the customer's location and sees if any of our inventory networks within a set distance are able to fulfill the order.
* Unlike `STH`, `SDD` requires that we take into consideration where the items are located in relation to the shipping location. This is because we want to fulfill the order as quickly as possible and ship from the closest location to the customer.
7. Set the geolocation boundaries.
The following settings look for a store from 0-100 miles from the customer's shipping address that can fulfill the order. If the order can't be fulfilled, it then searches between 100-200 miles and finally, 200-300 miles.
* Set the **Initial Boundary** field to `100`.
* Set the **Increment Size** field to `100`.
* Set the **Maximum Boundary** field to `300`.
8. Set the **Inventory Balancing** field to one of the following values:
* **Distance**: The order fulfillment is completed by the nearest store with the items in stock.
* **InventoryAvailability**: Looks at each of the eligible stores within the geo-location boundary and chooses based on maximum available stock. For example, if multiple stores had the items in stock and one store had 1 item remaining, whereas another store had 5, the order fulfillment would default to the store with 5 inventory.
9. Split shipments are used to fulfill orders from multiple fulfillment locations. Each split shipment method changes how an order is fulfilled. Depending on your individual needs and logistics, one or more of these methods may not be feasible. Visit the [Action fields table](#action-fields), for more information on each of these fields and examples.
* Set the **Order Level Split Shipments** field to `Yes`.
* Set the **Item Level Split Shipments** field to `Yes`.
* Set the **Allows Partial Fulfillment** field to `Yes`.
* Leave the **Maximum Splits allowed per order** field as the default value of `3`.
10. Set the **Item exclusions** field to `No`.
### Example 2 - Create a price rule for items under a set cost
This example fulfills the following requirements:
* Creates a price/margin rule for items under a certain cost.
* Configures an auto cancel rule for shipments that can't be fulfilled.
There are three ways to create price rules. If you must ship certain items from certain locations, it's recommended you use the third method described below:
* Create a new rule with the condition specifying a price.
* Add an item exclusion to an existing condition.
* Use item level rules to provide a condition and action for all items within a certain price range.
If you wish to follow along, please review the following example [Allocate Orders to Specific Fulfillment Locations](#example-1---allocate-orders-to-specific-fulfillment-locations). The example below builds upon this example.
The allocate orders to a specific fulfillment location rule set allocates ship to home `STH` orders to a `DC` fulfillment location. Same day delivery `SDD` orders are fulfilled based on geographical location and can be shipped from retail stores or the `DC` fulfillment location.
1. Using the Allocate to fulfillment locations \[ STH ] rule, set the **Item exclusions** field to `Yes`.
* Enabling **Item exclusions** creates a new **Item Exclusion** condition above your action with the **Entity** default set to `Item`.
2. Set the **Attribute** field to `price.itemUnitPrice`.
3. Set the **Operator** field to `Less Than or Equal To`.
4. In the **Value** field, enter `5`.
* This condition now checks to see if any item is less than or equal to 5\$. If an item meets this condition, it's excluded from that action. In other words, if **Item exclusions** is `Yes`, fabric looks at the next action in a rule that has been specified.
At this point, if you don't configure a default condition or add an additional action, the items that fall under the exclude condition are never added to an order. This means those items are canceled and depending on if you have **Allows Partial Fulfillment** enabled or not, the shipment is cancelled.
There are two options for making sure small items are shipped.
* Create another action within the same rule where the exclusion exists.
* Create an item level rule.
In this example an item level rule is created.
1. Rename the default item rule from the **Item Level Rule Group** section to `Items under 5$`.
2. Set the **Attribute** field to `price.itemUnitPrice`.
3. Set the **Operator** field to `Less Than or Equal To`.
4. In the **Value** field, enter `5`.
5. In the **Fulfillment Rule Type** field, select **Multi Location Single Ship Fulfillment Method**.
6. Set the **Included Location Types** field to include `Store`.
* If instead of using retail stores you had specific warehouses to ship smaller items from, you could instead use **Configured Location Fulfillment Method** and enter the location numbers.
7. Set the **Geolocation** field to `Yes`.
* The locations should be limited based on shipping costs and logistics.
* Set the **Initial Boundary** field to `200`.
* Set the **Increment Size** field to `100`.
* Set the **Maximum Boundary** field to `400`.
8. Set the **Inventory Balancing** field to `Distance`.
* This ensures the item is shipped from the closest store.
9. Set all of the split shipment options to `No`.
* It would be too costly to ship items under \$5 from multiple different locations for a single order.
* Set the **Order Level Split Shipments** field to `No`.
* Set the **Item Level Split Shipments** field to `No`.
* Set the **Allows Partial Fulfillment** field to `No`.
* You can choose to enable partial fill if you want to partially fill an order.
* Leave the **Maximum Splits allowed per order** field as the default value of `3`.
10. Set the **Item exclusions** field to `No`.
This item level rule accounts for all items under 5 dollars and ships items under 5 dollars from the nearest retail location.
### Example 3 - Create a default dropship action
Sometimes, you are unable to fulfill an order from any of your available fulfillment locations. When this happens, you can create an action to fulfill the order directly from a factory dropship location. With this type of action in place, orders with partially filled SKUs and items not currently in stock can still be fulfilled.
If you wish to follow along, please review the following example [Allocate Orders to Specific Fulfillment Locations](#example-1---allocate-orders-to-specific-fulfillment-locations). The example below builds upon this example. The allocate orders to a specific fulfillment location rule set allocates ship to home `STH` orders to a `DC` fulfillment location. Same day delivery `SDD` orders are fulfilled based on geographical location and can be shipped from retail stores or the `DC` fulfillment location.
In this example, an additional action is added to backfill orders with no inventory. If an order can't be fulfilled, the remaining items are sent to a dropship location to be fulfilled at a later time.
1. In the **Allocate to fulfillment locations \[ STH ]** rule, click the **Add action**.
* You will already have an action to fulfill orders from `DC` from the previous example. A new action must be created under it.
2. In the **Fulfillment Rule Type** field, select **Location Prioritization**.
3. Set the **Included Location Types** field to include `Dropship`, `store`, and `DC`.
* Every fulfillment location is selected to ensure the order is fulfilled if possible.
4. In the first action, set the **Allows Partial Fulfillment** field to `Yes`.
* If this is disabled, the order will be canceled because it can't be fulfilled in the first action. Actions execute from the top down.
* Alternatively, if you wanted to guarantee that an order is fulfilled, you would also set **Item Level Split Shipments** and **Order Level Split Shipments** to `Yes`. However, this can complicate shipping logistics making it so certain orders might have multiple shipping locations for different SKUs. Check with your team to determine what settings should be enabled based on your individual needs.
5. All remaining fields can be left as their default values.
## Related Topics
* [Order Fulfillment Logic Overview](/v3/guides/orders/order-fulfillment-logic/order-fulfillment-logic)
* [Orders Overview](/v3/guides/orders/overview)
* [Order Management](/v3/guides/orders/order-management/creating-an-order)
* [Order History](/v3/guides/orders/activity-log)
* [Order Settings](/v3/guides/orders/settings)
* [Order API Documentation](/v3/api-reference/orders/allocations/overview)
# Updating a Rule Set
To prevent fulfillment or distribution from breaking due to changes, direct editing of rule sets is disabled. Instead, once you have completed your edits, the **Clone** option is enabled. A cloned rule set acts as a entirely new rule set allowing you to set it as the primary active rule set.
Note that only one rule set can be active at a time.
## Prerequisites
Ensure that you have the **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more detailed information on these settings, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Procedure
1. Using the left navigation, select **Orders** > **Fulfillment**.
* The **Fulfillment Rule Set** page is displayed.
2. Using the **ID** or **Name**, find the rule set you want to update.
* The fulfillment rule set table alphabetically sorts your rule sets (A-Z) with your active rule set at the top.
3. Click the **ID**.
* The **Edit Fulfillment Rule Set** page is displayed.
4. Click **Clone**.
* Editing is disabled until you clone the rule set.
5. In the **Basic Information** section, provide a new **Fulfillment rule set name** and **description**.
* Because this is a clone of the previous rule set, it can be confusing if you don't change the name.
6. In the **Setup your set of rules** section, click an order level or item level rule to expand and reveal the conditions and actions for that rule.
7. Make edits to the fields you want to change.
* For more detailed information on each of the fields, see the [Creating a Rule Set](https://developer.fabric.inc/v3/guides/orders/order-fulfillment-logic/create-a-new-rule-set-ui#field-descriptions) field descriptions section.
8. Click **Save**.
The edited rule set is added to the **Fulfillment Rule Set** table.
## Related Topics
* [Order Fulfillment Logic Overview](/v3/guides/orders/order-fulfillment-logic/order-fulfillment-logic)
* [Orders Overview](/v3/guides/orders/overview)
* [Order Management](/v3/guides/orders/order-management/overview)
* [Order History](/v3/guides/orders/activity-log)
* [Order Settings](/v3/guides/orders/settings)
* [Order API Documentation](/v3/api-reference/orders/allocations/overview)
# Order Fulfillment Logic Overview
The order fulfillment feature allows you to create fulfillment rule sets. Fulfillment rule sets are used to direct orders to different fulfillment locations based on characteristics, such as geo-location, warehouse location, item price, order attribute type, and more.
## Pre-requisites
Ensure you have the **Orders & Inventory Editor** or **Administrator** privilege for fabric Orders. For more information, see [Role-Based Access Control](../../settings/rbac/role-based-access-control-orders-roles.mdx).
## Rule Setup
When creating a new fulfillment rule set, you must provide some basic information along with the rules in the [order level rule group](###order-level-rule-group) or [item level rule group](###item-level-rule-group) sections. Ensure that you create all your rules in a single fulfillment rule set because only one rule set can be active at a time.
### Order level rule group
When you create rules in the **Order Level Rule Group**, they're executed in the order that they're sorted. This means rules are executed from the top down. You can drag and drop rules to execute in any order as needed. Its important to note that when a rules condition is met, the additional rules defined below it aren't executed. If no rule conditions are met and no default condition is provided, the rules are all ignored.
#### Example
Let's assume 2 rules are defined. One for fulfilling online orders at a specified fulfillment warehouse, and one for packaging specific online orders (based on the shipping location) at a different warehouse equipped to package unique orders. If the order of the rules contains the first rule at the top and the second rule below, the second rule can't run because the first rules condition is always met before the second rule has executed. However, if we were to swap the rules order and run the second rule first, it would guarantee that the rule is run. If fabrics rules condition isn't met, fabric proceeds to run the next rule below. This means the last rule (as a best practice) should be a default catch-all and very specific rules with unique conditions should be run first.
### Item level rule group
Item level rules run in parallel and execute all rules even if a previous rule condition is met (including order level rules). This means item level rules override order level rules. The **Attribute type** is limited to the `Item` attribute type and only allows you to create conditions based on item attribute values such as `price.ItemUnitPrice`. This allows item level rules to control where certain items are fulfilled from and guarantees a static fulfillment location regardless of the order level rules you have implemented.
Item level rules are often used when you set up certain item exclusions. This could be specific SKUs that ship from a particular warehouse, items under a certain price point, items that weigh a lot, and more.
### Frequently asked questions
What happens if more than one condition is met for an order?
* If the rules are within the **Order Level Rule Group** section, the rules are executed from the top down. For example, if the first rules condition is fulfilled, subsequent rules aren't run on that order. Rules defined within **Item Level Rule Group** always execute. This is because the rules are run on specific item conditions rather than order conditions.
What happens if an item level rule conflicts with a order level rule?
* Because item level rules run at the item level, they always take priority over order level rules. For example, an order level rule specifies shipping an order with 5 items and one of the items in the order fulfills the condition for an item level rule. In this event, 4 of the items are shipped based on the action defined in the order level rule. The item that meets the item level rule condition is shipped based on the action defined in the item level rule.
## Next Steps
For more information, such as example rule sets, please begin by reading the [Creating a rule set](./create-a-new-rule-set-ui) documentation.
## Related Resources
* [Orders Overview](../overview)
* [Order Management](../order-management/overview)
* [Order History](../activity-log)
* [Order Settings](../settings)
* [Order API Documentation](../../../api-reference/orders/orders--3-0-0)
# Adding Products to an Existing Order
This topic covers the process of adding products to an existing order.
## Prerequisites
* Ensure that you have the **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
* Ensure that the order is in **Hold**, **Confirmed**, **Partially allocated**, or **Created** status. If the status of the order changes to **Allocated** in the order lifecycle, the order can no longer be updated with additional products.
## Procedure
1. In the left menu, click **Orders**.
The **Orders** tab is displayed on the **Manage Orders** page.
2. To find an order, do one of the following:
* In the search bar, enter the search keywords and press **Enter**.
* Use filters to refine the search results.
The orders table displays the orders that match the search or filter criteria.
3. In the orders table, click the **Order Number**.
The order details are displayed on the **Basic details** tab.
4. Using the **More actions** button, select **Add SKUs**.
The page for adding products to an order is displayed with the order number.
5. In the **Select SKUs** > **Your network** field, select a [network](https://developer.fabric.inc/v3/guides/inventory/networks).
Upon selecting a network, a group of locations sharing inventory, the available products for browsing are filtered accordingly.
6. In the **Your channel** field, select a channel.
7. Click **Browse SKUs**.
The **Browse SKUs** window is displayed with a product table.
8. To find the product in the **Browse SKUs** window, do one of the following:
* In the search bar, enter the search keywords and press **Enter**.
* Use filters to refine the search results.
The **Stock status** for a product must be **Available** and **Availability** must be greater than or equal to one. If you add an unavailable product, an error message is displayed after adding the product.
9. Select products using the **Product title** checkbox.
10. Click **Add SKUs**.
The products you selected are added to the **Select SKUs** table with the **SKU ID**, **Price per unit**, **Quantity**, and **Availability** details.
11. Update the **Quantity** of each product by clicking the `+` or `-` buttons.
The order details for **Added SKUs** are updated along with the total amount in the **Order Summary**. **Added SKUs** displays the total cost breakdown of the newly selected products and the **Order Summary** displays the total cost breakdown for the entire order including past products and the newly added products.
12. To select the shipping address, click the radio button next to the address.
A default shipping address is displayed from the previous order. If you want to add a new address, follow the instructions in the [Adding an Address](#adding-an-address) section.
13. Click **Confirm**.
The additional products are added to the **Basic details** tab for the order. Scroll down to the **Order status** to view the details of each product and its current status.
## Adding an Address
1. To add a new address, click **Add address**.
The **Add address** window is displayed.
2. In the **Fulfillment method** field, select one of the following options:
* [Ship to Home](#ship-to-home): Use this option if you want to ship the selected products to a specific address.
* [Pickup in store](#pickup-in-store): Use this option if you want to ship the selected products to a designated store pickup location.
### Ship to Home
1. To ship to a specific address, in the **Contact details** section, enter the following details:
* **First name**
* **Last name**
* **Email**
* **Phone number**
* From the **Phone number type** dropdown, select `Mobile`, `Business`, or `Home`.
2. To ship to a specific address, in the **Shipping address** section, enter the following details:
* **Address line 1**
* (Optional) Click **Add address line** to add additional address lines.
* From the **Country** dropdown, select a Country.
* **Zip code**
* **Region**
* **City**
* From the **Shipping method** dropdown, select a shipping method.
3. In the **Payment details** > **Payment method** field, select a payment method.
The previous payment method is selected by default.
4. Click **Confirm**.
The new shipping address is added to the **Select shipping address** section.
### Pickup in Store
1. In the **Select pickup location** field, select a [pickup location](https://developer.fabric.inc/v3/guides/inventory/networks).
2. In the **Contact type** field, select one of the following:
* **Primary**: Select this method to set the primary contact information. The primary contact is sent notifications for pickup and tracking details.
* **Secondary**: Select this method if you want to authorize someone other than the primary contact to pick up the order. The default for a primary contact is the customer who ordered the items.
3. To ship to a pickup location, in the **Contact details** section, enter the following details:
* **First name**
* **Last name**
* **Email**
* **Phone number**
* From the **Phone number type** dropdown, select `Mobile`, `Business`, or `Home`.
4. (Optional) To add additional contacts that are authorized to pick up the order, click **Add alternate pickup name**.
5. In the **Payment details** > **Payment method** field, select a payment method.
The previous payment method is selected by default.
6. Click **Confirm**.
The new shipping address is added to the **Select shipping address** section.
# Creating Appeasement Refunds
By creating an appeasement refund, you can issue discretionary refunds. The appeasement option for an order is enabled only after the payment process is initiated for the order. Orders with the **Fraud** status can't be appeased.
## Prerequisites
* Ensure that you have the **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Procedure
1. In the left menu, click **Orders**.
The **Orders** tab is displayed on the **Manage Orders** page.
2. To find an order, do one of the following:
* In the search bar, enter the search keywords and press **Enter**.
* Use filters to refine the search results.
The orders table displays the orders that match the search or filter criteria.
3. In the orders table, click the **Order Number**.
The order details are displayed on the **Basic details** tab.
4. Click the **More actions** button and select **Create Appeasement**.
The page for creating appeasements is displayed with the order number.
5. In the **Reason code** field, select a reason code.
To provide additional details, click **Add sub-reason code** and enter the reason in the **Sub-reason code** field.
6. In the **Refund amount** field, enter a refund amount.
The fields for **Subtotal**, **Shipping**, **Fees**, and **Total** are updated. These fields display the total available amount you can refund for an order. You can't refund more than the available amount.
7. Click **Create Appeasement**.
The appeasement is created and you are redirected to the **Basic details** tab for the order.
### Order Details Field Descriptions
The **Order Details** section displays the following information:
| Field | Description |
| --------------- | ---------------------------------------- |
| **Channel** | The sales channel ID used for the order. |
| **Date placed** | The date and time the order was placed. |
### SKU Details
If you want to view the details of a SKU, click the **SKU**. The **Sku Details** window is displayed containing two tabs, **Pricing** and **Attributes**.
For more information on **Attributes**, visit the [Product Attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/product-attributes-overview) section in the Product Catalog documentation.
For more information on **Pricing**, visit the [Pricing](https://developer.fabric.inc/v3/guides/offers/pricing) section in the Offers documentation.
# Canceling Items in an Order
You can cancel individual items or the entire order.
## Prerequisites
* Ensure that you have the **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
* Ensure that the order is in **Hold**, **Confirmed**, **Partially allocated**, or **Created** status. If the status of the order changes to **Allocated** in the order lifecycle, the order can no longer be canceled.
## Procedure
1. In the left menu, click **Orders**.
The **Orders** tab is displayed on the **Manage Orders** page.
2. To find an order, do one of the following:
* In the search bar, enter the search keywords and press **Enter**.
* Use filters to refine the search results.
The orders table displays the orders that match the search or filter criteria.
3. In the orders table, click the **Order Number**.
The order details are displayed on the **Basic details** tab.
4. Click the **More actions** button and select **Cancel SKUs**.
The **Cancel order** page is displayed with the order number.
5. In the **Items to cancel** section, do one of the following:
* **Cancel entire order**: This option automatically selects all items in the order and sets the cancel quantity to the maximum amount.
* Individually select each item in the **SKU ID** field.
6. Update the **Qty** field by clicking **+** or **-**.
7. In the **Reason code** field, select a reason code.
The **Order summary** section updates the total refund amount based on the canceled items.
8. Click **Confirm**.
You are redirected to the **Basic details** page. The selected products are cancelled and the status is updated to **Cancelled**. For more information on statuses, visit the [Manage Orders](https://developer.fabric.inc/v3/guides/orders/order-management/overview) overview documentation.
# Creating an Order
This topic covers the process of creating a new order.
## Prerequisites
* Ensure that you have the **Orders & Inventory Editor**, or **Administrator** privileges to fabric Orders. For more detailed information on these settings, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Procedure
1. In the left menu, click **Orders**.
The **Orders** tab is displayed on the **Manage Orders** page.
2. Click **Create Order**.
The **Create order** page is displayed with the order status set to **Draft**.
3. In the **Select SKUs** > **Your network** field, select a [network](https://developer.fabric.inc/v3/guides/inventory/networks).
Upon selecting a network, the system automatically filters the products available for browsing.
4. In the **Your channel** field, select a channel.
5. Click **Browse SKUs**.
The **Browse SKUs** window is displayed with a product table.
6. To find a product in the **Browse SKUs** window, do one of the following:
* In the search bar, enter the search keywords and press **Enter**.
* Use filters to refine the search results.
The **Stock status** for a product must be **Available** and **Availability** must be greater than or equal to one. If you add an unavailable product, an error message is displayed after adding the product.
7. To select products, select the **Product title** field next to the product.
You can select more than one product.
8. Click **Add SKUs**.
The products you selected are added to the **Select SKUs** table with the **SKU ID**, **Price per unit**, **Quantity**, and **Availability** details.
9. To update the quantity of each product, in the **Quantity** field, click the `+` or `-` buttons or enter the quantity.
The **Order Summary** is updated with pricing information for the order.
10. In the **Add shipping address** > **Fulfillment method** field, select one of the following options:
* [Ship to Home](#ship-to-home): Use this option to ship the selected products to a specific address.
* [Pickup in store](#pickup-in-store): Use this option to ship the selected products to a designated store pickup location.
### Ship to Home
1. To ship to a specific address, in the **Contact details** section, enter the following details:
* **First name**
* **Last name**
* **Email**
* **Phone number**
* **Phone number type**: The options are `Mobile`, `Business`, or `Home`.
2. In the **Shipping address** section, enter the following details:
* **Address line 1**
* You can add additional address lines by clicking **Add address line**.
* **Country**
* **Zip code**
* **Region**
* **City**
* **Shipping method**
3. In the **Payment details** > **Payment method** field, select a [payment method](https://developer.fabric.inc/v3/guides/quickstart/merchant-experience-quickstart-guide#configure-checkout).
4. Click **Create**.
The order is created and added to the **Manage Orders** > **Orders** list.
### Pickup in Store
1. In the **Select pickup location** field, select a [pickup location](https://developer.fabric.inc/v3/guides/inventory/locations).
2. In the **Contact type** field, select one of the following:
* **Primary**: The primary contact is sent notifications for pickup and tracking details. The default setting for primary contact is the customer who ordered the items.
* **Secondary**: Authorizes someone other than the primary contact to pick up the order.
3. In the **Contact details** section, enter the following details:
* **First name**
* **Last name**
* **Email**
* **Phone number**
* **Phone number type**: The options are `Mobile`, `Business`, or `Home`.
4. (Optional) To add additional contacts who are authorized to pick up the order, click **Add alternate pickup name**.
5. In the **Payment details** > **Payment method** field, select a [payment method](https://developer.fabric.inc/v3/guides/quickstart/merchant-experience-quickstart-guide#configure-checkout).
6. Click **Confirm**.
The order is created and added to the **Manage Orders** > **Orders** list.
# Processing Exchanges
You can exchange an entire order or the individual products in an order. The system automatically calculates any price differences for the exchanged products. The exchange option for an order is enabled only after the payment process is initiated for the order. Orders with the **Fraud** status can't be exchanged.
## Prerequisites
* Ensure that you have the **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Procedure
To exchange an item, the return process is initially followed.
1. In the left menu, click **Orders**.
The **Orders** tab is displayed on the **Manage Orders** page.
2. To find the order, use the [search or filter options](https://developer.fabric.inc/v3/guides/orders/order-management/filtering-orders) on the **Manage Orders** page.
3. In the orders table, click the **Order Number**.
The order details are displayed on the **Basic details** tab.
4. In the top-right of the page, click **Return Order**.
The **Return order** page is displayed.
5. In the **Select SKUs to return** section, do one of the following:
* To exchange an entire order, select the **Refund entire order** checkbox.
This automatically checks all items in the order and sets the maximum exchange quantity for each SKU.
* To exchange specific items, click the checkbox next to the SKU you want to exchange and use the **+** or **-** buttons to set the quantity.
The **Refund summary** is updated.
6. Click **Next**.
7. If multiple exchange reasons exist for each SKU, clear the **Same reason code for all SKUs** field.
8. In the **Action** field, select **Exchange**.
9. In the **Reason code** field, select a reason code.
You can add additional information for the exchange by selecting **Add sub-reason code** and by providing the information in the **Sub-reason code** field.
10. Click **Next**.
The **Items to send customer in exchange** section is displayed.
11. In the **Your network** field, select a network.
After selecting a network, which is a group of locations sharing inventory, the available products for browsing are filtered accordingly.
12. In the **Your channel** field, select a channel.
13. Click **Browse SKUs**.
The **Browse SKUs** window is displayed with a product table.
14. To find the product in the **Browse SKUs** window, in the search bar, enter the search keywords and press **Enter**.
You can use the filters to refine the search results and find a specific product.
The Stock status for a product must be **Available** and **Availability** must be greater than or equal to one to process the exchange. If you add an unavailable product, an error message is displayed.
15. Select **Product title** checkbox for the products that you want to exchange.
16. Click **Add SKUs**.
You can remove SKUs by clicking **Remove SKUs**. This option is only displayed if a SKU is added to the exchange.
17. In the **When should exchange items ship** field, select one of the following:
* **Ship upon receiving return:** This option prevents the new exchanged items from shipping until the previous items are received and processed.
* **Ship exchange items immediately:** This option immediately sends the exchange request to the nearest fulfillment location to ship. fabric recommends that you only use this option for specific loyalty tiers.
18. Click **Next**.
The **Confirm** section is displayed with an overview of the exchange.
19. Click **Confirm**.
The order status is updated to **Exchanged**.
### Refund Summary
The **Refund summary** section displays a breakdown of the total amount being refunded. Selecting more than one item to refund or exchange updates the summary accordingly. The following table describes each field in the **Refund summary** section.
| Field | Description |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Subtotal refund** | Displays the refund subtotal which excludes discounts, fees, adjustments, shipping, and taxes. This amount can be edited in the refund process. |
| **Discounts refund** | Displays the discount amount applied to the order. If discount codes were applied to a product, the system automatically adjusts the refund summary. |
| **Fees refund** | Displays the additional fees that were charged for an order such as an oversized item fee. This can be edited in the refund process. |
| **Adjustment refund** | Displays the adjustments applied to the order if applicable. |
| **Shipping refund** | Displays the shipping refund amount. This can be edited in the refund process. |
| **Tax refund** | Displays the tax refund amount. Tax refund amounts can't be edited and are broken down into sub-taxes. For example, Canadian orders are broken down into two taxes, General Sales Tax (GST) and Provincial Sale Tax (PST). Use the **More Details** field to get a list of taxes. Taxes are calculated for individual products, so returns with multiple products display duplicate taxes representing each product. |
| **Total refund** | Displays the total refund amount. |
### Adding Notes to an Order
The **Add Notes** option is located in the **Return order** field.
1. To add notes to an order, Click **Add Notes**.
The **Add notes** window is displayed.
2. Enter the note.
Notes are limited to 110 characters.
3. Click **Save**.
You can edit the note by clicking **Edit Notes**. Repeat step 2 and 3 to complete the update.
The note is added with the **Return order** label. Notes are only saved if you complete the entire return process.
# Exporting Orders
The Export feature provides you with the ability to export all your order-related data. This topic covers the process of exporting order data.
Previous exports can be viewed in the **Orders > Activity Log** page. You can download previous export files from this page.
## Prerequisites
Ensure that you have the **Orders & Inventory Editor** or **Admin** privilege for fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Export logic
Exporting downloads a zip folder containing a JSON source file or multiple CSV files depending on the option you select.
### JSON
The JSON zip folder contains a single JSON file. The JSON file contains objects for each `orderId`. Each order object contains the entire history and information of an order including the SKUs for each item in the order.
### CSV
The CSV zip folder contains CSV files for orders (exported by item), adjustments, appeasements, discounts, logs, notes, payments, and shipInfo.
Each row in the order CSV file represents a product in the order. If an order contains multiple products, duplicate `orderId` rows are displayed for each product.
The following table outlines each column in the order CSV file and provides example values. Values in the CSV file are populated only if the data is available.
| Column name | Description | Example value |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------ |
| **orderId** | The 24-character system-generated order ID. | 65c0e0d07044e34a495a05c8 |
| **orderNumber** | A merchant-defined order identifier. If omitted, this is generated by fabric's sequence generator using the configuration service. | 6250002317 |
| **version** | The current version of the order. The number displayed indicates the number of times the order is updated by any operation. | 11 |
| **orderedAt** | The merchant-defined order creation time (UTC). | 2022-05-12T09:30:31.198Z |
| **cancelledAt** | The system-generated order cancellation time (UTC). | 2022-05-12T09:30:31.198Z |
| **allocatedAt** | The system-generated order allocation time (UTC). | 2022-05-12T09:30:31.198Z |
| **channelId** | The merchant-defined sales channel ID. | WHBM |
| **cartId** | The unique cart identifier, either from fabric cart service or an external cart service. It's used for linking an order to a specific cart. | 5f2d15e8-a837-41a3-9bf1-4467e8e1893a |
| **type** | The order type. | WEB |
| **subtype** | The order subtype. This is used if further classification is required. | ANDROID |
| **processName** | Order process name (V2) only. | |
| **employeeId** | The employee (ID or name) who initiated the request. | 3213123 |
| **retail** | Determines if an order was created from a Point-of-Sale system. | true |
| **orderSubTotal** | Recalculated `orderSubtotal - summationOfAll(itemSubTotal)`. | 24.55 |
| **originalSubtotal** | A system-generated order subtotal, auto filled by the orders service when an order is placed. This is saved for reference in case the value changes later. | 24.55 |
| **orderDiscount** | Recalculated order discount. | 49 |
| **originalDiscount** | The system-generated total discount, auto filled by the orders service when an order is placed. This is saved for reference in case the value changes later. | 49.99 |
| **feeTotal** | Recalculated total fee, calculated as orderedQuantity\* itemFeeTotal | 7.95 |
| **originalFeeTotal** | The system-generated total fees, auto filled by the orders service when an order is placed. | 7.95 |
| **taxTotal** | Recalculated total tax on an order. summationOfAll(itemTaxTotal)+summationOf(tax\[].value) | 13.45 |
| **appeasementTotal** | The final appeasement amount. | -10 |
| **originalTaxTotal** | The system-generated total tax, auto filled by the orders service when an order is placed. | 12.93 |
| **returnTotal** | The return total of order. Calculated as summationOfAll(itemReturnTotal) | -3 |
| **cancelTotal** | The amount to be returned after an order cancellation. Calculated as `cancelledQuantity` / `orderedQuantity` \* `itemTotal` | 85.19 |
| **invoiceTotal** | The total payment captured by fabrics invoice service. If you are using a third-party service, then this amount will be null. For partial payment scenarios, this value will be different from orderTotal. | 149.09 |
| **orderTotal** | The total amount to be charged for the order. Calculated as `orderSubTotal - orderDiscountTotal + orderFeeTotal + orderTaxTotal` | 149.09 |
| **originalOrderTotal** | A system-generated order total, auto filled by the orders service when an order is placed. This is saved for reference in case the `orderTotal` changes. | 234.28 |
| **currency** | A three-letter currency code as defined by ISO-4217. | USD |
| **statusCode** | The current status of the order. | ORDER\_SHIPPED |
| **statusDescription** | A human readable brief description of the `statusCode` value. | Order Shipped |
| **orderReleasedAt** | The order released time (UTC). | 2022-05-12T09:30:31.198Z |
| **createdAt** | The order creation time (UTC). | 2024-02-05T13:21:20.686Z |
| **updatedAt** | The timestamp for the latest update that was made to the order (UTC). | 2024-02-21T20:12:42.127Z |
| **adjustmentTotal** | The total price adjustment made to the item. | 0 |
| **originalAdjustmentTotal** | A system-generated order adjustment total, auto filled by the orders service when an order is placed. This is saved for reference in case the `adjustmentTotal` value changes. | 0 |
The remaining CSV files for `adjustments`, `appeasements`, `discounts`, `logs`, `notes`, `payments`, and `shipInfo` contain one or more of the following columns.
For example, the **adjustment-order** CSV file contains columns for `orderId`, `orderNumber`, `itemId`, `sku`, `lineItemId`, and `lineItemNumber`.
| Column name | Description | Example value |
| ------------------- | ------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- |
| **orderId** | The 24-character system-generated order ID. | `65dce9816a08674c56ecdef2` |
| **orderNumber** | A merchant-defined order identifier. If omitted, this is generated by fabric's sequence generator using the configuration service. | `6250002317` |
| **cartId** | The unique cart identifier, either from fabric cart service or an external cart service. It's used for linking an order to a specific cart. | `5f2d15e8-a837-41a3-9bf1-4467e8e1893a` |
| **statusCode** | The current status of the order. | `ORDER_ALLOCATED ` |
| **itemId** | A system-generated unique identifier of an item from fabric Product Catalog service. | `1145` |
| **channelId** | The merchant-defined sales channel ID. | `CHS` |
| **sku** | The stock keeping unit (SKU), unique identifier of item. | `P1135` |
| **lineItemId** | A merchant-defined unique identifier for each item in an order. When omitted, fabric generates it in UUID format during order creation. | `d538b1f1-0e45-43c6-bfc6-9666fc1188ca` |
| **lineItemNumber** | A merchant-defined line item number to identify each item in an order. | 15 |
| **lineOrderStatus** | A system generated status for each item in the order. | `SHIPPED` |
## Procedure
1. In the left menu, click **Orders**.
The **Orders** tab is displayed on the **Manage Orders** page.
2. To export specific orders, filter the number of orders displayed using the filters on the **Orders** tab.
Only the filtered results displayed in the table are exported during the export operation. For example, if you set the filter criteria to **Last 7 Days**, only the orders from the last seven days are exported.
3. Click **Export**.
The **Export Order Activity as CSV or JSON File** window is displayed.
4. In the **Export format** field, select one of the following:
* **CSV**: Select this if you want to export CSV files.
* **JSON**: Select this if you want to export a JSON file.
5. Click **Export**.
A zip file containing your export is downloaded.
## Related topics
* [Getting Started with the Orders Export API](/v3/api-reference/orders/exports/overview)
# Filtering Orders
The **Manage Orders** page displays a list that includes every order. This list can be filtered by **Order Status**, **Order Date**, **Order Total**, and **Channel** so that the list only displays orders that match the filter parameters.
To view additional filters, click the **More** button. The additional options allow you to filter by most data points associated with an order, such as the customer’s name, contact information, currency, payment statuses, and more.
You can apply any combination of standard filters and additional filters from the **More** menu simultaneously.
## Order Filter Options
The following tables list the options when setting up standard filters and more filters.
### Standard filters
The standard filters table shows the various options for standard filters.
| Field | Description |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Order Status** | The status of the order, whether **Created**, **Allocated**, or **Shipped**, or a combination of these options. |
| **Order Date** | The date the order was created or modified, whether **Today**, **Last 7 days**, **Last 30 days**, or a custom date range using the calendar menu. |
| **Order Total** | The total order cost within a user-specified range. |
| **Channel** | The channel, whether **12** for the United States or **13** for Canada. Other channels that the user creates in fabric Experiences or via API are also available. |
### More filters
The more filters table shows the various options available in the **More** menu.
| Field | Description |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Type** | Type of the order:
- **WEB** : Orders that shoppers create on storefronts.
- **Borderfree**: International orders. These are orders that will be shipped outside of the merchant's country.
- **Mobile**: Orders that shoppers create on mobile apps, not web pages.
- **CSR**: Orders that customer service representatives create for customers. |
| **Currency** | The currency type with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Order subtotal** | The order subtotal within a user-specified range. |
| **Order discounts** | The order discount with options to validate by **Is equal to**, **Is greater than**, or **Is lesser than**. |
| **Fee total** | The total fees with options to validate by **Is equal to**, **Is greater than**, or **Is lesser than**. |
| **Tax total** | The total taxes with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Customer first name** | The customer’s first name with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Customer middle name** | The customer’s middle name with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Customer last name** | The customer’s last name with validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Customer email** | The customer’s email address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Customer phone number** | The customer’s phone number with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Customer phone type** | The customer’s phone type with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Customer employee ID** | The ID of the employee who placed the order for the customer with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Customer account ID** | The customer account ID with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Pickup first name** | The first name of the person picking up the order with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Pickup middle name** | The middle name of the person picking up the order with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Pickup last name** | The last name of the person picking up the order with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Email** | The email address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Primary pickup phone number** | The primary pickup phone number with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Phone type** | The phone type with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Pickup type** | The pickup type with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Ship to address first name** | The first name associated with the shipping address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Ship to address middle name** | The middle name associated with the shipping address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Ship to address last name** | The last name associated with the shipping address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Ship to address phone number** | The phone number associated with the shipping address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Ship to address phone type** | The phone type associated with the shipping address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Ship to address line 1** | The first line of the shipping address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Ship to address line 2** | The second line of the shipping address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Ship to address city** | The city of the shipping address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Ship to address region** | The region, such as the state or province, of the shipping address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Ship to address postal code** | The postal code of the shipping address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address first name** | The first name associated with the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address middle name** | The middle name associated with the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address last name** | The last name associated with the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address email** | The email address associated with the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address phone number** | The phone number associated with the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address phone type** | The phone type associated with the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address line 1** | The first line of the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address line 2** | The second line of the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address city** | The city of the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address region** | The region, such as the state or province, of the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Bill to address postal code** | The postal code of the billing address with options to validate by **Is exact match**, **Includes**, or **Excludes**. |
| **Payment status** | The payment status, whether **PAID**, **AUTHORIZED**, **PARTIALLY\_PAID**, or **NOT\_AUTHORIZED**, or a combination of these options. |
| **Payment charged amount** | The payment charged amount with options to validate by **Is equal to**, **Is greater than**, or **Is lesser than**. |
## Setting up a Standard Filter
1. In the left menu, click **Orders**.\
The **Manage Orders** page is displayed.
2. Click one of the following filters:
* **Order Status**
* **Order Date**
* **Order Total**
* **Channel**.\
The filter options are displayed.
3. Set up the filter parameters as required.
Orders that match the filter criteria are displayed.
You can remove an individual filter by clicking the **X** icon corresponding to the filter in the list of filters. You can also click **Reset Filters** to remove all filters.
## Setting up More Filters
1. In the left menu, click **Orders**.\
The **Manage Orders** page is displayed.
2. Click **More**.\
The **Filters** window is displayed.
3. Click a filter option.
4. Set up the filter parameters as required and press **Enter**.
5. Click **Apply**.
Orders that match the filter criteria are displayed.
You can remove an individual filter by clicking the **X** icon corresponding to the filter in the list of filters. You can also click **Reset Filters** to remove all filters.
# Overview
fabric Orders is a distributed order management (DOM) platform that helps you manage the order fulfillment process and provide inventory details, order fulfillment, and customer service.
The **Manage Orders** feature helps you to create real-time orders in the orders database, unify order data, get existing order information, track orders, update orders, add additional products to an order, process cancellations, returns, and exchanges. Additionally, you can use this feature to flag fraudulent orders, which then can be either released from hold or canceled.
### Order Statuses
You can find the order status on the **Orders** and **Orders > Basic details** page. These statuses describe the current status of an individual order within the order lifecycle. The following table describes each order status:
| Order Status | Description |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Shipped** | Indicates that a shipment is created. |
| **Allocated** | Indicates all the items in an order are reserved. |
| **Canceled** | Indicates that either fraud is detected and the order was canceled within the hold window or the payment isn't authorized. |
| **Returned** | Indicates that all the items in an order have been returned. |
| **Created** | Indicates that the order is created. |
| **Exchanged** | Indicates that an exchange is created. The exchange is only created if all the items from the order to be exchanged have been received from the customer. |
| **Picked Up** | Indicates that all the items in an order have been picked up at a specified location. |
| **Partially Allocated** | Indicates that the product inventory for one or more of the items in the order are successfully reserved, but additional items are still pending reservation. |
| **Partially Shipped** | Indicates multiple order statuses for a single order. At least one product in the order is shipped and the remaining products have different statuses. |
| **Partially Returned** | Indicates multiple order statuses for a single order. At least one product in the order is returned and the remaining products have different statuses. |
| **Partially Exchanged** | Indicates multiple order statuses for a single order. At least one product in the order is exchanged and the remaining products have different statuses. The exchanged items must be received from the customer before this status is displayed. |
| **Confirmed** | Indicates the release date has passed for an order. |
| **Ready For Pickup** | Indicates that all the items in an order are ready for pickup at a specified retail location. |
| **Ready for Partial Pickup** | Indicates multiple order statuses for a single order. At least one product in the order is ready for pickup at a specified retail location and the remaining products have a different status. |
| **Delivered** | Indicates all the items in an order are delivered. |
| **Partially Delivered** | Indicates multiple order statuses for a single order. At least one product in the order is delivered and the remaining products have different statuses. |
| **Hold** | Indicates that the item is available, the payment is authorized, and the customer has a brief time window to make changes to the order. |
| **Error** | Indicates the order payment status returned an order payment error. |
### Payment Statuses
You can find the payment status on the **Orders** page. These statuses describe the current payment status of an order within the order lifecycle. The following table describes each payment status:
| Payment Status | Description |
| ------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Authorized** | Indicates that the payment for the order has been authorized. |
| **Partially paid** | Indicates multiple order statuses for a single order. At least one product in the order is paid for and the remaining products have different payment statuses. |
| **Paid** | Indicates that the payment for the order has been paid. |
| **Error** | Indicates that an error occurred during the payment process. Depending on your payment provider rules, a set number of payment attempts will be made before the order is canceled. |
### Allocation Statuses
Allocations serve as fulfillment location records and are used by Warehouse Management Services (WMS) or Point of Sales Services (POS).
You can find the **Allocation Status** on the **Allocation** and **Orders > Allocations** page. This status describes the current allocation status of each individual SKU. The following table describes each allocation status:
| Allocation Status | Description |
| -------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Allocated** | Indicates that all products in the order are allocated. |
| **Pending Drop** | Indicates the order is allocated with a location number and is awaiting shipping. |
| **Pending Allocation** | Indicates the order is confirmed and waiting for allocation. |
| **Pending Pickup** | Indicates the order is waiting for pickup. |
| **Shipped** | Indicates the order is shipped and a tracking number is created. |
| **Partially Shipped** | Indicates multiple order statuses for a single order. At least one product in the order is shipped and the remaining products have different statuses. |
| **Reallocated** | Indicates that the order was reallocated to a different fulfillment location. |
| **Cancelled** | Indicates the order is cancelled. |
| **Partially Cancelled** | Indicates multiple order statuses for a single order. At least one product in the order is canceled and the remaining products have different statuses. |
| **Pending Reallocation** | Indicates the order is pending reallocation to a different fulfillment location. |
| **Partial Pending Reallocation** | Indicates that one or more products in the order are pending reallocation to a different fulfillment location. |
### Shipment Statuses
You can find the **Shipment status** on the **Shipment**, **Orders > Shipments**, and **Orders > Basic details** page. When shipping multiple items from different locations or carriers, each group of items in an order is assigned a separate shipment status. The following table describes each shipment status:
| Shipment Status | Description |
| -------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Shipment created** | Indicates that a shipment is created for the order. A tracking number is provided. |
| **Shipment updated** | Indicates that a shipments information or details have been updated. |
| **Shipment cancelled** | Indicates that a shipment is canceled. |
| **Pickup created** | Indicates that a shipment is being sent to a specified retail or pickup location. |
| **Pickup completed** | Indicates that the order has been picked up by the customer. |
| **Shipment delivered** | Indicates that the order has been delivered to the customers address provided on the order. |
| **Shipment return pending** | Indicates that a return has been requested but the items are still in transit and haven't been processed or received. |
| **Shipment return received** | Indicates that a return has been processed and the items received. |
| **Shipment partially delivered** | Indicates multiple order statuses for a single order. At least one product in the order is delivered and the remaining products have a different status. |
### Invoice Statuses
You can find the **Invoice Status** on the **Invoice** and **Orders > Invoices** page. When shipping multiple items from different locations or carriers, each group of items in an order is assigned a separate invoice status. The following table describes each invoice status:
| Invoice Status | Description |
| --------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Captured** | Indicates that the authorized amount is successfully captured. |
| **Settled** | Indicates that the authorized amount is successfully settled with the customer. The means the authorized amount is fully paid or has been returned to the shopper. |
| **Settle Failed** | Indicates that the settlement for the authorized amount failed. |
| **Partially Settled** | Indicates that the authorized amount is partially settled. For example, 7.50 USD of the authorized 11.50 USD is paid and settled. |
# Processing returns
You can return an entire order or the individual products in an order. The system automatically calculates all the return prices, fees, shipping, and taxes. The return option for an order is enabled only after the payment process is initiated for the order. Orders with the **Fraud** status can't be returned.
## Prerequisites
* Ensure that you have the **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Procedure
1. In the left menu, click **Orders**.
The **Orders** tab is displayed on the **Manage Orders** page.
2. To find the order, use the [search or filter options](https://developer.fabric.inc/v3/guides/orders/order-management/filtering-orders) on the **Manage Orders** page.
3. In the orders table, click the **Order Number**.
The order details are displayed on the **Basic details** tab.
4. In the top-right of the page, click **Return Order**.
The **Return order** page is displayed.
5. In the **Select SKUs to return** section, click one of the following:
* To refund an entire order, select the **Refund entire order** checkbox.
This automatically checks every item in the order and sets the maximum return quantity for each SKU.
* To refund specific items, click the checkbox next to the SKU you want to exchange and use the **+** or **-** buttons to set the quantity.
The **Refund summary** is updated.
6. Click **Next**.
7. If multiple return reasons exist for each SKU, clear the **Same reason code for all SKUs** field.
8. In the **Action** field, select **Return and refund**.
9. In the **Reason code** field, select a reason code.
You can add additional information for the exchange by selecting **Add sub-reason code** and by providing the information in the **Sub-reason code** field.
10. Click **Next**.
11. In the **Refund** section, enter the refund amount in the **Refund \$** field.
The system automatically adjusts the order to include any previous discounts, adjustments, and taxes. More information on the refund can be reviewed in the [Refund summary](#refund-summary).
12. In the **Shipping refund** field, enter a shipping refund amount.
If the customer qualified for free shipping, this field is set to \$0.
13. In the **Refund Fee** field, enter a fee refund amount.
If the customer did not pay any fees, this field is set to \$0.
14. Click **Next**.
The **Confirm** section is displayed with an overview of the refund.
15. Click **Confirm**.
The order status is updated to **Returned**.
### Refund Summary
The **Refund summary** section displays a breakdown of the total amount being refunded. Selecting more than one item to refund updates the summary accordingly. The following table describes each field in the **Refund summary** section.
| Field | Description |
| --------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Subtotal refund** | Displays the refund subtotal which excludes discounts, fees, adjustments, shipping, and taxes. This amount can be edited in the refund process. |
| **Discounts refund** | Displays the discount amount applied to the order. If discount codes were applied to a product, the system automatically adjusts the refund summary. |
| **Fees refund** | Displays the additional fees that were charged for an order such as an oversized item fee. This can be edited in the refund process. |
| **Adjustment refund** | Displays the adjustments applied to the order if applicable. |
| **Shipping refund** | Displays the shipping refund amount. This can be edited in the refund process. |
| **Tax refund** | Displays the tax refund amount. Tax refund amounts can't be edited and are broken down into sub-taxes. For example, Canadian orders are broken down into two taxes, General Sales Tax (GST) and Provincial Sale Tax (PST). Use the **More Details** field to get a list of taxes. Taxes are calculated for individual products, so returns with multiple products display duplicate taxes representing each product. |
| **Total refund** | Displays the total refund amount. |
### Adding Notes to an Order
The **Add Notes** option is located under the **Return order** label.
1. To add notes to an order, Click **Add Notes**.
The **Add notes** window is displayed.
2. Enter the note.
Notes are limited to 110 characters.
3. Click **Save**.
You can edit the note by clicking **Edit Notes**. Repeat step 2 and 3 to complete the update.
The note is added under the **Return order** label. Notes are only saved if you complete the entire return process.
# Updating a Shipping Address
This topic covers the process of updating an existing orders shipping address. You can update both pickup-from-store and ship-to-home addresses.
## Prerequisites
* Ensure that you have the **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
* Ensure that the order is in **Hold**, **Confirmed**, **Partially allocated**, or **Created** status. If the status of the order changes to **Allocated** in the order lifecycle, the order can no longer be updated with additional products.
## Procedure
1. In the left menu, click **Orders**.
The **Orders** tab is displayed on the **Manage Orders** page.
2. To find the order, use the [search or filter]() options on the **Manage Orders** page.
3. In the orders table, click the **Order Number**.
The order details are displayed on the **Basic details** tab.
4. Click the **More actions** button and select **Change shipping address**.
The **Change address for order** page is displayed.
5. In the **Select SKUs** section, use the checkbox for **SKU ID** to select each item in the order.
The shipping addresses are updated for the selected items.
6. In the **Fulfillment method** field, select one of the following options:
* [Ship to Home](#ship-to-home): Use this option if you want to ship the selected products to a specific address.
* [Pickup in store](#pickup-in-store): Use this option if you want to ship the selected products to a designated store pickup location.
### Ship to Home
1. To ship to a specific address, in the **Contact details** section, enter the following details:
* **First name**
* **Last name**
* **Email**
* **Phone number**
* From the **Phone number type** field, select `Mobile`, `Business`, or `Home`.
2. In the **Shipping address** section, enter the following details:
* **Address line 1**
* (Optional) Click **Add address line** to add additional address lines.
* From the **Country** field, select a Country.
* **Zip code**
* **Region**
* **City**
* From the **Shipping method** field, select a shipping method.
3. Click **Confirm**.
A confirmation window is displayed.
4. Click **Yes, change all**.
The address is updated and the **Delivery Summary** in the **Basic details** tab is updated with the new address for each product you selected.
### Pickup in Store
1. In the **Select pickup location** field, select a [pickup location](https://developer.fabric.inc/v3/guides/inventory/locations).
2. To ship to a pickup location, in the **Contact type** field, select one of the following:
* **Primary**: Select this method to set the primary contact information. The primary contact is sent notifications for pickup and tracking details.
* **Secondary**: Select this method to authorize someone other than the primary contact to pick up the order. The default for a primary contact is the customer who ordered the items unless otherwise specified.
3. In the **Contact details** section, enter the following details:
* **First name**
* **Last name**
* **Email**
* **Phone number**
* From the **Phone number type** field, select `Mobile`, `Business`, or `Home`.
4. (Optional) To add additional contacts that are authorized to pick up the order, click **Add alternate pickup name**.
5. Click **Confirm**.
A confirmation window is displayed.
6. Click **Yes, change all**.
The address is updated and the **Delivery Summary** in the **Basic details** tab is updated with the new address for each product you selected.
# Viewing Allocations
The **Allocation** tab in **Manage Orders** provides a summary of your allocations containing information such as **Order Number**, **Allocation Request ID**, **Allocation Status**, **Parent Allocation ID**, **Channel**, **Item Type**, and **Allocation Date**.
* To search for a specific allocation, use filter conditions. For more information, see the [Searching, Filtering, and Sorting](https://developer.fabric.inc/v3/guides/orders/order-management/filtering-orders) section.
## Prerequisites
* Ensure that you have the **Viewer**, **Orders & Inventory Editor**, or **Administrator** privileges to fabric Orders. For more detailed information on these settings, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Allocation table
The **Allocation** tab displays the following information:
| Column name | Description | Values |
| ------------------------- | ------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------ |
| **Order Number** | A unique order identifier. You can view the **Basic details** page by clicking the order number. | String |
| **Allocation Request ID** | A unique allocation identifier. Click the request ID to view the **Allocations** detail page. | String |
| **Allocation Status** | The current allocation status code for the order. | [Allocation Statuses](https://developer.fabric.inc/v3/guides/orders/order-management/overview#allocation-statuses) |
| **Parent Allocation ID** | The **Parent Allocation ID** remains constant and is used to monitor all subsequent child allocations. | String |
| **Channel** | The sales channel ID for the allocation. | String |
| **Items Type** | An inherited attribute from Orders that classifies an item type. | `WEB_SHIP`, `WEB_PICKUP`, `WEB_SDD INTERNATIONAL`, `POS`, `POS_SHIP`, and `POS_PICKUP`. |
| **Allocation Date** | The allocation creation time in the UTC format. | Date and Time |
# Viewing Allocation Details
The **Allocations** tab displays all the allocations associated with a specific order number. This includes the allocation date, SKU, status, and additional allocation attributes.
## Allocation Details
Each allocation has its own **Allocation ID** and you can have multiple allocations for a single order. Allocations are sorted by the most recent allocation request.
By default, each allocation displays **Allocation ID**, **Parent allocation ID**, **Allocation request ID**, and **Allocation date**. Clicking **View more attributes** displays the allocation attributes window with additional attributes.
The following table describes the different allocation attributes in the **View more attributes** window:
| Field | Description |
| ------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Allocation ID** | A unique allocation identifier. |
| **Parent allocation ID** | The **Parent Allocation ID** is initially the same as the **Allocation ID**. The **Parent Allocation ID** remains constant (isn't updated) and is used to monitor all subsequent child allocations. For example, if a new allocation is assigned to an order and the **Allocation ID** is updated, the previous ID (**Parent Allocation ID**) can still be referenced. |
| **Allocation request ID** | A merchant-specified unique ID. If omitted, this is generated by fabric’s sequence generator using the Configuration service. |
| **Allocation date** | The allocation creation time in the UTC format. |
| **Last updated date** | A system-generated time indicating when the allocation record was last modified. |
| **Location type** | The type of inventory location where the order is picked up, such as DC or Store. |
| **Ship-from location name** | The Inventory location fulfilling the allocation. |
| **Ship-from location number** | The inventory location number to identify the ship-from location or Buy Online Pickup from Store (BOPIS) location. |
| **Ship-from location address** | The full address of the fulfillment location. |
| **Shipment method** | The shipment method used to fulfill the allocation. For example, next day shipping. |
| **Recipient** | The recipient details such as name, email address, and phone number. If details are unavailable, the value is set to **false**. |
| **Sent date** | The date and time the allocation shipment left the facility. |
| **Ship to id** | A system-generated UUID associated with `shipInfo`, generated from the Cart and Checkout (CnC) service. Note that an order can have multiple ship-to or delivery locations, however the `shipToId` is the same for items going to the same location. |
| **Ship to address** | The shipping address details. |
| **Type** | The allocation type.
**Allocated**: The order is allocated for fulfillment.
**Scratched**: The order is cancelled during allocation due to unavailable inventory.
**Returned**: The allocation is created for returned items. |
| **Shipment type** | The shipment type, such as, `Pickup`, `Ship_To_Store`, or `Ship_To_Home`, that's selected by the customer during checkout. This attribute is inherited from the `order.shipInfo` during allocation creation. |
| **Order sub type** | An order subtype attribute that contains additional information on the order type. Use this setting to include additional order data such as region or device type which isn't included in the order types, such as *IOS*, *ANDROID*, and *INTERNATIONAL* . |
| **Currency** | The currency used for the order. |
### Allocation table
The following table describes the additional attributes found in each individual allocation:
| Field | Description |
| --------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Line number** | A system-generated number assigned to each item in an allocation. |
| **SKU** | The stock keeping unit (SKU), unique identifier of item. Clicking the SKU displays the **Sku Details** window containing pricing and attribute information. |
| **Allocated** | Indicates if the item is allocated. A **0** indicates the item isn't allocated, a **1** indicates the item is allocated. |
| **Shipped** | Indicates if the item is shipped. A **0** indicates the item isn't shipped, a **1** indicates the item is shipped. |
| **Cancelled** | Indicates if the item is cancelled. A **0** indicates the item isn't cancelled, a **1** indicates the item is cancelled. |
# Viewing Order Basic Details
To view an orders **Basic Details**, click the order number in the **Manage Orders** > **Orders** table.
The **Basic details** tab displays an overview of the orders attributes, status, delivery details, customer details, and payment details.
## Basic Details Tab
As an order continues through the order lifecycle, attributes are continually updated and added to the order. These attributes are displayed in the **Basic details** tab. The **Basic Details** tab contains the following sections:
* [Order Summary](#order-summary)
* [Customer Details](#customer-details)
* [Order Status](#order-status)
* [Delivery Summary](#delivery-summary)
* [Payment Details](#payment-details)
When an order has more than 16 attributes, the **View more attributes** button is displayed. If you click **View more attributes**, all the order attributes are displayed in a new window with searching capabilities.
The following table describes the default order attributes:
| Field | Description |
| ----------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Order ID** | Displays the unique identifier of the order. |
| **Order type** | Specifies the workflow used to create the order. For example, Storefront orders have a different workflow than Call Center orders. fabric Orders service offers default configurations for Storefront, Call Center, Point of Sale, iOS, Android, and International. |
| **Order subtype** | Indicates an order subtype attribute that contains additional information on the order type. This allows additional order data to be captured such as region or device data which was not captured in the order type such as `IOS`, `ANDROID`, and `INTERNATIONAL`. |
| **Date Created** | Displays the order creation time in UTC. |
| **Channel** | Displays the sales channel ID. |
| **Order Total** | Specifies the total amount to be charged for the order. This is calculated by taking `orderSubTotal` - `orderDiscountTotal` + `orderFeeTotal` + `orderTaxTotal`. This value also includes the currency that was used for the order. |
| **fraudStatus** | Displays the current fraud status. |
| **fraudCheckSessionId** | Displays the unique identifier of the fraud status. |
| **fraudCheckStatus** | Indicates if the fraud status has changed. |
| **fraudCheckTransId** | Displays a system-generated fraud transaction ID used to track the transaction fraud status. |
| **fraudScore** | Displays a fraud score used to flag an order for fraud, ranging from 0-100. |
| **loyaltyStatus** | Indicates the customers current loyalty status at the time of order creation. |
| **createdDate** | Displays the fraud status creation time in UTC. |
### Order Summary
The **Order summary** section displays an overview of the total costs associated with an order such as discounts, fees, taxes, and adjustments.
### Customer Details
The **Customer Details** section displays an overview of the customer details for an order.
To edit a customers basic details, click **Edit**. The **Edit customer details** window is displayed. You can update the following details:
* **First name**
* **Last name**
* **Phone number**
* **Email**
* **Middle name**
* **Phone type**
### Order Status
The **Order Status** section displays a high-level overview for each SKUs position in the order lifecycle. For more information on each individual order status, visit the [Order Statuses](https://developer.fabric.inc/v3/guides/orders/order-management/overview#order-statuses) section in the Overview.
Orders are separated into shipping groups based on their allocation and shipping methods. For instance, if one item is for pickup only and other items in the same order qualify for free standard shipping, the order is split into Group 1 and Group 2. Each group follows its own order status lifecycle. Additionally, each group shows the following details based on whether the order is for **Pickup** or **Delivery**.
* **Fulfillment Details**: Displays the customer's shipping information including the customer name, shipping address, city, state code, zip code, and country.
* **Shipping Method**: Displays the orders selected shipping method. For more information, visit the [Shipping Methods](https://developer.fabric.inc/v3/guides/orders/settings#shipment-methods) section in Settings.
* **Pick up details**: Displays the orders primary pick up name and the pick up location.
#### SKU Details
If you want to view the details of a SKU, click the **SKU**. The **Sku Details** window is displayed containing two tabs, **Pricing** and **Attributes**.
* For more information on **Attributes**, visit the [Product Attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/product-attributes-overview) section in the Product Catalog documentation.
* For more information on **Pricing**, visit the [Pricing](https://developer.fabric.inc/v3/guides/offers/pricing) section in the Offers documentation.
### Delivery Summary
The **Delivery Summary** section displays an overview of the delivery containing shipping location information, the current shipping status, and the total number of packages.
To view more detailed shipment information, you can click **Shipment 1 of X**. The **Shipments** detail tab is displayed.
### Payment Details
The **Payment Details** section displays an overview of the orders payment attributes.
The following table describes the default payment attributes:
| Field | Description |
| ---------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Payment type** | Indicates the payment type, for example, credit card payment providers can be Visa, Mastercard, and American express. |
| **Card number** | Displays the card used to complete the transaction. |
| **Expiration date** | Displays the card expirations month and year. |
| **Payment placed on** | Displays a system-generated time created during shipment. This time can instead be captured at checkout during order creation depending on your merchant-defined settings. |
| **Refund amount** | Specifies the merchant-defined refund amount. If no refund is issued, this attribute remains blank. |
| **Bill-to** | Displays the customer's billing information, including name, email, and phone details. |
| **Bill-to-address** | Displays the customer's billing address information including, address lines, city, region, postal code, and country code if applicable. |
| **fabric payment reference** | Displays a system-generated UUID referenced internally for Invoice and Orders services. |
| **Payment provider** | Indicates the payment provider that processed the payment. |
| **Payment token** | Displays the payment token provided by the payment provider. |
| **Payment status code** | Indicates the current payment status code. For more information visit [Payment Statuses](https://developer.fabric.inc/v3/guides/orders/order-management/overview#payment-statuses) in the manage orders overview documentation. |
| **Payment counter** | Displays a sequential or incremental counter associated with a payment for an order. This is used in refund scenarios to identify the specific payment for refund. |
| **Transaction id** | Displays the system-generated transaction ID. |
| **Partial capture** | Indicates whether the payment capture is partial. A partial capture is the release of funds that don't equal the total authorized payment. For example, 7.50 USD of the authorized 10.99 USD payment. The system returns `true` when the payment is captured partially; otherwise, it returns `false`. |
| **Final capture** | Indicates whether the payment capture is final. The point of final capture is when all authorized funds have moved from the customer to the merchant and the payment is successful. The system returns `true` when the payment capture is final; otherwise, it returns `false`. |
| **Order source** | Displays a merchant-defined source indicating where an update was initiated. There are no predefined values; for example, values can be Customer Service Representative (CSR), Point-of-Sale (POS), and Web (e-commerce). |
| **Invoice number** | Displays the merchant-defined unique invoice number. If omitted, this is generated by fabric’s sequence generator using the Configuration service. |
# Viewing Invoice Details
The **Invoices** tab displays any invoices associated with a specific order. This includes shipping, returns, appeasement, and other invoice types.
## Invoice Details
Each invoice contains a number indicating the total number of invoices associated with an order, the specific invoice number, and the invoice status. Invoices are separated by invoice type.
Each invoice contains the following attribute details:
| Field | Description | Value |
| ------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------- |
| **Invoice type** | The current invoice type code for the order. | `RETURN`, `SHIPPING`, `APPEASEMENT`, `ORDER_DONATION`, `ORDER_CARRY`, `EXCHANGE` |
| **Invoice total** | The total amount to be charged for the invoice. | String |
| **Invoice date** | Indicates the time the invoice was created in UTC format. | String |
| **Shipment number** | A merchant-specified shipment number for an invoice. | String |
| **SKU** | The stock keeping unit (SKU), unique identifier of item. | String |
| **Price / unit** | Indicates the default or base price for each unit of a product.
For more information on product pricing, visit the Offers [Pricing documentation](https://developer.fabric.inc/v3/guides/offers/pricing). | String |
| **Qty** | Indicates the quantity of a Product or SKU. | Number |
| **Invoice Amount** | Indicates the total amount charged for an item in an invoice. | String |
When an invoice has more than 4 attributes, the **View more attributes** button is displayed. Clicking **View more attributes** displays all the invoice attributes in a new window with searching capabilities.
For more information on the available invoice attributes, visit the [Invoices API reference documentation](https://developer.fabric.inc/v3/api-reference/orders/invoices/get-invoice-by-id). The 200 response displays all possible default invoice attributes and descriptions for each attribute. This list doesn't include custom attributes.
# Viewing Shipment Details
The **Shipments** tab displays all the shipments associated with a specific order number. This includes the ship date, method, status, fulfillment details, tracking information, and delivery date.
Depending on the allocation location, item, fulfillment logic, and shipping method selected at checkout, multiple shipments might be required for a single order.
## Shipment Details
By default, each shipment displays **Fulfillment details**, **Ship date**, **Shipping Method**, and **Delivery date**. Clicking **View more attributes** displays the shipment attributes window with additional attributes.
The following table describes the different shipment attributes in the **View more attributes** window:
| Field | Description |
| -------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Fulfillment details** | The name, address, and email details for the primary recipient. |
| **Ship date** | The shipment time in UTC format. |
| **Shipping method** | The shipment method used to fulfill the allocation. For example, next day shipping. |
| **Delivered Date** | The delivery date. Initially, this value is null. Once delivery is complete, the date and time is displayed in UTC format. |
| **Master tracking number** | The tracking number for all cartons in the shipment. |
| **Location Number** | A unique value used to identify the **Ship from** location. This must be the `locationNumber` stored in the fabric Location service. |
| **Location type** | The location type. For example, a distribution center (DC) or warehouse. |
| **Shipment ID** | A system-generated shipment ID (UUID). |
| **Shipment number** | A merchant-specified shipment number for an invoice. |
| **Shipment type** | The shipment type, such as, `Pickup`, `Ship_To_Store`, or `Ship_To_Home`, that's selected by the customer during checkout. This attribute is inherited from the `order.shipInfo` during allocation creation. |
| **Allocation ID** | A system-generated allocation ID (UUID) from the Create allocation endpoint. Allocation occurs prior to shipment creation. An `allocationId` is mandatory to create a shipment. |
| **Vendor ID** | The unique Vendor ID. This ID is used in dropshipping scenarios to indicate the vendor responsible for the given item. |
| **Ship from** | The allocation location name and number. |
| **Ship from address** | The full address of the fulfillment location. |
| **Ship to** | The shipping address details. |
| **Ship to id** | A system-generated UUID associated with `shipInfo`, generated from cart and checkout (CnC) service. **Note**: An order can have multiple ship-to (delivery) locations and items going to the same location share one `shipToId`. |
| **PO Number** | A merchant-defined purchase order number. |
| **Status Code** | The current shipment [status code](https://developer.fabric.inc/v3/guides/orders/order-management/overview#shipment-statuses) for the order. |
| **Reshipment reason code** | The reason provided for a reshipment. For example, missing order. |
| **Updated at** | The time the last update to shipment was made in UTC format. |
| **Recipient name** | The primary contact's name. |
| **Recipient email** | The primary contact's email. |
| **Recipient phone** | The primary contact's phone number. |
## Package Details
Each shipment section contains a package table with information on the number of packages, a tracking number, and the package shipment status.
Clicking the arrow next to the shipping status expands the package details section. This reveals additional information on the package details such as the SKUs, quantity of items, cost, events, and attributes. By default, the **SKUs** tab is selected.
### SKU Details
If you want to view the details of a SKU, click the **SKU**. The **Sku Details** window is displayed containing two tabs, **Pricing** and **Attributes**.
* For more information on **Attributes**, visit the [Product Attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/product-attributes-overview) section in the Product Catalog documentation.
* For more information on **Pricing**, visit the [Pricing](https://developer.fabric.inc/v3/guides/offers/pricing) section in the Offers documentation.
### SKUs
| Field | Description |
| -------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **SKU** | The stock keeping unit (SKU) used as a unique identifier for an item. Clicking the SKU displays the **Sku Details** window containing pricing and attribute information. |
| **Quantity** | Indicates the quantity of a product or SKU. |
| **SKU Cost** | The total cost of the SKUs before discounts and promotions. |
| **Total Cost** | The total cost paid by the customer including discounts and promotions. |
### Event Tracker
| Field | Description |
| ------------------- | --------------------------------------------------------------------- |
| **Ship from** | The allocation location name and number. |
| **Ship to** | The shipping address details. |
| **Tracking number** | The carton tracking number. Each carton has a single tracking number. |
| **Activity** | Displays shipment-specific events provided by the carrier. |
| **Date** | The time and date the event was recorded in UTC format. |
| **Location** | The location the event occurred, if applicable. |
### Attributes
| Field | Description |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Promised Delivered Date** | The promised delivery date in UTC format provided by the seller. |
| **Carton Number** | A merchant-defined unique identifier for a carton. |
| **Tracking number** | The carton tracking number. Each carton has a single tracking number. |
| **Carton Type** | The carton type provided to the carrier. For example, package. |
| **Est. ship date** | The estimated ship date in UTC format provided by the seller based on availability of items, processing time, delivery location, and the selected shipping method. |
| **Est. delivery date** | The estimated delivery date in UTC format provided by the carrier based several factors including the selected shipping method and delivery location. |
| **Shipment method** | The shipment method used to fulfill the allocation. For example, next day shipping. |
| **Shipment carrier** | The shipment carrier name. |
| **Total weight** | The cartons total weight. |
# Viewing an Orders Activity Log
The order details **Activity log** tab displays a history of all the inventory
and shipping events for an order.
## Activity log filtering
You can filter the activity log history by using one or more of the following
filters:
| Filter name | Description | Values |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------- |
| **Date** | The date filter sets a look-back window for your selected time frame. For example, selecting **Last 7 days** displays the activity logs for the last 7 days and filters out logs that are older than the selected time frame. To set a **Custom date** filter, select the **Custom date** option, then click the calendar icon and select the desired start date followed by the desired end date. | **Today** **Last 7 days** **Last 30 days** **Custom date** |
| **Type of activity** | Activities are split into 4 different types, Order, Invoice, Shipment, and Allocation. Selecting one or more activity type filers an orders activity logs to display only that activity type. | **Order** **Invoice** **Shipment** **Allocation** |
| **Updated by** | The [`tenantId`](https://developer.fabric.inc/v3/guides/settings/account-details/getting-the-account-id) of the user that made an update or change. Automatic updates don't include an **Updated by** value. | `tenantId` Null `-` |
## Activity log table
The **Activity log** displays a table with the following columns and values:
| Column name | Description | Values |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Date** | The day of the week, month, day, year, and time the change or update was made. | Date |
| **Updated by** | The [`tenantId`](https://developer.fabric.inc/v3/guides/settings/account-details/getting-the-account-id) of the account that made an update or change. Automatic system updates such as order enrichment and order natural hold don't include an **Updated by** value. | `tenantId` Null `-` |
| **Type of activity** | Activities are split into 4 different types, Order, Invoice, Shipment, and Allocation. The activity type corresponds to each tab for the current order. For example, if an orders shipment information was updated, the activity type value for that entry in the log will be **Shipment**. The updates are displayed in the **Shipments** tab for the order. | **Order** **Invoice** **Shipment** **Allocation** |
| **Document number** | A unique identifier that corresponds to one of the following tabs, **Basic details**, **Allocations**, **Shipments**, and **Invoices**. For example, `65d5103a654a506e00d61ed7` is the **Order ID**. Clicking the link displays the **Basic details** tab for your current order. | String |
| **Details** | Details on the updates and existing values, this includes values that haven't changed but are related to the activity type. When the details of a log are too long to display, a **View more updates** link is displayed. Clicking **View more updates** displays all the data associated with a specific log. For more information on each parameter listed in the details, visit the order endpoint corresponding to the type of activity. | [Shipment endpoint](https://developer.fabric.inc/v3/api-reference/orders/shipments/get-shipment-by-id) [Order endpoint](https://developer.fabric.inc/v3/api-reference/orders/orders/get-order-by-order-id) [Invoice endpoint](https://developer.fabric.inc/v3/api-reference/orders/invoices/get-invoice-by-id) [Allocation endpoint](https://developer.fabric.inc/v3/api-reference/orders/allocations/get-allocation-by-id) Clicking the 200 response for an endpoint displays the response body with each parameter and its description. |
## Related resources
* [Orders API documentation](https://developer.fabric.inc/v3/api-reference/orders/orders/overview)
* [Orders FAQ](https://developer.fabric.inc/v3/api-reference/orders/orders-faq-s)
# Viewing Invoices
The **Invoice** tab in **Manage Orders** provides a summary of your invoices containing information such as, **Order Number**, **Invoice Number**, **Invoice Total**, **Invoice Status**, **Invoice Type**, and the **Settlement Date**.
* To find an invoice, in the search bar, type the search criteria and press **Enter**.
You can refine the search results by applying the filter conditions and sorting the results in ascending or descending order. For more information, see the [Searching, Filtering, and Sorting](https://developer.fabric.inc/v3/guides/orders/order-management/filtering-orders) section.
## Prerequisites
* Ensure you have at least one order that meets the current search or filter conditions. If your search or filter criteria don't match any orders, you will see the message **No Orders Found** displayed in the table.
* Ensure you have the **Viewer**, **Orders & Inventory Editor**, or **Administrator** privilege for fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) document.
## Invoice Table
The **Invoice** tab displays the following information:
| Field | Description | Values |
| ------------------- | -------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| **Order Number** | Displays the unique order identifier. You can view the **Basic details** page by clicking the order number. | String |
| **Invoice Number** | Displays the merchant-defined unique invoice identifier. To view the invoice details page, click the invoice number. | String |
| **Invoice Total** | Displays total amount charged for the invoice. | String |
| **Invoice Status** | Indicates current status code for the invoice associated with the order. | [Invoice Statuses](https://developer.fabric.inc/v3/guides/orders/order-management/overview#invoice-statuses) |
| **Invoice Type** | Indicates the current code for the type of invoice associated with the order. | `RETURN`, `SHIPPING`, `APPEASEMENT`, `ORDER_DONATION`, `ORDER_CARRY`, and `EXCHANGE` |
| **Settlement Date** | The invoice settle time in UTC format. | String |
# Viewing Orders
The **Orders** tab in **Manage Orders** provides a summary of your orders containing information such as **Order Number**, **Customer Name**, **Order Total**, **Order Status**, **Payment**, and **Order Created**.
You can search for an order, use filter conditions to tailor your search, and sort the results in ascending or descending order. For more information, see the [Searching, Filtering, and Sorting](https://developer.fabric.inc/v3/guides/orders/order-management/filtering-orders) document.
## Prerequisites
* Ensure you have at least one order that meets the current search or filter conditions. If your search or filter criteria don't match any orders, you will see the message *No Orders Found* displayed in the table.
* Ensure you have the **Viewer**, **Orders & Inventory Editor**, or **Administrator** privilege for fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) document.
## Order table
The **Orders** tab displays a table with the following columns and values:
| Column name | Description | Values |
| ----------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------- |
| **Order Number** | The unique order identifier. Clicking the order number takes you to the Orders **Basic details** tab where you can view additional details such as an orders attributes and history. | String |
| **Customer Name** | The name of the customer and customer account ID. | String |
| **Order Total** | The total amount to be charged for the order. This is calculated by taking `orderSubTotal` - `orderDiscountTotal` + `orderFeeTotal` + `orderTaxTotal`. This value also includes the currency that was used for the order. | Total cost and currency: \$83.01 USD |
| **Order Status** | The current status code for the order. | [Order Status](https://developer.fabric.inc/v3/guides/orders/order-management/overview#order-statuses) |
| **Payment** | The payment status code for the order. | [Payment Status](https://developer.fabric.inc/v3/guides/orders/order-management/overview#invoice-statuses) |
| **Order Created** | The order creation time in UTC. | Date and Time |
### Order Information
This value displays the total number of orders in the order table. When filtering, this value changes based on the filtered results.
For example, filtering by the **Last 7 days** results in **Total Orders** equal to 2431. Filtering by **Today** updates the **Total Orders** number to 153.
# Viewing Shipments
The **Shipment** tab in **Manage Orders** provides a summary of your shipments containing information, such as **Order Number**, **Shipment number**, **Shipment status**, **Ship date**, and **Master Tracking**.
* To search for a specific shipment, use filter conditions. For more information, see the [Searching, Filtering, and Sorting](https://developer.fabric.inc/v3/guides/orders/order-management/filtering-orders) section.
## Prerequisites
* Ensure that you have the **Viewer**, **Orders & Inventory Editor**, or **Administrator** privileges to fabric Orders. For more detailed information on these settings, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Shipment Table
The **Shipment** tab displays the following information:
| Field | Description | Values |
| ------------------- | ---------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| **Order Number** | A unique order identifier. You can view the **Basic details** page by clicking the order number. | String |
| **Shipment number** | A merchant-defined unique shipment identifier. Click the shipment number to view the **Shipments** details page. | String |
| **Shipment status** | The current shipment status code for the order. | [Shipment Statuses](https://developer.fabric.inc/docs/overview-1#shipment-statuses) |
| **Ship date** | The order shipment time in the UTC format. | date-time |
| **Master Tracking** | The tracking number for all cartons in the shipment. | String |
# Overview
Build a centralized source of order, inventory, and warehouse information with fabric Orders.
fabric Orders enable you to receive, track, and fulfill customer orders across sales channels, allow customers to track their orders, route orders through warehouses based on the customer’s location, and more.
Orders is designed to streamline and simplify order management and fulfillment processes during and after an order is created.
## Key Features
Orders is divided into five separate sections accessible from the left column in fabric Copilot:
* [Manage orders](/v3/guides/orders/order-management/overview) allows you to create orders in the database in real-time, unify order data, get existing order information, track orders, update orders, add additional products to an order, process cancellations, returns, and exchanges.
* [Fulfillment](/v3/guides/orders/order-fulfillment-logic/order-fulfillment-logic) allows you to create fulfillment rule sets, which are used to direct orders to different fulfillment locations based on characteristics, such as geo-location, warehouse location, item price, order attribute type, and more.
* [Activity Log](/v3/guides/orders/activity-log) displays your order import and export history.
* [Alerts](/v3/guides/home/alerts/alerts-overview) notifies you of potential issues using the data within your account.
* [Settings](/v3/guides/orders/settings/overview) contains additional features and configurations such as Order Attributes, Shipping Methods, Backorder & Preorder, Policies, and Alerts.
## Role-Based Access Control (RBAC)
fabric Copilot provides the ability to restrict the access of different users to information and actions available to them through roles. For more information and instructions on how to set up these controls, see the [RBAC](/v3/guides/settings/rbac/role-based-access-control-orders-roles) documentation.
## Integration Examples
**Allocation with fabric Orders:** After creating an order using fabric Orders service, the orders service sends a request to fabric’s Allocation module for order allocation. Allocation calls Order Fulfillment Logic (OFL) and OFL rules to get the location number where the inventory is available based on the currently defined OFL rule system. After completion, OFL provides the necessary information to the Allocation service, and Allocation calls the inventory service to reserve items as needed, adjusting your inventory counters in real-time.
The Order fulfillment process is set up by integrating your existing fulfillment systems, such as a Warehouse Management System (WMS), with fabric's Allocation APIs. This integration enables allocation-related events to start fulfillments in external systems, and allows external systems to make callbacks to the fabric Allocation APIs.
**Shipments & Tracking with fabric Orders:** fabric's Shipment APIs ensure that shipments are created for allocations. These APIs enable the warehouse or any external fulfillment system to generate shipments associated with the allocated orders.
Additionally, you can set up shipment tracking updates for orders by integrating your carrier tracking service with the Shipment Tracking APIs. These APIs enable the external carrier tracking service, such as ParcelLab, to post shipment events. With the order created, shipped, and tracking enabled, you can manage the order. This includes Cancellations, Appeasements, Exchanges, Credits, Returns, and more using the [Orders APIs](/v3/api-reference/orders/orders--3-0-0) or [Manage Orders](/v3/guides/orders/order-managment/overview) UI as needed.
**Notifications with fabric Orders:** Optionally, you can configure email updates for order transactions by integrating your preferred email service with the Notification APIs. This integration enables fabric Orders to deliver real-time email notifications for specific order update events.
**Fraud with fabric Orders:** To establish fraud prevention, you can integrate your preferred fraud service with the Fraud APIs. These APIs primarily allow for hold and release actions on the order, providing an effective means of preventing fraudulent activities.
## Benefits
* **Customer Lifetime Value (CLTV)**: Manage the customer lifetime vale through omnichannel orders. With all your data in one place, improve customer service by reducing call volume, average handle time, and increase support satisfaction. Improve order orchestration by reducing split shipments, OOS cancellations, and increasing on time delivery rate. As a multi-brand and multi-channel retailer, improve order processing time, reduce inventory cancellations, and subsequently increase support satisfaction.
* **Sell-through Rate (STR)**: You can increase sell-through rate by unifying and improving the Buy Online and Pickup in Store (BOPIS) experience, ship from store experience, and improved store inventory management.
* **Storefront Conversion Rate (CVR)**: Using real-time inventory coupled with backorder and preorder capabilities, you can increase sell-through rate, website conversion, and site merchandiser operational efficiency. Additionally, you can optimize your inventory and fulfillment by reducing split shipments, OOS cancellations, and increasing on time delivery rate.
## Example Use Cases
* **Exporting Sales and Reports Data**: Using fabric Orders export API, you can export data to be utilized for business intelligence or store the data externally as needed. The exports service flattens the JSON structure into columns, so that an external columnar database, such as an SQL database, can easily ingest the data. Exports can also be generated in fabric Copilot for ad-hoc analysis.
* **Fulfilling Backorders & Preorders**: During the order creation process within fabric Orders service, backorders and preorders are identified and flagged accordingly. This enables the backorder and preorder service to store these orders in a dedicated backorder queue. Fulfillment of these orders follows a *first in, first out* approach as inventory becomes available for the backorders.
Additionally, consent to delay operations are implemented based on your configuration of backorder settings. Orders that exceed the specified backorder service level require customer consent to proceed with the delay. fabric triggers the consent to delay notification based on your configuration, and updates regarding consent to delay are managed through the consent to delay API endpoint.
* **Omnichannel Store Fulfillment**: You can maximize return on existing investments in physical locations, such as brick and mortar stores, by connecting ecommerce sales to store inventories that are eligible for direct-to-consumer shipments. By bringing store inventory into the fulfillment network, you can expand capacity for ecommerce sales and increase the available assortment for online shoppers.
* **Optimized Order Fulfillment Logic**: Using fabric's Order Fulfillment Logic (OFL) you can configure how orders are handled for different items, locations, sales, shipping types, and more. For example, multi-location fulfillment allows you to allocate orders to specific fulfillment locations based on factors, such as shipping type, geographic distance, and inventory availability. This flexibility enables efficient order processing and reduces shipping times. For same-day delivery optimization, fabric's geolocation feature can be utilized. It considers the customer's location and searches for inventory networks within a set distance that can fulfill the order the fastest. This feature can be configured with specific boundaries and inventory balancing options to ensure the fastest possible delivery. Split shipment management is another key feature, allowing orders to be fulfilled from multiple locations when necessary. This can be set up at both the order and item level, with options to allow partial fulfillment. This functionality is particularly useful when dealing with complex inventory situations or when aiming to optimize delivery times for multi-item orders.
## Related topics
* [Product Catalog](/v3/guides/product-catalog/overview)
* [Inventory](/v3/guides/inventory/overview)
* [Orders API reference](/v3/api-reference/orders/orders--3-0-0)
* [Inventory API reference](/v3/api-reference/inventory/inventory--3-0-0)
* [Orders API developer guides](/v3/api-reference/orders/developer-guide/order-and-inventory-import)
# Backorder & Preorder Settings
Backorders are defined as orders for products that aren't currently available for fulfillment.
Preorders are defined as orders for products that aren't yet released.
## Prerequisites
* Ensure that you have **Administrator** or **Editor** privileges to fabric Orders. For more detailed information on these settings, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Procedure
In the left menu, click **Orders** > **Settings** > **Backorder & Preorder**. The **Backorder & Preorder Settings** page is displayed.
### Allow backorders
1. In the **Allow Backorders** field, select the **On** option.
Additional fields are displayed.
2. In the **Consent to delay should start** field, select one of the following options:
* From order created date.
* From ship by date.
3. In the **Notification Settings** and **Auto-cancellation Settings** fields, do the following:
* In the first **Notification Setting** field, set the number of days past the promised order ship-by date before sending the first consent-to-delay notification to the customer.
* In the second **Notification Setting** field, set the number of days past the promised order ship-by date before sending the second consent-to-delay notification to the customer.
* In the first **Auto-cancellation Setting** field, set the number of days to cancel the order if the customer doesn't respond to either of the first two notifications.
* In the second **Auto-cancellation Setting** field, set the number of days to cancel a backordered order when the item has not yet been fulfilled, even if the customer had previously agreed to a consent-to-delay notification.
4. Click **Save**.
The backorder settings are updated and saved for all orders.
### Allow preorders
1. In the **Allow Preorders** field, select the **On** option.
2. Click **Save**.
## Related Topics
* [Order Attributes](/v3/guides/orders/settings/order-attributes)
* [Shipping Methods](/v3/guides/orders/settings/shipping-methods)
* [Order Policies](/v3/guides/orders/settings/policies)
* [Order Alerts](/v3/guides/orders/settings/order-alerts)
# Order Attributes
Order attributes let you create a range of custom attributes you can apply to Orders, Invoices, Locations, Networks, and more. For example, you could create a custom attribute that would allow customers to select gift wrapping at checkout.
To navigate to the **Attributes** page, click **Settings** in the left menu and then select **Attributes**.
You can search for an attribute, use filter conditions to tailor your search, and sort the results in ascending or descending order.
## Attributes Table Field Descriptions
The Attributes table displays a list of all previously created **Attributes**.
| Field | Description |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Name** | The attribute name assigned when creating the attribute. |
| **Section** | The section within **Orders** that the attribute field will be used in. The options are **Location**, **Order**, **Shipment**, **Invoice**, **Allocation**, or **Inventory**. |
| **Data type** | The data type associated with the attribute. For example, String, Boolean, Double, or Enum. |
| **Mandatory** | Determines if the attribute is mandatory. Mandatory attributes must be provided when making API calls to the **Section** its assigned to. The value can be **Yes** or **No**. |
## Creating Order Attributes
1. In the left menu, click **Orders** > **Settings** > **Attributes**.
The Attributes page is displayed.
2. Click **Create Attribute**.
The **Create Attribute** page is displayed.
3. In the **Attribute name** field, enter an attribute name.
4. To make the attribute mandatory, select the **Mandatory attribute** field.
5. (Optional) In the **Description** field, enter a description.
6. In the **Data type** field, select a data type. For example, *Integer* or *Boolean*.
7. In the **Document** field, select a document type.
This field is used to map the attribute to the fabric API endpoint. For example, if you select *inventory* and the attribute is a mandatory attribute, you must provide this attribute and its value when making an API call to inventory.
8. In the **Object** field, select an object.
The object field is used to further classify where an attribute lives. For example, if you select the **Order** document type and **shipInfo** object. The attribute lives under the **order.shipInfo** object as the **order.shipInfo.shopToType** attribute.
9. Click **Save**.
The attribute is added to the attribute table on the **Attributes** page.
## Editing an Attribute
1. In the left menu, click **Orders** > **Settings** > **Attributes**.
The **Attributes** page is displayed.
2. In the **Name** column of the attribute table, click an attribute.
The **Edit Attribute** page is displayed.
Note that you can only edit the **Description** and **Object** values.
3. To save edits to the attribute, click **Save**.
The edits are saved.
## Deleting Attributes
1. In the left menu, click **Orders** > **Settings** > **Attributes**.
The **Attributes** page is displayed.
2. In the attribute table, hover over the attribute you wish to remove and click the delete icon.
The **Are you sure you want to delete this attribute?** page is displayed.
3. Click, **Yes, Delete**.
The attribute is deleted and removed from the attribute table on the **Attributes** page.
## Related Topics
* [Shipping Methods](/v3/guides/orders/settings/shipping-methods)
* [Backorders and Preorders](/v3/guides/orders/settings/backorder-preorder)
* [Order Policies](/v3/guides/orders/settings/policies)
* [Order Alerts](/v3/guides/orders/settings/order-alerts)
# Overview
Use the Order Settings menu to manage order attributes, shipping methods, policies, alerts, backorders, and preorders.
## Order attributes
Order attributes are used to create a range of custom attributes you can apply to Orders, Invoices, Locations, Networks, and more. For example, you could create a custom attribute that would allow customers to select gift wrapping at checkout.
* [Creating Order Attributes](/v3/guides/orders/settings/order-attributes#creating-order-attributes)
* [Editing Order Attributes](/v3/guides/orders/settings/order-attributes#editing-an-attribute)
## Shipping methods
Shipping methods determine how products are delivered to your customers. Examples of shipping methods include domestic, international, free shipping, and express delivery.
* [Creating Shipping Methods](/v3/guides/orders/settings/shipping-methods#creating-shipping-methods)
* [Editing Shipping Methods](/v3/guides/orders/settings/shipping-methods#editing-shipping-methods)
## Backorder & Preorders
Backorders are defined as orders for products that aren't currently available for fulfillment.
Preorders are defined as orders for products that aren't yet released.
* [Enable Backorders](/v3/guides/orders/settings/backorder-preorder#allow-backorders)
* [Enable Preorders](/v3/guides/orders/settings/backorder-preorder#allow-preorders)
## Policies
Policies enable you to define how your business handles returns, cancellations, and exchanges.
* [Creating Policies](/v3/guides/orders/settings/policies#creating-a-policy)
* [Editing Policies](/v3/guides/orders/settings/policies#managing-policies)
## Alerts
The Order Alerts setup page displays an overview of the currently configured order alerts. Order alerts are used to monitor trailing metrics that can affect revenue and efficiency such as returns, cancellations, reorder rates, payment failures, and more.
* [Creating Order Alerts](/v3/guides/orders/settings/order-alerts#creating-order-alerts)
* [Editing Order Alerts](/v3/guides/orders/settings/order-alerts#editing-an-alert)
# Shipping Methods
Shipping methods determine how products are delivered to your customers. Examples of shipping methods include domestic, international, free shipping, and express delivery.
Shipping method costs are in addition to the cost of products in the cart and any applicable taxes.
To navigate to the **Shipping methods** page, click on **Settings** in the left menu and then select **Shipping Methods**.
## Shipping Methods Table
The Shipping methods table displays a list of all previously created shipping methods.
You can search for a specific shipping method by entering the shipping method name in the search bar and clicking enter.
| Field | Description |
| ------------------------ | -------------------------------------------------------------------------- |
| **Shipping method name** | The carrier name assigned when creating the shipping method. |
| **Cost** | The shipment cost and currency assigned when creating the shipping method. |
## Creating Shipping Methods
1. In the left menu, click **Orders** > **Settings** > **Shipping Methods**.
The **Shipping Methods** page is displayed.
2. Click **Create Shipping method**.
The **Create Shipping method** page is displayed.
3. In the **Carrier name** field, enter a name.
4. (Optional) In the **Description** field, enter a description.
5. In the **Shipping method code** field, enter a shipping method code.
For example, Same Day Delivery (SDD) or Ship To Home (STH).
6. In the **Shipment cost** field, enter the shipping cost.
7. In the **Shipment tax code** field, enter the tax code associated with the shipping method.
Note that this fields value depends on the applicable tax laws and regulations in each jurisdiction you ship from and should be provided by your tax processing service.
8. (Optional) In the **Region** field, enter a State or region of delivery.
9. In the **Address Type** field, select an address type.
Certain carriers or methods are sometimes required depending on the address type entered at checkout. For example, when fulfilling orders to an address type with Army Post Office (APO) or Military Post Office (MPO) a unique method or specific carrier might be required.
10. In the **Channel** field, select a channel.
For example, if the method was for international order fulfillment, you would select the international channel.
fabric has two default channels, Canada and USA.
11. In the **Currency** field, select a three-letter currency code.
12. In the **Carrier SLA** section, do the following:
* In the **Minimum days to deliver** field, enter the minimum duration required to deliver an order starting from the time the order is placed.
* In the **Maximum days to deliver** field, enter the maximum duration required to deliver an order starting from the time the order is placed.
* In the **Cut-off time** field, enter the time at which the current order day is over. This is used as the daily deadline for a warehouse to process the last order.
**Note**: If an order is delivered after the cutoff time, it's considered as delivered the next working day. For example, if the cutoff time is set to 5:00 PM, any orders delivered after this time will be considered to have been delivered the following business day.
13. In the **Freight Options & Restrictions** section, enter the following minimum and maximum dimensions for the shipping method:
* Enter a minimum & maximum weight.
* Enter a minimum & maximum length.
* Enter a minimum & maximum width.
* Enter a minimum & maximum height.
14. In the **Product Selection** section, choose whether the shipping and carrier rules apply to specific products or to a purchase’s entire cart value.
* **To specific products**: Use the **Add Products** button to select eligible products.
* **Cart Value**: Enter a minimum and maximum cart value.
15. Click **Save**.
The shipping method is created and added to the **Shipping method** table.
## Editing Shipping Methods
1. In the left menu, click **Orders** > **Settings** > **Shipping Methods**.
The **Shipping Method** page is displayed.
2. In the **Shipping method name** column of the shipping methods table, click a method.
The **Edit Shipping method** page is displayed.
3. Make your edits.
For more information on the shipping method fields, follow the instructions in the [Creating Shipping methods](/v3/guides/orders/settings/creating-shipping-methods) document.
4. Click **Save**.
The edits are saved.
## Delete a Shipping Method
1. In the left menu, click **Orders** > **Settings** > **Shipping Methods**.
The **Shipping Method** page is displayed.
2. Mouse over the shipping method you want to delete.
Two icons appear, edit and delete.
3. Click the delete icon.
A confirmation window is displayed.
4. Click **Yes, Delete**.
The shipping method is deleted and is no longer visible in the shipping method table.
## Related Topics
* [Order Attributes](/v3/guides/orders/settings/order-attributes)
* [Backorders and Preorders](/v3/guides/orders/settings/backorder-preorder)
* [Order Policies](/v3/guides/orders/settings/policies)
* [Order Alerts](/v3/guides/orders/settings/order-alerts)
# Adding a Boolean Attribute
### Overview
Boolean attributes allow you to add yes or no, or true or false information to an item.
### Prerequisites
Ensure you have administrator privileges to fabric **Product Catalog**. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product Catalog > Attributes > Product**.
The **Product Attributes** page is displayed.
2. Click **New Attribute**.
The **Create product attribute** page is displayed.
3. Select **Boolean**.
4. In the **Attribute title** filed, enter a name for the attribute.
5. (Optional) In the **Description** field, enter a description for the attribute.
6. In the **Is this attribute mandatory?** field, select one of the following:
* **Yes**: Specifies that the attribute is mandatory when creating an item.
* **No**: Specifies that the attribute isn't mandatory when creating an item. This is the default selection.
7. Click **Save**.
The boolean attribute with the specified settings is created.
### Related Topics
* [Product Attributes Overview](/v3/guides/product-catalog/attributes/product-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute)
* [Adding a List of Values Attribute](/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute)
* [Adding a Serial Attribute](/v3/guides/product-catalog/attributes/adding-a-serial-attribute)
* [Importing Product Attributes](/v3/guides/product-catalog/attributes/importing-product-attributes)
* [Managing Product Attributes](/v3/guides/product-catalog/attributes/managing-product-attributes)
# Adding a Boolean Attribute
### Overview
Boolean attributes allow you to add yes or no, or true or false information to a category.
### Prerequisites
Ensure you have administrator privileges to fabric Product Catalog. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product Catalog > Attributes > Category**.\
The **Category Attributes** page is displayed.
2. Click **New Attribute**.\
The **Create category attribute** page is displayed.
3. Select **Boolean**.
4. In the Attribute title field, enter a name for the attribute.
5. Click **Save**.
The boolean attribute is created.
### Related Topics
* [Category Attributes Overview](/v3/guides/product-catalog/attributes/category-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute2)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute-category)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute2)
* [Managing Category Attribute](/v3/guides/product-catalog/attributes/managing-category-attributes)
# Adding a Date Attribute
### Overview
Date attributes allow you to add date-related information about an item.
### Prerequisites
Ensure you have administrator privileges to fabric **Product Catalog**. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product > Attributes > Product**.
The **Product Attributes** page is displayed.
2. Click **New Attribute**.
The **Create product attribute** page is displayed. The **Text** attribute type is selected by default.
3. Select **Date**.
4. In the **Attribute title** filed, enter a name for the attribute.
5. In the **Select date format** field, select a date format.
Note that bulk import of the date attribute type uses the date format you select here. The selected date format can't be changed. If the format needs to be changed, you must delete the attribute and create it again using the required format.
6. (Optional) In the **Description** field, enter a description for the attribute.
7. In the **Use JavaScript formula to calculate value** field, select one of the following:
* **Yes**: Specifies that the value for the attribute is calculated using the JavaScript formula that you provide in the **Calculation formula** field. An example of a JavaScript formula is `(async () => await attribute('id') *10)()`. When you select **Yes**, the **Calculation formula** and **Allow manual overwrite** fields are displayed. Do the following to complete the settings:
1. In the **Calculation formula** field, enter a JavaScript formula.
2. In the **Allow manual overwrite** field, choose one of the following:
* **Yes**: Specifies that you can manually overwrite the attribute value. When the **Use JavaScript formula to calculate value** setting is enabled, the system determines the value based on your provided formula. However, if you enable the manual overwrite option, you can replace the system-calculated value with a custom value during product attribute setup. For more information, see the [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item) section.
* **No**: Specifies that you can't manually overwrite the attribute value. This is the default setting.
* **No**: Specifies that the attribute value isn't calculated using a JavaScript formula.
8. In the **Validations** field, select one of the following:
* **None**: Specifies that no custom validation is required for the attribute. This is the default setting.
* **Custom JavaScript**: Specifies that the JavaScript you enter in the **Validation formula** field is used to validate the attribute.
The **Validation formula** field is displayed.
* In the **Validation formula** field, enter a JavaScript validation formula.
9. In the **Is this attribute mandatory?** field, select one of the following:
* **Yes**: Specifies that the attribute is mandatory when creating an item.
* **No**: Specifies that the attribute isn't mandatory when creating an item. This is the default selection.
10. Click **Save**.
The date attribute with the specified settings is created.
### Related Topics
* [Product Attributes Overview](/v3/guides/product-catalog/attributes/product-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute)
* [Adding a List of Values Attribute](/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute)
* [Adding a Serial Attribute](/v3/guides/product-catalog/attributes/adding-a-serial-attribute)
* [Importing Product Attributes](/v3/guides/product-catalog/attributes/importing-product-attributes)
* [Managing Product Attributes](/v3/guides/product-catalog/attributes/managing-product-attributes)
# Adding a Date Attribute
### Overview
Date attributes allow you to add date-related information about a category.
### Prerequisites
Ensure you have administrator privileges to fabric **Product Catalog**. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product > Attributes > Category**.
The **Category Attributes** page is displayed.
2. Click **New Attribute**.
The **Create category attribute** page is displayed. The **Text** attribute type is selected by default.
3. Select **Date**.
4. In the **Attribute title** field, enter a name for the attribute.
5. In the **Select date format** field, select a date format.
Note that bulk import of the date attribute type uses the date format selected here. The selected date format can't be changed. If the format needs to be changed, you must delete the attribute and create it again using the required format.
6. Click **Save**.
The date attribute with the specified settings is created.
### Related Topics
* [Category Attributes Overview](/v3/guides/product-catalog/attributes/category-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute2)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute-category)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute2)
* [Managing Category Attribute](/v3/guides/product-catalog/attributes/managing-category-attributes)
# Adding a List of Values Attribute
### Overview
List of values attributes allow you to create dropdown menus with defined values across the product list. There are two types of list of values attributes:
* **Single select**: Specifies that the end user can select one option in the list of values.
* **Multiple select**: Specifies that the end user can make multiple selections from the list of values.
### Prerequisites
Ensure you have administrator privileges to fabric **Product Catalog**. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product Catalog > Attributes > Product**.
The Product Attributes page is displayed.
2. Click **New Attribute**.
The Create product attribute page is displayed.
3. Select **List of values**.
4. (Optional) To enable localization for the attribute, set the **Localize this attribute** toggle to one of the following:
* **On**: The attribute title is localized. The **Title and description** and **Business validations** sections display additional fields corresponding to the languages depending on the internationalization settings.
* **Off**: The attribute title isn't localized.
5. In the **Attribute title (primary)** field, enter a name for the attribute.
If localization is enabled in step 4, enter the localized attribute titles in the Attribute title field for each corresponding internationalization setting.
6. (Optional) In the **Description** field, enter a description for the attribute.
7. In the **Type of list** field, select one of the following:
* **Single select**: Specifies that the end user can select one option in the list of values.
* **Multiple select**: Specifies that the end user can make multiple selections from the list of values.
8. In the **Enter values** field, enter each value in the list, separated by a comma.
If localization is enabled in step 4, enter the localized values for each corresponding internationalization setting.
9. In the **Use JavaScript formula to calculate value** field, select one of the following:
* **Yes**: Specifies that the value for the attribute is calculated using the JavaScript formula that you provide in the **Calculation formula** field. An example of a JavaScript formula is (async () => await attribute('id') \* 10)(). When you select **Yes**, the **Calculation formula** and **Allow manual overwrite fields** are displayed. Do the following to complete the settings:
* In the **Calculation formula** field, enter a JavaScript formula.
* In the **Allow manual overwrite** field, choose one of the following:
* **Yes**: Specifies that you can manually overwrite the attribute value. When the **Use JavaScript formula to calculate value** setting is enabled, the system determines the value based on your provided formula. However, if you enable the manual overwrite option, you can replace the system-calculated value with a custom value during product attribute setup. For more information, see the [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item) section.
* **No**: Specifies that you can't manually overwrite the attribute value. This is the default setting.
* **No**: Specifies that the attribute value isn't calculated using a JavaScript formula.
10. In the Validations field, select one of the following:
* **None**: Specifies that no custom validation is required for the attribute. This is the default setting.
* **Custom JavaScript**: Specifies that the JavaScript you enter in the **Validation formula** field is used to validate the attribute. The **Validation formula** field is displayed.
* In the **Validation formula** field, enter a JavaScript validation formula.
11. In the **Is this attribute mandatory?** field, select one of the following:
* **Yes**: Specifies that the attribute is mandatory when creating an item.
* **No**: Specifies that the attribute isn't mandatory when creating an item. This is the default selection.
12. Click **Save**.
The list of values attribute with the specified settings is created.
### Related Topics
* [Product Attributes Overview](/v3/guides/product-catalog/attributes/product-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute)
* [Adding a Serial Attribute](/v3/guides/product-catalog/attributes/adding-a-serial-attribute)
* [Importing Product Attributes](/v3/guides/product-catalog/attributes/importing-product-attributes)
* [Managing Product Attributes](/v3/guides/product-catalog/attributes/managing-product-attributes)
# Adding a Number Only Attribute
### Overview
Number attributes allow you to add number-based information about an item. Use this attribute type when the value is always a number.
### Prerequisites
Ensure you have administrator privileges to fabric **Product Catalog**. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product Catalog > Attributes > Product**.\
The **Product Attributes** page is displayed.
2. Click **New Attribute**.\
The **Create product attribute** page is displayed.
3. Select **Number**.
4. In the **Attribute title** field, enter a name for the attribute.
5. (Optional) In the **Description** field, enter a description for the attribute.
6. In the **Use JavaScript formula to calculate value** field, select one of the following:
* **Yes**: Specifies that the value for the attribute is calculated using the JavaScript formula that you provide in the **Calculation formula** field. An example of a JavaScript formula is `(async () => await attribute('id') *10)()`. When you select **Yes**, the **Calculation formula** and **Allow manual overwrite** fields are displayed. Do the following to complete the settings:
1. In the **Calculation formula** field, enter a JavaScript formula.
2. In the **Allow manual overwrite** field, choose one of the following:
* **Yes**: Specifies that you can manually overwrite the attribute value. When the **Use JavaScript formula to calculate value** setting is enabled, the system determines the value based on your provided formula. However, if you enable the manual overwrite option, you can replace the system-calculated value with a custom value during product attribute setup. For more information, see the [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item) section.
* **No**: Specifies that you can't manually overwrite the attribute value. This is the default setting.
* **No**: Specifies that the attribute value isn't calculated using a JavaScript formula.
7. In the **Do you want this attribute to accept decimal values?** field, select one of the following:
* **Yes**: Specifies that the field does accept decimal values.
* **No**: Specifies that the field doesn't accept decimal values.
8. In the **Is this attribute mandatory?** field, select one of the following:
* **Yes**: Specifies that the attribute is mandatory when creating an item.
* **No**: Specifies that the attribute isn't mandatory when creating an item. This is the default selection.
9. Click **Save**.
The number only attribute with the specified settings is created.
### Related Topics
* [Product Attributes Overview](/v3/guides/product-catalog/attributes/product-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute)
* [Adding a List of Values Attribute](/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute)
* [Adding a Serial Attribute](/v3/guides/product-catalog/attributes/adding-a-serial-attribute)
* [Importing Product Attributes](/v3/guides/product-catalog/attributes/importing-product-attributes)
* [Managing Product Attributes](/v3/guides/product-catalog/attributes/managing-product-attributes)
# Adding a Number Only Attribute
### Overview
Number attributes allow you to add number-based information about a category. Use this attribute type when the value is always a number.
### Prerequisites
Ensure you have administrator privileges to fabric **Product Catalog**. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product > Attributes > Category**.\
The **Category Attributes** page is displayed.
2. Click **New Attribute**.\
The **Create category attribute** page is displayed.
3. Select **Number Only**.
4. In the **Attribute title** field, enter a name for the attribute.
5. Click **Save**.
The number-only attribute is created.
### Related Topics
* [Category Attributes Overview](/v3/guides/product-catalog/attributes/category-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute2)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute2)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute2)
* [Managing Category Attribute](/v3/guides/product-catalog/attributes/managing-category-attributes)
# Adding a Serial Attribute
### Overview
Serial attributes allow you to create an auto increment number-type attribute. You can specify the starting number and the increment interval.
### Prerequisites
Ensure you have administrator privileges to fabric **Product Catalog**. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product Catalog > Attributes > Product**.\
The **Product Attributes** page is displayed.
2. Click **New Attribute**.\
The **Create product attribute** page is displayed.
3. Select **Serial**.
4. In the **Attribute title** filed, enter a name for the attribute.
5. (Optional) In the **Description** field, enter a description for the attribute.
6. In the **Start serial with** field, enter the beginning serial number.
7. In the **Increment serial number by** field, enter the interval by which each subsequent number increases.
8. In the **Is this attribute mandatory?** field, select one of the following:
* **Yes**: Specifies that the attribute is mandatory when creating an item.
* **No**: Specifies that the attribute isn't mandatory when creating an item. This is the default selection.
9. Click **Save**.
The serial attribute with the specified settings is created.
### Related Topics
* [Product Attributes Overview](/v3/guides/product-catalog/attributes/product-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute)
* [Adding a List of Values Attribute](/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute)
* [Importing Product Attributes](/v3/guides/product-catalog/attributes/importing-product-attributes)
* [Managing Product Attributes](/v3/guides/product-catalog/attributes/managing-product-attributes)
# Adding a Text Attribute
### Overview
Text attributes allow you to add text-based information about an item, such as a description or a code snippet. You can use any combination of text, numbers, or special characters for this attribute type.
### Prerequisites
Ensure you have administrator privileges to fabric **Product Catalog**. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product > Attributes > Product**.\
The **Product Attributes** page is displayed.
2. Click **New Attribute**.\
The **Create product attribute** page is displayed. The **Text** attribute type is selected by default.
3. In the **Attribute title (primary)** field, enter a name for the attribute.\
If localization is enabled in step 3, enter the localized attribute titles in the **Attribute title** field for each corresponding internationalization setting.
4. (Optional) In the **Description** field, enter a description for the attribute.
5. In the **Type of text** field, select one of the following:
* Small text: For single-line text attributes.
* Text Area: For multi-line text attributes.
* HTML: For text area attributes that support HTML.
6. In the **Use JavaScript formula to calculate value** field, select one of the following:
* **Yes**: Specifies that the value for the attribute is calculated using the JavaScript formula that you provide in the **Calculation formula** field. An example of a JavaScript formula is `(async () => await attribute('id') *10)()`. When you select **Yes**, the **Calculation formula** and **Allow manual overwrite** fields are displayed. Do the following to complete the settings:
1. In the **Calculation formula** field, enter a JavaScript formula.
2. In the **Allow manual overwrite** field, choose one of the following:
* **Yes**: Specifies that you can manually overwrite the attribute value. When the **Use JavaScript formula to calculate value** setting is enabled, the system determines the value based on your provided formula. However, if you enable the manual overwrite option, you can replace the system-calculated value with a custom value during product attribute setup. For more information, see the [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item) section.
* **No**: Specifies that you can't manually overwrite the attribute value. This is the default setting.
* **No**: Specifies that the attribute value isn't calculated using a JavaScript formula.
7. In the **Is this attribute mandatory?** field, select one of the following:
* **Yes**: Specifies that the attribute is mandatory when creating an item.
* **No**: Specifies that the attribute isn't mandatory when creating an item. This is the default selection.
8. Click **Save**.
The text attribute with the specified settings is created.
### Related Topics
* [Product Attributes Overview](/v3/guides/product-catalog/attributes/product-attributes-overview)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute)
* [Adding a List of Values Attribute](/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute)
* [Adding a Serial Attribute](/v3/guides/product-catalog/attributes/adding-a-serial-attribute)
* [Importing Product Attributes](/v3/guides/product-catalog/attributes/importing-product-attributes)
* [Managing Product Attributes](/v3/guides/product-catalog/attributes/managing-product-attributes)
# Adding a Text Attribute
### Overview
Text attributes allow you to add text-based information about a category, such as a description or a code snippet. You can use any combination of text, numbers, or special characters for this attribute type.
### Prerequisites
Ensure you have administrator privileges to fabric **Product Catalog**. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product Catalog > Attributes > Category**.
The **Category Attributes** page is displayed.
2. Click **New Attribute**.
The **Create category attribute page** is displayed. The **Text** attribute type is selected by default.
3. In the **Attribute title** field, enter a name for the attribute.
4. In the **Type of text** field, select one of the following:
* **Small text**: For single-line text attributes.
* **Text Area**: For multi-line text attributes.
* **HTML**: For text area attributes that support HTML.
5. Click **Save**.
The text attribute with the specified settings is created.
### Related Topics
* [Category Attributes Overview](/v3/guides/product-catalog/attributes/category-attributes-overview)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute-category)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute2)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute2)
* [Managing Category Attribute](/v3/guides/product-catalog/attributes/managing-category-attributes)
# Category Attributes Overview
### Overview
Category attributes define specific characteristics of a category or collection, such as images and SEO tags. Category attributes added to higher-level categories are inherited by subcategories. Category attributes added to Collections are unique for each collection node and aren't inherited by sub-collection nodes.
### Attribute Types
fabric supports the following attribute types for storing category information:
* **Text:** A sequence of characters. You may store any combination of text, numbers, or special characters. Text attribute has three subtypes:
* Small text: For single-line text attributes.
* Text Area: For multi-line text attributes.
* HTML: For text area attributes that support HTML.
* **Number Only:** An attribute type for values that are always a number.
* **Date:** All date-related formats. Bulk import of the date attribute uses the date format selected when the attribute was created. Once selected, the date format can't be changed. If the format needs to be changed, you must delete the attribute and create it again using the required format.
* **Boolean:** A Boolean value (true/false) for a category attribute. While importing attributes from an external system, make sure the true or false values are specified for all Boolean attribute types.
For each attribute type, certain fields are optional, while others are required. Failure to provide required fields will result in an "Unable to create attribute" error message.
The following table shows the attribute types and their properties. This will help you determine the mandatory and optional properties of an attribute type. To ensure data quality, set up one or more validations based on the selected attribute type.
| Attribute Type | Localize this attribute | Attribute title | Description | Use JavaScript to calculate value | Validations | Is this attribute mandatory? | Type of text | Date Format | Decimal |
| -------------- | ----------------------- | --------------- | ----------- | --------------------------------- | ----------- | ---------------------------- | ------------ | ----------- | -------- |
| Text | Optional | Required | Optional | Optional | Optional | Required | Required | N/A | N/A |
| Number Only | Optional | Required | Optional | Optional | Optional | Required | N/A | N/A | Optional |
| Date | Optional | Required | Optional | Optional | Optional | Required | N/A | Required | N/A |
| Boolean | Optional | Required | Optional | Optional | Optional | Required | N/A | N/A | N/A |
### Related Topics
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute2)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute-category)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute2)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute2)
* [Managing Category Attribute](/v3/guides/product-catalog/attributes/managing-category-attributes)
# Importing Product Attributes
### Overview
Product attributes are specific product descriptors that define characteristics such as size, color, or material. This document covers the process of importing multiple product attributes using a CSV file. You also have the option to add product attributes manually.
### CSV File Guidelines
Product attributes can be imported using CSV files exclusively, as fabric doesn't support other data or file formats. Here are some essential points to keep in mind:
* The headers in the first row of the CSV file should match the attribute titles.
* While attribute titles aren't case-sensitive, maintaining case consistency with the original attribute titles is recommended.
* Empty rows and columns are ignored.
* We recommend downloading the template file to serve as a guide when creating your own CSV file for import, minimizing errors during the process.
### Attribute Data Formatting
When preparing your CSV file for import, ensure that the product attribute data format aligns with the column requirements. Different columns have specific data input requirements:
| **Attribute** | **Description** |
| --------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Attribute Title** | The name of the attribute. |
| **Type of Attribute** | Specifies the attribute type, such as text, number, date, Boolean, serial, or list of values. |
| **Description** *(Optional)* | Provides additional details about the attribute. |
| **Decimal** | Indicates if the attribute allows decimal values. Valid values are **true** (allows decimals) or **false** (only whole numbers). Applicable only to number-type attributes. The default value is **true**. |
| **Min** *(Optional)* | Defines the minimum value for validation. Applicable only to number-type attributes. |
| **Max** *(Optional)* | Defines the maximum value for validation. Applicable only to number-type attributes. |
| **Date Format** | Specifies the required date format, such as MM/DD/YYYY, MM-DD-YYYY, DD/MM/YYYY, DD-MM-YYYY, YYYY/MM/DD, or YYYY-MM-DD. This is mandatory for date-type attributes; otherwise, the attribute can't be imported. |
| **Calculation Formula** *(Optional)* | JavaScript formula used to calculate the attribute value. |
| **Validations Formula** *(Optional)* | JavaScript formula used to define business validation rules for the attribute. |
| **Mandatory** | Specifies whether the attribute is required. Valid values are **true** (mandatory) or **false** (optional). |
| **Start With** | Defines the starting value for a serial-type attribute. Applicable only to serial-type attributes. |
| **Increment by** | Specifies the increment value for a serial-type attribute. |
| **Options Select Type (List of Value)** | Determines if the attribute is a list of values. Valid values are **true** (list of values) or **false** (not a list). To specify options, use additional columns (Value 1, Value 2, Value 3). |
### Prerequisites
Ensure that you have access to fabric **Product Catalog** in Copilot.
### Procedure
1. In the left menu, click **Product Catalog** > **Attributes** > **Product**.
The Product Attributes page is displayed.
2. Click **Import**.
The Import CSV file window is displayed, providing a link to download an example template for the CSV file.
3. To import a CSV file, choose one of the following options:
* Drag and drop the CSV file into the window.
* Click **Select a File** from your computer.
4. Click **Import file**.
The CSV file is imported, and the product attributes are added.
### Related Topics
* [Product Attributes Overview](/v3/guides/product-catalog/attributes/product-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-attribute)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute)
* [Adding a List of Values Attribute](/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute)
* [Adding a Serial Attribute](/v3/guides/product-catalog/attributes/adding-a-serial-attribute)
* [Managing Product Attributes](/v3/guides/product-catalog/attributes/managing-product-attributes)
# Managing Category Attributes
### Overview
This document covers the process of editing and deleting category attributes.
#### Editing Product Attributes
1. In the left menu, click **Product Catalog > Attributes > Category**.\
The **Category Attributes** page is displayed.
2. Click the category attribute that you want to edit.\
The edit attribute type page is displayed.
3. Edit the attributes as required.
4. Click **Save**.
The category attribute is saved.
#### Deleting a Category Attribute
1. In the left menu, click **Product Catalog > Attributes > Category**.\
The **Category Attributes** page is displayed.
2. Click a Category attribute that you want to delete.\
The edit attribute type page is displayed.
3. Click **Delete**.\
The **Delete attribute** popup is displayed.
4. Click **Yes, Delete**.
The category attribute is deleted.
### Related Topics
* [Category Attributes Overview](/v3/guides/product-catalog/attributes/category-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute2)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute-category)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute2)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute2)
# Managing Product Attributes
### Overview
This document covers the process of editing and deleting product attributes.
### Prerequisites
Ensure you have created or imported at least one product attribute.
#### Editing Product Attributes
1. In the left menu, click **Product Catalog > Attributes > Product**.
The **Product Attributes** page is displayed.
2. Click the product attribute that you want to edit.
The edit attribute type page is displayed.
3. Edit the attributes as required.
4. Click **Save**.
The product attribute is saved.
#### Deleting a Product Attribute
1. In the left menu, click **Product Catalog > Attributes > Product**.
The Product Attributes page is displayed.
2. Click a product attribute that you want to delete.
The edit attribute type page is displayed.
3. Click **Delete**.
The **Delete attribute** popup is displayed.
4. Click **Yes, Delete**.
The product attribute is deleted.
### Related Topics
* [Product Attributes Overview](/v3/guides/product-catalog/attributes/product-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-attribute)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute)
* [Adding a List of Values Attribute](/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute)
* [Adding a Serial Attribute](/v3/guides/product-catalog/attributes/adding-a-serial-attribute)
* [Importing Product Attributes](/v3/guides/product-catalog/attributes/importing-product-attributes)
# Product Attributes Overview
### Overview
Item attributes are used to define product characteristics. For example, a product name, an identity number, and a product description are all common attributes of a product.
Attributes are key-value pairs, such as *Color: red*, that hold information for each property of the product.
### Attribute Types
fabric supports the following types of attributes for storing product information:
* **Text:** A sequence of characters. You may store any combination of text, numbers, or special characters. Text attribute has three subtypes:
* Small text: For single-line text attributes.
* Text Area: For multi-line text attributes.
* HTML: For text area attributes that support HTML.
* **Number Only:** An attribute type for values that are always a number.
* **Date:** All date-related formats. Bulk import of the date attribute uses the date format selected when the attribute was created. Once selected, the date format can't be changed. If the format needs to be changed, you must delete the attribute and create it again using the required format.
* **Boolean:** A Boolean value (true/false) for a product attribute. While importing attributes from an external system, make sure the true or false values are specified for all Boolean attribute types.
* **List of Values:** A dropdown menu for product attributes that have defined values across the product list. Supports single selection or multiple selection from the dropdown.
* **Serial:** An auto increment number-type attribute. You can specify the starting number and what the increment is.
The following table shows the attribute types and their properties. This will help you determine the mandatory and optional properties of an attribute type. To ensure data quality, set up one or more validations based on the selected attribute type.
| **Attributes** | **Text** | **Number Only** | **Date** | **Boolean** | **List of Values** | **Serial** |
| --------------------------------- | -------- | --------------- | -------- | ----------- | ------------------ | ---------- |
| Localize this attribute | Optional | Optional | Optional | Optional | Optional | Optional |
| Attribute title | Required | Required | Required | Required | Required | Required |
| Description | Optional | Optional | Optional | Optional | Optional | Optional |
| Use JavaScript to calculate value | Optional | Optional | Optional | Optional | Optional | N/A |
| Validations | Optional | Optional | Optional | Optional | Optional | N/A |
| Is this attribute mandatory? | Required | Required | Required | Required | Required | Required |
| Type of text | Required | N/A | N/A | N/A | N/A | N/A |
| Date Format | N/A | N/A | Required | N/A | N/A | N/A |
| Decimal | N/A | Optional | N/A | N/A | N/A | N/A |
| Type of list | N/A | N/A | N/A | N/A | Required | N/A |
### Calculation Formulas
Businesses often require dynamically calculated attributes based on existing values. For example:
1. You can configure a product's display name to be *Product Name* + *by* + *Brand Name*, Instead of naming each product or variant individually. This formula automatically creates names for the products.
2. The area of a rug can be calculated by multiplying width with length and the price per square foot can be calculated by dividing the price attribute value by the area attribute value.
3. You can calculate weight per count by dividing the weight of the product by the total count of items inside the box.
With low-code JavaScript formulas, these attribute values can be calculated automatically. Here are some frequently used formulas:
| Operation | Calculation Formula |
| ----------- | -------------------------------------------------------------------------------------------------------- |
| Divide | `(async ()=> await attribute('attribute 1 ID') / await attribute('volume'))() ` |
| Multiply | `(async ()=> await attribute('attribute ID') \* 10)()` |
| Sum | `(async ()=> await attribute('attribute 1 ID') + await attribute('attribute 2 ID'))() ` |
| Subtract | `(async ()=> await attribute('attribute 1 ID') - await attribute('attribute 2 ID'))()` |
| Concatenate | `(async ()=> await attribute('attribute 1 ID') + " followed by " + await attribute('attribute 2 ID'))()` |
Note that the values in double quotes (`" "`) represent the title of the reference attribute and refer to the absolute value of the attribute being used for calculation.
### Validation Formulas
you can specify business validations on attributes using a low-code JavaScript formula and ensure data integrity and quality. This operation doesn't manipulate data, only validates fields for the attributes.
| Validation Type | Validation Formula |
| -------------------------------------------- | ----------------------------------------------------------------------------------------------- |
| Number Validation | `(async ()=> await attribute() >=0 && await attribute()<=20 && await attribute()%0.25 === 0)()` |
| String Validation | `(async ()=> (await attribute()).length < 200)()` |
| Date (Greater than Equal to current Date) | `(async ()=> await attribute() >= new Date())()` |
| Date (Greater than Equal to particular Date) | `(async ()=> await attribute() >= new Date('02/14/2021'))()` |
Formulas are based on JavaScript syntax, so you can use all inbuilt JavaScript functions.
For example, values given as a string can be stored as integers by using formulas such as `(async () => parseFloat(await attribute('Height (in)')) - parseFloat(await attribute('Weight (in)')) )()`.
### Related Topics
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-attribute)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute)
* [Adding a List of Values Attribute](/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute)
* [Adding a Serial Attribute](/v3/guides/product-catalog/attributes/adding-a-serial-attribute)
* [Importing Product Attributes](/v3/guides/product-catalog/attributes/importing-product-attributes)
* [Managing Product Attributes](/v3/guides/product-catalog/attributes/managing-product-attributes)
# Searching and Sorting Category Attributes
### Overview
The search, filter, and sort options on the **Category Attributes** page allow you to refine the list of category attributes or find a specific category attribute.
You can use the filter option only if you have multiple category attributes.
#### To search for a specific category attribute, do the following:
1. In the left menu, click **Product Catalog > Attribute > Category**.
The **Category Attributes** page is displayed.
2. In the search field, enter a search term and press **Enter**.
The results are displayed.
#### To sort the list of category attributes, do the following:
1. In the left menu, click **Product Catalog > Attributes > Category**.
The Category Attributes page is displayed.
2. Click one of the column headers to sort the list of category attributes.
Sortable headers are **Attribute Title**, **Attribute Type**, **Last Modified**, and **Mandatory/Optional**.
The category attributes list is sorted by the selected header.
### Related Topics
* [Category Attributes Overview](/v3/guides/product-catalog/attributes/category-attributes-overview)
* [Adding a Text Attribute](/v3/guides/product-catalog/attributes/adding-a-text-attribute2)
* [Adding a Number Only Attribute](/v3/guides/product-catalog/attributes/adding-a-number-only-attribute-category)
* [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute2)
* [Adding a Boolean Attribute](/v3/guides/product-catalog/attributes/adding-a-boolean-attribute2)
* [Managing Category Attribute](/v3/guides/product-catalog/attributes/managing-category-attributes)
# Searching and Sorting Product Attributes
### Overview
The search, filter, and sort options on the **Product Attributes** page allow you to refine the list of product attributes or find a specific product attribute.
You can use the filter option only if you have multiple product attributes.
### Prerequisites
Ensure you have created or imported multiple product attribute.
#### To search for a specific product attribute, do the following:
1. In the left menu, click **Product Catalog > Attribute > Product**.
The **Product Attributes** page is displayed.
2. In the search field, enter a search term and press **Enter**.
The results are displayed.
#### To sort the list of product attributes, do the following:
1. In the left menu, click **Product Catalog > Attributes > Product**.
The Product Attributes page is displayed.
2. Click one of the column headers to sort the list of product attributes.
Sortable headers are **Attribute Title**, **Attribute Type**, **Last Modified**, and **Mandatory/Optional**.
The product attributes list is sorted by the selected header.
### Related Topics
* [Product Attributes Overview](/v3/guides/product-catalog/attributes/product-attributes-overview)
* [Managing Product Attributes](/v3/guides/product-catalog/attributes/managing-product-attributes)
# Background Jobs
With **Background Jobs**, you can view the history of all the files you have imported and exported in **Product Catalog**, as well as see real-time progress updates for these jobs.
The summary of the job includes its status, type, and the date it was started and completed. The overview page also includes a link to download the original file.
This feature enhances operational efficiency for users, such as Merchandising Managers and SI Developers, who manage product information.
All import jobs are kept on file in your account for access later. The details of export jobs are only held for seven days.
### Related Topics
* [Viewing Background Jobs History](/v3/guides/product-catalog/background-jobs/viewing-background-jobs-history)
* [Searching, Filtering, and Sorting Background Jobs](/v3/guides/product-catalog/background-jobs/searching--filtering--and-sorting-background-jobs)
# Managing Background Jobs
The search, filter, and sort options on the **Background Jobs** page allow you to refine the list of items, find a specific job, or cancel a job.
The **Background Jobs** page displays the following information:
| Column Header | Description |
| ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Job ID** | The unique identifier of the job. |
| **File name** | The name of the file that was imported. This column is only available on the **Import** tab. |
| **Import type** | The **Import type** column is only available on the **Import** tab. It displays the type of information that was exported, whether item, bundle, item variant, attribute, category, or collection. |
| **Export type** | The **Export type** column is only available on the **Export** tab. It displays the type of information that was exported, whether item, bundle, item variant, attribute, category, or collection. |
| **Job type** | The Job type column is only available on the **Other** tab. It displays the following information:
- **Product Update**: Collection Evaluation: When a product is updated, all collections are evaluated to identify which collection the product will be a part of.
- **Category Update**: Product Attribute: A job that's triggered every 20 minutes (unless the account is configured for a different time period) when product attributes assigned to a category are assigned or removed.
- **Collection Update**: Product Evaluation: When a collection is updated or created, this job evaluates all the rules against products and indexes all the products.
- **Product Update**: Category Assignment: Users can assign products to a different category in bulk. This job tracks those bulk category reassignments on products.
- **Product Denormalization**: fabric’s downstream domains, such as Orders, Offers, and Cart and Checkout, use denormalized data.
This job handles all the Product Catalog events and identifies a list of products that are updated due to these events and writes the denormalized data to OpenSearch for use downstream. |
| **Message** | The system-generated message that gives one of the following outcomes of the background job:
- **Completed successfully**: The job is complete with no errors.
- **Partially completed with errors**: The job is partially complete and contains errors.
- **File contains errors**: The job is complete and contains errors.
- **Failed with Errors**: The job couldn't be completed because of major errors.
This message can only appear for jobs on the Other tab. |
| **Status** | The status of the job. Statuses are color-coded and defined as follows:
- **Scheduled (grey)**: Job is scheduled to begin.
- **In progress (green)**: Job is currently running.
- **Completed (green)**: Job is complete with no errors.
- **Completed (orange)**: Job is complete but some errors were identified.
- **Failed (red)**: Job couldn't be completed and no rows were processed due to major errors. |
| **Time started** | The date and time the job began. |
| **Time completed** | The date and time the job completed. |
### Searching Jobs
1. In the left menu, click **Product Catalog > Background Jobs**.
The **Import** tab on the **Background Jobs** page is displayed.
2. Select the type of jobs to search by doing one of the following:
* To search imports, stay on the **Imports** tab.
* To search exports, click the **Exports** tab.
* The **Exports** tab is displayed.
* To search other jobs, click the **Other** tab.
* The **Other** tab is displayed.
3. Type a search term into the search bar and press **Enter**.
The search field accepts the following queries:
* Imports: Partial file name, full file name, or full job ID.
* Exports: Partial file name, full file name, or full job ID.
* Other jobs: Full job ID.
The results are displayed.
### Filtering Jobs
1. In the left menu, click **Product Catalog > Background Jobs**.\
The **Import** tab on the **Background Jobs** page is displayed.
2. Select the type of jobs to filter by doing one of the following:
* To filter imports, stay on the **Imports** tab.
* To filter exports, click the **Exports** tab.
* The **Exports** tab is displayed.
* To filter other jobs, click the **Other** tab.
* The **Other** tab is displayed.
3. Choose at least one of the following filters:
* Click the **Date** field and select a range for the date the jobs were started or completed.
* Click the **Status** field and select a status.
* Depending on the type of jobs to filter that you selected in step 2, click the **Import type**, **Export type**, or **Job type** field and select a job type.
Jobs that match the filters you chose are displayed.
Click **Reset filters** to remove all filters.
### Sorting Jobs
1. In the left menu, click **Product Catalog > Background Jobs**.\
The **Import** tab on the **Jobs** page is displayed.
2. Select the type of jobs to sort by doing one of the following:
* To sort imports, stay on the **Imports** tab.
* To sort exports, click the **Exports** tab.
* The **Exports** tab is displayed.
* To sort other jobs, click the **Other** tab.
* The **Other** tab is displayed.
3. Click one of the column headers to sort the list of jobs.\
All jobs can be sorted by **Job ID**, **Status**, **Time started**, and **Time completed**. In addition, import jobs can be sorted by **Import type**, export jobs can be sorted by **Export type**, and other jobs can be sorted by **Job type**.
The jobs are sorted.
### Canceling Jobs
The only type of background job that can be canceled is an item or item variant import. When a job is canceled, it stops processing after completing the row in progress.
1. In the left menu, click **Product Catalog > Background Jobs**.
The **Import** tab on the **Background Jobs** page is displayed.
2. Mouse over the job you want to cancel and click the **X** icon.
Note: The job must have a status of **In Progress** or **Scheduled** to be canceled.
3. The **Are you sure you want to cancel?** window is displayed.
4. Click **Yes, Cancel**.
The job is canceled.
## Related Topics
* [Background Jobs Overview](/v3/guides/product-catalog/background-jobs/background-jobs)
* [Viewing Background Jobs History](/v3/guides/product-catalog/background-jobs/viewing-background-jobs-history)
# Viewing Background Jobs History
### Overview
In Copilot, you can view the import history, export history, and real-time progress updates for **Product Catalog**.
All import jobs are kept on file in your account for access later. The details of export jobs are only held for seven days.
You can view job histories only if you have performed at least one import or export operation.
### Viewing Import History
1. In the left menu, click **Product Catalog > Background Jobs**.\
The **Import** tab on the **Background Jobs** page is displayed.
2. Click a **Job ID**.\
The summary page with the following details is displayed:
* **Job type**: For import history details, this is always **import**. Also includes information on the type of import, whether item, bundle, item variant, attribute, category, or collection.
* **Time started**: The date and time the import began.
* **Time completed**: The date and time the import completed.
* Three fields with dynamic names depending on the type of import. Items is used in the following example, but depending on the type of import, the fields could be labelled item, bundle, item variant, attribute, category, or collection.
* **Item created**: The number of items created as a result of the import.
* **Item updated**: The number of items updated as a result of the import.
* **Items upsert with error**: The number of items upserted with errors as a result of the import.
3. (Optional) To download a copy of the original file, click **Download Original File**.\
A CSV file containing the import details is downloaded.
4. (Optional) If the import job had errors, to view the error report, click **Download Error Report**.\
A zip file is downloaded containing the original file that was uploaded as well as a the error report in CSV format.
### Viewing Export History
1. In the left menu, click **Product Catalog > Background Jobs**.\
The **Background Jobs** page is displayed.
2. Click **Export history**.\
The **Export history** tab is displayed.
3. Click a **Job ID**.\
The summary page with the following details is displayed:
* **Job type**: For export history details, this is always **export**. Also includes information on the type of export, whether item, bundle, item variant, attribute, category, or collection.
* **Time started**: The date and time the export began.
* **Time completed**: The date and time the export completed.
4. (Optional) To download a copy of the original file, click **Download Original File**.\
A CSV file containing the export details is downloaded.
5. (Optional) If the export job had errors, to view the error report, click **Download Error Report**.\
A zip file is downloaded containing the original file that was uploaded as well as a the error report in CSV format.
### Viewing Other Jobs History
1. In the left menu, click **Product Catalog > Background Jobs**.\
The **Background Jobs** page is displayed.
2. Click **Other**.\
The **Other** tab is displayed.
3. Click a **Job ID**.\
The summary page with the following details is displayed:
* **Product Update: Collection Evaluation:** When a product is updated, all collections are evaluated to identify which collection the product will be a part of.
* **Category Update: Product Attribute:** A job that's triggered every 20 minutes (unless the account is configured for a different time period) when product attributes assigned to a category are assigned or removed.
* **Collection Update: Product Evaluation:** When a collection is updated or created, this job evaluates all the rules against products and indexes all the products.
* **Product Update: Category Assignment:** Users can assign products to a different category in bulk. This job tracks those bulk category reassignments on products.
* **Product Denormalization:** fabric's downstream domains, such as Orders, Offers, and Cart and Checkout, use denormalized data. This job handles all the Product Catalog events and identifies a list of products that are updated due to these events and writes the denormalized data to OpenSearch for use downstream.
### Related Topics
* [Background Jobs Overview](/v3/guides/product-catalog/background-jobs/background-jobs)
* [Searching, Filtering, and Sorting Background Jobs](/v3/guides/product-catalog/background-jobs/searching--filtering--and-sorting-background-jobs)
# Adding a Category
### Overview
Categories are hierarchical tree structures that allow you to organize items, variants, and bundles into groups based on similar attributes. This document covers how to create a single category using the Copilot interface. You can also add multiple categories at the same time by [importing them](/v3/guides/product-catalog/categories/importing-categories) using a CSV file.
### Prerequisites
Ensure that you have access to the **Product Catalog** in Copilot. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product Catalog > Categories**.\
The Categories page is displayed.
2. Click the **+** icon.
3. Enter a title for the new category and press **Enter** or click the **?** icon.\
The new category is created.
4. (Optional) Click the new category name, and then click the **+** icon on the right to create a new subcategory.\
The new subcategory is created.
When you click a root category, all subcategories within the root category are displayed at the right. A **leaf** label is used to indicate any category or subcategory that doesn't contain a subcategory.
### Related Topics
* [Categories Overview](/v3/guides/product-catalog/categories/categories_overview-overview)
* [Importing Categories](/v3/guides/product-catalog/categories/importing-categories)
* [Viewing Category Import History](/v3/guides/product-catalog/categories/viewing-category-import-history)
* [Managing Categories](/v3/guides/product-catalog/categories/managing-categories)
# Categories Overview
### Overview
Categories define the structure of item lists in **Product Catalog**. Categories can be organized into a hierarchical tree structure based on common attributes, allowing logical grouping of items.
Every item on your product list must belong to one category or subcategory. There is no limit to the number of categories or subcategories.
Categories and subcategories can be best explained with the tree analogy. For instance, if a furniture company has "furniture" as the main category or "root," the branches would be subcategories like "tables" and "chairs," and the leaves would represent individual products, like an oak dining table that seats 4. Visually, that would look something like this:
> ## 📘 Example of the Tree Analogy
>
> * Root: Furniture
> * Branch: Tables
> * Leaf: Dining Tables
> * Product: Oak dining table seating 4
> * Product: Oak dining table seating 6
> * Leaf: Coffee Tables
> * Product: Oak coffee table
> * Product: Oak coffee table, glass top
> * Branch: Chairs
> * Leaf: Dining Chairs
> * Product: Oak dining chair
> * Product: Oak dining chair, with arms
> * Leaf: Office Chairs
> * Product: Computer chair
> * Product: Computer chair, reclining
Any attribute applied to a category is inherited by its subcategories. This is known as attribute inheritance. However, inherited attributes can be overwritten by assigning the attribute to the subcategory itself. For example, the broad "office chairs" category could have a "material" attribute set to leather, but a specific subcategory could be set to nylon.
### Related Topics
* [Adding a Category](/v3/guides/product-catalog/categories/adding-a-category)
* [Importing Categories](/v3/guides/product-catalog/categories/importing-categories)
* [Viewing Category Import History](/v3/guides/product-catalog/categories/viewing-category-import-history)
* [Managing Categories](/v3/guides/product-catalog/categories/managing-categories)
# Importing Categories
Categories are hierarchical tree structures that allow you to organize items, variants, and bundles into groups based on similar attributes. This document covers the process of importing multiple categories using a CSV file. You can also [add categories individually](/v3/guides/product-catalog/categories/adding-a-category).
## CSV File Guidelines
You can import categories using CSV files only, fabric doesn't support any other data or file formats. Here are the key points to consider:
* The headers, represented in the first row of the CSV file, should match the attributes of the category.
* While category titles aren't case-sensitive, maintaining case consistency with the original category titles is recommended.
* Empty rows and columns are ignored.
* fabric recommends that you download the template file to use as a guide when creating your own CSV file for import to minimize errors during the import process.
## Category Data Formatting
When preparing your CSV file for import, ensure that the category data format aligns with the column requirements. Different columns have specific data input requirements:
| **Header** | **Description** |
| ----------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Action** | Accepts one of the following commands:
- **Create**: Adds a new category.
- **Update**: Replaces the details of an existing category.
- **Upsert**: Creates a new category or replaces the details of an existing category. If no action is specified for a row, upsert is the default action.
- **Delete**: Removes an existing category.
If the field is blank, the default value is Create. |
| **Node ID** | Represents the Category ID.- When creating a category, this field must be left blank; otherwise, an error will occur.
- When updating, upserting, or deleting a category, enter the **Node ID** or **Node Name**.
|
| **Parent Category** | Specifies the parent category for the new category you want to create or update unless you are creating a primary or root category. |
| **Node Name** | Specifies the name of the root, branch, or leaf categories being created or updated. |
| **Order** | Specifies the order in which a category should appear among sibling categories. If multiple categories share the same order, the newly added ones appear in alphabetical order. |
| **Product Attributes** | Specifies the attributes of products associated with a category. You must assign relevant product attributes to categories. For more information on assigning product attributes in Copilot, see the [Adding Product Attributes](/v3/guides/product-catalog/categories/managing-categories#adding-product-attributes) section. |
| **Category Attributes** | Specifies the attributes of a category. You must assign relevant category attributes to categories. For more information on assigning category attributes in Copilot, see the [Adding Category Attributes](/v3/guides/product-catalog/categories/managing-categories#adding-category-attributes) section. |
### Example
Category import supports up to two category levels. For example, if you have the category **Dog > Food > Wet Food**, the third level, **Wet Food**, won't be imported. You must manually add categories through Copilot starting from the third level. For more information on adding categories using Copilot, see the [Adding a Category](/v3/guides/product-catalog/categories/adding-a-category) page.
| **Action** | **Node ID** | **Parent Category** | **Node Name** | **Order** | **Product Attributes** | **Category Attributes** |
| ---------- | ----------- | ------------------- | ------------- | --------- | ---------------------- | ----------------------- |
| Create | | | Dog | 1 | salmon; beef; chicken | wet food |
| Create | | Dog | Food | 1 | salmon; beef; chicken | wet food |
| Create | | | Cat | 1 | salmon; beef; chicken | wet food |
| Create | | Cat | Food | 1 | salmon; beef; chicken | wet food |
## Prerequisites
Ensure that you have access to **Product Catalog** in Copilot. For more information, see the Product Catalog [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control-products-roles) page.
## Procedure
Importing a CSV file will overwrite existing data. To preserve your data, use your previously imported CSV file, add the new categories to it, and rename the file. For more information on downloading the import file, see the [Viewing Import History](/v3/guides/product-catalog/background-jobs/viewing-background-jobs-history#viewing-import-history) section.
1. In the left menu, click **Product Catalog > Categories**.\
The **Categories** page is displayed.
2. Click **Import**.\
The **Import CSV file** window is displayed. This window provides a link to download an example template for the CSV file.
3. Download the sample template by clicking **template here**.
4. To import a CSV file, do one of the following:
* Drag and drop the CSV file into the window.
* Click **Select a File from your computer**.
5. Click **Import file**.
The CSV file is imported and the changes you indicated to your categories are made.
## Related Topics
* [Categories Overview](/v3/guides/product-catalog/categories/categories_overview-overview)
* [Adding a Category](/v3/guides/product-catalog/categories/adding-a-category)
* [Viewing Category Import History](/v3/guides/product-catalog/categories/viewing-category-import-history)
* [Managing Categories](/v3/guides/product-catalog/categories/managing-categories)
# Managing Categories
## Overview
Categories are hierarchical tree structures that allow you to organize items, variants, and bundles into groups based on similar attributes. This document covers the process of adding attributes to categories, renaming categories, and deleting categories.
## Adding Product Attributes
### Overview
Item attributes are the attributes that an item, also called a product, must have configured in order to be added to a category.
Individual item attributes are set up in the Attributes section. Those product attributes can then be added to a category using the procedure below.
As an example, a home décor company might have a category for rugs and want to require any items added to that category to have length and width information. The attributes for dimensions would be set up in **Product Catalog > Attributes > Product** and then added to a category in **Product Catalog > Categories**.
It's required to set up a category’s product attributes prior to adding any items to it. If a category is missing item attributes, no item can be created for that category.
### Procedure
1. In the left menu, click **Product Catalog > Categories**.\
The **Categories** page is displayed.
2. Mouse over the desired category and click the vertical ellipses (**⋮**) at the right.
3. Click **Product attributes**.\
The **Product attributes** menu is displayed.
4. Click the **Add Product Attributes** dropdown.\
The dropdown displays a list of category attributes as created in **Product Catalog > Attributes > Product**.
5. To add an attribute, click its corresponding checkbox.
Note that system-mandatory attributes are separated for easier management. These attributes are shown by default, but need to be saved so that you can add to the category.
You can add as many attributes as needed up to a maximum of 60 attributes per each session. If you want to add more attributes, you must click **Save** and repeat this step.
6\. (Optional) To the right of a product attribute, click the vertical ellipses (**⋮**) and do the following:
* To make the attribute mandatory, click **Make attribute mandatory**.
* To remove the attribute, click **Remove attribute**.
7. Click **Save**.
The category attributes you selected are applied to the category and all its subcategories.
## Adding Category Attributes
### Overview
Category attributes allow you to apply a group of attributes to your category hierarchy. These attribute groups are set up in **Product Catalog > Attributes > Category**.
You can apply category attributes at the root level of your category hierarchy or at the subcategory level.
Subcategories inherit the category attributes applied to the parent category unless you select a different group of category attributes at the subcategory level.
### Procedure
1. In the left menu, click **Product Catalog > Categories**.\
The Categories page is displayed.
2. On the desired category click the vertical ellipses (**⋮**) at the right.
To apply category attributes to the entire category hierarchy, click the vertical ellipses to the right of the Root menu.
3. Click **Category attributes**.\
The **Category Attributes** menu is displayed.
4. Click the **Add Category Attributes** dropdown.
The dropdown menu displays a list of category attributes that are created in the **Product Catalog > Attributes > Category** page.
5. To add an attribute, click its corresponding checkbox.
You can add up to 60 attributes per session. To add more attributes, you must click **Save** and repeat this step.
6. Click **Save**.
The category attributes that you selected are applied to the category and its subcategories.
## Viewing Items in a Category
1. In the left menu, click **Product Catalog > Categories**.\
The **Categories** page is displayed.
2. Click the vertical ellipses (**⋮**) at the right of the desired category.
3. Click **View Items**.
The list of all items belonging to the selected category and its subcategories is displayed.
## Renaming a Category
1. In the left menu, click **Product Catalog > Categories**.\
The **Categories** page is displayed.
2. Click the vertical ellipses (**⋮**) at the right of the desired category.
3. Click **Rename**.
4. Enter a new name.
5. Press **Enter**.
The category name is updated.
## Deleting a Category
1. In the left menu, click **Product Catalog > Categories**.\
The **Categories** page is displayed.
2. Click the vertical ellipses (**⋮**) at the right of the desired category.
3. Click **Delete**.
4. Click **Yes, Delete**.
The category is deleted.
## Related Topics
* [Categories Overview](/v3/guides/product-catalog/categories/categories_overview-overview)
* [Adding a Category](/v3/guides/product-catalog/categories/adding-a-category)
* [Importing Categories](/v3/guides/product-catalog/categories/importing-categories)
* [Viewing Category Import History](/v3/guides/product-catalog/categories/viewing-category-import-history)
# Categories
Categories define the structure of item lists in **Product Catalog**. They can be organized into a hierarchical tree structure based on common attributes, allowing logical grouping of items. Every item must belong to one category or subcategory, and there is no limit to the number of categories or subcategories.
Categories and subcategories can be best explained with the tree analogy. For instance, considering *furniture* as the main category or root, the branches are subcategories such as *tables* and *chairs*, and the leaves represent individual products. In this example, a leaf could be an oak dining table that seats four. Visually, it looks like this:
> ## 📘 Example of the Tree Analogy
>
> * Root: Furniture
> * Branch: Tables
> * Leaf: Dining Tables
> * Product: Oak dining table seating 4
> * Product: Oak dining table seating 6
> * Leaf: Coffee Tables
> * Product: Oak coffee table
> * Product: Oak coffee table, glass top
> * Branch: Chairs
> * Leaf: Dining Chairs
> * Product: Oak dining chair
> * Product: Oak dining chair, with arms
> * Leaf: Office Chairs
> * Product: Computer chair
> * Product: Computer chair, reclining
Any attribute applied to a category is inherited by its subcategories, known as attribute inheritance. However, inherited attributes can be overwritten by assigning the attribute to the subcategory itself. For example, the broad *office chairs* category could have a *material* attribute set to *leather*, but a specific subcategory could be set to *nylon*.
## Related Topics
* [Adding a Category](/v3/guides/product-catalog/categories/adding-a-category)
* [Importing Categories](/v3/guides/product-catalog/categories/importing-categories)
* [Viewing Category Import History](/v3/guides/product-catalog/categories/viewing-category-import-history)
* [Managing Categories](/v3/guides/product-catalog/categories/managing-categories)
# Adding Category Attributes to a Collection
Category attributes define specific characteristics of a category, describing items within it. Using categories, you can organize products into a tree structure of subcategories, with each item belonging to a category or subcategory.
## Procedure
1. In the left menu, click **Product Catalog > Collections**.\
The **Collections** page is displayed.
2. Click a collection.\
The **Collection Preview** page is displayed.
3. Mouse over the collection and click the pencil icon.
The **Manage** menu is displayed.
4. Click the **Add category attribute** field and select a category attribute.
5. Enter a corresponding value for the category attribute.
6. Click **Save**.
The category attributes are added to the collection.
## Related Topics
* [Collections Overview](/v3/guides/product-catalog/collections/collections)
* [Creating a Collection](/v3/guides/product-catalog/collections/creating-a-collection)
* [Importing a Collections](/v3/guides/product-catalog/collections/importing-collections)
* [Managing Collections](/v3/guides/product-catalog/collections/managing-collections)
# Collections
Collections in Product Catalog are a flexible tool to group products to meet dynamic merchandising purposes on a storefront. Unlike categories, which provide a fixed, hierarchical structure, collections reflect flexible grouping of products for display on a storefront based on specific themes, promotions, or attributes.
Collections enable you to aggregate products from multiple categories. You can further refine the curated list based on attributes.
## Key Features of Collections
* **Dynamic Grouping**: After the rules for a collection are defined, you don't need to refresh or re-run the collection to have an accurate list of products when the catalog is refreshed. When new products are added to the catalog or existing products are updated to match collection rules, they will appear in the collection automatically.
* **Attribute-based Rules**: You can set up collections by defining rules based on product attributes , for example price range, brand, or availability. This allows for precise targeting and segmentation, helping you create custom displays that align with merchandising strategies.
## Collections vs Categories
While both collections and categories help organize products, they serve different purposes:
* [Categories](v3/guides/product-catalog/categories/categories_overview) provide a foundational, static structure for products, making it easier for users to navigate a catalog in a structured, hierarchical way. For example, *Furniture > Living Room > Sofas*.
* Collections offer flexibility, allowing you to aggregate products from multiple categories into a single, curated list, perfect for promotional or thematic displays on a storefront. For example, a page on the storefront could showcase items from all categories made by a specific manufacturer, or a sale on sectional sofas.
## Rules and Conditions
Collections are set up by selecting the categories that contain the products that you want to include in the collection. You can further refine the products from those categories based on their attributes using customizable rules and conditions.
Conditions consist of a product attribute, a validation option, and a value. For example, if you want to create a collection of only red items, you must set the condition for the product attribute to *color*, the validation option to *is exact match*, and the value to *red*.
The [product attribute](/v3/guides/product-catalog/attributes/product-attributes-overview) and value in conditions are user-specified. The following table lists the fabric-generated validation options:
| **Validation Option** | **Description** |
| ----------------------- | -------------------------------------------------------------------------- |
| **Is equal to** | The product attribute must match the specified value exactly. |
| **Is greater than** | The product attribute must be greater than the specified value. |
| **Is less than** | The product attribute must be less than the specified value. |
| **Includes** | The product attribute must include the specified value. |
| **Excludes** | The product attribute must exclude the specified value. |
| **Contains** | The product attribute must contain a partial match to the specified value. |
| **Contains exact word** | The product attribute must contain the exact word specified. |
| **Does not contain** | The product attribute must not include the specified value. |
| **Is exact match** | The product attribute must match the specified value exactly. |
| **Yes** | The product attribute must be marked as *true*. |
| **No** | The product attribute must be marked as *false*. |
The relationships between conditions within a rule are governed by *AND* and *OR* operators so that you can create precise inclusion or exclusion rules.
For example, a rule with conditions based on *AND* logic might require that a product be large and green and made in the USA. A rule with conditions that include *OR* logic might require that a product be large and green or blue.
A collection can contain up to five rules, with each rule containing up to five conditions. Rules can only be joined together with an *AND* operator.
## Use Cases
A furniture store with a diverse range of products needs to drive sales by promoting specific types of sofas from its extensive Product Catalog. While the store’s catalog is organized by broad categories, such as *Sofas*, these general categories don’t effectively highlight certain products for promotional events. The store wants to feature only a select type of sofa within its broad Sofas category to align with current market trends and customer interests.
The following use cases demonstrate two scenarios: one in which conditions are joined with the *AND* operator, and another in which conditions are joined with the *OR* operator.
### Scenario 1: Creating a targeted sofa collection with AND operators
In this scenario, the store wants to create a collection of sofas that meet all specified conditions, narrowing down the selection to a precise product type for a focused promotion. The goal is to quickly create a collection of sofas that are:
* *Sectional* in style
* *Not powered*
* Not made of *leather*
* Manufactured by *Top Brand*
* Belonging to the *Windham* product line
Using a collection, the store can set up this sale within the *Sofas* category by applying a single rule with multiple conditions that precisely define the products to be included. Here’s how each condition helps narrow down the products in the category to create a tailored collection:
* Condition 1
* Product Attribute: *Style*
* Validation Option: *Is exact match*
* Value: *Sectional*
* Condition 2
* Product Attribute: *Powered*
* Validation Option: *Is equal to*
* Value: *False*
* Condition 3
* Product Attribute: *Material*
* Validation Option: *Does not contain*
* Value: *Leather*
* Condition 4
* Product Attribute: *Brand*
* Validation Option: *Includes*
* Value: *Top Brand*
* Condition 5
* Product Attribute: *Line*
* Validation Option: *Includes*
* Value: *Windham*
In this collection, *AND* logic is used across all conditions, ensuring that the included products are sectional sofas that are non-powered, non-leather, and exclusively from the Windham line by Top Brand.
### Scenario 2: Expanding a sofa collection with OR operators
In this scenario, the store wants to broaden the selection for a promotion by including sofas that meet at least one of several material options, allowing for greater flexibility. The goal is to create a collection of sofas that are:
* *Sectional* in style
* Made of *leather*
* Made of *microfiber*
Here’s how each condition would be structured to create this broader collection:
* Condition 1
* Product Attribute: *Style*
* Validation Option: *Is exact match*
* Value: *Sectional*
* Condition 2
* Product Attribute: *Material*
* Validation Option: *Is equal to*
* Value: *Leather*
* Condition 3
* Product Attribute: *Material*
* Validation Option: *Is equal to*
* Value: *Microfiber*
In this collection, *AND* logic is used between Conditions 1 and 2, with *OR* logic joining Conditions 2 and 3, ensuring that the included products are sectional sofas that are either leather or microfiber.
## Related Topics
* [Creating a Collection](/v3/guides/product-catalog/collections/creating-a-collection)
* [Importing Collections](/v3/guides/product-catalog/collections/importing-collections)
* [Managing Collections](/v3/guides/product-catalog/collections/managing-collections)
* [Adding Category Attributes to a Collection](/v3/guides/product-catalog/collections/adding-category-attributes)
# Creating a Collection
This topic covers the process of creating a collection.
Collections are most effective when you’ve fully configured your Product Catalog elements. Before creating a collection, it’s helpful to have the following in place:
* [Product Attributes](/v3/guides/product-catalog/attributes/product-attributes-overview): Setting up product attributes enables you to refine collections based on these specific product characteristics, such as style, material, or brand.
* [Products](http://localhost:3000/v3/guides/product-catalog/list/items/items): Adding products and [assigning product attributes to them](/v3/guides/product-catalog/list/items/adding-an-item) ensures that collections capture the right products.
* [Categories](/v3/guides/product-catalog/categories/categories): Organizing your products into categories provides a foundation for building collections and makes it easier to select relevant products.
With these elements set up, you’ll be able to define collection rules and conditions more precisely, making it easier to organize products according to specific criteria.
## Prerequisites
* Ensure that you have **Admin** or **Editor** privileges for Product Catalog. For more detailed information on these settings, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control-offers-roles).
## Procedure
1. In the left menu, click **Product Catalog > Collections**.
* The **Collections** page is displayed.
2. Click **Create Collection**.
* The **Basic details** section on the **Create Collection** page is displayed.
3. In the **Collection name** field, enter a name.
4. To add one or more categories, in the **Your Catalog categories** section:
* Select categories in the pre-populated list.
* Search for the name of the category and selecting one or more of the matching categories in the results.
5. Click **Next**.
* The **Choose products for your collection** section is displayed with a list of products in the categories you selected.
You can select categories you want to add or remove by using the **Category** filter.
1. To define the rules and conditions that determine which products are included in the collection, select **Attributes & Values**.
2. To set up the first rule, in the **Attributes & Values** > **Rule 1**, and do the following:
1. In the **If attribute** field, select an attribute.
2. In the **Validation** field, select a validation option.
3. In the **Value** field, enter a value.
4. If you want to join this rule with a condition, click **Add Condition** and click **AND** or **OR**.
You can include up to five conditions within a single rule. Repeat these steps as needed to create up to five rules per collection.
You can't have an empty rule. If a rule is empty, the **Apply** button is disabled.
5. (Optional) To create a new rule, click **Add Rule** and fill out the condition fields as required.
6. Click **Apply**.
3. Click **Next**.
* The **Review and add products to your collection** section is displayed.
4. Click **Save**.
* The **Automatically create sub-collections?** window is displayed. Do one of the following:
* To enable automatic organization of your collection into sub-collections based on the categories it contains, click **Yes, Create**.
* To organize your collection into sub-collections manually, click **No, Create My Own**.
The Collection Preview page is displayed. If you want to make changes to the sub-collections, follow the steps to [create a Sub-Collection](/v3/guides/product-catalog/collections/managing-collections#creating-a-sub-collection).
5. To activate click the **Inactive** button.
The collection is activated.
6. Click **Run Collection**.
The collection is created.
If you are adding category attributes to the collection, see [Adding Category Attributes to a Collection](/v3/guides/product-catalog/collections/adding-category-attributes).
## Related Topics
* [Collections Overview](/v3/guides/product-catalog/collections/collections)
* [Importing Collections](/v3/guides/product-catalog/collections/importing-collections)
* [Managing Collections](/v3/guides/product-catalog/collections/managing-collections)
* [Adding Category Attributes to a Collection](/v3/guides/product-catalog/collections/adding-category-attributes)
# Importing Collections
Collections serve as an alternative to categories for organizing products, especially useful for short-term merchandising campaigns. This topic covers the process of importing multiple collections with a CSV file. You can also add collections individually.
We highly recommend that you download the template file to use as a guide when creating your CSV file for import to minimize errors during the import process.
### CSV File Guidelines
You can import collections using CSV files only; Product Catalog doesn't support any other data or file formats. Here are the key points to consider:
* The headers, represented in the first row of the CSV file, should match the attributes of the collection.
* While collection titles aren't case-sensitive, maintaining case consistency with the original collection titles is recommended.
* Empty rows and columns are ignored.
### Collection Data Formatting
When preparing your CSV file for import, ensure that the collection data format aligns with the column requirements. Different columns have specific data input requirements:
* **Action:** Accepts one of the following commands:
* Create adds a new collection.
* Update replaces the details of an existing collection.
* Upsert creates a new collection or replaces the details of an existing collection. Note that if no action is specified for a row, upsert is considered the default.
* **Node ID:** Represents the Collection ID.
* **Parent Collection:** Unless you are creating a primary or root collection, specify the parent category for the new collection you want to create or update.
* **Node Name:** Name of the root, branch, or leaf collection that you are creating or updating.
* **Order:** The order in which a given collection must appear among sibling collections. If multiple collections are assigned the same order, the newly added collections appear in alphabetical order.
* **Category Attributes:** Attributes that are assigned to the Collection.
* **Categories Included:** Categories to include when creating the collection.
* **Categories Excluded:** Categories to exclude when creating the collection.
* **Product Attribute Filters:** Attribute conditions that filter the eligible products for the Collection node. Filter operations are dependent on the attribute type.
| Attribute Type | Available Operations |
| -------------- | ------------------------------------------ |
| Text | Contains, Doesn't contain, Is exact match |
| Number | Is equal to, Is less than, Is greater than |
| List of Value | Includes, Excludes |
| Boolean | Yes, No |
| Date | Is equal to, Is less than, Is greater than |
| Serial | Is equal to, Is less than, Is greater than |
### Example file
| Action | Node Id | Parent Category | Node Name | Order | Category Attributes | Categories Included | Categories Excluded | Product Attribute Filters | | |
| ------ | -------------- | --------------------------- | ----------------- | ----- | ------------------------ | ------------------------------------ | ------------------- | ---------------------------------------------- | - | - |
| Create | 12345645648689 | | Import-collection | 1 | Collection SEO=SEO Value | category date YYYY-MM-DD=2024-03-22; | | | | |
| | | Import-collection | Parent-1 | 1 | Furniture,Accessories | | | | | |
| | | Import-collection->Parent-1 | Child 1 | 1 | | Furniture>Desks | | name=Description; op=CONTAINS; value=furniture | | |
| | | Import-collection->Parent-1 | Child 2 | 2 | | Furniture>Chairs | | name=Color; op=ISEXACTMATCH; value=Brown | | |
## Prerequisites
Before initiating the item import, ensure that:
* You have created at least one category with items and attributes assigned to it. For more information about creating categories, see the Categories section.
* The CSV file adheres to the guidelines.
## Procedure
1. In the left menu, click **Product Catalog > Collections**.
The **Collections** page is displayed.
2. Click **Import Collection**.
The **Import CSV file** window is displayed.
3. (Optional) To download the template, click **template here**.
The template is downloaded.
4. To import a CSV file, do one of the following:
* Drag and drop the file into the window.
* Click **Select a File** from your computer.
5. Click **Import file**.
The CSV file is imported and the collection is created.
To track the import status, go to **Product Catalog > Background Jobs > Imports** page.
## Related Topics
* [Collections Overview](/v3/guides/product-catalog/collections/collections)
* [Creating a Collection](/v3/guides/product-catalog/collections/creating-a-collection)
* [Managing Collections](/v3/guides/product-catalog/collections/managing-collections)
* [Adding Category Attributes to a Collection](/v3/guides/product-catalog/collections/adding-category-attributes)
# Managing Collections
This topic covers the process of editing collections, creating sub-collections, and deleting collections and sub-collections.
## Prerequisites
Ensure you have created at least one collection.
### Sorting collections
You can sort collections and sub-collections alphabetically in either ascending or descending order.
1. In the left menu, click **Product Catalog > Attributes > Collections**.
The **Collections** page is displayed.
2. Click a collection.
The **Collection Preview** page is displayed.
3. Click the arrow next to the name of the collection or sub-collection to sort.
The collections are sorted.
### Editing a collection
1. In the left menu, click **Product Catalog > Attributes > Collections**.
The **Collections** page is displayed.
2. Click a collection.
The **Collection Preview** page is displayed.
3. Click **Manage Products** for the desired collection.
The add products window is displayed.
4. Edit the **Category**, **Attributes & Values**, and **Status** filters as required.
5. Click **Add Products**.
6. Click **Run Collection**.
The collection is updated.
### Creating a sub-collection
1. In the left menu, click **Product Catalog > Attributes > Collections**.
The **Collections** page is displayed.
2. Click a collection.
The **Collection Preview** page is displayed.
3. Click the collection to create a sub-collection for.
A new column for the next level of the collection is displayed to the right with the outline of a new sub-collection.
4. Click the plus sign (**+**) icon inside the outline of the new sub-collection.
5. In the **Enter name** field, give the sub-collection a name and press **Enter**.
6. To add categories and products, click **Manage Products**.
The add products window is displayed.
7. Edit the **Category**, **Attributes & Values**, and **Status** filters as required.
8. Click **Add Products**.
9. Click **Run Collection**.
The sub-collection is created.
### Deleting a collection or sub-collection
1. In the left menu, click **Product Catalog > Attributes > Collections**.
* The **Collections** page is displayed.
2. Click a collection.
* The **Collection Preview** page is displayed.
3. Mouse over a sub-collection and click the trash can icon.
* The **Delete Collection** window is displayed.
Note: Deleting a sub-collection also deletes any sub-collections it contains.
4. Click **Yes, Delete**.
The collection is deleted.
## Related Topics
* [Collections Overview](/v3/guides/product-catalog/collections/collections)
* [Creating a Collection](/v3/guides/product-catalog/collections/creating-a-collection)
* [Importing a Collections](/v3/guides/product-catalog/collections/importing-collections)
* [Adding Category Attributes to a Collection](/v3/guides/product-catalog/collections/adding-category-attributes)
# Data Ingestion Best Practices
## Overview
Optimized data management is at the core of every successful e-commerce operation. For fabric users managing extensive product catalogs, finely tuned data ingestion is paramount.
Adhering to fabric’s best practices will ensure the fastest processing speed, optimum resource management, and enhanced accuracy when importing your data.
This topic covers subjects such as file size restrictions, types of import actions, reconciling errors, and most importantly, the best method of data ingestion: **delta updates**.
## File Size and Upload Guidelines
Before you upload your first file, it's important to understand file size restrictions and how fabric handles files that exceed those restrictions.
* **No files larger than 300MB**
Limit the size of your uploads to 300MB.
* **Split files larger than 300MB into smaller ones**
Splitting large files into smaller ones before uploading them is the quickest way to import large amounts of data. For fastest processing, the ideal file size is between 80-100MB.
* **Parallel processing**
fabric can process multiple files in parallel. The number of parallel files depends on your package. When the limit has been reached, subsequent files will be in a “scheduled” status until moved into the queue. Reach out to your account representative to learn more.
* **Automatic file chunking is available**
fabric can automatically chunk files larger than 300MB into smaller files to improve performance. This feature is only available in select packages. Reach out to your account representative to learn more.
## Delta Updates
A delta update involves transmitting only the changed data fields when making an update. This is in contrast to the more traditional “full feed” updates that send the entire dataset. By sending only the changed data fields, fabric can process updates without reprocessing unchanged data.
**Delta updates are the preferred method for all uploads.**
### Delta updates vs. full feed updates
| | Full Feed Data Updates | Delta Data Updates |
| -------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------- |
| **Resource Usage** | Requires more resources | Requires fewer resources |
| **Processing Time** | Longer processing time | Shorter processing time |
| **Data Transmission** | Transmits entire dataset | Transmits only modified data fields |
| **Network Bandwidth** | Consumes more network bandwidth | Requires less network bandwidth |
| **Storage** | Requires more storage space | Requires less storage space |
| **Error Handling** | Prone to errors during full data transmission | Less prone to errors due to focused updates |
| **Scalability** | Less scalable for large datasets | More scalable, especially for large datasets |
| **Data Accuracy** | Potential for data redundancy and inconsistency | Enhances data accuracy by focusing on changes |
| **Operational Efficiency** | Lower operational efficiency due to higher resource consumption | Higher operational efficiency due to optimized resource usage |
| **Incremental Updates** | Updates entire dataset each time | Updates only modified data fields incrementally |
## Ways to Import Data
You can import data into fabric using the following methods:
* CSV import using API
* Import using RESTful APIs
* CSV import using the Copilot interface
The import method you choose is up to you, but in each case, uploading smaller files and using the delta update method will result in quicker processing, better resource management, and a higher degree of accuracy.
## Data Formatting
It's crucial to make sure your dataset is accurate and compatible with fabric’s formatting before initiating the upload process. Validate your data to avoid errors by reviewing the file to identify any changes since the last upload and confirm that the data structure and format are correct. See the following pages for formatting guidelines:
* [Importing Items](https://developer.fabric.inc/v3/guides/product-catalog/list/items/importing-items#csv-file-guidelines)
* [Importing Bundles](https://developer.fabric.inc/v3/guides/product-catalog/list/bundles/importing-bundles#csv-file-guidelines)
* [Importing Product Attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/importing-product-attributes#attribute-data-formatting)
* [Importing Categories](https://developer.fabric.inc/v3/guides/product-catalog/categories/importing-categories#csv-file-guidelines)
## Import Actions
The actions you use when importing items, bundles, categories, and collections tell fabric how you are modifying your data. The following actions are available:
* **UPSERT:** Creates a new product if the product doesn't exist, or it updates an existing product.
* **CREATE:** Creates a new product.
* **UPDATE:** Updates existing product.
* **PUBLISH:** Publishes an existing product that was in draft state. The product is published to the storefront.
* **UNPUBLISH\_KEEP\_DRAFT:** Unpublishes an existing product. If the product already has a draft version, the live version is unpublished and discarded. If product doesn't already have a draft version, the live version is unpublished and saved as a draft.
* **UNPUBLISH\_KEEP\_LIVE:** Unpublishes an existing product. If the product already has a draft version, the draft version is discarded.
* **DELETE:** Deletes the existing product.
* **ATTACH\_VARIANT:** Adds variants to an existing parent product. The variant column holds the variant to be attached to the SKU.
* **DETACH\_VARIANT:** Detaches existing variants. The variant column holds the variant to be detached from the SKU.
* **CHANGE\_CATEGORY:** Updates the category of existing product.
* **ATTACH\_CHANNELS:** Appends listed channels to the product, allowing it to be available across various sales channels. You can specify the channels to be attached in the Channels column. After attaching channels, users should verify the attachment post-action to confirm the successful addition of channels to the product.
* **DETACH\_CHANNELS:** Removes listed channels from a product. Users specify the channels to be detached in the Channels column. This action is useful when a product needs to be removed from specific sales channels while remaining available on others. Users should verify the detachment of channels post-action to ensure the desired channels are removed from the product.
## Reconciling Errors
If there are errors during processing, download the error file and review each error to identify the problem. Correct the errors by updating the CSV file with the necessary changes and validate the corrected CSV file before re-importing.
* [Troubleshooting Item Imports](https://developer.fabric.inc/v3/guides/product-catalog/list/items/importing-items#troubleshooting)
* [Troubleshooting Bundle Imports](https://developer.fabric.inc/v3/guides/product-catalog/list/bundles/importing-bundles#troubleshooting)
# Adding a Bundle
Bundles are two or more products sold together. Creating a bundle allows you to group products that are exclusively sold together or group products that can be purchased together and separately.
This document covers the process of adding a single bundle. To add multiple bundles at the same time, see Import Bundles.
## Prerequisites
Ensure that you have:
* Set up at least one product attribute group. For more information about creating categories, see the [Categories section](/v3/guides/product-catalog/categories/adding-a-category).
* Created at least one leaf category to add the bundle to. For more information about creating categories, see the [Categories section](/v3/guides/product-catalog/categories/adding-a-category).
* Created at least two items. For more information about creating items, see [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item) or [Importing Items](/v3/guides/product-catalog/list/items/importing-items).
## Procedure
1. In the left menu, click **Product Catalog > List > Bundles**.\
The **Bundles** page is displayed.
2. Click **New Bundle**.\
The **Select a leaf category** window is displayed. This window shows the root categories and leaf categories that are configured in the Categories page.
3. Select a leaf category.
Leaf categories are labeled **leaf**. You must click a root category to view the leaf categories within that category. If a root category has more root categories within it, you might have to continue selecting root categories until you can select a leaf category.
4. Click **Next**.\
The attribute groups you have created and mapped are displayed based on the configuration in the Attributes page.
5. To edit an attribute group, click the **Edit** button next to the attribute group name.
* In the **Edit Attributes** window, enter the required details.
* Click **Save**.\
If you want to use more than one attribute group, repeat the above steps for all of those attribute groups.
6. Click **Bundle items**.\
The **Bundle items** tab is displayed.
7. Click **Add items**.\
The **Add items** page is displayed, showing the items in your product list.
8. Select the items to add to the bundle.
9. (Optional) Click **Select individual variants**.\
The **Select individual variants** tab is displayed.
10. (Optional) Select the item variants to add to the bundle.
11. Click **Save**.
12. Click the Bundle name in the breadcrumb at the top of the page.\
The **Edit Bundle** page is displayed.
13. (Optional) If internationalization is enabled, from the language dropdown menu, select the desired language variant for the item.
14. (Optional) Click **Publish**.
The bundle is published and moved from draft to active state.
## Related Topics
* [Bundles Overview](/v3/guides/product-catalog/list/bundles/bundles)
* [Importing Bundles](/v3/guides/product-catalog/list/bundles/importing-bundles)
* [Viewing Bundle Import History](/v3/guides/product-catalog/list/bundles/viewing-bundle-import-history)
* [Editing a Bundle](/v3/guides/product-catalog/list/bundles/editing-a-bundle)
* [Searching, Filtering, and Sorting Bundles](/v3/guides/product-catalog/list/bundles/searching-filtering-sorting-bundles)
# Bundles Overview
Bundles are combinations of two or more products sold exclusively together or individually, depending on the configuration. Pure bundles consist of items exclusively sold together, and individual items can't be purchased separately. Shoppers have the flexibility to buy items in mixed bundles together or separately.
For example, in a living room furniture set consisting of a coffee table and an end table, shoppers can choose to purchase each table individually or buy both tables together as part of the *living room set* bundle.
## Related Topics
* [Adding a Bundle](/v3/guides/product-catalog/list/bundles/adding-a-bundle)
* [Importing Bundles](/v3/guides/product-catalog/list/bundles/importing-bundles)
* [Viewing Bundle Import History](/v3/guides/product-catalog/list/bundles/viewing-bundle-import-history)
* [Editing a Bundle](/v3/guides/product-catalog/list/bundles/editing-a-bundle)
* [Searching, Filtering, and Sorting Bundles](/v3/guides/product-catalog/list/bundles/searching-filtering-sorting-bundles)
# Editing a Bundle
Product bundles can be edited in the List section of **Product Catalog**.
## Prerequisites
Ensure that you have created at least one bundle.
## Procedure
1. In the left menu, click **Product Catalog > List > Bundles**.\
The **Bundles** page is displayed.
2. Click on a bundle.\
The **Bundle Details** page is displayed.\
The attribute groups you have created and mapped are displayed.
3. Click the **Edit** button next to an attribute group.\
The **Edit Attributes** window is displayed.
4. Edit the attributes as required and click **Save**.\
The attributes are saved.
5. (Optional) Repeat steps 3 and 4 for additional attribute group menus.
6. (Optional) If [internationalization](/v3/guides/settings/internationalization/internationalization) is enabled, from the language dropdown menu, select the desired language variant for the item.
7. (Optional) Click **Publish**.\
The item is moved from draft to active state.
## Related Topics
* [Bundles Overview](/v3/guides/product-catalog/list/bundles/bundles)
* [Adding a Bundle](/v3/guides/product-catalog/list/bundles/adding-a-bundle)
* [Importing Bundles](/v3/guides/product-catalog/list/bundles/importing-bundles)
* [Viewing Bundle Import History](/v3/guides/product-catalog/list/bundles/viewing-bundle-import-history)
* [Searching, Filtering, and Sorting Bundles](/v3/guides/product-catalog/list/bundles/searching-filtering-sorting-bundles)
# Importing Bundles
Bundles are two or more items sold together. Creating a bundle allows you to group items that are exclusively sold together or group items that can be purchased together and separately.
This document covers the process of adding multiple bundles through CSV import. You can also [add a single bundle](/v3/guides/product-catalog/list/bundles/adding-a-bundle).
## CSV File Guidelines
You can import bundles using CSV files only; no other data or file formats are supported. Here are the key points to consider:
* Formulas in formula-driven attributes are executed automatically after bundles have been imported.
* If the CSV file doesn't have an attribute that's added to the category, you can add a new column in the CSV with the attribute name in the header. The upload process will populate the value for this attribute. Note that empty rows and columns are ignored.
* Each bundle should include a category node. If the category node is missing, the bundle won't be created.
* Use the **- >** delimiter for category nodes. Incorrect mapping or absence of category nodes may result in bundle creation issues.
* The headers, represented in the first row of the CSV file, should match the attributes of the bundle. While attribute titles aren't case-sensitive, maintaining case consistency with the original attribute titles is recommended.
* Empty rows and columns are ignored.
* When updating or upserting bundles, entering *NULL* in a spreadsheet cell will override existing values with blank values.
* The ActionTarget field determines what action is being taken for that row of data.
We recommend that you download the template file to use as a guide when creating your own CSV file for import to minimize errors during the import process.
### Supported actions
| **Action** | **Description** |
| ---------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **UPSERT** | Creates a new bundle if the bundle doesn't exist, or updates an existing bundle. |
| **CREATE** | Creates a new bundle. |
| **UPDATE** | Updates an existing bundle. |
| **PUBLISH** | Publishes an existing bundle that's in draft state, making it available on the storefront. |
| **UNPUBLISH\_KEEP\_DRAFT** | Unpublishes an existing bundle. If a draft version exists, the live version is unpublished and the draft is retained. If no draft exists, the live version is unpublished is saved as a draft. |
| **UNPUBLISH\_KEEP\_LIVE** | Unpublishes an existing bundle and moves it to the draft state. If a draft of that item already existed, it's deleted. |
| **DELETE** | Deletes the existing bundle. |
| **ATTACH\_BUNDLE\_PRODUCTS** | Adds products to an existing bundle. You can specify the product SKU and quantity of the bundle products in the items column. |
| **DETACH\_BUNDLE\_PRODUCTS** | Detaches products from an existing bundle and converts them to items. The items column holds the SKU and quantity of the bundle products to be detached from the bundled SKU. |
| **CHANGE\_CATEGORY** | Updates the category of an existing bundle. Depending on how your storefront is configured, this may change where or how your bundle is viewed by the customer. |
| **ATTACH\_CHANNELS** | Adds specified channels to the bundle. The channels column holds the channels to be attached. |
| **DETACH\_CHANNELS** | Removes specified channels from the bundle. The channels column holds the channels to be detached. |
### Attribute data format
When preparing your CSV file for import, ensure that the attribute data format aligns with attribute type requirements. Different attribute types have specific formatting criteria:
| **Data Type** | **Format Rule** |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Text** | Ensure the data is in text string format. |
| **Number** | Use numerical data only. All non-numeric data is ignored. |
| **Boolean** | Use *TRUE* or *FALSE* only. All other values are ignored. |
| **Date** | Format dates exactly as during attribute creation. |
| **List of values** | The value you enter must match one of the predefined values you set up when [adding a list of values attribute](/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute). |
| **Serial** | Leave this field blank; fabric automatically generates the serial number during import. |
| **SKU** | Provide the SKU for the bundle to be created. |
The status attribute is imported as live only when all mandatory attributes are provided for the bundle. Otherwise, the status is automatically updated to draft, regardless of the value you provide in the file.
## Prerequisites
Before initiating the bundle import, ensure that:
* You have created at least one leaf category with attributes assigned to it to add the bundle to. For more information about creating categories, see the [Categories section](/v3/guides/product-catalog/categories/adding-a-category).
* The CSV file adheres to the guidelines.
## Procedure
1. In the left menu, click **Product Catalog > List > Bundles**.\
The **Bundles** page is displayed.
2. Click **Import**.\
The **Select a leaf category** window is displayed.
3. Select a **Leaf**.\
The root categories and leaf categories appear as they're set up in Categories. Depending on your configuration, you may have to select one or more root categories before selecting a leaf category.
4. Click **Next**.\
The **Import CSV file** window is displayed. This window provides a link to download an example template for the CSV file.
5. To import a CSV file, do one of the following options:
* Drag and drop the CSV file into the window.
* Click **Select a File from your computer**.
6. Click **Import file**.
The CSV file is imported, and the bundles are added to your product list.
fabric stores the CSV files you upload to your account. You can view the status of the import and re-download the original files by visiting the [Import History](/v3/guides/product-catalog/list/bundles/viewing-bundle-import-history) page.
## Troubleshooting
Refer to the following table for a list of common errors when importing and how to correct them.
| Error Message | What it Means | What Happens to the Bundle | How to Resolve | Comment |
| ------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------- |
| **Category Node not found** | The category node name is incorrect or missing. | A bundle can’t be created without a proper category node. | Verify the name of the node and the delimiter. | |
| **Internal Server Error** | Server issues. | The bundle isn't created or updated. | Try again. | This is an intermittent issue. |
| **Attribute Name not found** | The attribute mentioned in the CSV header isn't added to the category. The attribute name must be an exact match. | The bundle is created, but this specific attribute will be ignored. | Check the attribute name and ensure it's added to the category for importing bundles. | |
| **Attribute Name value is invalid** | The provided value has flaws or validation issues. | The attribute value won't be saved to the bundle. | Provide the correct attribute value. | Example: Adding text for a number-type attribute triggers this error. |
| **Status Mandatory attributes (required)** | To set a bundle's status to live, all mandatory attributes are required. | The bundle is created, and the attributes are updated. However, it can't be set to live, defaulting its status to draft. | Ensure all mandatory attributes have a value in the CSV file. | For delta imports, all mandatory attributes and values are required to set the bundle's status to live. |
| **Some mandatory attribute values missing** | Some mandatory attributes lack values in the CSV file. These are either globally mandatory attributes (set at the attribute level) or category-specific mandatory attributes. The bundle is created with errors; only values in the CSV are added. | Include values for all mandatory attributes. | Bundles with missing mandatory attributes can't be set to live. | |
## Related Topics
* [Bundles Overview](/v3/guides/product-catalog/list/bundles/bundles)
* [Adding a Bundle](/v3/guides/product-catalog/list/bundles/adding-a-bundle)
* [Viewing Bundle Import History](/v3/guides/product-catalog/list/bundles/viewing-bundle-import-history)
* [Editing a Bundle](/v3/guides/product-catalog/list/bundles/editing-a-bundle)
* [Searching, Filtering, and Sorting Bundles](/v3/guides/product-catalog/list/bundles/searching-filtering-sorting-bundles)
# Searching, Filtering, and Sorting Bundles
The search, filter, and sort options on the **Bundles** page allows you to refine the3 list of bundles or find a specific bundle.
You can use the filter option only if you have multiple bundles in your list and the bundles belong to multiple categories and collections with different attributes and values.
### To search for one or more bundles, do the following:
1. In the left menu, click **Product Catalog > List > Bundles**.
The Bundles page is displayed.
2. Type a search term into the search bar.
When searching, keep in mind the following:
* You can search for multiple bundles by typing multiple search terms into the search bar, each separated by a comma.
* When searching for multiple bundles, the search terms must be exact. Partial entries yield no results.
* In addition to typing your searches into the search bar, you can also paste them.
3. Press **Enter**.
The results are displayed.
### To filter the list of bundles, do the following:
1. In the left menu, click **Product Catalog > List > Bundles**.
The **Bundles** page is displayed.
2. Choose at least one of the following filters:
* Click the **Category** dropdown and select a category.
* Click the **Collection** dropdown and select a collection.
* Click the **Date** dropdown and select a date range for the date the bundle was created and/or the date the bundles were modified.
* Click the **Attributes & Values** dropdown.
* Select a value to filter by in the **If** field.
* Select a **Validation** option.
* Enter a value in the **Value** field.
* (Optional) Click **Add new condition** to filter by another attribute or value.
Bundles that match the filters you chose are displayed.
Click **Reset filters** to remove all filters.
### To sort the list of bundles, do the following:
1. In the left menu, click **Product Catalog > List > Bundles**.\
The **Bundles** page is displayed.
2. Click one of the column headers to sort the list of bundles.\
Sortable headers are SKU, Product name, Category, Created, and Status.
The bundles are sorted.
### Related Topics
* [Bundles Overview](/v3/guides/product-catalog/list/bundles/bundles)
* [Adding a Bundle](/v3/guides/product-catalog/list/bundles/adding-a-bundle)
* [Importing Bundles](/v3/guides/product-catalog/list/bundles/importing-bundles)
* [Viewing Bundle Import History](/v3/guides/product-catalog/list/bundles/viewing-bundle-import-history)
* [Editing a Bundle](/v3/guides/product-catalog/list/bundles/editing-a-bundle)
# Adding an Item
Items, which are also referred to as products, are services or stand-alone items sold individually. This document covers the process of adding an individual item to your list of products. You can also add multiple items at the same time by [importing](/v3/guides/product-catalog/list/items/importing-items) them using a CSV file.
## Prerequisites
* Ensure that you have set up at least one product attribute group. For more information about creating attribute groups, see [Creating Attribute Groups](/v3/guides/product-catalog/settings/creating-attribute-groups).
* Ensure that you have created at least one leaf category to add the item to. For more information about creating categories, see the [Categories section](/v3/guides/product-catalog/categories/adding-a-category).
## Procedure
1. In the left menu, click **Product Catalog > List > Items**.
The **Items** page is displayed.
2. Click **New Item**.
The **Select a leaf category** window is displayed. This window displays the root categories and leaf categories that are configured in [Categories](/v3/guides/product-catalog/categories/categories_overview_overview).
3. Select a leaf category.
Leaf categories are labelled with **leaf**. You must click a root category to view the leaf categories within that category. If a root category has more root categories within it, you might have to continue selecting root categories until you can select a leaf category.
4. Click **Next**.
The attribute groups you have created and mapped are displayed based on the configuration in the **Attributes** page.
5. To edit an attribute group, click the **Edit** button next to the attribute group name.
6. In the **Edit Attributes** window, enter the required details in each attribute field.
The attributes fields in the **Edit Attributes** window lists the [product attributes](/v3/guides/product-catalog/attributes/product-attributes-overview) and [category attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/category-attributes-overview) that you have already created.
1. Click **Save**.
If you want to use more than one attribute group, repeat the above steps for all of those attribute groups.
2. (Optional) If [internationalization](/v3/guides/settings/internationalization/internationalization#internationalization) is enabled, from the language dropdown menu, select the desired language variant for the item.
3. (Optional) Click **Publish**.
The item is now published and moved from draft to active state.
## Related Topics
* [Items Overview](/v3/guides/product-catalog/list/items/items)
* [Importing Items](/v3/guides/product-catalog/list/items/importing-items)
* [Viewing Item Import History](/v3/guides/product-catalog/list/items/viewing-item-import-history)
* [Bulk Operations for Items](/v3/guides/product-catalog/list/items/bulk-operations-items)
* [Editing an Item](/v3/guides/product-catalog/list/items/editing-an-item)
* [Adding Item Variants](/v3/guides/product-catalog/list/items/adding-item-variants)
* [Searching, Filtering, and Sorting Items](/v3/guides/product-catalog/list/items/searching-filtering-sorting-items)
# Adding Item Variants
Item variants are different versions of a base product that shoppers can choose from. With variants, you can offer an extensive catalog on your storefront, giving shoppers various options for the same item, such as size, color, or material. You can create and manage any number of combinations of options for variations of an item in fabric.
For example, a store sells a dining table in three different materials: oak, pine, or mahogany. Each material comes in options that accommodate 4, 6, or 8 people. Using the variants, you can create 9 different variations for the parent item, the dining table, as shown in the following table:
| | Oak | Pine | Mahogany |
| ----------- | ------------ | ------------- | ----------------- |
| **Seats 4** | Oak, seats 4 | Pine, seats 4 | Mahogany, seats 4 |
| **Seats 6** | Oak, seats 6 | Pine, seats 6 | Mahogany, seats 6 |
| **Seats 8** | Oak, seats 8 | Pine, seats 8 | Mahogany, seats 8 |
With the above settings, the storefront displays the parent item with 9 options. Each of these options is a variant of the parent item and is referred to as the child item.
There are two ways to create a variant for an item:
* **Select existing items:** Use this method to add variants to an item by selecting from the items that are already present in your items list. You can use this method only if the desired item specifications or attributes already exist within your catalog.
* **Create variants:** Use this method when you want to introduce an item with new attributes or specifications as a variant of a pre-existing item. In this method, you can simultaneously create a new item and set it as a variant of an existing item.
## Prerequisites
Ensure that you have at least one item in your list to use the **Create variants** method of creating variants.
Ensure that you have at least two items in the same category in your list (one to use as the parent and one to set as the child) to use the **Select existing items** method.
## Procedure
### Select existing items
1. In the left menu, click **Product Catalog > List > Items**.\
The **Items** page is displayed.
2. Click an item.\
The **Item Details** page is displayed.
3. Click **Variants**.\
The **Variants** tab is displayed.
4. Click **Add Variants**.\
The **Create Relationship** page is displayed. It shows the items that are in the same category as the item you selected in step 2. Items in the category that already have variants aren't displayed.
5. Select the checkbox next to the item to set as a variant.\
You can select as many items as required.
6. Click **Save**.
The variant is added to the item.
### Create variants
1. In the left menu, click **Product Catalog > List > Items**.\
The **Items** page is displayed.
2. Click an item.\
The **Item Details** page is displayed.
3. Click **Variants**.\
The **Variants** tab is displayed.
4. Click **Add Variants**.\
The **Create Relationship** page is displayed.
5. Click **Create variants**.\
The **Create variants** tab is displayed.
6. (Optional) Enter the number of variants to create.
7. Click **Add**.\
The variants are added.
8. Click **Edit**.\
The **Edit Attributes** window is displayed.
9. Enter the attribute fields as required and click **Save**.
10. (Optional) Repeat steps 7 and 8 for additional variants.
The variants are created.
## Related Topics
* [Items Overview](/v3/guides/product-catalog/list/items/items)
* [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item)
* [Importing Items](/v3/guides/product-catalog/list/items/importing-items)
* [Viewing Item Import History](/v3/guides/product-catalog/list/items/viewing-item-import-history)
* [Bulk Operations for Items](/v3/guides/product-catalog/list/items/bulk-operations-items)
* [Editing an Item](/v3/guides/product-catalog/list/items/editing-an-item)
* [Searching, Filtering, and Sorting Items](/v3/guides/product-catalog/list/items/searching-filtering-sorting-items)
# Bulk Operations for Items
This topic covers the process of performing bulk actions on items in your Product Catalog.
You can also perform these operations via [CSV import](/v3/guides/product-catalog/list/items/importing-items).
## Delete
1. In the left menu, click **Product Catalog > List > Items**.
The **Items** page is displayed.
2. In the left column, select the items to delete.
The bulk operations controls are displayed.
3. Click the **Delete** button.
The selected items are deleted.
## Export
1. In the left menu, click **Product Catalog > List > Items**.
The **Items** page is displayed.
2. In the left column, select the items to export.
The bulk operations controls are displayed.
3. Click the **Export** button.
The selected items are exported as a CSV file. The download begins automatically as soon as the file is ready.
Track the export status by going to **Product Catalog > Background Jobs > Export**.
## Update Attributes Values
1. In the left menu, click **Product Catalog > List > Items**.
The **Items** page is displayed.
2. In the left column, select the items with attributes to update.
The bulk operations controls are displayed.
3. Click the vertical ellipsis (**⋮**) and select **Update Attributes Values**.
The **Update attribute values** window is displayed.
4. In the **Choose attributes to update** field, select the attributes you want to change.
* After you make your selections, click the **Update attribute values** window outside of the field dropdown.
5. Enter the new values for the fields you selected and click **Update**.
A new window is displayed.
6. Do one of the following:
* To save the updated items and publish them, click **Save & Publish**.
* To save the updated items as drafts, click **Save As Draft**.
Note: Items in a draft state will remain drafts.
The changes you made the selected attributes are saved, and the items are placed in the state you selected.
## Change Category
Changing the category for multiple items at once removes the attributes of the current category and adds the attributes to the destination category.
1. In the left menu, click **Product Catalog > List > Items**.
The **Items** page is displayed.
2. In the left column, select the items to change categories.
The bulk operations controls are displayed.
3. Click the vertical ellipsis (**⋮**) and select **Change category**.
The **Select a leaf node** window is displayed with a list of your categories.
4. Select a leaf category.
When you click a root category, its subcategories are displayed to the right. Leaf categories are labeled **Leaf**.
5. CLick **Next**.
6. The **Are you sure?** window is displayed.
7. Click **Update**.
The selected items are moved to the new category.
## Publishing
1. In the left menu, click Product **Catalog > List > Items**.
The **Items** page is displayed.
2. In the left column, select the items to publish.
The bulk operations controls are displayed.
3. Click the vertical ellipsis (**⋮**) and select **Publish Products**.
The **Publish Products?** window is displayed.
4. Click **Publish**.
The selected items are published.
## Unpublishing
1. In the left menu, click **Product Catalog > List > Items**.
The **Items** page is displayed.
2. In the left column, select the items to publish.
The bulk operations controls are displayed.
3. Click the vertical ellipsis (**⋮**) and select **Publish Products**.
The **Unpublish Products?** window is displayed.
4. Click **Unpublish**.
The selected items are unpublished.
## Related Topics
* [Items Overview](/v3/guides/product-catalog/list/items/items)
* [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item)
* [Importing Items](/v3/guides/product-catalog/list/items/importing-items)
* [Viewing Item Import History](/v3/guides/product-catalog/list/items/viewing-item-import-history)
* [Editing an Item](/v3/guides/product-catalog/list/items/editing-an-item)
* [Adding Item Variants](/v3/guides/product-catalog/list/items/adding-item-variants)
* [Searching, Filtering, and Sorting Items](/v3/guides/product-catalog/list/items/searching-filtering-sorting-items)
# Editing an Item
Items on your product list can be edited in the List section of **Product Catalog**.
## Prerequisites
* Ensure that you have [added](/v3/guides/product-catalog/list/items/adding-an-item) or [imported](/v3/guides/product-catalog/list/items/importing-items) at least one item.
## Procedure
1. In the left menu, click **Product Catalog > List > Items**.\
The **Items** page is displayed.
2. Click an item.\
The **Item Details** page is displayed.\
The attribute groups you have created and mapped are displayed.
3. Click the **Edit** button next to an attribute group.\
The **Edit Attributes** window is displayed.
4. Edit the attributes as required and click **Apply**.\
The attributes are saved.
5. (Optional) Repeat steps 3 and 4 for additional attribute group menus.
6. (Optional) If [internationalization](/v3/guides/settings/internationalization/internationalization) is enabled, from the language dropdown menu, select the desired language variant for the item.
7. (Optional) Click **Save & Publish**.\
The item is moved from draft to active state.
## Related Topics
* [Items Overview](/v3/guides/product-catalog/list/items/items)
* [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item)
* [Importing Items](/v3/guides/product-catalog/list/items/importing-items)
* [Viewing Item Import History](/v3/guides/product-catalog/list/items/viewing-item-import-history)
* [Bulk Operations for Items](/v3/guides/product-catalog/list/items/bulk-operations-items)
* [Adding Item Variants](/v3/guides/product-catalog/list/items/adding-item-variants)
* [Searching, Filtering, and Sorting Items](/v3/guides/product-catalog/list/items/searching-filtering-sorting-items)
# Importing Items
Items, a type of product, are objects sold individually as simple SKUs or as the parent to a variant. This document covers the process of importing multiple items using a CSV file. You can also [add items individually](/v3/guides/product-catalog/list/items/adding-an-item).
## CSV File Guidelines
You can import products using CSV files only; no other data or file formats are supported. Here are the key points to consider:
* Formulas in formula-driven attributes are executed automatically after items have been imported.
* If the CSV file doesn't have an attribute that's added to the category, you can add a new column in the CSV with the attribute name in the header. The upload process will populate the value for this attribute.
* Empty rows and columns are ignored.
* Each item should include a category node. If the category node is missing, the item won't be created.
* Use the **->** delimiter for category nodes. Incorrect mapping or absence of category nodes may result in item creation issues.
* The headers, represented in the first row of the CSV file, should match the attributes of the item. While attribute titles aren't case-sensitive, maintaining case consistency with the original attribute titles is recommended.
* The Action field determines what action is being taken for that row of data.
* When updating or upserting items, entering *NULL* in a spreadsheet cell will override existing values with blank values.
We recommend that you download the template file to use as a guide when creating your own CSV file for import to minimize errors during the import process.
### Supported actions
| **Action** | **Description** |
| -------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **UPSERT** | Creates a new product if it doesn't exist, or updates an existing product. |
| **CREATE** | Creates a new product. |
| **UPDATE** | Updates an existing product. |
| **PUBLISH** | Publishes an existing product that's in draft state to the storefront. |
| **UNPUBLISH\_KEEP\_DRAFT** | Unpublishes an existing product. If a draft exists, the live version is deleted and the draft is retained. If no draft exists, the live version is saved as draft. |
| **UNPUBLISH\_KEEP\_LIVE** | Unpublishes an existing product and moves it to draft state. If a draft of that item already existed, it's deleted. |
| **DELETE** | Deletes the existing product. |
| **ATTACH\_VARIANT** | Adds variants to an existing parent product. Specify the variant SKU in the variant column. |
| **DETACH\_VARIANT** | Detaches existing variants and converts them to items. The variant column specifies the variant to be detached from the SKU. |
| **CHANGE\_CATEGORY** | Updates the category of an existing product. Depending on how your storefront is configured, this may change where or how your product is viewed by the customer. |
### Attribute data format
When preparing your CSV file for import, ensure that the attribute data format aligns with attribute type requirements. Different attribute types have specific formatting criteria:
| **Data Type** | **Format Rule** |
| ------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Text** | Provide data in text string format. |
| **Number** | Use numerical data only. All non-numeric data is ignored. |
| **Boolean** | Use *TRUE* or *FALSE* only. All other values are ignored. |
| **Date** | Match the date format specified during [attribute creation](/v3/guides/product-catalog/attributes/adding-a-date-attribute). |
| **List of values** | The value you enter must match one of the predefined values you set up when [adding a list of values attribute](/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute). |
| **Serial** | Leave this field blank; fabric automatically generates the serial number during import. |
| **SKU** | Provide the SKU for the item. |
The status attribute is imported as live only when all mandatory attributes are provided for the item. Otherwise, the status is automatically updated to draft, regardless of the value you provide in the file.
## Prerequisites
Before initiating the item import, ensure that:
* Ensure that you have created at least one leaf category with attributes assigned to it to add items to. For more information about creating categories, see the [Categories section](/v3/guides/product-catalog/categories/adding-a-category).
* The CSV file adheres to the guidelines.
## Procedure
1. In the left menu, click **Product Catalog > List > Items**.\
The **Items** page is displayed.
2. Click **Import**.\
The **Select a leaf category** window is displayed.
3. Select a **Leaf** to which you want to import items.\
The **Select a leaf category** window is displayed. This window displays the root categories and leaf categories that are configured in [Categories](/v3/guides/product-catalog/categories/categories).
4. Click **Next**.\
The **Import CSV file** window is displayed. This window provides a link to download an example template for the CSV file.
5. To import a CSV file, do one of the following options:
* Drag and drop the CSV file into the window.
* Click **Select a File**.
6. Click **Import file**.
The CSV file is imported and the items are added to your product list.
fabric stores the CSV files you upload to your account. You can view the status of the import and re-download the original files by visiting the [Import History](/v3/guides/product-catalog/list/items/viewing-item-import-history) page.
### Troubleshooting
Refer to the following table for a list of common errors when importing and how to correct them.
| **Error Message** | **What it means?** | **What happens to the item?** | **How to resolve?** | **Comment** |
| -------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| Category Node not found | The category node name is incorrect or missing. | An item can’t be created without a proper category node given. | Verify the name of the node and the delimiter. | |
| Internal Server Error | Server issues | The item isn't created or updated | Try again | This is an intermittent issue. |
| Attribute Name not found | The attribute mentioned in the CSV header isn't added to the category. The attribute name must be an exact match. | The item is created, but this specific attribute will be ignored. | Check the name of the attribute and ensure that the attribute is added to the category you are trying to import items to. | |
| Attribute Name value is invalid | The value provided has some flaws or validation issues. | The attribute value won't be saved to the item. | Provide the correct attribute value. | Example: If you add text for a number type attribute, you will receive this error. |
| Status Mandatory attributes required | To set the status of an item to live, all mandatory attributes are required. | The item will be created and the attributes will be updated. However, the item can't be set to live; its status will default to draft. | Ensure that all mandatory attributes have a value in the CSV you are trying to import. | When doing a delta import, it is required to have all mandatory attributes and values added to set the item's status to live. |
| Some mandatory attribute values are missing. | There are some mandatory attributes that don't have values in the CSV file that was uploaded. These are either global mandatory, which are set at the attribute level, or category mandatory, which are set at the individual category level. | The item is created with errors. Only the values in the CSV will be added. | Include values for all mandatory attributes. | Items can be created with errors, but they can’t be set to live unless all mandatory attributes have a value. |
## Related Topics
* [Items Overview](/v3/guides/product-catalog/list/items/items)
* [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item)
* [Viewing Item Import History](/v3/guides/product-catalog/list/items/viewing-item-import-history)
* [Bulk Operations for Items](/v3/guides/product-catalog/list/items/bulk-operations-items)
* [Editing an Item](/v3/guides/product-catalog/list/items/editing-an-item)
* [Adding Item Variants](/v3/guides/product-catalog/list/items/adding-item-variants)
* [Searching, Filtering, and Sorting Items](/v3/guides/product-catalog/list/items/searching-filtering-sorting-items)
# Items Overview
An item is a standalone service or product sold individually. You can create items manually or import items using a CSV file. Each item can have different variations, known as variants, distinguished by specific differences from the standard version.
For example, in a furniture store, a dining table might have variations in sizes, such as round or rectangular and finishes, such as oak, mahogany, or walnut, resulting in unique versions.
## Related Topics
* [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item)
* [Importing Items](/v3/guides/product-catalog/list/items/importing-items)
* [Viewing Item Import History](/v3/guides/product-catalog/list/items/viewing-item-import-history)
* [Bulk Operations for Items](/v3/guides/product-catalog/list/items/bulk-operations-items)
* [Editing an Item](/v3/guides/product-catalog/list/items/editing-an-item)
* [Adding Item Variants](/v3/guides/product-catalog/list/items/adding-item-variants)
* [Searching, Filtering, and Sorting Items](/v3/guides/product-catalog/list/items/searching-filtering-sorting-items)
# Searching, Filtering, and Sorting Items
The search, filter, and sort options on the **Items** page allows you to refine the list of items or find a specific item.
You can use the filter option only if you have multiple items in your list and the items belong to multiple categories and collections with different attributes and values.
### To search for one or more items, do the following:
1. In the left menu, click **Product Catalog > List > Items**.
The Items page is displayed.
2. Type a search term into the search bar.
When searching, keep in mind the following:
* You can search for multiple items by typing multiple search terms into the search bar, each separated by a comma.
* When searching for multiple items, the search terms must be exact. Partial entries yield no results.
* In addition to typing your searches into the search bar, you can also paste them.
3. Press **Enter**.
The results are displayed.
### To filter the list of items, do the following:
1. In the left menu, click **Product Catalog > List > Items**.\
The **Items** page is displayed.
2. Choose at least one of the following filters:
* Click the **Category** dropdown and select a category.
* Click the **Collection** dropdown and select a collection.
* Click the **Date** dropdown and select a date range for the date the item was created and/or the date the items were modified.
* Click the **Attributes & Values** dropdown.
* Select a value to filter by in the **If** field.
* Select a **Validation** option.
* Enter a value in the **Value** field.
* (Optional) Click **Add new condition** to filter by another attribute or value.
Items that match the filters you chose are displayed.
3. Click **Reset filters** to remove all filters.
### To sort the list of items, do the following:
1. In the left menu, click **Product Catalog > List > Items**.\
The **Items** page is displayed.
2. Click one of the column headers to sort the list of items.\
Sortable header is **Status**.
The items are sorted.
## Related Topics
* [Items Overview](/v3/guides/product-catalog/list/items/items)
* [Adding an Item](/v3/guides/product-catalog/list/items/adding-an-item)
* [Importing Items](/v3/guides/product-catalog/list/items/importing-items)
* [Viewing Item Import History](/v3/guides/product-catalog/list/items/viewing-item-import-history)
* [Bulk Operations for Items](/v3/guides/product-catalog/list/items/bulk-operations-items)
* [Editing an Item](/v3/guides/product-catalog/list/items/editing-an-item)
* [Adding Item Variants](/v3/guides/product-catalog/list/items/adding-item-variants)
# Overview
fabric Product Catalog is a data organization tool that enables merchants to build a centralized source of product information. This information can include technical specifications such as size and weight, design specifications such as color and material, and generic details such as name, description, and ID.
Product categories allow merchants to organize items into logical parent-child groups to make finding products on the storefront easier for the shoppers. While configuring products, merchants can use validations to ensure data consistency and quality for each item and category.
Product Catalog has out-of-the-box integrations with fabric services such as Orders and Offers that enable merchants to add base prices and promotions to any products available in Product Catalog, including categories and collections.
Key Product Catalog capabilities include:
* **Catalog Management:** Create and manage products and services such as items, variants, and bundles. For example, an item could be a coffee table in oak. A variant could be that same coffee table, but in pine. A bundle could be the coffee table sold together with two matching end tables.
* **Taxonomy Management:** Define categories of products to create a structured hierarchy.
* **Distribution management:** Control product data availability for multiple channels and locales and use collections to curate subsets of products for sales and marketing goals, such as holiday sales or seasonal discounts.
* **Bulk Management**: Import product, category, and collection information in a CSV file and export catalog data into a CSV file.
* **Variant management:** Create and manage an unlimited number of variants to indicate that a product is available in different options, such as colors or sizes.
### Use Case
As an example, consider a furniture distributor with an extensive catalog that includes living, dining, and bedroom pieces who wants to display their products for sale on their storefront.
The merchant can upload each item they sell, either individually or in bulk with a CSV file. Attributes of each piece, ranging from physical characteristics such as dimensions and weight to construction characteristics such as materials and finishes can all be included. Variants of items are also supported, so that a coffee table available in mahogany, oak, and pine can all be considered different versions of the same item. In addition, items frequently sold together can be grouped into bundles so that the coffee table can be sold along with a pair of matching end tables.
The merchant can then create a hierarchy of relationships among the items in the catalog that make the most sense to their business. That means the coffee table could be in a category with all living room furniture, or a category of all tables, or both.
The merchant can group items from different categories into themed collections to boost the sales or marketing campaigns. For example, for a Black Friday promotion, merchant can assemble a living room set collection that includes a coffee table, end tables, sofa, loveseat, and lamps.
### Workflow
Basic Product Catalog setup begins with creating attributes, then mapping fabric-mandatory attributes with merchant-defined attributes. The following workflow provides details of the steps involved in product setup:
1. [Create Attributes](/v3/guides/product-catalog/attributes/product-attributes-overview): Create the required attributes for the products. You can also use attribute groups to group relevant attributes and assign to products or categories.
2. [Map Attributes](/v3/guides/product-catalog/attributes/product-attributes-overview): Map the mandatory attributes of fabric, such SKU, title, image, and active status to the corresponding names provided by the merchant.
3. [Add Categories](/v3/guides/product-catalog/categories/adding-a-category): Arrange items, bundles, and variants into a hierarchical tree structure based on common attributes to logically group products.
4. Create Items, Variants, and Bundles: Add your products, which can consist of [items](/v3/guides/product-catalog/list/items/adding-an-item), [bundles](/v3/guides/product-catalog/list/bundles/adding-a-bundle), and [variants](/v3/guides/product-catalog/list/items/adding-item-variants). Prior to adding any products, fabric recommends the following:
* Maintain a list of attributes for products and categories.
* Organize products within a hierarchical tree structure of categories.
* Compile a products list, along with their variants and bundles, to display on the storefront.
5. [Create Collections](/v3/guides/product-catalog/collections/creating-a-collection): Organize products according to marketing needs for display on your storefront. Collections are optional.
Once these steps are complete, basic setup is finished. You may proceed to use the features and capabilities available to you.
### Navigation
Product Catalog is accessible through fabric’s cloud-based application called Copilot, and divided into the following menus and sub-menus:
* **List**
* [Items](/v3/guides/product-catalog/list/items/items): Add, import, and manage product and variant information.
* [Bundles](/v3/guides/product-catalog/list/bundles/bundles): Add, import, and manage bundle information.
* **Attributes**
* [Product Attributes](/v3/guides/product-catalog/attributes/product-attributes-overview): Define item, variant, and bundle characteristics.
* [Category Attributes](/v3/guides/product-catalog/attributes/category-attributes-overview): Define category characteristics.
* **[Categories](/v3/guides/product-catalog/categories/categories_overview):** Create a hierarchy of product groups and relationships.
* **[Collections](/v3/guides/product-catalog/collections/collections):** An alternative method to categories for organizing products.
* **Settings**
* [Attribute Groups](/v3/guides/product-catalog/settings/attribute-groups-overview): Organize similar attributes together.
* [Attribute Mapping](/v3/guides/product-catalog/settings/attribute-mapping-overview): Ensure data in Product Catalog is readable and usable to other systems.
# Attribute Groups Overview
### Overview
Attribute groups enable merchants to organize various attributes together based on meaning or purpose for an easier, more logical flow during the set up process.
For example, a furniture store might need to have height, width, length, or depth attributes present on the item or bundle listing page on their storefront. The merchant can create an attribute group called *dimensions* so that all dimension-related details can be added in one place when adding a new piece of furniture. This allows merchants to streamline the setup process and reducing the time required to manage extensive attribute data in large catalogs.
Before creating attribute groups, you must first set up the attributes that you want to group together in the Attributes > Products page.
While attribute groups enhance storefront convenience, setting them up is optional and not mandatory for product setup.
### Related Topics
* [Creating Attribute Groups](/v3/guides/product-catalog/settings/creating-attribute-groups)
# Attribute Mapping Overview
### Overview
Before creating items in the Product Catalog, proper attribute mapping is essential to ensure other systems can read and use data from the Product Catalog.
fabric has a predefined set of mandatory attributes for items and bundles that Product Catalog uses to deliver a consistent and reliable experience across channels.
However, merchants may have their own naming conventions for these attributes. For instance, Product Catalog uses the term SKU to refer to a unique product identifier while some merchants use the terms UPC or Part Number. To address this inconsistency, merchant-defined attributes are mapped to fabric attributes as productId -> fabric SKU.
Only the SKU is mandatory to create items, but each basic attribute should be mapped to exactly one attribute from the list of attributes.
Attribute mapping is done once, before uploading any items or bundles. After you have mapped the attributes and begun uploading, the features in attribute mapping are disabled.
### Basic attributes detail
Refer to the following table for more information about each attribute.
| Mapping Name | Attribute Specifications | Why does this need to be mapped? |
| --------------------- | ---------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| SKU | Must be a mandatory Attribute | Each SKU value must be unique. This attribute serves as the primary identifier for items to be created in Product Catalog. |
| Product Title | A text or number type attribute is recommended | This attribute helps Product Catalog identify the display name of the item or bundle. |
| Primary Product Image | A text type attribute is recommended here | This attribute helps Product Catalog identify the main image of the product for thumbnail purposes. |
| Active | Must be a mandatory attribute | Must be a Boolean type attribute. Name the attribute to be Active which can be set to true/false. Required to maintain the status of item to active/disabled. Only items where status is set to Active=TRUE will be available for the commerce API to consume. |
## Related Topics
* [How to Map Attributes](/v3/guides/product-catalog/settings/how-to-map-attributes)
# Creating Attribute Groups
### Overview
Attribute groups enable merchants to organize various attributes together based on meaning or purpose for an easier, more logical flow during the item and bundle set up process.
### Prerequisites
Ensure you have created multiple product attributes.
### Procedure
1. In the left menu, click **Product Catalog > Settings > Attribute Groups**.\
The **Product Settings** page is displayed.
2. Click **Create Attribute Group**.\
The **Create Attribute Group** page is displayed.
3. In the **Attribute group title** field, enter a title for the attribute group.
4. (Optional) In the **Description** field, enter a description for the attribute group.
5. In the **Priority order** field, enter a number.\
The attribute group's position on the **Add Item** or **Add Bundle** pages is determined by its Priority order value—lower numbers indicate higher priority.
6. To add attributes to the group, do one of the following:
* In the **Editable attributes** menu, click **Add attributes**.\
The **Select attributes** window is displayed.
* To add an attribute, click its corresponding checkbox.\
You can add as many attributes as needed, but an attribute can only be added to one attribute group.
* When finished selecting attributes, click **Add**.\
The attributes are added to the group.
* In the **Read-only attributes** menu, click **Add attributes**.\
The **Select attributes** window is displayed.
* To add an attribute, click its corresponding checkbox.\
You can add as many attributes as needed, but an attribute can only be added to one attribute group.
* When finished selecting attributes, click **Add**.\
The attributes are added to the group.
7. Click **Save**.
The attribute group is created.
### Related Topics
* [Attribute Groups Overview](/v3/guides/product-catalog/settings/attribute-groups-overview)
# Mapping Attributes
### Overview
Before creating items in Product Catalog, proper attribute mapping is essential to ensure other systems can read and use data from Product Catalog.
### Prerequisites
Ensure you have administrator privileges to fabric Product Catalog. For more information, see [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control).
### Procedure
1. In the left menu, click **Product Catalog > Settings > Attribute mapping**.\
The **Product Settings** page is displayed.
2. In the **SKU** dropdown, select the attribute you will use for SKU values.
3. In the **Product title** dropdown, select the attribute you will use for product titles.
4. In the **Primary Product Image** dropdown, select the attribute you will use for the primary product image.
5. In the **Active** dropdown, select the attribute you will use to set the item’s status.
6. In the **Variant** dropdown, select an attribute you will use to identify variants.
7. Click **Save**.
The product attributes are mapped.
### Related Topics
* [Attribute Mapping Overview](/v3/guides/product-catalog/settings/attribute-mapping-overview)
# Settings
### Overview
Use the Product Catalog **Settings** menu to create attribute groups and map product attributes.
Use the following links to learn more about attribute groups and attribute mapping.
### Attribute Groups
* [Attribute Groups Overview](/v3/guides/product-catalog/settings/attribute-groups-overview)
* [Creating Attribute Groups](/v3/guides/product-catalog/settings/creating-attribute-groups)
### Attribute Mapping
* [Attribute Mapping Overview](/v3/guides/product-catalog/settings/attribute-mapping-overview)
* [How to Map Attributes](/v3/guides/product-catalog/settings/how-to-map-attributes)
# Bundles Overview
Bundles are combinations of two or more products sold exclusively together or individually, depending on the configuration. Pure bundles consist of items exclusively sold together, and individual items can't be purchased separately. Shoppers have the flexibility to buy items in mixed bundles together or separately.
For example, in a living room furniture set consisting of a coffee table and an end table, shoppers can choose to purchase each table individually or buy both tables together as part of the living room set bundle.
You can create bundles by importing them using a CSV or JSON file.
## Related Topics
* [Importing Bundles](v3/guides/catalog-connector/importing-bundles)
* [Viewing Bundle Attributes, Variants, and Channels](v3/guides/catalog-connector/viewing-bundle-attributes-variants-channels)
* [Searching and Filtering Bundles](v3/guides/catalog-connector/searching-filtering-sorting-bundles)
* [Viewing Import History](v3/guides/catalog-connector/viewing-bundle-import-history)
# Importing Bundles
## Overview
Bundles are two or more items sold together. Creating a bundle allows you to group items that are exclusively sold together or group items that can be purchased together and separately.
This document covers the process of importing bundles, which is done using a CSV or JSON file.
## File Guidelines
You can import products using a CSV or JSON file only; no other data or file formats are supported.
* SKU is a required field to create or update a bundle.
* When adding a SKU to a bundle, enter the quantity to add in the same cell as the SKU itself. For example, if a bundle requires two of item 12345, enter *2, 12345* in the SKU cell.
* When updating or upserting bundles, entering *null* in a spreadsheet cell will override existing values with blank values.
Although not required, we recommend that you download the template file to use as a guide when creating your own file for import to minimize errors during the import process.
### Attribute Data Format
When preparing your file for import, ensure that the attribute data format aligns with following attribute type requirements:
* String: Ensure the data is in text string format. If a string attribute contains multiple values, the values need to be sent as a stringified array, for example: `["a","b"]`.
* Number: Numerical data only.
* Boolean: Use *true* or *false* only; other values will be ignored.
## Procedure
1. In the left menu, click **Catalog Connector > List > Bundles**.\
The **Bundles** page is displayed.
2. Click **Import bundles**.\
The **Import CSV file** window is displayed. This window provides a link to download example templates for JSON and CSV files.
3. To import a file, do one of the following options:
* Drag and drop the file into the window.
* Click **Select a File** from your computer.
4. Click **Import file**.
The file is imported and the bundles are added to your product list.
fabric stores the files that you upload to your account. You can view the status of the import operation and re-download the original files by visiting the **Import History** page.
## Troubleshooting
For a list of common errors when importing and how to correct them, refer to the following table:
| **Error Message** | **Description** | **Impact** | **Solution** | **Comment** |
| --------------------- | --------------- | ------------------------------------ | ------------ | ------------------------------ |
| Internal Server Error | Server issues | The bundle isn't created or updated. | Try again | This is an intermittent issue. |
## Related Topics
* [Bundles Overview](v3/guides/catalog-connector/bundles-overview)
* [Viewing Bundle Attributes, Variants, and Channels](v3/guides/catalog-connector/viewing-bundle-attributes-variants-channels)
* [Searching and Filtering Bundles](v3/guides/catalog-connector/searching-filtering-sorting-bundles)
* [Viewing Import History](v3/guides/catalog-connector/viewing-bundle-import-history)
# Importing Items
Items, which are also referred to as products, are services or stand-alone objects sold individually. This document covers the process of importing items, which is done using a CSV or JSON file.
## File Guidelines
You can import products using a .csv or .json file only. No other data or file formats are supported.
* SKU is a required field to create or update an item.
* You can detach child or variant items from the parent item when importing by entering detach in the Parent SKU field. When the parent/child relationship is removed, the child or variant item becomes a standalone SKU.
* When updating or upserting items, entering null in a spreadsheet cell will override existing values with blank values.
Although not required, fabric recommends that you download the template file to use as a guide when creating your own file for import to minimize errors during the import process.
### Attribute data format
When preparing your file for import, ensure that the attribute data format aligns with following attribute type requirements:
* String: Ensure the data is in text string format. If a string attribute contains multiple values, the values need to be sent as a stringified array, for example: `"a", "b"`.
* Number: Numerical data only.
* Boolean: Use true or false only; other values will be ignored.
## Procedure
1. In the left menu, click **Catalog Connector > List > Items**.
The **Items** page is displayed.
2. Click **Import items**.
The **Import CSV file** window is displayed. This window provides a link to download example templates for .csv and .json files.
3. To import a file, do one of the following options:
* Drag the file into the window.
* Click **Select a File** from your computer.
4. Click **Import file**.
The file is imported and the items are added to your product list.
fabric stores the files that you upload to your account. You can view the status of the import operation and re-download the original files by visiting the **Import History** page.
## Troubleshooting
For a list of common errors when importing and how to correct them, refer to the following table:
| **Error Message** | **Description** | **Impact** | **Comment** | **Comment** |
| --------------------- | --------------- | ---------------------------------- | ----------- | ------------------------------ |
| Internal Server Error | Server issues | The item isn't created or updated. | Try again | This is an intermittent issue. |
## Related Topics
* [Items Overview](v3/guides/catalog-connector/items-overview)
* [Viewing Item Attributes, Variants, and Channels](v3/guides/catalog-connector/viewing-item-attributes-variants-channels)
* [Searching, Filtering, and Sorting Items](v3/guides/catalog-connector/searching-filtering-sorting-items)
* [Viewing Import History](v3/guides/catalog-connector/viewing-item-import-history)
# Items Overview
An item is a standalone service or product sold individually. You can create items by importing them using a .csv or .json file. Each item can have different variations, known as variants, distinguished by specific differences from the standard version. fabric Catalog Connector doesn't validate or display the relationship between a parent and its variants. It simply stores each product as a distinct item.
## Related Topics
* [Importing Items](v3/guides/catalog-connector/importing-items)
* [Viewing Item Attributes, Variants, and Channels](v3/guides/catalog-connector/viewing-item-attributes-variants-channels)
* [Searching, Filtering, and Sorting Items](v3/guides/catalog-connector/searching-filtering-sorting-items)
* [Viewing Import History](v3/guides/catalog-connector/viewing-item-import-history)
# Catalog Connector Overview
Catalog Connector is a denormalized data organization tool that enables merchants to link information from their third-party product information management system to their fabric account, making it accessible across fabric modules such as Offers, Orders, and Inventory.
This data can include technical specifications, such as size and weight, design attributes, such as color and material, and generic product details such as name, description, and ID.
Catalog Connector provides out-of-the-box integrations with fabric services, such as Orders and Offers, that enable merchants to apply base prices and promotions to any products available within the Catalog Connector.
Key Catalog Connector capabilities include:
* **Bulk Management:** Import product information in a CSV or JSONL file.
* **Catalog Management:** Manage product create, update, and delete actions, including parent, variant, and bundle products.
Catalog Connector is only available to fabric users who haven't purchased fabric’s proprietary product information manager, Product Catalog.
Catalog Connector setup involves importing products and bundles and their properties in a CSV or JSONL file.
## Related Topics
### Items
* [Items Overview](v3/guides/catalog-connector/items-overview)
* [Importing Items](v3/guides/catalog-connector/importing-items)
* [Viewing Item Attributes, Variants, and Channels](v3/guides/catalog-connector/viewing-item-attributes-variants-channels)
* [Searching, Filtering, and Sorting Items](v3/guides/catalog-connector/searching-filtering-sorting-items)
* [Viewing Import History](v3/guides/catalog-connector/viewing-item-import-history)
### Bundles
* [Bundles Overview](v3/guides/catalog-connector/bundles-overview)
* [Importing Bundles](v3/guides/catalog-connector/importing-bundles)
* [Viewing Bundle Attributes, Variants, and Channels](v3/guides/catalog-connector/viewing-bundle-attributes-variants-channels)
* [Searching and Filtering Bundles](v3/guides/catalog-connector/searching-filtering-sorting-bundles)
* [Viewing Import History](v3/guides/catalog-connector/viewing-bundle-import-history)
# Searching, Filtering, and Sorting Bundles
## Overview
The search and filter options on the **Bundles** page allow you to refine the list of bundles or find a specific bundle.
### To search for a specific bundle, do the following:
1. In the left menu, click **Catalog Connector > List > Bundles**.\
The **Bundles** page is displayed.
2. To search for a bundle, in the search bar, type a search term and press **Enter**.
The results are displayed.
### To filter the list of bundles, do the following:
1. In the left menu, click **Catalog Connector > List > Bundles**.\
The **Bundles** page is displayed.
2. Choose at least one of the following filters:
* Click the **Date** dropdown and select a date range for the date the bundles were created or the date the bundles were modified.
* Click the **Attributes & Values** dropdown, and do the following:
* Enter an attribute name in the **Attribute** field.
* Select a validation option.
* Enter a value in the **Value** field.
* To add more conditions, click **Add new condition** and enter the required values.
Bundles that match the filters you chose are displayed.
You can remove all filters by clicking **Reset all**.
## Related Topics
* [Bundles Overview](v3/guides/catalog-connector/bundles-overview)
* [Importing Bundles](v3/guides/catalog-connector/importing-bundles)
* [Viewing Bundle Attributes, Variants, and Channels](v3/guides/catalog-connector/viewing-bundle-attributes-variants-channels)
* [Viewing Import History](v3/guides/catalog-connector/viewing-bundle-import-history)
# Searching, Filtering, and Sorting Items
## Overview
The search, filter, and sort options on the **Items** page allow you to refine the list of items or find a specific item.
You can use the filter option only if you have multiple items in your list.
### To search for a specific item, do the following:
1. In the left menu, click **Catalog Connector > List > Items**.\
The **Items** page is displayed.
2. To search for an item, in the search bar, type a search term and press **Enter**.
The results are displayed.
### To filter the list of items, do the following:
1. In the left menu, click **Catalog Connector > List > Items**.\
The **Items** page is displayed.
2. Choose at least one of the following filters:
* Click the **Date** dropdown and select a date range for the date the items were created or the date the items were modified.
* Click the **Attributes & Values** dropdown, and do the following:
* Enter a search term in the **Attribute** field.
* Select a validation option.
* Enter a value in the **Value** field.
* To add more conditions, click Add new condition and enter the required values
* Click the **Type** dropdown and select Item or Variant
Items that match the filters you chose are displayed.
You can remove all filters by clicking **Reset all**.
### To sort the list of items, do the following:
1. In the left menu, click **Catalog Connector > List > Items**.\
The **Items** page is displayed.
2. Click one of the column headers to sort the list of items.\
Sortable headers are **SKU**, **Item ID**, **Product name**, **Channels**, **Category**, and **Created**.
The items are sorted.
## Related Topics
* [Items Overview](v3/guides/catalog-connector/items-overview)
* [Importing Items](v3/guides/catalog-connector/importing-items)
* [Viewing Item Attributes, Variants, and Channels](v3/guides/catalog-connector/viewing-item-attributes-variants-channels)
* [Viewing Import History](v3/guides/catalog-connector/viewing-item-import-history)
# Viewing Bundle Details
## Overview
After you have uploaded a CSV or JSON file of your items, you can view the bundle details on the **Bundles** page.
## Prerequisites
Ensure that you have imported at least one CSV or JSON file of your bundles.
### To view bundle attributes, do the following:
1. In the left menu, click **Catalog Connector > List > Bundles**.\
The **Bundles** page is displayed.
2. In the **SKU** column, click the SKU of the bundle.\
The bundle details page with attributes, variants, and channels is displayed. You can click the corresponding tab to view the details.
Bundle attribute information is displayed.
### To view bundle items, do the following:
1. In the left menu, click **Catalog Connector > List > Bundles**.\
The **Bundles** page is displayed.
2. Click a **SKU**.\
The SKU details page is displayed on the **Bundle information** tab.
## Related Topics
* [Bundles Overview](v3/guides/catalog-connector/bundles-overview)
* [Importing Bundles](v3/guides/catalog-connector/importing-bundles)
* [Searching and Filtering Bundles](v3/guides/catalog-connector/searching-filtering-sorting-bundles)
* [Viewing Import History](v3/guides/catalog-connector/viewing-bundle-import-history)
# Viewing Bundle Import History
## Overview
You can check the status of bundle import operations on the **Import History** page. Successful imports are marked as **Completed**. Imports that failed are marked with **Failed**.
## Procedure
1. In the left menu, click **Catalog Connector > List > Bundles**.\
The **Bundles** page is displayed.
2. Click **Import History**.\
The **Import History** page is displayed.
3. Click the name of an import.\
The **Import Summary** page with the details of the import is displayed.
4. (Optional) To download the import details file, click **Download original file**.\
The original CSV or JSON import file is downloaded.
* (Optional) To see the details of an import that had errors, click Export errored bundles. The report is downloaded.
## Related Topics
* [Bundles Overview](v3/guides/catalog-connector/bundles-overview)
* [Importing Bundles](v3/guides/catalog-connector/importing-bundles)
* [Viewing Bundle Attributes, Variants, and Channels](v3/guides/catalog-connector/viewing-bundle-attributes-variants-channels)
* [Searching and Filtering Bundles](v3/guides/catalog-connector/searching-filtering-sorting-bundles)
# Viewing Item Details
## Overview
After you have uploaded a CSV or JSON file of your items, you can view the item details on the **Items** page.
## Prerequisites
Ensure that you have imported at least one CSV or JSON file with the details of the items.
## Procedures
### To view item attributes, do the following:
1. In the left menu, click **Catalog Connector > List > Items**.\
The **Items** page is displayed.
2. In the **SKU** column, click the SKU of the item.\
The items details page is displayed.
## Related Topics
* [Items Overview](v3/guides/catalog-connector/items-overview)
* [Importing Items](v3/guides/catalog-connector/importing-items)
* [Searching, Filtering, and Sorting Items](v3/guides/catalog-connector/searching-filtering-sorting-items)
* [Viewing Import History](v3/guides/catalog-connector/viewing-item-import-history)
# Viewing Item Import History
## Overview
You can check the status of item import operations on the **Import History** page. Successful imports are marked as **Completed**. Imports that failed are marked with **Failed**.
## Procedure
1. In the left menu, click **Catalog Connector > List > Items**.\
The **Items** page is displayed.
2. Click **Import History**.\
The **Import History** page is displayed.
3. Click the name of an import.\
The **Import Summary** page with the details of the import is displayed.
4. (Optional) Click **Download original file**.\
The original CSV or JSON import file is downloaded.
* (Optional) To download the import details file, click **Download original file**.
## Related Topics
* [Items Overview](v3/guides/catalog-connector/items-overview)
* [Importing Items](v3/guides/catalog-connector/importing-items)
* [Viewing Item Attributes, Variants, and Channels](v3/guides/catalog-connector/viewing-item-attributes-variants-channels)
* [Searching, Filtering, and Sorting Items](v3/guides/catalog-connector/searching-filtering-sorting-items)
# Contracts
Manage business-to-business pricing agreements
## Introduction
The Contracts page shows all previously created contracts in a sortable, filterable table. To sort the contracts, click on the Organization Name, Contract ID, Status, or Date Modified column headers. Use the Status, Start Date, and End Date drop-down menus to filter the contracts. The Search bar at the top allows you to find contracts by name, or contract ID. The **Add Contract** button at the top of the page allows you to create a new contract.
## Adding a Contract
To add a new contract, click the **Add Contract** button at the top of the page.
Set up the organization's Basic Information in the **Details** section. Use the Organization Name drop-down menu to select an organization you set up previously in the **Organizations** page. Use the date fields to enter the start and end dates for the organization’s contract.
Click **Next** or **Catalog** to connect the organization and its contract to a price list.
Price lists are set up independently in fabric Offers and allow you to control things like the base and maximum sale prices for items. Setting up individual price lists for each organization allows you to maintain contracted pricing.
Use the **Price List** drop-down menu to choose the price list you set up for this organization. A preview of the price list will appear at the bottom of the page.
The **On Contract** drop-down menu lets you select whether this organization’s price list was agreed upon in the contract. If you selected a specific price list in the previous field and set this field to Yes, the contracted price list will be used. If you set this field to No, the prices listed in the base price list will be used.
When the **Promotion Stacking** field is set to Yes, contracted prices are eligible for promotions. Setting the field to No prevents prices from being discounted beyond the lowest price listed in the associated price list.
When you’re finished creating the organization, click **Save** at the top of the page.
## Editing a Contract
To edit an existing contract, find and click on it in the table on the main Contracts page. On the contract details page, click the **Edit** button to make changes.
Use the **Draft** drop-down menu at the top to set the contract’s status, whether Draft, Active, or Inactive.
To make changes to the Details and Catalog sections, refer to **Adding a Contract** above.
# Customers
Manage business-to-consumer (B2C) customers
## Introduction
The Customers page features a table of all existing customers. To sort the customers in the table, click on the Customer name, or Status column headers. Use the Status and Tags drop-down menus to filter the data that the table shows. The Search bar at the top allows you to find customers by name or email. The **Add Customer** button at the very top of the page allows you to create a new customer.
## Adding a Customer
To add a new customer, click the **Add Customer** button at the top of the page. On the Add Customer page, fill out the customer’s name and email address on the Basic information tab.
## Editing a Customer
To edit an existing customer’s information, find and click on their name in the table on the main Customers page.
The individual customer’s profile displays their current information with a button to switch between **Inactive** and **Active**.
Click on the **Edit customer info** button at the top of the page to make changes to their Basic Information and Additional Information.
To add, edit, or remove addresses associated with the customer’s profile, click on **Manage Addresses**. Then select whether you would like to make changes to the customer’s **Shipping Addresses** or **Billing Addresses**. If the customer has any existing addresses, they will appear below. Use the corresponding Edit and Delete buttons to change or remove them. To add another address, click **Add Shipping Address**, fill out the address fields, and then click **Confirm**. When you’re finished with all your changes, click **Save** at the top of the page.
# Organizations
Manage business-to-business (B2B) customers
## Introduction
The Organizations page shows all previously created organizations in a sortable, filterable table. To sort the organizations, click on the Organization name, Contact Email, or Status column headers. Use the Status drop-down menu to filter the organizations. The Search bar at the top allows you to find organizations by name. The **Add Organization** button at the top of the page allows you to create a new organization.
## Adding an Organization
To add a new organization, click the **Add Organization** button at the top of the page. On the Add Organization page, use the **Active** drop-down menu to set the organization’s status to **Active** or **Inactive** and enter the organization's information in the fields below. At the bottom of the form, use the **Tax Exempt** drop-down menu to set the organization’s tax exempt status. When set to **Yes**, three new required fields appear: Tax ID, Tax Exempt Start Date, and Tax Exempt End Date.
When you’re finished creating the organization, click **Save** at the top of the page.
## Editing an Organization
To edit an existing organization’s information, find and click on its name in the table on the main Organizations page.
The organization’s profile displays its current information divided into four tabs: Details, Addresses, Users, and Groups. Each tab has its own set of fields, information, and features:
* **Details:** The organization’s basic information. Click Edit at the top of the page to make changes, and click Save when finished.
* **Addresses:** All of the organization’s associated addresses. Click on Add Address to add a new address, or click on an existing address to edit it. Click save when finished.
* **Users:** All of the users at the organization. Click on Add User to add a new user, or click on an existing user to edit their profile. Click save when finished.
* **Groups:** All groups of users at the organization. Click on Add Group to add a new group, or click on an existing group to edit it. Click save when finished.
# Overview
fabric customer allows you to manage information for the customers and organizations you do business with, including the contracts you may have with them.
## Prerequisites
Copilot is the primary interface for working with fabric applications. You will need an active account, including an account ID, to access Copilot. Contact your Copilot Admin or Customer Success representative to obtain these credentials.
## Launching Customer
After logging in to Copilot, select **Customer** from the header across the top of the page to access the **Member Dashboard**.
## Navigation
Customer is divided into three separate sections accessible from the left column:
* [Quickstart](/v3/guides/customers/overview) - basic instructions to configure Customer for initial use
* [Customers](/v3/guides/customers/customers) - manage business-to-consumer (B2C) customers
* [Organizations](/v3/guides/customers/organizations) - manage business-to-business (B2B) customers
* [Contacts](/v3/guides/customers/contracts) - manage business-to-business pricing agreements
## Role-Based Access Control (RBAC)
fabric Copilot provides the ability to restrict the access of different users to information and actions available to them through roles. For more information and instructions on how to set up these controls, [visit the RBAC documentation](/v3/guides/settings/rbac/role-based-access-control).
# BigCommerce Integration
## Adding the BigCommerce Integration
1. To access Integrations, click your account name in the menu at the top of the page.
A dropdown menu appears.
2. Select **Retailer Settings**.
The **Retailer Settings** page is displayed.
3. Click **Integrations**.
The **Integrations** page is displayed.
4. Click **Add Integration**.
The **Add Integration** window is displayed with a list of available integrations.
5. Click **Add** next to the BigCommerce tile.
The **Add BigCommerce Integration** window is displayed.
6. In the **Store Identifier** field, enter your BigCommerce store identifier.
7. In the **Store Token** field, enter your BigCommerce store token.
8. Click **Add Integration**
After successful authorization, BigCommerce will show up on the list of the integrations on the **Integrations** page for Dropship.
## Accessing Integration Options
1. To access your Dropship Integrations, click your account name.
2. In the dropdown that appears, select **Merchant Settings**.
The **Merchants Settings** page is displayed.
3. Click **Integrations**.
The **Integrations** page is displayed.
4. Next to the BigCommerce logo, click **Options**.
The **Options** window is displayed.
5. Select one of the following:
* [Configuration](#configuration): The **Configuration** page allows you to make changes to the basic BigCommerce setup and add or disable webhooks.
* [Webhook History](#webhook-history): The **Webhook History** page shows a list of previous webhook callbacks.
## Configuration
The Configuration page allows you to make changes related to how order and transaction information is shared between Dropship and BigCommerce.
### Enable or disable webhooks
The following webhooks are available for BigCommerce and can be enabled or disabled at any time:
| Webhook | Description |
| --------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Orders** | fabric automatically sends purchase orders from your supplier partners directly to your BigCommerce account. Enabling this webhook means that orders from ALL of your supplier connections in fabric will flow through this webhook. |
| **Inventory** | Dropship requires frequent inventory updates to reduce cancellations due to low or no stock. The inventory webhook syncs inventory with Dropship automatically. Turn this webhook off if you prefer to update inventory manually. |
| **Fulfillment** | Dropship requires frequent order fulfillment updates to track orders. The fulfillment webhook syncs order fulfillment data with Dropship automatically. Turn this webhook off if you prefer to update order fulfillment data manually. |
## Webhook History
To access the **Webhook History** page, follow the steps outlined in [Accessing Integration Options](#accessing-integration-options).
The Webhook History page shows details of all the events that have been captured by Dropship from your BigCommerce store:
* **ID:** The ID of the webhook as captured by Dropship.
* **Topic:** The topic that was captured as part of the webhook.
* **Status:** The status of the webhook (success or failure).
* **Payload:** The data that was sent in the webhook payload.
* **Received:** The timestamp of when the webhook was captured. This is in the user’s local time zone.
You can use the filters at the top of the table to adjust the webhook information you see.
# Publishing Products to BigCommerce
## Publishing Products Outside of a Proposal
If a supplier isn't submitting a proposal to you and is importing products through a BigCommerce import, products can be published directly from the **Products Dashboard**.
1. In the main menu, click **Products**.
The products page is displayed.
2. Click **Products** located in the **Browse & Review** section.
3. Select the products that you wish to publish. Alternatively, you can check the top box to select all products on the first page.
4. Click **Actions**.
The **Publish Products** window is displayed.
5. In the **Platform** field, select BigCommerce.
6. In the **Template** field, select **BigCommerce Export Template**.
7. Click **Publish Products**.
## Publishing Products on a Proposal
Suppliers that have submitted product proposals can be approved and published in the **Proposal** menu.
1. In the **Proposal Summary** page, click **Approve**.
The proposal state is changed to **Ready to Publish**.
2. In the **Assortment Proposal** page, click **Ready to Publish**.
A list of approved proposals containing the items ready to be published is displayed.
3. To review a proposal, click the proposal **ID**.
The **Proposal Detail** page is displayed.
4. Click **Approve Products**.
The **Approve Proposal** window is displayed.
5. In the **Do you also want to publish products on this proposal to an external platform?** field, select **Yes**.
6. In the **Platform** field, select **BigCommerce**.
7. In the **Template** field, select **BigCommerce Export Template**.
8. Click **Approve**.
## Checking a Job Status
To confirm that products were successfully created in BigCommerce, you can check the **Jobs Report** in Dropship to review the status of the job itself.
1. Click on your account name in the top right hand corner of the navigation bar.
2. Click **Job Reports**.
The **Job Status** window is displayed with the most recent jobs at the top.
3. Click the job **ID** for the **push\_products** job.
The job report is displayed.
If any errors occurred when attempting to push products to BigCommerce, we recommend filing a ticket with support. Please provide [fabric support](https://support.fabric.inc/hc/en-us/requests/new) with the following:
* The error Job ID
* Vendor Name
* Product details (new products added X date, or entire catalog)
# fabric Integration
The fabric Dropship integration seamlessly integrates with fabric Catalog and fabric Orders.
## Prerequisites
* Ensure that you have **Administrator** privilege to fabric. For more detailed information on these settings, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Configuring the Integration
1. In the Dropship UI company name top-nav, click **Merchant Settings**.
The Merchant Settings page is displayed.
2. Click **Integrations**.
The Integrations page is displayed.
3. Click **Add integration**.
The Add Integration window is displayed.
4. In the **Add Integration** window, click **Add** for the fabric option.
The Add fabric Integration window is displayed.
5. In the fabric Account field, enter your fabric account ID.
To find your fabric account ID, see the guide for [getting your account ID](/v3/guides/settings/account-details/getting-the-account-id.mdx).
6. (Optional) In the **Location Number** field, enter a location number.
This option allows you to connect to a specific location instead of the entire platform.
7. Click **Add Integration**.
You are redirected to the **Integrations** page with the fabric integration now visible.
## Updating Settings
1. In the Dropship UI company name top-nav, click **Merchant Settings**.
The Merchant Settings page is displayed.
2. Click **Integrations**.
The Integrations page is displayed.
3. Click **Add integration**.
The Add Integration window is displayed.
4. In the fabric integration section, click **Options > Configuration**.
The **fabric Settings** page is displayed.
5. (Optional) to update the **Location Number** field, enter a new location number and click update.
### Selecting a webhook
1. To select a webhook, in the **fabric Settings Orders** section, use the **Select Webhook** field.
2. Click the Select Webhook field and select an available webhook.
3. Click **Enable Integration**.
The integration is Synced and enabled.
### Disabling the integration
1. Follow the steps outlined in [Updating Settings](#Updating-Settings).
2. In the Orders section, click **Disable Integration**.
# Import Products & Attributes
Suppliers send product details to their retail partners either through proposals within the fabric Dropship system or through spreadsheets that retailers use to create Import Requests, based on their connection settings with the supplier.
As a retailer, upon receiving products in your catalog from the supplier, you may need to update some of the products' information before publishing them to your store. This is done by updating the items using the **Import Products & Attributes** feature.
## Procedure
Click **Products** in the menu across the top of Dropship. On the Products page, select **Import Products & Attributes**.
On the **Import Products** page, use the **Select Template** dropdown to select a template for the products you’re importing. This will ensure that the data in the file you import is mapped to the product in your store correctly.
Use the Download Empty Template and/or Show Headers buttons to verify you’re uploading to the intended template and format. To learn about templates and how to create them, refer to the [Templates](https://developer.fabric.inc/v3/guides/dropship-retailers/settings/templates) page.
Upload the product spreadsheet using the **Select File** field and click **begin import**.
If there are errors present in the template file the following files are made available:
* **A list of SKUs:** For every import with one or more errors, an Error Report file is generated. This report includes all SKUs and provides an itemized list of errors corresponding to each SKU.
* **A template with only errored items:** A separate file is generated that includes only the items with one or more errors. This allows you to fix these specific items and re-import them without needing to handle the entire original file again.
Once the import is complete, you will see a summary of the import process, including its status.
## Import History
To see a list of all product spreadsheets uploaded previously, visit the Products page and click on the **History** link next to **Import Products & Attributes**.
The Import History page shows a sortable list of all previous imports.
| Field | Description |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **ID** | The import’s unique, fabric-generated identification number. Click the ID to see more detailed information about the import. |
| **Data** | The type of data import. |
| **File** | The name of the file that was imported. Click the file name to download the original file. |
| **Queued** | The date and time the import was initiated. |
| **Processed** | The date and time the import was processed. |
| **Completed** | The date and time the import was completed. |
| **Status** | The result of the import.
- **Success** is displayed when the file is processed successfully.
- **Created with error** is displayed when the file is processed partially but some items had one or more errors.
- **Failed** is displayed when the file fails to upload or when no item is created or updated. |
If you encounter any import error, check the **Jobs Report** by clicking on your account name at the top right corner of the navigation bar.
Select **Jobs Report**.
The most recent job should appear as **Import Products**. Click on the job ID in blue text review the error.
In case of errors during import, we recommend filing a support ticket. Include the **Job ID** and any other relevant information, such as Vendor Name and file, if available.
# Submit and Manage Import Requests
Import requests allow retail partners to preview a supplier's products before the data is added to the Product Catalog.
When an import request is submitted to a supplier, the supplier receives a notification from fabric notifying them that you are waiting for them to review and approve the products.
## Submitting an Import Request
1. In the main menu, click **Products**.
The products page is displayed.
2. Click **Import Requests**.
The **Import Requests** page is displayed.
3. Click **Upload**.
4. In the **Connection** field, select a supplier.
5. In the **File Template** field, select an import template.
If you are unsure of what template to select, check your current template setup in your merchant settings.
6. In the **Purpose** field, select a purpose.
7. (Optional) In the **Reference Number** field, provide details and additional context or identifiers.
8. In the \*\*Upload File \*\*section, drag and drop the product file you with to upload.
9. Click **Request Approval from Supplier**.
The supplier receives a notification notifying them that you are waiting for them to review and approve the products.
## Managing Import Requests
1. In the main menu, click **Products**.
The products page is displayed.
2. Click **Import Requests**.
The **Import Requests** page is displayed.
On the **Import Requests** page you can view all the import requests submitted to your suppliers.
### Import statuses
**Pending** - The supplier has yet to approve or reject the import request. If the import request has been pending for an allotted amount of time, we recommend reaching out to the supplier directly to have them review the submitted file and approve.
**Approved** - The supplier has approved the requested products and these products should now be available to your team within your fabric Dropship account.
# Inventory
View and export inventory reports on both the item and supplier levels.
## Item level inventory
To access inventory positions on each item you are selling, navigate to the **Products** page and select **Inventory** within the **Browse & Review** section of the products page.
The Item Inventory page will provide you with a list of all items and their associated inventory positions.
You can search for an individual item or use the filters to create a specific inventory report.
All inventory reports can exported by using the **Export** button on the top right of the inventory page.
NOTE: if the supplier provides an estimated availability date for out of stock items, that date will appear underneath the inventory amount.
## Inventory by supplier
To access inventory status by Supplier, navigate to the **Products** page and click the blue **By Supplier** link within the **Inventory** section.
The **Inventory by Supplier** page is a high level status of each of your connected suppliers. It provides the number of items associated with each of your suppliers, the number of items that are in stock, the number of items that are out of stock, and the last time each supplier submitted inventory.
# Inviting Suppliers
To invite a new supplier to your dropship program, click **Suppliers** in the top navigation menu.
Click **Invite Supplier** at the top-right of the page.
In the new window, enter the following details in the **Supplier Info** section:
* The name of the supplier.
* The primary contacts first name, last name, and email.
If the connection settings of the new supplier are different than your account's default settings, you can change those settings during the invite process by using the **Advanced Settings** on the invite form.
**Note:** Your account's default settings are set during the initial onboarding of the retailer with the help of the Customer Success Manager.
To invite a new supplier who will have different account settings:
* Check the **I want to override the settings below** box on the invite form.
* Select the settings you wish to create for this supplier using the following fields:
* **Default Fulfillment SLA**
* **Payment Terms**
* **Cost Model**
* **Returns & Customer Service Allowance**
* When the form is complete, click **Send Invitation**.
Your new supplier will receive an email from the Dropship Platform prompting them to sign in and begin the onboarding process. If the supplier requires more detail on how to use the Dropship Platform or has additional questions, they can schedule a call with a fabric Supplier Onboarding Specialist.
## Managing invitations
To manage the suppliers you have invited, navigate to the **Suppliers** page and click **Invitations**located in the **New Suppliers** section.
The **Invitations** page provides you with a list of all suppliers who you have sent an invitation to but have yet to access the platform.
If your supplier has not received the invite email, you can resend the email by clicking the **Resend** button next to that supplier.
## Activating new suppliers
Once a supplier accepts your invitation, they will move to the **Onboarding** section on the **Suppliers** page. You can opt into receiving a notification when your supplier has completed onboarding to know when they're ready for their connection to be activated.
To activate a new supplier, navigate to the **Supplier** page and click **Onboarding** within the **Browse Suppliers** section of the suppliers page.
This page provides you with a list of suppliers who have accepted your invite and in the process of setting up their account.
The **In Review** status means that the supplier has completed their onboarding and is ready for your team to activate them.
Click on the blue supplier link to pull up that suppliers detail page.
Click **Activate** on the top left of the **Supplier Detail** page.
**NOTE:** If you don't activate a new supplier, they won't be able to receive orders.
Once the supplier is **Active**, they will move from the **Onboarding** section to the **Active** section within the **Suppliers** page and they can begin receiving orders.
## Checking Onboarding Status
Once a supplier accepts your invitation, they will move to the **Onboarding** section on the **Suppliers** page. If a supplier is still in an **Onboarding** status and you want to check where they're at with their onboarding items, click on the blue supplier link to pull up that suppliers detail page.
On the **Supplier Detail** page, click **Onboarding** in the left connection menu to pull up the status of their onboarding.
# Invoices
View, export, and manage invoices for all dropship orders.
## Viewing and exporting invoices
1. To access invoices associated with your dropship orders, click **Orders**.
The **Orders** page is displayed.
2. Click **Invoices** located in the **Reports** section of the **Orders** dashboard.
The **Invoices** page is displayed.
3. To find an invoice report, use the filter options.
You can view and export reports.
4. To export your invoice report, click **Export**.
Your invoice report is sent through an email to the user who requested the export.
## Managing invoices
The fabric Dropship Platform provides you with the tools to manage invoices by updating their status to both **Acknowledged** and **Paid**.
1. To access invoices associated with your dropship orders, click **Orders**.
The **Orders** page is displayed.
2. Click **Invoices** located in the **Reports** section of the **Orders** dashboard.
The **Invoices** page is displayed.
3. Select the invoices you wish to update as **Acknowledged** or **Paid**.
4. To mark an invoice as **Acknowledged** or **Paid**, click **Actions**.
5. Two options appear, select **Accept Invoices** or **Mark Invoices as Paid**.
If you selected multiple invoices, all the invoices are updated.
The **Acknowledged** or **Paid** column is updated for the invoices.
# Loop Integration
The Loop Dropship integration seamlessly integrates with fabric Catalog and fabric Orders.
## Prerequisites
* Ensure that you have **Administrator** privilege to fabric. For more detailed information on these settings, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Configuring the Integration
1. Submit a support request to [fabric customer success](https://support.fabric.inc/hc/en-us/requests/new) with the following details:
* `Loop_api_key` (Required)
* `Loop_webhook_secret` (Required)
* `Loop_rma_number_mapping` (Optional): The default mapping is with the `id` of the return. Retailers can use this option to map other values such as `order_name`. This field's value is set as the return merchandise authorization **RMA** number in Dropship.
* **Return to vendor warehouse** (Optional): Loop doesn't provide data on where the return is being shipped by default. The return to vendor warehouse credential is used to set up the shipping address on the return. Choose one of the following options:
* **True**: Create the return address on RMA to be set to the vendor's warehouse.
* **False**: RMA is created without any `shipTo` address. A tracking number is still available but no shipping address.
* Select one of the following webhooks:
* **Return Created**: This is the standard webhook for returns. Loop provides the `return_created` event and an RMA is created in fabric dropship.
* **Return Updated**: This webhook enables you to create a return without an initial tracking number allowing you to later update the return with the tracking number once available.
Loop doesn't support automatic enabling of webhooks for their API. Once set up, you need to manually enable the webhook on the Loop dashboard.
If a return fails to sync, fabric can identify the return based on the Webhook History ID, Order Number, or return ID. fabric will then retry retrieving the return information again.
# Create Purchase Order
Generate a custom purchase order manually.
## Create order
To manually create a purchase order, select **Create Purchase Order** from the **More** dropdown menu on the **Orders** page.
Select **Create Purchase Order**.
You will be directed to the **Order Create** page to start manually creating your Purchase Order. Each field must be completed manually unless it's marked optional.
### Order details
| Field | Required Information |
| ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **Purchase Order Number** | Provide the purchase order number. |
| **Order Date** | Provide the purchase order date. |
| **Retailer Order Number** (Optional) | Use this field if an additional identifier is needed to reference the **Purchase Order Number**. For example, an Order Management System order number. |
| **Customer Order Number** (Optional) | Provide the customer order number if applicable. |
### Ship to
1. To enter a customer shipping address, click the ship to link.
2. Complete the **Add Ship To Address** form.
3. Click **Save**.
### Requested ship method
In the **Requested ship method** section, assign the shipping method.
Use the dropdown to select **Expedited** or **Ground**.
### Optional notes
In the notes section, you can add purchase order notes.
### Order lines
1. Select the supplier the order should be created against using the dropdown list.
2. Click **Add new line**.
Select the variant using the dropdown search bar.
3. Enter the quantity, price, and cost of the item.
4. Click **Add**.
5. Click **Create Order**.
The data is saved in the system for future reference.
# Managing cancels & backorders
Manage orders canceled or flagged as backordered by a supplier.
## Managing canceled orders
When orders are canceled by a supplier, retailers have the ability to acknowledge the cancelation. If you don't have an automated integration with fabric Dropship, you can acknowledge canceled orders directly within Dropship.
1. Click **Orders** in the top navigation.
The **Orders** page is displayed.
2. In the **Require Attention** section, click **New Cancels**.
The **Cancels** page is displayed with a table of canceled orders.
3. Select the canceled orders you wish to acknowledge by clicking the checkbox next to the order.
4. Click the **Actions** button and select **Acknowledge Cancels.**
The Acknowledge Cancels window is displayed.
5. Click **Acknowledge All Cancels**.
## Managing orders with backordered Items
When items on an order are marked as backordered by a supplier, retailers have the ability to acknowledge the backorder. If you don't have an automated integration with fabric Dropship, you can acknowledge orders with backordered items directly within Dropship.
1. Click **Orders** in the top navigation.
The **Orders** page is displayed.
2. In the **Require Attention** section, click **New Backorders.**
A list view of orders containing backordered items is displayed.
3. To open the order detail page, click the blue PO#.
The order details page is displayed.
On the order detail page you can view the date the supplier expects the item to be back in stock within the **Key Dates** section.
4. To acknowledge the backorder, click **Acknowledge Backorder** on the main **Order Detail** page.
# Order Detail
Search for and view detailed information on each order.
## Finding orders
If you know the **PO#** of the order you want to view, enter it in the search bar on the main **Orders** dashboard. From the results, click the **PO#** to view the [detail page](#order-detail-page).
### Advanced filtering
If you don't have the **PO#** available for the order you want to view, click **advanced** next to the search bar on the main **Orders** dashboard. You can filter by:
* PO Number (exact)
* PO Number (contains)
* Customer Order Number (exact)
* Customer Order Number (contains)
* Tracking Number
* Invoice Number
## Order detail page
The following fields and data are available on each individual **Order Detail** page.
* **Order Identifiers** - The order identifiers provide a breakdown of the supplier name, customer order number, purchase order number, and the fabric ID assigned to the order.
* **Shipping** - The shipping section provides the ship method information with the customer **Ship To Address**.
* **Key Dates** - The key dates capture all the important dates tied to the order such as the date of order creation, expected completion date, and the date the order was closed out. If there is a backorder date associated with the order it's displayed with other key dates.
* **Extras** - This section provides miscellaneous information against the order.
* A direct link to the order packing slip; Dropship automatically generates a packing slip for each order once an order has been created within the platform. If a supplier doesn't wish to generate packing slips outside of the platform, the supplier can access the packing slip within the individual order.
* Gift Message; If a customer provides a gift message when placing an order, the information can be found within the individual order. The gift message will also appear on the packing slip.
**Order Lines** - The Order Lines section within the individual order screen provides you with a simple overview of the products available on the order. The item description and SKU are captured on the left-hand side while the units ordered breakdown is captured on the right-hand side. To view the pricing associated with the line item you can change the view using the **View** dropdown on the line item.
**Tracking Numbers** - The Tracking Numbers section within the individual order screen provides you with a simple overview of the shipment information that's available on the order. The tracking number can be clicked to open a pop-up providing complete Shipment Detail information.
Clicking on the tracking number in the shipment detail popup will re-direct you to the carrier site for additional tracking details.
**Invoices** - The Invoices section within the individual order screen provides your team with a simple overview of the invoice information that's available on the order. The invoice number can be clicked on to open a pop-up providing complete invoice detail information.
**Order Messages** - This section contains all the messages shared on the order between you and the supplier.
**Order Activity** - This section contains a running list of all activity associated with the order.
## Order detail Shopify activity
If your supplier is integrated with Shopify, on the Order Detail page you can see if the order was successfully pushed to their Shopify or not. If the order wasn't pushed to your suppliers Shopify, a error message will be present at the top of the individual order detail page.
Typically errors will occur when attempting to push to suppliers Shopify’s due to the following:
* The SKU on the order doesn't exist in the suppliers Shopify. Examples include:
* The SKU was changed in the suppliers Shopify but wasn't updated in fabric Dropship.
* The SKU was removed from the suppliers Shopify due to it being discontinued.
* The SKU on the order is duplicated in the suppliers Shopify.
* Although fabric recommends that each SKU is unique in a suppliers Shopify, fabric understands that this can't always be the case. When there is a duplicate variant in the suppliers Shopify, the supplier will need to confirm what Shopify Variant ID fabric Dropship should sync to.
If an error is available for your suppliers orders, please reach out to the supplier directly to have them work with fabric support.
# Orders
Visualize the information needed to manage all aspects of your dropship orders across all connected suppliers.
To navigate to the **Orders** dashboard, login to the Dropship Platform and click **Orders** on the top menu bar.
## Orders dashboard
The **Orders** dashboard consists of three main sections that make it easy to quickly view all information associated with dropship orders. They're **Open Orders**, **Reports**, and **Require Attention**.
Clicking on any of the pre-filtered lists or reports within each of the main sections of the Orders dashboard provides a list view of all orders that fit within the pre-filtered criteria.
### Open orders
**Open Orders** contains four pre-filtered lists:
| List | Description |
| ------------------------ | ---------------------------------------------------------------------------------- |
| **Open Orders** | A list of all open orders |
| **Current Orders** | A list of open orders that are within your fulfillment SLA. |
| **Past Fulfillment SLA** | A list of open orders that are past your fulfillment SLA. |
| **Late Invoices** | A list of open orders that have shipments but remain open due to missing invoices. |
### Reports
**Reports** contains pre-filtered reports for various order details.
| Report | Description |
| ---------------------------- | ----------------------------------------------------------------- |
| **Orders with New Messages** | A report with the latest order notes from your partners. |
| **Shipments & Tracking** | A report containing information for shipments & tracking numbers. |
| **Returns** | A report containing information on returns and RMAs. |
| **Invoices** | A report containing all invoices from your suppliers. |
### Require attention
**Require Attention** contains two pre-filtered lists to manage cancellations and backorders.
| Name | Description |
| ------------------ | -------------------------------------------------------------------------------- |
| **New Cancels** | A list of cancellations that require acknowledgement by you, the retailer. |
| **New Backorders** | A list of orders that contain items that the supplier has marked as backordered. |
All data from any page containing a list view of orders can be exported by clicking on the **Export** link on the upper right side of each page. If any additional filters are applied to the page, the export will contain all orders that fit the filter criteria.
# Returns and Credit Memos
Create returns on orders and manage the credit memos associated with those returns.
## Creating returns
To create a return on an order, navigate to the **Orders** dashboard by clicking on **Orders** in the top menu bar.
Search for the order you wish to create the return on and click the PO# that's displayed in the search results to pull up the order detail page.
NOTE: An order must be in a closed status in order to create a return against that order.
On the **Order Detail**page click **Start a Return**.
Complete the form by selecting a reason for the return, adding an RMA number (optional), and entering the number of items being returned.
Submit the return by clicking on **Start Return.**
Once a return has been created against an order, the supplier associated with that order will be notified via email of the return. The supplier can then either Approve or Decline the return.
## Managing returns
To track and manage returns, navigate to the **Orders** dashboard and click **Returns** located in the **Reports** section of the dashboard.
The **Returns** page will provide you with a list of all returns and their current status (Pending, Approved, Declined).
## Credit memos
If your supplier approves a return that was created against an order, they then have the ability to create a Credit Memo against that return.
To access **Credit Memos**, navigate to the **Orders** dashboard and using the **More** dropdown, and select **Review Credit Memos**.
The **Credits** page provides you with a list of all credit memos submitted by your suppliers. You can use the filtering options to create a report of specific credit memos.
Click the blue **ID** link of a specific credit memo to pull up additional details of that credit memo.
# Shipping & Tracking
The Shipments & Tracking dashboard allows you to see all the shipments sent by all of your suppliers in one spot.
## Viewing the Shipments and Tracking Dashboard
1. To view a filterable list of all the existing shipments, click **Orders**.
2. On the **Orders** page, click **Shipments & Tracking**.
The **Tracking #s** page features a filterable list of all existing shipments with sortable column headers.
| Column Header | Description |
| ---------------- | ------------------------------------------------------------------------------------------------------------------------- |
| **Supplier** | The name of the supplier who sent the shipment. |
| **Service** | The shipping service the supplier used. |
| **Tracking #** | The shipment tracking number. Clicking on an individual tracking number in the list opens the **Shipment Detail** window. |
| **PO #** | The purchase order associated with the shipment. |
| **Registered** | The date the shipment was registered, shown in the user’s local time zone. |
| **Acknowledged** | The date you (the retailer) acknowledged the shipment as complete. |
| **Track** | A direct link to the carrier’s website for tracking. |
# Overview
Rapidly launch, operate, and scale a curated assortment of products from an unlimited number of dropship suppliers.
fabric Dropship acts as a business catalyst by enabling retailers to curate and offer new product assortments with low risk, low cost and zero added inventory. It's the only dropshipping platform that seamlessly integrates into a business's commerce stack and allows for rapid expansion and revenue growth while handling all of the complex inventory, transactions, billing, and supplier management functions in the backend.
## Navigation
The fabric Dropship Platform for retailers is divided into four separate sections accessible from the top navigation menu
* **Orders** - Your dashboard for managing and tracking all dropship orders
* **Product Catalog** - Your dashboard for managing existing items, curating new items from your suppliers, and tracking inventory
* **Suppliers** - Your dashboard for managing existing supplier connections and inviting new suppliers to your dropship program
* **Reports** - Detailed reports to review the performance of your dropship business and all your suppliers
# Proposals
Review and approve proposals online.
A proposal is a list of items that a supplier submits directly to a retailer partner through the fabric Dropship Platform.
When one of your connected suppliers submits a proposal, you receive an email notification that a new list of items are submitted. You can then review the items before accepting and approving.
## Proposal statuses
The status of a newly submitted proposal shows as **Proposed**. The following table describes the various proposal statuses.
| Status | Description |
| -------------------------- | ---------------------------------------------------------------------------------------------------- |
| **Requires Approval** | Indicates the supplier has submitted the proposal for the retailer's review and approval. |
| **Waiting for Supplier** | Indicates the proposal is sent back to the supplier for additional revisions to product data. |
| **Needs Pricing Approval** | Indicates that the proposal requires an approval for pricing or product data. |
| **Pricing Approved** | Indicates that the proposal requires a second approval before it's ready for publishing. |
| **Ready to Publish** | Indicates the proposal is approved and is ready for publishing. |
| **Completed** | Indicates that the proposal is complete. |
| **Declined** | Indicates the proposal is declined, along with a reason. However,the reasons for declining may vary. |
## Proposal types
There are three types of proposals:
* **New item proposals**: These proposals contain new items that aren't currently available on your site.
* **Cost update proposals**: Suppliers submit these proposals to update the previously approved wholesale cost of items.
* **Attribute update proposals**: Suppliers submit these proposals to change product details, including images and descriptions, of already approved items.
All proposals are reviewed and approved with the same process outlined below.
## Managing proposals
To manage new item proposals, cost update proposals, and attribute update proposals, navigate to the **Products** page and select **Proposals**, located in the **Curate** section of the **Products** page.
On the **Assortment Proposals** page, Click **Requires Approval** to pull up a list of all recently submitted proposals.
The **Requires Approval** page lists all submitted proposals awaiting action. On this page, you can view the following details:
* Proposal ID.
* The name of the supplier who submitted the proposal.
* The name of the proposal, which includes the department name.
* The total items added to the proposal.
* The date when the proposal was submitted.
* The status of the proposal.
To review a proposal from the list, click the blue link in the proposal **ID** column to access the individual **Proposal Detail** page.
Using the **Proposal Menu** on the **Proposal Detail** page, you can review the items on the proposal at both the product level and the item level.
* To view items on the product level, click products under the **Proposal Menu**.
* To view items on the item level, click pricing under the **Proposal Menu**.
### Removing Items
To reject items or entire products from a proposal that aren't relevant to the agreed upon assortment, you can remove by:
* Select the items or products under the designated view (pricing or products).
* Click **Actions**.
* Select **Remove Products**.
## Sending Items Back to a Supplier
If a supplier needs to revise a proposal, create an issue for each item, detailing the reason for sending it back and setting the expectation for the required changes.
### Creating an issue
Select an item or product under the designated view (pricing or products).
Click **Actions**.
Click **Create Issue**.
* Add an Issue Title. For example, Images.
* Add an Issue explanation. For example, images provided are broken, please provide new ones.
Once all issues have been created on the proposal, return to the summary screen using the proposal menu and click **Return**.
## Approving Proposals
1. When you are ready to approve the reviewed items, return to the summary screen using the proposal menu and click **Approve**.
2. Once the proposal is approved, it's moved to the **Ready to Publish** section of the **Assortment Proposals** page.
3. Click on the **Ready to Publish** section to pull up a list of approved proposals containing the items that are ready to be published on your site.
4. To pull up a proposal from the list, click the blue link in the proposal **ID** column to access the **Proposal Detail** page.
5. Click **Approve Products**.
When approving, a new window opens, asking the following:
* Do you also want to publish the products on this proposal to an external platform.
6. Select one of the following:
* Yes. Continue the steps below.
* No, just mark this proposal as approved. Skip to step 10.
7. Using the **Platform** field, select the platform where you want to publish the product.
8. Using the **Template** field, select the preferred template for publishing products.
9. To complete the process and remove the proposal from the **Ready to Publish** section, click **Mark as Complete!**.
Marking the proposal as complete moves the proposal to the **Completed** section on the main **Proposals** page.
Once the items from the proposal are added to your site you can begin receiving orders for those items.
# Compliance Scorecard
## Overview
The Compliance Scorecard is a tool that allows Retailers to track and monitor their suppliers' compliance and ensure dropship performance. The scorecard is calculated using three factors:
* Number of orders fulfilled within a specified SLA
* Number of canceled orders
* Number of orders replaced
To access the Compliance Scorecard, click **Reports** in the menu across the top of Dropship. In the dropdown that appears, select **Compliance Scorecard**.
## Compliance Scorecard
The main Compliance Scorecard page shows an overview of all Suppliers along with a quick look at their performance metrics.
* **Score & Change:** The supplier’s score for the month and change compared to the previous month.
* **Award (Gold/Silver/Bronze):** The award level the supplier has achieved in comparison with all of your other suppliers.
* **Rank & Change:** The supplier’s rank compared with all of your other suppliers and change in comparison with the previous month.
* **Actions:** Click the icon to access more detailed compliance numbers for that individual supplier.
## Compliance Scorecard Details
To see the Supplier Details report on an individual supplier, find and click on that supplier’s name or click on the icon under Actions.
The Supplier Details page shows graphs and rankings in two categories: **Summary** and **Orders**.
### Summary
* **Compliance Score:** The supplier’s compliance score over the past six months.
* **Rank:** The supplier’s rank out of all of your suppliers over the past six months.
### Orders
* **Orders Received:** The total number of orders the supplier has received.
* **Fulfillment Score:** The supplier’s fulfillment score, which is calculated by their ability to fulfill orders within the SLA time.
* **Cancellation Score:** The number of orders that customers have cancelled with the supplier, measured against the total number of orders they’ve received.
* **Replacement Score:** The number of orders the supplier has had to replace, measured against the total number of orders they’ve received.
* **Supplier Revenue:** The total revenue generated by the supplier through fabric Dropship.
* **Merchant Share Paid:** The retailer’s share of revenue paid by the supplier.
# Reports
## Introduction
The Reporting features in fabric Dropship allow you to export information about Orders, Shipments, Invoices, Products, and Cancellations.
## Order Report
To export orders, select **Orders** from the menu at the top, and then click on one of the categories under **Open Orders** on the Orders page.
You will be directed to the **List** page, which shows all of the orders in the category you chose.
When exporting an orders report, you can apply different filters to the data. Some filters include Connection (supplier name), Order Status, and Date range in which the orders were received.
Once you are ready to export the order report (with or without filters), click the **Export** button to the right of the search bar.
The export will be delivered as a CSV file to the email address associated with the Retailer account.
## Shipment Report
To export past shipments, click on **Shipments & Tracking** on the Orders page.
You will be directed to the **Tracking #s** page, which shows all of your previous shipments.
When exporting a shipment report, you can apply different filters to the data. Some filters include Connection (supplier name) and the date the shipment was created.
Once you are ready to export the shipment report (with or without filters), click the **Export** button to the right of the search bar.
The export will be delivered as a CSV file to the email address associated with the Retailer account.
## Invoice Report
To export past invoices, click on **Invoices** on the Orders page.
You will be directed to the **Invoices** page, which shows all of your invoices.
When exporting an invoice report, you can apply different filters to the data. Some filters include Connection (supplier name), the date invoice was submitted, and whether the invoice has been received by your retailer partner.
Once you are ready to export the invoice report (with or without filters), click the **Export** button to the right of the search bar.
The export will be delivered as a CSV file to the email address associated with the Retailer account.
## Product Report
To export a supplier’s product catalog, select **Products** from the menu at the top of the page.
From the Products page, there are two ways to view the supplier’s product catalog:
* Click **Products** to view the catalog by parent information
* Click **Items** to view the catalog by child SKU information
When exporting a product catalog, you can apply different filters to the data. Some filters include Connection (supplier name), the date item was created, and whether or not the item is in stock.
Once you are ready to export the product report (with or without filters), click the **Export** button to the right of the search bar.
The export will be delivered as a CSV file to the email address associated with the Retailer account.
## Cancels Report
To export a supplier's cancellations, select **Orders** from the menu at the top, and then click on **New Cancels** under the **Requires Attention** section.
You will be directed to the **Cancels** page, which shows all order cancellations.
When exporting a supplier’s cancellations, you can apply different filters to the data. Some filters include Connection (supplier name), the reason for the cancellation, and the date order was canceled.
Once you are ready to export the cancel report, click the Export button to the right of the search bar.
The export will be delivered as a CSV file to the email address associated with the Retailer account.
# Sales Performance Reporting
## Overview
fabric Dropship Performance Reporting allows you to see the sales performance of your top suppliers each supplier’s top products.
## Performance Reporting
Click on **Reports** in the menu at the top of Dropship. In the dropdown that appears, select **Sales Reporting**.
The graphs on the Reporting page display numbers based on the dates selected in the fields at the top-right. Enter a custom date range or use the dropdown to select a predefined date range to adjust the data you see.
The dashboard across the top of the page shows an overview of the number of suppliers with orders, number of orders, estimated gross merchandise value, average order value, and a line graph plotting performance over time.
Use the Export buttons in the Daily Performance, Top Suppliers, and Top Products menus to save the information in a CSV file.
# Attribute Value Transformers
Transform the value of attributes automatically and accurately.
## Overview
Attribute Value Transformers provide retailers with the capability to transform the product and variant attributes through various transformation rules. This enables consistent and accurate conversion of supplier-provided attribute values into the desired value as required by the business.
Some examples of an attribute value transformation rule-
Transform the value of “Category” attribute
* Tshirt → Fashion > Apparel > Topwear > Tshirt
* Shoes → Fashion > Footwear > Shoes
Transform the value of “Supplier ID” attribute
* 15 → Asian, Inc
* 18 → Viets Corp
## Create an Attribute Value Transformer
To access the Proposal Department, login to your dashboard, select **Retailer Settings**, then **Attribute Value Transformers,** then **Create Transformer.**
Enter your **Transformer Name**
Select **Save**
Click on new transformer in **Transformer Name** list
**Search** the attribute you want to transform
* Not all identifier attributes can be added to a transformer
Click on the attribute in the **Attribute** list
Enter the details in the **Transformation Settings** section
* Attribute Value Match - This is the value to be transformed
* Transformation Output Value - The value you need after the transformation
Each transformation can be modified by clicking on the **Edit** link
You can create and number of transformations for this Attribute
Once completed, click on the **Transformers** link in the breadcrumb navigation in the upper right of the page.
## Apply a transformer
Once transformer is created, there are multiple screens and workflows where a transformer can be applied.
### Accepting Proposals
If you have any new open proposals after creating a transformer, values of the proposal can be transformed.
Navigate to the proposal that still requires an approval
Click on **More** button
Click on **Apply Transformer**
Select the **Transformer** of choice from the dropdown menu and click **Apply**
All matching attribute values across all items of proposal will be transformed.
### For Suppliers and Retailers
**Importing the Products**
You can apply transformer on a spreadsheet before you import any products
Navigate to **Import Products**
Select a **Template** from the dropdown menu
Select the desired **Transformer** from the dropdown menu
Select your import file and click **Begin Import**
### Product List Page
You can apply a transformer even after items have been added to the catalog.
Navigate to the **Products** list page
Select the relevant products using the checkbox
Click on **Actions**
Select the **Transformer** from the dropdown menu
Click on **Apply to All Products**
# Categories & Commission Profiles
The Categories feature in fabric Dropship allows retailers to organize products into groups and set different commission rates for each group of products.
Categories can then be used to create Commission profiles for different supplier partners on the Dropship to maximize commissions.
## Categories
To access Categories, click on your account name in the menu at the top of Dropship and select **Retailer Settings** in the menu that appears. On the Settings page, scroll to the bottom and select **Categories**.
The Categories page displays a table of all the Categories you’ve created previously, with a quick look at the ID, Category Name, Number of Items in the Category, and the Last Updated date.
To create a new Category, click the **Add New Category** button at the top-right of the page. In window that appears, give the new Category a name and click **Save**.
To rename or delete an existing Category, find it in the list of Categories you’ve created previously, click on the corresponding vertical ellipsis icon (⋮), and then click Rename or Delete. Please note that Category names must be unique and only Categories with no items can be deleted.
**Please Note:** Your Suppliers will be able to see all the Categories you create and any products you assign to them.
### Adding Products to a Category
In Dropship, categories are attributes of a product, similar to a product’s name, description, color, etc. Like these other attributes, categories are set up in the CSV file of your products that you import into Dropship. To learn more about this process, visit the Import Products & Attributes page.
## Commission Profiles
To access Commission Profiles, click on your account name in the menu at the top of Dropship and select **Retailer Settings** in the menu that appears. On the Settings page, scroll to the bottom and select **Commission Profiles**.
The Commission Profiles page displays a table of all the Commission Profiles you’ve created previously, with a quick look at the Profile Name, Suppliers, and Method.
### Creating a Commission Profile
To create a new Commission Profile, click the **Add New Profile** button at the top-right of the page.
On the Create Commission Profile page, give the new profile a name and a description, and select a method for the Commission Profile, either **Flat Commission %** or **Commission by Category**.
* **Flat Commission %:** Specify a commission rate to be applied to all items, regardless of their category.
* **Commission by Category:** Enter a commission rate for each category. **All Categories** is selected by default and used for any items without a category. Click **Add Categories** to set up custom commission rates on a per-category basis.
When you’re finished setting up your Commission Profile, click **Save**.
### Managing Commission Profiles
To edit or delete a commission profile, visit the Commission Profiles page and click on a Commission Profile to change.
* To edit the Commission Profile, make your changes and then click the Update button at the top right.
* To delete the Commission Profile, click Delete at the top right, and then click Delete in the popup that appears.
## Best Practices for Commission Profiles
To use Commission Profiles effectively, consider the following best practices:
* Set commission rates that align with your business goals and help you maximize profits.
* Use category-specific Commission Profiles to set different commission rates for different categories of products.
* Keep Commission Profile names and descriptions clear and descriptive to help you identify them later.
# Proposal Departments
Standardize product data rules for all suppliers across various categories.
## Overview
When retailers are sourcing products in various categories from their suppliers, it becomes essential for them to be able to differentiate product attributes and their validations for each category.
A proposal department enables retailers to set any number of categories and apply different validations on each one, making it easy to implement control over the quality of data their suppliers share.
A proposal department enforces the rules of a product import template and two predefined rulesets on every proposal before a supplier can send proposals to the retailer.
Status
* Active - An active Proposal Department is available for all suppliers of the retailer.
* Disabled - You can set the status of a department to Disabled if you don’t want to use this anymore.
## Create a Proposal Department
To access the Proposal Department, login to your dashboard, select **Retailer Settings**, then **Proposal Department,** then **Create.**
Enter the name of the proposal in **Department Name**
Select a **Product Import Template**
* Every proposal department requires the product import template to identify the list of attributes for the proposal department
* A retailer can only select from the existing list of templates.
Select a **Supplier Ruleset**
* You will be able to see a list of existing rulesets
* Select the ruleset that all items must be compatible with when being added to a proposal
NOTE: Supplier ruleset is also applied on all items during the compatibility check of every proposal.
Select a **Retailer Ruleset**
* You will be able to see a list of all existing rulesets
* Select the ruleset that the items must be compatible with when being accepted from a proposal
NOTE: The retailer ruleset is applied on the all items of a proposal during the compatibility check before it can be sent over to the retailer for a review
Select a **Sample Template URL** (optional step)
* Dropship gives retailer the capability to provide a ready template to their supplier that can be referenced while creating the spreadsheet for a proposal.
* You can simply upload the file on your server and add a URL here. This will make the file available for the supplier while creating a proposal. Please reach out to fabric Support if you need support in uploading the sample file to fabric’s server.
Select **Save.**
# Rulesets
Set the conditions and validations used by the Proposal Department.
## Overview
A ruleset is a set of conditions that can be applied to a proposal through the feature called Proposal Departments. A ruleset consists of multiple rule groups. Each rule group can have multiple rules configured where each rule dictates the conditions for an individual attribute.
* Retailers and suppliers use rulesets to dictate the terms of a proposal department
* Rules set under a ruleset are applied to all items and attributes during a proposal
* Proposal compatibility will check all the items from the template and apply the rulesets on them. Only validated items will be added to the proposal
* Every retailer must have at least 2 rulesets, one to be used as Retailer ruleset and one to be used as suppliers ruleset. Refer to [Proposal Departments](/v3/guides/dropship-retailers/settings/proposal-departments) for more details.
### Create a Ruleset
To create a ruleset, login to your dashboard, select **Retailer Settings**, then **Product Rulesets,** then **Create Ruleset.**
Enter a **Name** and **Description** of the ruleset.
Click **Create** and the new ruleset will appear in the list.
## [](#section-)
### Create a Rule Group inside the Ruleset
To configure a Rule Group in a Ruleset, click on the **Ruleset Name** you created.
Click on Create inside the **Rule Group** section and complete the dialog box
* **Name** - Name of the Rule Group. This represents the group to which the attribute belongs. For example, all identifier-related attribute rules can be part of the a single group called Identification.
* **Position** - Only an integer is accepted. This will dictate the order of this group on the item details page.
* **Description** - An optional description of the Rule Group.
Click **Save**.
A single Ruleset can have any number of Rule Groups.
### Create rule group
### Create a rule inside a Rule Group
To add a rule, click on the relevant **Rule Group**.
Click on **Create** inside the **Rules** section and complete the dialog box
* **Attribute** - Select an attribute on which you want to apply the rule.
* Note: This list will have the attribute names as defined by fabric Dropship. Retailers’ own attribute names aren't shown here, so be careful when selecting the attribute while creating a rule.
* **Name** - Provide a name for the rule.
* **Position** - Set the priority of the rule. This will dictate the order in which this attribute should appear on the Item details page.
* **Description** - an optional field to add a description to the rule.
* **Is Required** - Determines if the attribute must be included to pass the compatibility with this Ruleset.
Click **Save**.
A single Rule Group can have any number of rules.
### Create rule
### Adding validators to a rule (optional)
A validator Enables retailers to set more complex validations on their attributes.
Once a rule is added, validators can be added to it.
* Multiple validators are available to be added, however, only one validator can be added per rule.
To add a validator, click **Add** next to the rule inside the list.
Select the validation **Type** from the dropdown menu.
Enter the relevant expression in **Value.**
Click **Save.**
# Settings
Add users and configure notifications in Dropship.
## Introduction
To access Retailer Settings, click on your account name in the menu at the top of the page. In the dropdown menu that appears, select **Retailer Settings**.
Use the tiles on the Retailer Settings page to manage everything from general information and user privileges to API clients and webhook settings.
## Default Onboarding Preferences
Manage the default onboarding settings for all new suppliers.
The settings you configure here will be the default settings for all new connections. You can always override these settings when inviting a new connection.
Each of these preferences is set for a new vendor automatically. These preferences can be changed for an individual vendor by going to their Connection Details Page.
### Default Cost Determination
All incoming items on a purchase order must have an associated cost to the retailer. Use the **Cost Method** dropdown menu to make a selection:
**Specified on Platform:** Dropship is responsible for capturing the cost in this scenario. For Proposals, an attribute called “Cost” becomes mandatory for all of a supplier’s items. It's implemented through rulesets being used by Proposal Departments and requires that suppliers define the value for the “Cost” attribute for every item when creating a proposal. For Import Requests, the same “Cost” attribute becomes mandatory for all items created by the retailer, and retailers won't be able to send import requests without the “Cost” attribute.
**Specified on Order:** The retailer is responsible of providing the value of “Net Price” with every order they create in Dropship. Orders created without “Net Price” or “Retailer Price” will be rejected by the system.
**Commission:** The retailer must specify the commission amount. Dropship will automatically calculate the cost to be paid to the supplier based on the retail price in every item. Retailers need to provide the “Retail Price” while creating an order in Dropship. Any order without the Retail Price will be rejected. The net price will be calculated based on the commission and retail price.
After making a selection, click the **Save Preference** button.
### Default Fulfillment SLA
The Fulfillment SLA governs how long suppliers have to ship orders before they're considered late.
Use the dropdown to choose whether suppliers have one, two, or three business days to ship orders once they receive the order.
After making a selection, click the **Save Preference** button.
### Default Payment Terms
The retailer pays the cost of all the items on a purchase order. The Payment Terms reflect how long the retailer has in credit days before that amount is due to the supplier. For example, if set to Net 15, the retailer will need to remit the supplier within 15 days of invoice receipt.
Use the dropdown to make a selection and then click the **Save Preference** button.
### Default Catalog Import Method
The catalog import method defines how suppliers share their product catalog with you.
Selecting **Import Requests** requires you to upload a spreadsheet on behalf of your suppliers and subsequently seek their approval to publish the products.
Selecting **Proposals** requires suppliers to submit products to you for approval.
After making a selection, click the **Save Preference** button.
### Default Customer Service & Returns Allowance
Setting a customer service & returns allowance on a connection automatically applies an adjustment to all new incoming supplier invoices, decreasing the amount the retailer owes the supplier.
This allowance is typically applied to offset the costs of returns and other costs associated with servicing a customer.
To set a default returns allowance for any new connections automatically, enter a value between 0 and 10% and then click the **Save Preference** button.
### Packing Slip Template
Including a retailer-branded packing slip is often an important component of the customer experience. The default packing slip will include your logo and core order data including the customer order number.
If you have worked with fabric Support to configure a custom packing slip, please provide the template name and click the **Save Preference** button.
## Currency Settings
Manage the currency of your account. Use the dropdown menu to select a primary currency. This will help Dropship apply location-specific configurations for things like a product’s cost and price. Supported currencies include United States Dollar, Canadian Dollar, British Pound Sterling, and Euros.
## Notifications
Dropship supports real-time push notifications so that you can receive supplier onboarding alerts or transaction alerts.
To enable a notification, enter an email address or a distribution list the corresponding field, and then use the toggle menu to set the notification to **Enabled** or **Not Enabled**.
Types of **Onboarding Notifications**:
* Supplier Invite Accepted: Notifications when a supplier partner accepts an invitation to join.
* Supplier Completed Onboarding: Notifications when a new supplier completes onboarding.
* Connection Notifications: Real-time alerts related to your connections and connection notes.
Types of **Transaction Notifications**:
* Connection Notifications: Notifications related to your connections and connection notes.
* Order Received: Notifications when a new order is received.
* Order Canceled: Notifications when a cancellation request is received.
* Order Ship To Address Updated: Notifications when a “ship to” address change request is received.
* Message Received: Notifications when a new message is received on an orders.
* Return Received: Notifications when a new RMA is created on an order.
* Return Approved/Rejected: Notifications when an RMAs is approved or rejected.
In addition, **Digest Notifications** allow you to receive daily, aggregated reports on any late purchase orders.
## Branding
Use the Branding menu to upload your business’s logo. It will be displayed to your supplier partners throughout the fabric platform and included on your packing slip.
The ideal logo is a 360x120 pixel PNG.
Click on the **Upload From Device** button to browse files on your computer to upload. Once you’ve selected a file, click and drag the preview to zoom, pan, and crop the image.
When finished, click **Save**.
## Payment Settings (Staff Only)
Connect your bank account to your fabric Dropship profile for automatic payments through Plaid. Click on the **Open Plaid** button to begin the setup process within Plaid.
## User Management
Invite new users and manage existing ones.
### Creating a new user
To add a user to the account, click the **Add New User** button. Enter the new user’s first name, last name, and email address, and fabric will send them an email with instructions to activate their user account.
### Editing a user
To edit a user’s account information, find and click their name on the User Management page.
The **General Settings** section allows you to edit basic profile information that identifies the user across the fabric platform. Use the Status dropdown menu to change the account between Active, Suspended, and Invited. When finished with your changes, click **Update**.
The **Role** section allows you to configure a user’s access level. Click **Add Role** to assign a user a new role. To edit a user’s existing role, click on the role and the Update Role popup will appear. Select a new role for the user in the dropdown menu and click Save Role.
**Security Credentials** allows you to give the user a new temporary password. Use the New Password and Confirm Password fields to create their new password. Upon logging in, the user will be required to change their password.
**Security Info** shows details from the last time the user signed in to fabric.
## API Clients
Manage API keys for your account.
### Adding a new API Client
To add a new client, click the **Add API Client** button, give the client a name, and click **Create Client**. After the client is created, you will be able to retrieve their credentials.
### Accessing Client Credentials
To access a client’s credentials, find and click their name on the API Clients page.
The Client Credentials section shows the name you gave the client, their API URL, their Brand ID, and Client ID, along with the Client Secret. To access the client secret, click on **Get Client Secret**. **However, you can only access the client secret once.** When you’re ready, click on the Show API Secret button. The API secret will be shown, along with a copy button so that you can save it. If you need to access the client secret again, please submit a support ticket.
## Integrations
Manage existing integrations associated with your account and add new ones.
Dropship supports integrations with BigCommerce, fabric, and Shopify.
### Adding an Integration
Basic setup for integration with third-party platforms consists of clicking on the **Add Integration** button at the top-right of the page. In the Add Integration popup that appears, click the **Add** button next to the platform you’d like to integrate with. From there, integrating with each platform is different, but setup includes information like the API Key, API Secret, or Store URL.
### Integration Options
Existing integrations appear on the Integrations page below the **Add Integration** button. To manage an existing integration, find and click its corresponding **Options** menu. The options in the window that appears are shortcuts to edit settings within the integration.
## Webhooks (Advanced)
Configure webhooks and review webhook history.
## Webhooks
Configure webhooks to listen to key events from the fabric platform. To add a new webhook, click the **Add Webhook** button.
* Proposal Approved
* Item Inventory updated
* Offer Created
* Order Created
* Order Closed
* Shipment Closed
* Cancel Created
* Invoice Created
The **Method** dropdown menu allows you to choose between post, put, and patch.
In the **URL** field, enter the webhook URL.
Use the **Status** dropdown menu to choose whether the webhook is Enabled or Disabled.
When finished, click **Add Webhook**.
### Webhook History
Review recent webhook results.
## Retailer SKU Settings
Configure auto generation of retailer SKUs.
You can turn on automatic SKU assignment if you would like Dropship to generate unique SKUs for items as soon as they're approved by a member of the retailer team.
The settings configured on this page will be applied to new products only; existing products and items will NOT be modified.
After making a selection, click the **Save Preference** button.
### Serial Key
If Retailer SKU Assignment is enabled, you can choose a seed value for your SKUs. Fill out the Prefix, Seed Value, and Net Value fields, and then click **Save Preference**.
## Proposal Departments
Visit the [Proposals](/v3/guides/dropship-retailers/settings/proposals) page to learn more about Proposal Departments in fabric Dropship.
### Creating a Proposal Department
To create a new Proposal Department, click the **Create** button at the top-right of the page and fill out the fields in the **Create Department** popup that appears.
* Name: Give the Department a name
* Product Import Template: select from fabric’s default templates or a template you created
* Supplier Ruleset: Select the attribute validations that suppliers must meet
* Retailer Ruleset: Select the attribute validations that you must meet
* Sample Template URL (optional)
## Attribute Value Transformers
Please see the [Attribute Value Transformers](/v3/guides/dropship-retailers/settings/attribute-value-transformers) page for more information.
## Product Rulesets
Please see the [Rulesets](/v3/guides/dropship-retailers/settings/rulesets) page for more information.
## Product & Inventory Templates
Please see the [Templates](/v3/guides/dropship-retailers/settings/templates) page for more information.
## Shipping Accounts
Create and manage Shipping Accounts
### Adding a Shipping Account
To add a new shipping account, click the **Add Shipping Account** button. In the window that appears, give shipping account a nickname, use the **Carrier** dropdown menu to select a shipping provider, and then click **Save & Continue**.
## Terms of Service
Review the Terms of Service from fabric Dropship.
Click the Commerce Network Merchant Agreement link to open a PDF of the Terms of Service.
## Tracking Number History
The Tracking Number History section allows retailers to acknowledge changes in tracking numbers.
The Tacking History page shows the Shipment ID and old and new tracking numbers, as well as the date the tracking number was changed.
Click the **Shipment ID** to see details about the shipment, including the Packing Slip.
Click the **Acknowledge** button at the right to acknowledge the changes to an order’s tracking number.
## Commission Profiles
Please see the [Categories & Commission Profiles](/v2/guides/marketplace-retailers/settings/categories---commission-profiles) page for more information.
## Categories
Please see the [Categories & Commission Profiles](/v2/guides/marketplace-retailers/settings/categories---commission-profiles) page for more information.
# Templates
Keep data consistent between internal and external systems
## Overview
Templates are a key feature of Dropship that facilitates the data exchange of Dropship with other external systems.
To access the templates, login to your dashboard, select **Retailer Settings**, then **Product & Inventory Templates.**
These templates are specific to the retailer and come in two varieties, product and inventory.
### Product Templates
* Pre-existing list of global attributes that's shared by all items and all businesses.
* Retailers can use their own attribute names for the spreadsheets and will be able to see these names on the Dropship platform UI
* Templates are mappings between the Dropship attributes and the attributes names defined by the retailer
* Import templates are responsible for data ingestion into Dropship
* Export templates can be used for extracting data from Dropship.
* This allows the retailer and their suppliers to generate spreadsheets that match the template as required by other systems such as Shopify, fabric Product Catalog, and others.
### Retailers and Suppliers can create and clone templates
Retailers
* Retailers can create templates for importing and exporting products.
* Retailers templates are also accessible by all of their suppliers.
* Retailers can clone a template by selecting the clone option on the template details screen.
Suppliers
* Suppliers can create their own templates for importing and export products.
* Supplier templates are only accessible by suppliers and can't be seen by their retailers.
## Create a template
Click on **Create Template**
Enter the **Template Name**
Select **Product** as **Data Type**
Select the **Direction** of template
* Import - Select this if you want to use the template to import products into Dropship
* Export - Select this if you want to use the template to export products from Dropship
* Sample file
* You need to provide a sample file of the template in order to create one
* The sample file should only contain the header row of the spreadsheet you want to be using for the said operation
* Once you upload the file, you will be asked to map the attributes
### Map Attributes
Dropship automatically tries to map user-uploaded attributes with those of fabric Dropship, however, all mapping needs to be checked by the user before creating the template. There are certain attributes that are relevant for most dropship businesses and need to be mapped and added to capture key details related to dropship products.
You can accept the values Dropship offers or enter your own for each column.
Column Header - the name of the attribute in your file
Map To - the name of the corresponding fabric Dropship attribute
* You should be able to find a similar attribute in the dropdown
* In case you can’t find a match for your attribute in the list provided by fabric, please raise a request to support team
Level - this indicates whether this is a parent or individual item attribute
* This field is only relevant for an import template
* Defines whether the attribute is relevant for the product (the parent item) or its variants
* Most attributes are relevant for items
* Attributes that leveled to Products will be inherited by all of the variants automatically
Priority - dictates the order in which the attributes will appear everywhere in the platform UI and during the exports
Required - indicate if this is a mandatory or optional attribute
* This field is only relevant for product import templates.
* If an attribute is mandatory in the import template, items without that attribute will show an error when imported through into Dropship.
Click **Save Template**
# Shopify Integration
Integrate your fabric Dropship account with your Shopify account
## Adding the Shopify Integration
1. To access your Dropship Integrations, click your account name.
2. In the dropdown that appears, select **Merchant Settings**.
The **Merchants Settings** page is displayed.
3. Click **Integrations**.
The **Integrations** page is displayed.
4. Click **Add Integrations**.
The **Add Integrations** page is displayed with a number of tiles.
5. Click the **Shopify** tile.
The **Add Shopify Integration** window is displayed.
6. Do the following:
* In the **Shopify Store URL** field, provide your store name.
* In the **API Key** field, provide your Shopify API key.
7. Click **Add Integration**.
After you enter your Shopify credentials in Dropship, you are directed to Shopify’s website.
8. Click **Install unlisted app** to install the fabric Dropship app in your **Shopify** profile.
Once your credentials are entered and the app is installed, you are ready to begin configuring the various settings of your integration.
## Accessing Integration Options
1. To access your Dropship Integrations, click your account name.
2. In the dropdown that appears, select **Merchant Settings**.
The **Merchants Settings** page is displayed.
3. Click **Integrations**.
The **Integrations** page is displayed.
4. Next to the Shopify logo, click **Options**.
The **Options** window is displayed.
5. Edit one of the following:
* [Configuration](#configuration): The **Configuration** page allows you to make changes to the basic Shopify setup.
* [Webhook History](#webhook-history): The **Webhook History** page shows a list of previous webhook callbacks.
* [Utilities](#utilities): The **Utilities** page is used to update and sync order/inventory data.
## Configuration
To access the **Configuration** page, follow the steps outlined in [Accessing Integration Options](#accessing-integration-options).
### Orders
Configure how your Shopify store syncs orders with fabric.
When you enable a Shopify orders webhook, fabric automatically imports customer orders that contain items from your approved suppliers and distribute purchase orders to suppliers via their preferred integration method (Console, EDI, API, etc). When suppliers ship items, fulfillments and tracking numbers will be automatically synced back to the original customer order in your Shopify store account.
1. To choose when fabric imports customer orders, click the **Select Webhook** field.
2. Choose one of the following options:
* **Order Paid (Recommended)**
* **Order Created**
3. Click **Enable Integration**.
To disable the order integration, click **Disable Integration**.
### Fraudulent order protection
You can specify and configure whether you want to import orders flagged by Shopify as High or Medium risk.
Enable this service if you would like to skip medium-risk orders as recommended by Shopify. High-risk orders are always skipped. The field is **Disabled** by default.
1. To enable this service, select **Enabled** from the fraud field.
2. Click **Save Preference**.
### Location
Set which inventory location to use when syncing inventory.
When fabric updates inventory in Shopify, we have to assign the inventory to a location that's configured in your Shopify account.
fabric recommends setting up a new, dedicated dropship location in order to keep your owned inventory separate from your dropship inventory. For more information on how to do that in Shopify, check the Shopify Help Center.
1. To choose an inventory location, select the **Select Shopify Location** field.
2. Click **Save Location**.
### Inventory
fabric allows you to configure how your Shopify store syncs inventory with fabric. With this feature enabled, fabric can automatically sync supplier inventory movements to your Shopify store.
1. To choose how fabric syncs orders, use the **Select Webhook** field.
2. Choose the **Product/Inventory Updated (Recommended)** option.
3. Click **Enable Integration**.
To disable inventory integrations, click the red **Disable Integration** button.
## Webhook History
The Webhook History page shows a list of previous webhook callbacks. To access the **Webhook History** page, follow the steps outlined in [Accessing Integration Options](#accessing-integration-options).
To inspect a webhook, click on the webhook ID. The **Inspect Webhook** window has basic information about the webhook including any messages the webhook returned, and the script used to fetch the webhook.
## Utilities
To access the **Utilities** page, follow the steps outlined in [Accessing Integration Options](#accessing-integration-options).
### Retry Order
If an order didn't import into fabric, its likely that there was a problem routing the order to the correct supplier. If you have doubled-checked the SKUs and the Shopify mappings, you can attempt to import the order again by supplying the **Shopify Order Number**.
1. To import the order, enter the order number into the **Shopify Order Number** field.
2. Use the fraud checkbox to toggle whether you would like to ignore Shopify’s fraud risk recommendation.
3. Click **Retry Order**.
### Push Inventory
This utility pushes inventory for all synced items from a specified connection. Use the dropdown to select the connection and click **Push Inventory** to kickoff the sync process.
### Sync Variants by Vendor
This utility attempts to sync variants between Shopify and fabric using a vendor name. It searches your Shopify store for all items created within the date range you specified and then attempts to sync them with variants in fabric. fabric checks if the Shopify variant's SKU field matches the Merchant SKU, the UPC, or the Supplier SKU (in that order).
1. Use the **Select Date Range** field to choose whether you would like to look for products created between two given dates, or run a sync against all products (a process that can be very slow).
2. Click **Run Sync** to begin the process.
### Sync Variant
Use this utility to sync variants between Shopify and fabric using a fabric **Item ID**. Enter a value in the **fabric Item ID** field and click **Run Sync**, and fabric will search your Shopify store for any items matching using the Merchant SKU, Vendor SKU, and/or UPC.
* **Variant-Level Metafields:** You can publish Metafields and their values at the variant level.
* **Additional Metafield Types:** Support for additional Metafield types such as `multi_line_text_field`, `boolean`, `URL`, and `date_time`.
### Data Override on Publish
Any publish to Shopify action overrides the data for products and variants in Shopify with the data in Dropship. Empty attributes aren't sent over.
# Publishing Products to Shopify
## Publishing Products Outside of a Proposal
If a supplier isn't submitting a proposal to you and is importing products through a Shopify import, products can be published directly from the **Products Dashboard**.
1. In the main menu, click **Products**.
The products page is displayed.
2. Click **products** located in the \*\*Browse & Review \*\*section.
3. Select the products that you wish to publish. Alternatively, you can check the top box to select all products on the first page.
4. Click **Actions**.
The **Publish Products** window is displayed.
5. In the **Platform** field, select Shopify.
6. In the **Template** field, select **Shopify Export Template**.
7. Click **Publish Products**.
## Publishing Products on a Proposal
Suppliers that have submitted product proposals can be approved and published in the **Proposal** menu.
1. In the **Proposal Summary** page, click **Approve**.
The proposal state is changed to **Ready to Publish**.
2. In the **Assortment Proposal** page, click **Ready to Publish**.
A list of approved proposals containing the items ready to be published is displayed.
3. To review a proposal, click the proposal **ID**.
The **Proposal Detail** page is displayed.
4. Click **Approve Products**.
The **Approve Proposal** window is displayed.
5. In the **Do you also want to publish products on this proposal to an external platform?** field, select **Yes**.
6. In the **Platform** field, select **Shopify**.
7. In the **Template** field, select **Shopify Export Template**.
8. Click **Approve**.
## Checking a Job Status
To confirm that products were successfully created in Shopify, you can check the **Jobs Report** in Dropship to review the status of the job itself.
1. Click on your account name in the top right hand corner of the navigation bar.
2. Click **Job Reports**.
The **Job Status** window is displayed with the most recent jobs at the top.
3. Click the job **ID** for the **push\_products** job.
The job report is displayed.
If any errors occurred when attempting to push products to Shopify, we recommend filing a ticket with support. Please provide [fabric support](https://support.fabric.inc/hc/en-us/requests/new) with the following:
* The error Job ID
* Vendor Name
* Product details (new products added X date, or entire catalog)
# Supplier Information
## Introduction
As a retailer, you can manage your suppliers, see their details, and make changes to their accounts from the **Supplier** page.
To access the **Supplier** page, click **Suppliers** from the menu at the top. The **Suppliers** page features a dashboard that allows you to search for existing suppliers, invite new ones, and browse suppliers by status. There’s also a supplier calendar that allows you to look ahead at upcoming supplier events.
Use the search bar or the options under **Browse Suppliers** to find existing suppliers. Searching for or browsing suppliers displays a list of suppliers.
Clicking on a supplier’s name opens the **Supplier Detail** page.
## Supplier Detail Page
The **Supplier Detail** page shows information about the supplier, broken up in to four menus available in the left-hand side of the page: **Summary**, **Locations**, **Attributes**, and **Carriers**.
## Summary
Summary is the default view of the **Supplier Detail** menu. At the top of the **Summary** menu is a button that allows you to either **Activate** or **Suspend** the supplier, depending on the supplier’s status.
* **Activate** - The Activate button is available for suppliers that have completed the onboarding process. You must click **Activate** in order to complete their onboarding process and enable their supplier account.
* **Suspend** - The Suspend button is available for active suppliers that have completed the onboarding process. It allows you to suspend their status as your supplier at any time.
The **Summary** menu shows basic information about the supplier. There are five sections: **Connection Detail**, **Payment Settings**, **SLAs**, **Contacts**, and **Settings**.
### Connection Detail
The **Connection Detail** section displays the following information:
* **Supplier:** The supplier’s name.
* **Supplier #:** The supplier’s number.
* **Supplier ID:** The supplier’s ID.
* **Integration Type:** The integration type the supplier used.
* **Catalog Import Method:** The method of catalog sharing you used to for this specific supplier.
* **Packing Slip Template:** The type of packing slip the supplier uses to fulfill the retailer’s orders. This is a global setting. See the Settings page to learn more.
Click the **Edit** button next to the **Connection Detail** heading to make changes to this section. In the **Update Settings** window that appears, you can make changes to the **Supplier #**, **Transactions Integration** type, and **Catalog Import Method** type. Please note that while it's possible to edit these settings, it's recommended that you contact fabric support prior to making any changes in the **Update Settings** window.
### Payment Settings
The **Payment Settings** section displays the following information:
* **Cost Tracking:** The cost method the retailer is using for this specific supplier connection.
* **Payment Terms:** The payment terms the retailer is using for the supplier connection.
Click the **Edit** button next to the **Payment Settings** heading to make changes to this section. In the **Update Connection Fees** window that appears, you can make changes to the **Cost Method**, **Commission Rate**, and **Payment Terms**. Please note that, for auditing purposes, we recommend that you don't make changes to these settings. If changes are necessary, please contact fabric support first.
### SLAs
The **SLAs** section shows the number of days the Service-Level Agreement gives the supplier to fulfill an order. Click the **Edit** button next to the SLAs heading to make changes. In the **Update Connection SLAs** window that appears, enter the number of days the supplier has to fulfill an order. When finished, click **Save Settings**.
### Contacts
The **Contacts** section displays the following information:
* **Primary:** The primary point of contact at the supplier’s business.
* **Merchandising:** The merchandising point of contact at the supplier’s business.
* **Fulfillment:** The fulfillment point of contact at the supplier’s business.
The information is displayed as it was when the account was set up and can't be edited.
### Connection Notes
The **Connection notes** section keeps notes from fabric staff or the retailer to store any critical information or decisions while onboarding or during business with the supplier.
Click the **Add a Note** button to create a new note.
In the **Add Note** window that appears, enter a message, use the **Message Visibility** field to choose who can see the note, and use the **Message Notification** checkbox to choose whether or not creating this new note will send an email to all those selected in the **Message Visibility** field. Click **Save Note**.
To edit an existing note, click on the **Options** button to the right of its title and click **Edit**.
### Invoice Adjustments
The **Invoice Adjustments** section displays any invoice adjustments you have set up previously. To make changes to these adjustments, click on the **fabric Retailer** menu at the top of the page, click **Retailer Settings**, and then click **Default Onboarding Settings**.
### Locations
To visit the **Locations** menu, click **Locations** from the navigation at the left of the **Supplier Detail** page. The Locations menu shows a list of all of the supplier’s warehouse locations. This information is owned by the supplier and can't be changed by the retailer.
### Attributes
To visit the **Attributes** menu, click **Attributes** from the navigation at the left of the **Supplier Detail** page. The Attributes menu features a list of all supplier attributes you’ve created previously, and an **Add Attribute** at the top right.
Click **Add Attribute** to open the Edit Connection Attribute window. In the **Attribute** dropdown, there are four types of attributes:
* **About Supplier:** Used to store key information about the supplier.
* **Terms & Conditions:** Specific terms and conditions related to the supplier.
* **Return Policy:** Any agreements related to returns.
* **Packing Slip Text:** Text that shows below the packing slip that's generated by the supplier when they're fulfilling the order.
### Carriers
The **Carriers** menu is where the retailer designates the Shipping Accounts this specific supplier is able to use. To visit the Carriers menu, click **Carriers** from the navigation at the left of the **Supplier Detail** page.
Click **Edit Shipping Accounts** to open the **Update Connection Shipping Methods** window. Use the checkboxes next to each shipping method to choose which ones this supplier can use.
If you don’t have any shipping accounts to choose from, you haven’t created one yet. To set up a shipping account, click on the **fabric Retailer** button in the menu at the top of the page, click **Retailer Settings**, and then click **Shipping Accounts**.
# Supplier Payment
Track supplier invoices and payments
## Overview
Dropship enables retailers to create payments for the invoices generated by their suppliers. One payment can only contain invoices coming from a single supplier. Retailers will be able to pool multiple invoices together and create a single payment draft and add its details such as check number, check amount, and the date of payment.
Please note that this feature only facilitates creating payments against invoices to keep a record of supplier remittances. The feature doesn’t involve movement on money.
## Create Payments
To create a payment, select **Reports** in the top header, then **Payments.**
Click on **Create Payment**
Use the **Select Supplier** dropdown menu to select the recipient for the payment, then click **Continue**.
You can select the invoices to be added individually, or use the **Filter** to narrow the list to a specific range.
Browse the list, or search for invoices, then select the checkbox next to it.
After the selection is complete, click on **Actions** and **Add Invoice.**
You can also **Search** for existing payments or see a list of **Draft** and **Completed** payments.
### Adding credits to the payment
You can also add any existing credits to a payment. Credits are the amount a supplier has already been compensated with. This amount will be subtracted from the total invoice amount.
Once you have your invoices selected a payment in the **Payment Detail** screen, select the **Add Credits** link to the left.
Select the **Credits** from the list, then click **Actions**, **Add Credits.** In the confirmation dialog, select **Save**.
### Adding adjustments to the payment
To add an adjustment to a payment, select **Adjustments** in the **Payment Detail** screen, select the **Add Adjustment** button.
Select the kind of adjustment from the dropdown menu, enter the **Amount** and a **Description**. Click the **Save** button. If you need to modify or delete the adjustment, click the **Edit** link.
### Adding Check Information
Once all invoices, credits and adjustments are added, a final amount of payment will be automatically calculated.
Go to **Payment Summary Page**, to see the summary and check information.
Click on **Edit** and add the check information
* Provide Check number
* Check Amount
* Check Issue Date
Once all details are added, click on **Mark as paid** and all invoices will be closed and payment information will be recorded.
# Support
## Overview
fabric Tech Support is available for all current customers and registered prospects.
Before issuing a support request, you can refer to our [Knowledge base](/v3/guides/get-started/copilot-overview) for Copilot questions or the [Developer Portal](/v3/api-reference/getting-started/overview) for info on our APIs.
## Dropship Support for Retailers
Under the **Support** dropdown in the menu at the top of the page, select **File a Ticket,** complete the form, and click the **Submit** button. The support dropdown exists on all pages within the platform. It's helpful to submit your request directly from the page where you are experiencing the issue.
Note: Please use your company email address for all form completion.
## Definitions
Use the following lists to help guide you when filling out the Issue Type and Priority dropdown fields. Ensuring these fields are filled out correctly will help fabric's support team respond to your ticket quickly and accurately.
#### Issue Types
* Product Training: Demo fabric Dropship or feature training request.
* Merchandising: Product Help (Submission of proposals, Cost Updates, Import Request Issues, Broken Images).
* Upload Failure: Import issues (Products, Inventory, Shipment, Invoices).
* Order Help: Help during closing orders or registering shipments.
* Shopify: Shopify Help (Order fulfillment and Inventory Help).
* ShipStation: ShipStation Help (Order and Fulfillment Help ).
* Account Help: Supplier, Retailer Settings Help, Adding new users.
* EDI Integration: EDI Help (Order fulfillment and Inventory Help).
* API Integration: API Help (Order fulfillment and Inventory Help).
* Reporting: Reporting requests (Invoice export).
* Inventory Issues: Inventory Errors (Inventory not updating in fabric system).
* Proposal Help: Data Correction (fabric Dropship data team proposal help).
#### Priority Types
* Urgent: Complete loss of access to fabric Dropship.
* High: Major functionality is severely impaired (Timeout issues, Product Update Requests not passing Shopify API).
* Normal: Non-critical loss of functionality of the software or application (Shipment not registering, invoice issue, Order management issues).
* Low: General usage questions and product help issues (Documentation errors, Adding users, Product Imports, Proposal).
## General Support
If you need Tech Support for the fabric Core Platform, [click here](https://support.fabric.inc/hc/en-us/requests/new).
# BigCommerce Integration
## Initial Setup
To access Integrations, click on your account name in the menu at the top of the page. In the dropdown that appears, select **Retailer Settings**. On the Retailer Settings page, find and click on the **Integrations** tile.
On the Integrations page, click on the **Add Integration** button at the top-right of the page. In the Add Integration popup that appears, click the **Add** button in the BigCommerce tile.
You will be prompted to fill out your BigCommerce **Store Identifier** and **Store Token**. When finished, click the **Add Integration** button.
After successful authorization, BigCommerce will show up on the list of the integrations in the Integrations section of Dropship.
## Configuration
On the Integrations page, find and click on the **Options** button to the right of the BigCommerce logo and select **Configuration** from the dropdown. The Configuration page allows you to make changes related to how order and transaction information is shared between Dropship and BigCommerce.
### Configure Webhooks
Choose whether or not to enable webhooks for **Orders**, **Inventory**, or **Fulfillment**.
* **Orders:** With the orders integration enabled, fabric can automatically send purchase orders from your supplier partners directly to your BigCommerce account. Enabling this integration means that orders from ALL of your supplier connections in fabric will flow through this integration.
* **Inventory:** Dropship requires frequent inventory updates to reduce cancellations due to stockouts. The BigCommerce integration can sync inventory with Dropship automatically. Turn this integration off if you would prefer to update inventory manually.
* **Fulfillment:** Dropship requires frequent order fulfillment updates to track orders. Our BigCommerce integration can sync order fulfillment with Dropship automatically. Turn this integration off if you would prefer to update order fulfillment manually.
**Note:** You can enable and disable these webhooks at any time.
### Webhook History
On the Integrations page, find and click on the **Options** button to the right of the BigCommerce logo and select **Webhook History** from the dropdown.
The Webhook History page shows details of all the events that have been captured by Dropship from your BigCommerce store:
* **ID:** The ID of the webhook as captured by Dropship.
* **Topic:** The topic that was captured as part of the webhook.
* **Status:** The status of the webhook (success or failure).
* **Payload:** The data that was sent in the webhook payload.
* **Received:** The timestamp of when the webhook was captured. This is in the user’s local time zone.
Use the Filter feature at the top of the table to adjust the webhook information you see.
# Adding Fulfillment Locations
## Overview
To add a fulfillment location, click on your supplier name in the menu at the top of the page. In the dropdown that appears, select **Supplier Settings**.
From Supplier Settings, find and click on **Inventory Settings**.
In Inventory Settings, click the **Add Location** button in the Fulfillment Locations section. In the Add Location popup that appears, fill out the location's information and click the **Add Location** button at the bottom to save.
You can add as many fulfillment locations as you need.
# Bulk Actions for Orders
## Introduction
With the Bulk Actions features in Dropship, you can easily perform actions that affect multiple orders.
This document is divided into two sections: **Open Orders** and **Canceled Orders and Backorders**.
## Open Orders
This section outlines the steps to perform bulk actions on open orders, including printing pick tickets, reprinting shipping labels, reprinting packing slips, and manually accepting orders.
To begin, navigate to the **Orders** page in Dropship, and click on one of the tiles under **Open Orders**.
On the Orders page, find the orders you would like to print a pick ticket for and click the corresponding checkboxes at the left to select them.
After you select the Orders, click the **Actions** dropdown and take the following steps based on the action you need to perform.
### Print Pick Ticket
The pick ticket differs from a packing slip. A packing slip is required for all Retailer orders and contains all of your required information. A pick ticket provides a “pick list” of the order line information with your supplier SKU information and total ordered quantity. This can be helpful if your Retailer uses a retailer SKU on the packing slip instead of your internal supplier SKU.
Select **Print Pick Tickets** from the Actions dropdown.
In the popup that appears, you will be able to download and/or print your pick tickets.
### Reprint Shipping Labels
If shipping labels are being generated directly in fabric Dropship, you can reprint them at any time.
Select **Print Shipping Labels** from the Actions dropdown.
In the popup that appears, you will be able to download and/or print your shipping labels.
### Reprint Packing Slips
To reprint a packing slip for a specific order or batch of orders, select **Print Packing Slips** from the Actions dropdown.
In the popup that appears, you will be able to download and/or print packing slips.
### Manually Accepting (Acknowledging) Orders
To accept (also called acknowledge) an order or a set of orders, select **Accept Orders** from the Actions dropdown.
In the popup that appears, you will see an overview of the orders you selected. Click **Accept All Orders** to confirm.
Once the orders have been accepted, the status will change from **Ready** to **OK**.
## Canceled Orders and Backorders
This section outlines the steps to perform bulk actions on orders that require attention, including canceled and backordered orders.
### Manually Accepting (Acknowledging) Canceled Orders
When orders are canceled by a Supplier, Retailers have the ability to acknowledge the cancellation. If you don't have an automated integration with the fabric Dropship Platform, you can acknowledge canceled orders manually within the platform.
Navigate to the **Orders** page and click **New Cancels** in the **Requires Action** section of the **Orders** dashboard.
In the list of canceled orders, **click the checkbox** beside the canceled order you would like to acknowledge.
Click the **Actions** dropdown at the top of the list and select **Acknowledge Cancels**.
Click the **Acknowledge All Cancels** in the popup window to complete the process.
### Managing orders with backordered Items
When items in an order are marked as backordered by a Supplier, Retailers have the ability to acknowledge the backorder. If you don't have an automated integration with the fabric Dropship Platform, you can acknowledge orders with backordered items directly within the platform.
Navigate to the **Orders** page and click **New Backorders** in the **Requires Action** section of the **Orders** dashboard.
In the list of backorders, click the **blue PO# link** to open the order detail page.
On the order detail page you can view the date the supplier expects the item to be back in stock in the **Key Dates** section.
You can then acknowledge the backorder by clicking the **Acknowledge Backorder** button at the top of the page.
# Fulfillment
Process and ship orders from all connected retail partners.
## Overview
To navigate to the **Orders** dashboard, login to the Dropship Platform and click **Orders** on the top menu bar.
The three main sections within the **Orders** Dashboard are: Open Orders, Reports, and Require Attention.
**Open Orders** - contains four pre-filtered buckets of dropship orders
* Open Orders - a list of all open orders
* Current Orders - a list of open orders that are within your fulfillment SLA
* Past Fulfillment SLA - a list of open orders that are past your fulfillment SLA
* Late Invoices - a list of open orders that have shipments but remain open due to missing invoices.
**Reports** - contains pre-filtered reports for various order details
* Orders with New Messages - Browse the latest order notes from your partners
* Shipments & Tracking - Review shipments & tracking numbers
* Returns - Track returns and RMAs
* Invoices - Review all invoices from suppliers
**Require Attention** - contains two pre-filtered buckets to manage cancellations and backorders
* New Cancels - a list of cancellations that require acknowledgement by you, the Supplier
* New Returns - a list of orders that have a return associated with them.
Clicking on any of the pre-filtered buckets within each of the main sections of the **Orders** dashboard will provide a list view of all orders that fit within the pre-filtered criteria. All data from any page containing a list view of orders can be exported by clicking on the **Export** link on the upper right side of each page. If any additional filters are applied to the page, the export will contain all orders that fit the filter criteria.
### Manage Orders in Bulk
1. To access the bulk operations page, click **Manage Orders in Bulk**.
The Bulk Operation Details Page is displayed with available workflow actions.
2. Click one of the following fields:
* **Cancel Entire Orders by PO Number**
This operation cancels all orders of the given Purchase Order Numbers. To use this operation, the following mandatory fields are required: **Purchase Order Number**, **Retailer ID**, and **Cancellation Reason Code**.
* **Cancel specific order lines by SKU**
This operation cancels all order lines when given the purchase order of a given SKU. For example, if orders include an item that's now discontinued or is OOS, you can cancel just those items. To use this operation, the following mandatory fields are required: \*\* PO Number\*\*, *SKU* and **cancellation reason code**. If **Quantities** isn't provided, the default action cancels all quantities in that order.
* **Cancel all order lines of specific SKU**
This operation cancels all order lines of the given SKU. For example: A vendor can upload a template with the **SKU** affected and the **Cancellation Reason**. Then all orders containing the affected SKUs have those SKUs cancelled instead of going into each order individually. To use this operation, the following mandatory fields are required: **SKU** and **Cancellation Reason Code**.
Only the specific SKUs are canceled when an order contains multiple order lines with different SKUs.
### Video: Dropship manual fulfillment
# Invoices
Invoice orders directly within Dropship individually or in bulk via file upload.
## Invoicing individual orders
Navigate to the list by clicking **Orders** from the top navigation menu.
From the **Orders** dashboard, choose Late Invoices to view a list of orders that have been marked as shipped but are missing an invoice.
Select an order by clicking on the **blue** link in the PO# column, click the **Invoice Order** and complete the form.
Orders must have a shipment associated with them before they're eligible for invoicing.
A pop-up window will appear. Complete the **required** data for the Invoice.
Add Invoice Number (must always be a unique reference number, can never be an Invoice Number used prior in the Dropship platform under your Supplier Account.
Add the items that you are Invoicing against.
If you have any adjustments that you wish to capture on the Invoice, click **Add adjustments** where you can proceed to select **Adjustment Types** from the dropdown menu.
Adjustments must be allowed by the retailer.
**Adjustment Types**
Charges
* Service fee
* Shipping expenses
* Other charges (if you select this option, you will have a memo appear where you can enter the type of charge you wish to capture such as a Dropship Fee)
Allowance
* Returns allowance
* Promotion allowance
* Other allowance (if you select this option, you will have a memo appear where you can enter the type of charge you wish to capture, such as a Dropship Fee)
Enter the **Calculation** of the adjustment, Flat or Percent.
Enter the total **Amount** of the adjustment.
Click **Add** to have the adjustment applied to the Invoice.
After you have completed filling out the **required** information for the Invoice, you may proceed to click the **Register Invoice** button at the bottom of the pop-up window.
If you need to add multiple invoices for a particular order, you will need to repeat the process until all items have been invoiced.
## Importing Invoices
**Navigate to the Orders Dashboard page**
* Click the **More** button towards the right-hand corner of the screen next to the search bar
* Select **Import invoices**
If you don't have the Import File Template on-hand, you may download the template via the pop-up screen for Importing Invoices. Click the blue text **import template** where the template file will automatically download for your reference and use.
After you have completed the template, save it as a .csv file. Next, drag or select the desired file to the box, then click the **Schedule Import** button.
You can view the file import status within the same pop-up screen by clicking **Check Import Status**.
### Video: Dropship manual invoicing
# Shipments & Tracking
Update orders with tracking information on a single order or in bulk via file upload and generate shipping labels.
## Register tracking
To register tracking numbers, navigate to the orders list by choosing **Orders** from the navigation menu at the top.
From the **Orders** dashboard, choose either **Open Orders**, **Current Orders**, or **Past Fulfillment SLA**. If you know the PO number of the order you would like to process, use the search bar to search that specific number.
Select an order that you want to fulfill by clicking on the link in the PO # column.
From the Fulfill Items menu, choose **Register Tracking Numbers** and complete the form.
To register a tracking number, you must enter the **Carrier & Service** and the **Tracking Number** in the form.
Select the items that are included in the shipment.
Click on **Register Tracking Number** at the bottom of the form.
NOTE: You can have multiple tracking numbers for a single order. After you register a tracking number, the form will reset so that you can quickly enter the next tracking number.
## Importing shipments
To import shipments, click the **More** button towards the right-hand corner of the screen next to the search bar, and select **Import Tracking Numbers.**
If you **don't** have the Import File Template on-hand, you may download the template via the pop-up screen for **Importing Tracking Numbers**. Click the blue **import template** link and the template file will automatically download for your reference and use.
After you have completed the template, save it as a .csv file.
Drag or select the desired file to the box, and click the **Schedule Import** button.
NOTE: You can view the file import status within the same pop-up screen by clicking on **Check Import Status**.
## Generate shipping label
To generate a shipping label, choose **Orders** from the top navigation menu.
From the **Orders** dashboard, choose either **Open Orders**, **Current Orders**, or **Past Fulfillment SLA**. If you know the PO# of the order you wish to process you can use the search bar to search a specific PO#.
Click on the blue text (PO#) of the desired order you wish to ship within one of the Order Buckets found via the main **Orders** dashboard page or use the main search bar for a specific order to launch the **Order Detail** page.
Select **Print Shipping Labels** from the **Fulfill Items** dropdown and complete the form.
If the order only requires one shipping label click **Fill All** to fulfill all units on the order for a single shipping label.
If your order requires more than one shipping label, add the number of units for each of the items by clicking on the plus sign + to add the units shipping in the package.
Add the shipping dimensions of the package and click **Create Label.**
NOTE: If your order requires multiple packages to be shipped, you will need to repeat the process until all associated items on the order.
After you have successfully generated shipping labels, the page will refresh. The tracking numbers associated with the order will appear along with a new button for your team to **Print all Labels.**
When you press the **Print All Labels** button, a pop-up will appear for your team to review the carrier shipping labels. You can click the Open in New Tab button to download and print the documents on a separate tab.
# Inventory
Maintain inventory positions for your items in Dropship via file upload.
## Updating inventory
1. To update existing inventory for an individual item in your product catalog, click **Products** in the top navigation menu.
The **Products Review & Export** page is displayed.
1. Click **Browse Products & Inventory**.
The **Items** page is displayed.
1. Select the item you want to update by clicking the blue hyperlink text.
2. To update an items inventory level, use the **On Hand** field.
3. Click **Update Inventory**.
### Uploading inventory via file import
1. To upload inventory into your product catalog, click **Products** in the top navigation menu.
The **Import** page is displayed.
1. Click **Update Inventory**.
2. To upload your inventory, select the correct template from the dropdown field based on the category of products you are uploading.
3. Select **Download Empty Template** to obtain a .csv file to populate with your info.
To view the headers on the file click the **Show Headers** link.
1. Select the completed file you wish to upload
2. Click **Begin Import**.
Review the results of your import.
### Video: Updating inventory
# Overview
fabric Dropship provides suppliers a platform to discover, connect with, and grow successful partnerships with retailers to expand their reach and distribution
fabric Dropship combines ease of onboarding, technical implementation, day-to-day management, and promotional opportunities to make long-lasting, profitable connections with retailers.
## Navigation
The fabric Dropship Platform is divided into four separate sections accessible from the top navigation menu
* **Orders** - Your dashboard for managing and processing all dropship orders
* **Products** - Your dashboard for managing your item catalog. Submit new items to connected retail partners and submitting up to date inventory.
* **Retailers** - Your dashboard for reviewing all retailers who are connected to your dropship account
* **Reports** - Detailed reports to help manage your dropship business
# Import Products from Shopify
## Introduction
To import products from Shopify, click on Products in the menu across the top of Dropship.
On the Products dashboard, scroll to the bottom of the page and select **Import from Shopify** to begin pulling in your products.
Choose the products you would like to import:
* **Import products from a Shopify collection (recommended).** This method requires that you have products in a Shopify collection. You will be prompted to enter the name of the Collection in the search bar (it must match the name of your collection in Shopify).
* **Import all products that are currently published to my online store.**
Click **Continue** to begin importing.
Once products have been imported from Shopify, they will be available from the Product Dashboard. Depending on your retailer partner's product requirements, you may be asked to submit a proposal for these items.
# Product Management
Upload all your product offerings and submit them to your connected retailer partners.
## Browse your catalog
To view the items in your current catalog and their inventory levels, select **Browse Products & Inventory** from the **Products** dashboard.
On the **Items** page, you have options to filter the view based on several criteria by selecting **Filter**.
To find any instance of a particular item, use the **Search** function.
To create a file with the information currently in view, select the **Export** dropdown and choose the option you require. A download link will arrive at the email address of the account you are using in 5-10 minutes.
## Approving products submitted by retail partners
When your retailer submits an import request to your team, you will receive a notification from fabric alerting you that products have been submitted and require action by your team to review and approve the products.
1. To review the import request your retailer has submitted, select **Review Import Requests** within the **Products Dashboard**.
You will be able to access any current and historical import requests submitted by your retail partner within the **Import Requests** page.
2. To review and approve the import request, click the blue ID of the request with a pending status.
3. Download the file to review all product data submitted by your retailer.
Ensure the product data in the file submitted by your retailer is thoroughly reviewed to verify its accuracy.
4. If the product data is correct, click approve. Otherwise, click decline.
If an import request is declined, we recommend reaching out to your retailer to have the necessary updated/changes made and re-submitted for approval.
## Submitting Products to Retail Partners
1. Navigate to the Products dashboard.
2. To submit items to your retailer partner, select **Submit New Proposal**.
An introduction page is displayed.
3. Click **Get Started**.
4. In the **Select Retail Partner** field, choose the partner you want to receive your proposal.
5. Select the **Category** of products for this proposal.
6. Select the proposal purpose type from the following options:
* “I want to submit new products for approval”
* “I want to proposal changes to my items costs or prices”
* “I want to submit updated attributes for previously approved products”
7. Upload the category template with your product information.
If you need a template, click the **Download Sample** link in blue.
8. Click **Create Proposal**.
Once your file has been uploaded successfully, you will see **Completed** displayed. If there are any errors, you will be notified and instructions will appear on possible corrections.
9. To complete the process, click **Review Compatibility**.
Dropship will now compare and validate your imported data with the requirements of the retailer who will receive your proposal. If the data is valid, **Compatibility Passed** is displayed.
If there are any errors, you are notified and instructions appear with possible corrections.
### Error Handling
* **Ruleset Error Report:** Each proposal's compatibility check returns an Error Report file. This report includes all SKUs and an itemized list of errors corresponding to them.
* **Ruleset Failure Report:** A separate file is generated for items that encountered errors during the compatibility check. You can address these specific items and re-import them without re-processing the entire proposal.
Here you will be able to review all failing attributes (requirements) with instructions on how to resolve them.
* **I want to fix it myself:** This option allows your team to resolve the compatibility issues yourself. Your team will need to make the necessary corrections to the failing attributes on the file used to create the proposals. Once corrections have been made to the existing file, you can select the “I want to fix it myself” button to re-import the same file (with corrections) to the affected proposals to clear compatibility issues.
* **Get help from fabric:** This option allows your team to submit a request to the Dropship Product Onboarding team for further assistance. Once the product onboarding team has received your request, they will begin reviewing the affected proposal to help clear compatibility errors and enrich product data.
Once compatibility is passing on your proposal, you can proceed to **Submit for Approval**, which will notify the retailer that there is a proposal to review.
# Reporting
## Introduction
The Reporting features in fabric Dropship allow you to export information about your Orders, Shipments, Invoices, and Products.
To begin, log in to fabric Dropship and select **Orders** from the menu at the top of the page.
## Order Report
To export orders, click on one of the categories under **Open Orders** on the Orders page.
You will be directed to the **List** page, which shows all of the orders in the category you chose.
When exporting an orders report, you can apply different filters to the data. Some filters include Connection (retailer partner), Order Status, and Date range in which the orders were received.
Once you are ready to export the order report (with or without filters), click the **Export** button to the right of the search bar.
The export will be delivered as a CSV file to the email address associated with the Supplier account.
## Shipment Report
To export past shipments, click on **Shipments & Tracking** on the Orders page.
You will be directed to the **Tracking #s** page, which shows all of your previous shipments.
When exporting a shipment report, you can apply different filters to the data. Some filters include Connection (retailer partner) and the date the shipment was created.
Once you are ready to export the shipment report (with or without filters), click the **Export** button to the right of the search bar.
The export will be delivered as a CSV file to the email address associated with the Supplier account.
## Invoice Report
To export past invoices, click on **Invoices** on the Orders page.
You will be directed to the **Invoices** page, which shows all of your invoices.
When exporting an invoice report, you can apply different filters to the data. Some filters include Connection (retailer partner), the date invoice was submitted, and whether the invoice has been received by your retailer partner.
Once you are ready to export the invoice report (with or without filters), click the **Export** button to the right of the search bar.
The export will be delivered as a CSV file to the email address associated with the Supplier account.
## Product Report
To export your product catalog, select **Products** from the menu at the top of the page.
To access your product catalog, click on **Browse Products & Inventory**.
You will be directed to the **Items** page, which shows all of the products in your catalog.
When exporting your product catalog, you can apply different filters to the data. Some filters include Connection (retailer partner), the date the item was created, and whether the item in stock.
Once you are ready to export the product report (with or without filters), click the **Export** button to the right of the search bar.
The export will be delivered as a CSV file to the email address associated with the Supplier account.
# Retailer Information
## Introduction
The Retailer menu lets suppliers view a list of all connected retailer partners and details about each, as well as make edits to the connection settings that affect transaction and business practices with each retailer.
To view the Retailer page, click **Retailers** from the menu across the top of the page in Dropship.
The Retailer page features a searchable, filterable table that displays basic information about each retailer.
* **ID:** The connection ID. A unique value that the system assigns each specific Supplier - Retailer connection.
* **Retailer:** Name of the retailer.
* **Supplier #:** Your supplier number in the context of the connection.
* **orders (Last 7):** The total number of orders you’ve received from the retailer partner in the last seven days.
* **Integration:** The type of integration between the Retailer partner’s system and their fabric Dropship portal.
* **Status:** Status of the connection in real time.
Clicking on a retailer’s name opens the Retailer Detail page.
## Retailer Details Page
The Retailer Detail page shows information about the retailer, broken up in to four menus available at the left-hand side of the page: **Summary**, **Locations**, **Attributes**, and **Carriers**.
### Summary
Summary is the default view of the Retailer Detail menu. There are five sections: Connection Detail, Payment Settings, SLAs, Contacts, Settings, Connection Notes, and Invoice Adjustments.
#### Connection Detail
The Connection Detail section displays the following information:
* **Retailer:** The retailer’s name
* **Retailer #:** The retailer’s number
* **Retailer ID:** The retailer’s ID
* **Integration Type:** The integration type the retailer used
* **Catalog Import Method:** The method of catalog sharing you used to for this specific retailer
* **Welcome Call Date:** The date the retailer had their scheduled welcome call with fabric Dropship
* **Packing Slip Template:** The type of packing slip the retailer uses to fulfill the supplier’s orders
You can make your playbook and other assets available to all supplier partners through the portal. To do this, you need to share the assets with the fabric team. The assets are then uploaded to your account and suppliers are able to access this information on the connection details page.
#### Payment Settings
The Payment Settings section displays the following information:
* **Cost Tracking:** the cost method the retailer is using for this specific connection
* **Payment Terms:** The payment terms the retailer follows for the Purchase Orders you fulfill. There are five payment terms available: Net 15 Days, Net 30 Days, Net 45 Days, Net 60 Days, and Net 90 Days.
#### SLAs
The SLAs section shows the number of days you have to fulfill any order you receive so that you meet the SLA criteria.
#### Contacts
The Contacts section displays the following information:
* **Primary:** The primary point of contact at the retailer’s business
* **Merchandising:** The merchandising point of contact at the retailer’s business
* **Fulfillment:** The fulfillment point of contact at the retailer’s business
#### Settings
The information in the Settings section is set by your retailer partner.
* **Ship from Retailer:** If the supplier generates Shipping Labels from fabric Marketplace, enabling this option will populate the "ship from" on all shipping labels with a merchant return address. Some carriers might not respect this address, so it should be viewed as cosmetic only.
* **Auto-populate Invoice Data:** If enabled, all the invoices will be generated automatically as soon as the order is fulfilled. Only the invoice number will be left blank. Enabling this feature may reduce invoicing discrepancies, but suppliers won't be able to submit custom adjustments.
* **Require Pricing Approval On Proposals?:** If the retailer/supplier connection is using Proposals as the Catalog Import Method, enabling this option will require the extra step of approving Pricing before the proposal is accepted.
* **Include 850 In Packing Slip?:** If the supplier has an EDI integration in place, enabling this option will include the packing slip in the EDI 850 document.
* **Auto Invoice And Close Order When Fulfilled:** If this option is enabled, as soon as an order is fully shipped, the invoice is automatically generated and the order is closed. This is different from “Auto-populate Invoice Data,” which doesn't close the order. This option overrides the settings done for “Auto-populate Invoice Data.”
#### Connection Notes
The Connection Notes section keeps any notes left by fabric staff and retailers to store critical information or decision taken while onboarding or during business with the retailer.
The visibility of these notes can be set by the retailer based on the business requirements. As the supplier, you can only view the notes you have permission to see.
#### Invoice Adjustments
The Invoice Adjustments section stores the default adjustments set for the particular connection with your retailer partner.
As a supplier, you may need various adjustments on the invoices, such as shipping fees, service fess, or other types of charges incurred while fulfilling the order.
You may also have to pay certain charges on your retailer partner such as return allowances, damages etc.
To edit these settings, contact your retailer partner.
### Attributes
To visit the **Attributes** menu, select Attributes from the navigation at the left of the Retailer Detail page. You will be able to see any attributes your retailer partner might have stored related to their connection with you.
### Carriers
The Carriers menu is where the retailer designates the Shipping Accounts the supplier is able to use. To visit the Carriers menu, select **Carriers** from the navigation at the left of the Supplier Detail page.
Retailers can approve any number of Shipping Accounts to be used by you as their supplier. Once approved, you will be able to ship an order using your Shipping Accounts.
If you don’t have any carriers listed here, [you might need to set up your own carriers](/v3/guides/dropship-suppliers/settings#shipping-accounts).
### Assets
Retailers can now make their playbook and other assets available to all supplier partners through the portal. They need to share the assets with the fabric team, which can upload them on their account and suppliers will be able to access them on the connection details page.
# Returns
Approve and reject returns, then issue credit memos in Dropship.
## Managing Returns
If your retailer partner uses the fabric Dropship Platform to manage returns, they will create the return in Dropship and you as the supplier need to update and approve those returns in Dropship.
## Procedure
1. In the top navigation, click **Orders**.
The **Orders** page is displayed.
2. In the **More** field, select **Review Returns**.
The **Returns** page is displayed.
3. From the list of returns, click the return you want to process.
The **Return Detail** window for the return is displayed.
4. Do one of the following:
* Click **Approve Return**.
* Click **Reject Return**.
### Credit memos
When a return is approved, you are asked if you want to create a *Credit Memo* for that return.
1. In the **Confirmation** window, select the **Create a credit memo on approval** field.
2. Enter the memo.
3. Enter your credit number.
4. Click **Confirm**.
Once the return and credit memo has been processed, your retailer partner will have access to the data. If you have specific questions as to how your retailer partner manages returns, please contact them directly.
# Settings
Manage information about your business and its operations.
To access **Supplier Settings**, click your account name in the menu at the top of the page. In the dropdown menu that appears, select **Supplier Settings**.
Use the tiles on the **Supplier Settings** page to manage everything from general information and user privileges to API clients and webhook settings.
## General Information
### Key details
Manage general information about your business.
* **Name:** The name of your business as it appears in fabric Dropship.
* **Website URL:** Your business’s URL.
* **Connections Manager:** The key contact for all supplier business inquiries.
* **Merchandising Manager:** The contact person for all product & inventory inquiries.
* **Transactions Manager:** The contact person for all order and fulfillment inquiries.
### Business address
Manage your business’s physical location information.
You must set a business address before you can start dropshipping with fabric Dropship.
## Currency Settings
**Currency Settings** is used to manage the currency of your account.
Use the dropdown menu to select your business’s primary currency. This will help Dropship apply location-specific configurations such as a product’s cost and price. Supported currencies include United States Dollar, Canadian Dollar, British Pound Sterling, and Euros.
## Notifications
Dropship supports real-time push notifications so that you can receive alerts related to transaction events.
To enable a notification, enter an email address or a distribution list, then use the toggle menu to set the notification to **Enabled** or **Not Enabled**.
Types of **Transaction Notifications**:
* **Connection Notifications:** Notifications related to your connections and connection notes.
* **Order Received:** Notifications when a new order is received.
* **Order Canceled:** Notifications when a cancellation request is received.
* **Order Ship To Address Updated:** Notifications when a “ship to” address change request is received.
* **Message Received:** Notifications when a new message is received on an orders.
* **Return Received:** Notifications when a new RMA is created on an order.
* **Return Approved/Rejected:** Notifications for when RMAs are approved or rejected.
In addition, **Digest Notifications** allow you to receive daily, aggregated reports on any late purchase orders.
## Branding
Use the **Branding** menu to upload your business’s logo. The uploaded logo is displayed to your partners throughout the fabric platform and included on your packing slip.
The ideal logo is a 360 x 120 pixel PNG.
1. To upload a logo, click **Upload From Device**.
2. Select a file from your computer.
3. Update the preview by clicking and dragging the preview to zoom, pan, and crop the image.
4. Click **Save**.
## Payment Settings (Staff Only)
Connect your bank account to your fabric Dropship profile for automatic payments through Plaid. Click on the **Open Plaid** button to begin the setup process within Plaid.
## Inventory Settings
Register and update fulfillment and inventory locations.
### Inventory tracking
Inventory Tracking is used to configure how fabric tracks your inventory by choosing between **Managed** or **Unmanaged**.
* **Managed**: fabric tracks and shares inventory positions with your retail partners. Managed inventory is automatically updated when orders ship, inventory is updated, or new proposals are sent. If you are using an integration to manage inventory, it will automatically be refreshed through your integration.
* **Unmanaged**: fabric will NOT track inventory for any items. The fabric platform will assume all items listed in your inventory are always in stock.
Once you’ve made your selection, click **Update** to save your changes.
### Fulfillment locations
Manage the locations you stock with inventory and fulfill orders from. These locations are only used for shipping and carrier services and aren’t synched with warehouse locations. There is no limit to the number of locations you can add.
1. To add a new location, click **Add Location**.
2. Fill out the fields in the window that appears.
3. Click **Add Location**.
To make changes to a location you’ve already created, click on its corresponding **Edit** button.
## User Management
Invite new users and manage existing ones.
### Creating a new user
1. To add a user to the account, click **Add New User**.
2. Enter the new user’s first name, last name, and email address.
fabric sends them an email with instructions to activate their user account.
### Editing a user
To edit a user’s account information, find and click on their name on the User Management page.
The **General Settings** section allows you to edit basic profile information that identifies the user across the fabric platform. Use the Status dropdown menu to change the account between **Active**, **Suspended**, and **Invited**. Once complete, click **Update**.
The **Role** section allows you to configure a user’s access level. Click **Add Role** to assign a user a new role. To edit a user’s existing role, click on the role and the **Update Role** window appears. Select a new role for the user in the dropdown menu and click **Save Role**.
**Security Credentials** allows you to give the user a new temporary password. Use the **New Password** and **Confirm Password** fields to create their new password. Upon logging in, the user is required to change their password.
**Security Info** shows details from the last time the user signed in to fabric.
## API Clients
Manage API keys for your account.
### Adding a new API Client
1. To add a new client, click **Add API Client**.
2. Provide a client name.
3. Click **Create Client**.
After the client is created, you will be able to retrieve their credentials.
### Accessing client credentials
1. To access a client’s credentials, find and click on their name on the **API Clients** page.
The Client Credentials section shows the name you gave the client, their API URL, their Brand ID, and Client ID, along with the Client Secret.
2. To access the client secret, click **Get Client Secret**.
You can only access the client secret once
1. Click **Show API Secret**.
The API secret is displayed along with a copy button so that you can save it.
If you need to access the client secret again, please submit a support ticket.
## Integrations
Manage existing integrations associated with your account and add new ones.
fabric Dropship supports integrations with other e-commerce services, such as Shopify, WooCommerce, BigCommerce, ShipStation, and more.
### Adding an integration
Basic setup for integration with third-party platforms consists of clicking on the **Add Integration** button at the top-right of the page. In the Add Integration window that appears, click the **Add** button next to the platform you’d like to integrate with. From there, integrating with each platform is different, but setup includes information like the API Key, API Secret, or Store URL.
For specific setup instructions for each platform, please see the following documents:
* [Shopify](/v3/guides/dropship-suppliers/shopify-integration)
* [WooCommerce](/v3/guides/dropship-suppliers/woocommerce-integration)
* [BigCommerce](/v3/guides/dropship-suppliers/bigcommerce-integration)
* [ShipStation](/v3/guides/dropship-suppliers/shipstation-integration)
### Integration Options
Existing integrations appear on the **Integrations** page below the **Add Integration** button.
To manage an existing integration, find and click on its corresponding **Options** menu. The options in the window that appears are shortcuts to edit settings within the integration. See the platform-specific setup instructions above for more details.
## Webhooks (Advanced)
Configure webhooks and review webhook history.
### Configuring webhooks
Configure webhooks to listen to key events from the fabric platform.
1. To add a new webhook, click **Add Webhook**.
* Item Inventory updated
* Offer Created
* Order Created
* Order Closed
* Shipment Closed
* Cancel Created
* Invoice Created
2. In the **Method** field, select **post**, **put**, or **patch**.
3. In the **URL** field, enter the webhook URL.
4. In the **Status** field, select whether the webhook is **Enabled** or **Disabled**.
5. Click **Add Webhook**.
### Webhook history
Review recent webhook results.
## Proposal Departments
Visit the [Proposals](/v3/guides/dropship-retailers/proposals) page to learn more about Proposal Departments in fabric Dropship.
### Creating a proposal department
To create a new Proposal Department, click the **Create** button at the top-right of the page and fill out the fields in the **Create Department** window that appears.
* **Name:** Give the Department a name.
* **Product Import Template:** select from fabric’s default templates or a template you created.
* **Supplier Ruleset:** Select the attribute validations that suppliers must meet.
* **Retailer Ruleset:** Select the attribute validations that you must meet.
* **Sample Template URL** (optional)
## Attribute Value Transformers
Visit the [Transformers](/v3/guides/dropship-retailers/settings/attribute-value-transformers) page to learn more about Attribute Value Transformers in fabric Dropship.
### Creating a transformer
1. To create a new transformer, click **Create Transformer**.
2. Provide a transformer name.
3. Click **Save**.
### Editing transformer attributes
1. To add a new Transformation Attribute, click in the search field in the **Transformation Attributes** section.
A list of all attributes will appear. Search through the list of attributes or begin typing the name of the attribute you would like to add.
2. When you find the desired attribute, click on it to add it to the list of your transformation attributes.
Attributes you’ve added will appear in a list below the search bar.
3. Clicking on an attribute you’ve added takes you to the **Edit Transformations** page to make changes.
The **Attribute Settings** section allows you to update the attribute for the transformation.
4. Click the **Edit** button to search for a different attribute.
5. Click **Update** when finished.
6. The **Transformation Settings** section allows you to configure transformations for the attribute.
7. Enter an **Attribute Value Match** and a **Transformation Output Value** and click **Create**.
The attributes you create in the Transformation Settings section will appear in the **Transformations** section below.
8. Edit an attribute by clicking on its corresponding **Edit** button.
9. In the window that appears, you can give the attribute a new **Attribute Value Match** and a new **Translation Output**.
10. Click **Update** when finished.
## Product & Inventory Templates
Create and manage product and inventory templates.
### Creating a new template
1. To create a new template, click **Create Template**.
The create template page is displayed.
2. In the name field, provide a template name.
3. In the data type field, select the templates data type, and choose whether this template imports to Dropship, or exports from Dropship.
4. Click and drag a test file from your computer to the **Sample File** field.
This field is used by fabric to check and make sure column headers are correctly formatted. After a test file has been uploaded, the **Column Mappings** section appears.
5. For each column in your file, you can map it to the closest available attribute. Use the **Priority column** to rank the **Column Headers** by importance.
6. Click **Save Template**.
### Editing a template
1. To access a template, click the Template page.
2. In the template list that's displayed, click on a template.
The template settings menu is displayed.
3. In the **Name** field, provide a name for the template.
4. In the **Data Type** field, select a data type.
5. In the **Direction** field, select a direction.
6. Click **Update Template**.
### Template mappings
The Template Mappings menu allows you to review the template columns.
1. To edit an existing Column Header, click on its title.
The **Edit Template Mapping Style Name** window is displayed.
2. Optionally update the following fields:
* Column Header Name
* Platform Attribute
* Target
* Priority
Additionally, you can mark whether a column is required or not.
1. Click **Save**.
#### Create a new template mapping
1. To add a new mapping, click **Add Mapping** at the top-right of the **Template Mappings** section.
2. Optionally fill out the following fields:
* Column Header Name
* Platform Attribute
* Target
* Priority
Additionally, you can mark whether a column is required or not.
1. Click **Save**.
## Shipping Accounts
Create and manage Shipping Accounts
### Adding a shipping account
1. To add a new shipping account, click **Add Shipping Account**.
The **Add Shipping Account** window appears.
2. In the **Nickname** field, give shipping account a nickname.
3. In the **Carrier** field, select a shipping provider.
4. Click **Save & Continue**.
## Subscriptions
Configure subscriptions and review available resources.
The Subscriptions page shows an overview of RevCascade’s tiered subscription plans. Click the Subscribe button to open the payment portal in a new window.
## Terms of Service
Review the Terms of Service from fabric Dropship.
Click on the fabric Dropship Supplier Agreement link to open a PDF of the Terms of Service in a window.
# ShipStation Integration
## Initial Setup
To access Integrations, click on your account name in the menu at the top of the page. In the dropdown that appears, select **Retailer Settings**. On the Retailer Settings page, find and click on the **Integrations** tile.
On the Integrations page, click on the **Add Integration** button at the top-right of the page. In the Add Integration popup that appears, click the **Add** button on the ShipStation tile.
You will be prompted to fill out your ShipStation **API Key** and **API Secret**. When finished, click the **Add Integration** button.
After successful authorization, ShipStation will appear in your list of integrations in Dropship.
If you don't have your ShipStation credentials, [use their guide](https://help.shipstation.com/hc/en-us/articles/360025856212-ShipStation-API) to learn how to generate your API Key and Secret.
## Configuration
On the Integrations page, find and click on the **Options** button to the right of the ShipStation logo and select **Configuration** from the dropdown. The Configuration page allows you to make changes related to how order and transaction information is shared between Dropship and ShipStation.
### Orders
Dropship can send orders directly to your ShipStation account so that you can view all your orders in one place. Enabling this option allows you to fulfill orders from ShipStation while fabric captures the fulfillment details every time an order is fulfilled.
Click the **Enable Integration** button to turn on the Push Orders to ShipStation feature.
Click **Disable Integration** to turn off Push Orders to ShipStation feature.
**Please note:** the Push Orders to ShipStation feature affects all of your retail partners; it **can't** be configured to each individual partner.
### Configure fulfillments
Configure how ShipStation syncs fulfillments with fabric.
When tracking numbers are added to your fulfillments, you have the option to automatically return the tracking numbers to your Retailer partner.
Click the **Enable Integration** button to turn on the Pull Shipments from ShipStation feature.
Once you’ve made a selection click **Enable Integration**.
To disable fulfillment sync, click the **Disable Integration** button.
## Webhook History
Select **Webhook History** from the **Options** dropdown on the Integration page.
The Webhook History page shows details of all the events that have been captured by Dropship from ShipStation:
* ID: The ID of the webhook as captured by Dropship. This ID is generated by Dropship.
* Topic: The topic that was captured as part of the webhook.
* Received: The timestamp of when the webhook was captured, shown in the user’s local time zone.
* Has Message?: A checkmark will indicate whether or not the webhook came with an additional message, such as the reason of failure or skipping.
* Status: The status of the webhook in Dropship.
### Inspect Webhook
Click on a webhook ID to open the Inspect Webhook dialog. Inspect Webhook shows information captured in the webhook and includes a message to provide details on the status of the webhook.
# Shopify Integration
## Initial Setup
You can connect to Shopify during onboarding with fabric Dropship by selecting **Shopify** under your **Transaction Integration Task** which prompts you to complete the **Connect to Shopify** task. During onboarding, if you aren't ready to connect to Shopify, the integration can always be established later.
Please file a ticket with the fabric Dropship support team if you are interested in connecting to Shopify.
## Integration Options
On the **Integrations** page in fabric Dropship, you will see the Shopify logo with an **Options** button next to it. Click the **Options** button and in the window that appears, choose whether you would like to edit the **Configuration**, **Webhook History**, or **Utilities**.
### Configuration
Select **Configuration** from the **Options** dropdown on the Integration page. The Configuration page allows you to make changes related to how order and transaction information is shared between Dropship and Shopify.
### Orders
Configure how your Shopify store syncs orders with fabric.
Dropship can send orders directly to your Shopify store so that you can view all your orders in one place. Enabling this option allows you to fulfill orders from your Shopify store while fabric captures the fulfillment details every time an order is fulfilled.
Click the **Enable Integration** button to turn on the Push Orders to Shopify feature.
Click **Disable Integration** to turn off Push Orders to Shopify feature.
The Push Orders to Shopify feature affects all of your retail partners; it can't be configured to each individual partner.
### Configure fulfillments
Configure how your Shopify store syncs fulfillments with fabric.
When tracking numbers are added to your fulfillments, you have the option to automatically return the tracking numbers to your Retailer partner.
Use the **Select Webhook** dropdown to choose how fabric captures fulfillment updates.
* **Fulfilment Created:** If you are using Shopify’s fulfilment method to print shipping labels, use this option to notify Dropship about the fulfilment.
* **Fulfilment Updated:** If you are using any other external app to create fulfillments and updating them later, select this option to notify Dropship about the fulfilment.
Once you’ve made a selection click **Enable Integration**.
To disable fulfillment sync, click the **Disable Integration** button.
### Cancellations
Configure how your Shopify store syncs full cancellations with fabric.
When you cancel an order in its entirety in Shopify, we can automatically cancel that order in fabric Dropship.
Click the **Enable Integration** button to turn on the cancellation sync feature.
To disable cancellation sync, click the **Disable Integration** button.
fabric listens to both fully and partially cancelled orders, but Shopify only publishes this specific event when there is a FULL cancellation. Partial cancellations still have to be registered via the supplier portal.
### Inventory
Configure how your Shopify store syncs inventory with fabric.
With this feature enabled, Dropship listens to the product and inventory updates in your Shopify store and updates the inventory count with the Dropship portal in real-time. This allows you to make sure your Retailer partners have up-to-date inventory numbers.
Use the **Select Webhook** dropdown to choose how fabric sync orders, choose **Product/Inventory Updated (Recommended)**, and then click **Enable Integration**.
To disable inventory sync, click the **Disable Integration** button.
## Webhook History
Select **Webhook History** from the **Options** dropdown on the Integration page.
The Webhook History page shows details of all the events that have been captured by Dropship from your Shopify store:
* ID: The ID of the webhook as captured by fabric Dropship. This ID is generated by Dropship.
* Topic: The topic that was captured as part of this webhook.
* Received: The timestamp of when the webhook was captured. This is in the user’s local time zone.
* Has Message?: A checkmark will indicate whether or not the webhook came with an additional message, such as the reason of failure or skipping.
* Status: The status of the webhook in fabric Dropship.
### Inspect Webhook
Click on a webhook ID to open the Inspect Webhook dialog. Inspect Webhook shows information captured in the webhook and includes a message to provide details on the status of the webhook.
## Utilities
Select **Utilities** from the **Options** dropdown on the Integration page.
The Utilities page features tools to troubleshoot issues and manually sync types of data between your fabric and Shopify accounts.
### Retry Fulfillment
If an order fulfillment didn't import into fabric, it's likely there was a problem processing the Shopify webhook.
Enter an order number in the **Shopify Order Number** field, click the **Retry Fulfillment Import** button, and fabric will attempt to fetch and import existing fulfillments.
### Sync Variant
This utility attempts to sync variants between Shopify and fabric using a fabric Item ID, which can be found on the item details page under the heading **ID**.
Enter a value in the **fabric Item ID** field and click **Run Sync**, and fabric will search your Shopify store for any items matching using the Retailer SKU, Supplier SKU, and/or UPC.
### Sync Variants by Supplier
This utility attempts to sync variants between Shopify and fabric using a supplier name.
Enter a name in the **Shopify Supplier Name** field and click the **Run Sync** button.
This will search your Shopify store for all items matching the name you entered that were name created within the last 30 days, and then attempt to sync them with variants in fabric. Please enter the supplier name exactly as it appears in Shopify.
### Sync Variants by Date
This utility attempt to sync variants between Shopify and fabric using a date range.
This utility searches your Shopify store for all items created within specified date range and attempts to sync them with variants in fabric. fabric checks if the Shopify variant's SKU field matches the Merchant Retailer SKU, the UPC, or the Supplier SKU (in that order).
* **Look for products created between two given dates:** only syncs the items that were created in the specified date range. Any items outside the date range will be ignored.
* **Run Sync against all products:** syncs your entire Shopify catalog with fabric Dropship. This process is usually very slow and can take hours, even days depending on your catalog size.
After you’ve made your selection, click **Run Sync** to begin the process.
### Sync Variants by Metafields
You can publish Metafields and their values at the variant level.
### Customizable Order Notes
Order notes can be customized to include the “Fulfill By” date.
# Supplier Onboarding Guide
## Introduction
Welcome to fabric Dropship. This guide will walk you through the supplier onboarding workflow.
## Welcome Email
The Dropship onboarding process begins with a welcome email that contains a unique link to Dropship that will connect you to your retail partner.
If you are having trouble finding your invitation email, start by checking your spam folder. If you still can’t find the invitation email, ask the retailer who invited you or your fabric onboarding specialist to resend the invitation email. If you still don’t receive the email, reach out to [fabric Support](https://support.fabric.inc/hc/en-us/requests/new).
After clicking the link to begin the onboarding process, you are directed to the **Sign Up** screen.
* If you are new to Dropship and don't have an account, select **I am new to fabric Dropship** to set up your account.
* If you already have an account, select **I already have a fabric Dropship account**.
Once you have completed initial account setup and logged in, you will need to complete the [onboarding tasks](#onboarding-tasks) to finish the onboarding process.
## Onboarding Tasks
After your onboarding call, you will need to complete the onboarding tasks to finish the onboarding process.
The **Onboarding Tasks** page has a checklist that includes setup tasks such as:
* Adding a [Billing address](#billing-address)
* Adding a [default fulfillment location](#default-fulfillment-location)
* Adding [Primary contacts](#primary-contacts)
* Configuring the [Transactions Integration](#transactions-integration)
* [Getting Started with EDI](#getting-started-with-edi)
* Configuring [Product Imports & Proposals](#catalog-import-products-approve-import-request)
* Configuring [Notifications](#notifications)
* (Optional) [Schedule a Demo Call](#schedule-a-demo-call-optional)
The Onboarding Tasks page is accessible by clicking on **fabric Home** from the menu at the top of the page in Dropship and selecting **Onboarding**.
Dropship will also remind you of any incomplete tasks whenever you log in by displaying the **Continue Onboarding** popup.
### Billing address
Click **Start** next to the Billing Address section of the Onboarding Tasks page to add your address.
The billing address is for all payment remittances and other communication with the retailer and Dropship. Fill out the Legal Business Name field, as well as all of the other address fields.
When finished, click **Continue**.
### Default fulfillment location
Click **Start** next to the Default Fulfillment Location section of the Onboarding Tasks page to add your Default Fulfillment Location.
The Default Fulfillment Location serves as the default warehouse for all of your orders. It's mandatory to set up your default warehouse before proceeding as a supplier.
When finished, click **Continue**.
**Note:** After you set up the default location, you can add more locations (warehouses) by clicking on **fabric Home** from the menu at the top of the page in Dropship, selecting **Supplier Settings**, and then clicking on **Inventory Settings**.
### Primary Contacts
Click **Start** next to the Primary Contacts section of the Onboarding Tasks page to add contacts at your organization.
Three contacts are required to complete this task:
* The **Primary Business Contact** is notified of any policy- or business-related changes to your relationship with the retailer.
* The **Merchandising Contact** is contacted by the retailer to discuss things related to merchandising, proposals, and products being dropshipped with the retailer.
* The **Fulfillment Contact** is contacted by the retailer whenever there is an issue with order fulfillment, such as delays, missing shipments, or order cancellation.
When finished, click **Complete Task**.
### Transactions Integration
Click **Start** next to the Transactions Integration section of the Onboarding Tasks page.
Dropship supports multiple methods to trade inventory, order, shipment, and inventory data. As a supplier, you can choose the integrations you want to have with Dropship.
For low and medium order volumes, we recommend using the fabric Supplier Portal, which includes import/export tools to process orders in bulk. For higher volumes, we recommend using EDI or API.
Choose an integration method in the Integration Options window, click **Complete Task**, and then complete the following steps to finish setting up that option.
#### EDI: Managed Onboarding
Create your Dropship EDI account by filling out the **EDI Qualifier** and **EDI ID** fields, and then clicking **Create EDI Account**. The fabric team will help you onboard your EDI.
#### fabric Supplier Portal
There are no additional steps required to set up the fabric Supplier Portal integration.
#### ShipStation
fabric can be configured to automatically push purchase orders to and pull tracking numbers from your ShipStation account. Enter your **ShipStation API Key** and **ShipStation API Secret** and then click **Continue**.
On the following screen, you can specify a ShipStation Store ID if you would like orders to land in a designated ShipStation store. Otherwise, your orders will land in your default ShipStation store. This field is optional. Enter a Store ID or leave the field blank and then click **Continue**.
The next screen allows you to select the tags you want to be added to all orders that go from Dropship to ShipStation. If you would like fabric to tag orders, select the tag from the list below. If you need to a new tag, create it in your ShipStation account and it will be available in Dropship instantly. When finished, click **Continue**.
#### Shopify
The Dropship Shopify app can be installed to automatically push purchase orders into your Shopify store and pull tracking numbers once you ship. To install the app, fill out the **Shopify Store Name** and **API Key** fields and then click **Continue**.
Once your store is connected, you can configure the integration’s webhooks and other settings. Click **Continue** to finish.
#### BigCommerce
The Dropship BigCommerce app can be installed to automatically push purchase orders into your BigCommerce store and pull tracking numbers once you ship. To install the app, fill out the **Store Identifier** and **Store Token** fields.
You can find your Store Identifier in your BigCommerce store URL. Example: store-**storeidentifier**.mybigcommerce.com/admin.
Your Store Token is the admin API Key you can generate from your BigCommerce account.
When you’ve entered your information, click **Continue**.
#### WooCommerce
The Dropship WooCommerce app can be installed to automatically push purchase orders into your WooCommerce store and pull tracking numbers once you ship. To install the app, fill out the **WooCommerce Store URL** field and then click **Continue**.
Once your store is connected, click **Install App** to finish.
#### API
There are no additional steps required to set up an API integration.
### Getting started with EDI
fabric trades EDI documents over SFTP through our proprietary, in-house EDI system.
In this onboarding task, you are asked to download and review fabric’s “EDI Specifications” file.
1. Click continue
You are prompted to create and EDI account.
2. Retrieve and input your EDI Qualifier and EDI ID to create the account.
3. The fabric team will help you set up and test your EDI integration.
### Catalog (Import Products/Approve Import Request)
Depending on your connection settings, you will see either **Import Products** or **Approve Import Request** for the **Catalog** section.
* **About Product Imports & Proposals** means you need to create products by importing them.
* **Approve Import Request** means that your retail partner creates products and you have to approve their requests for products.
Click **Start** to begin the process. You are presented with a how-to video relevant to the import process you selected.
### Video: Approve import requests
### Product imports & proposals
Based on the category of products you are uploading, select a template from the dropdown, choose a file to upload, and then click Import.
To learn more about importing products, see [Adding products to your catalog](/v3/guides/dropship-suppliers/product-management/product-management#adding-products-to-your-catalog).
### Video: Submit a proposal for a new product
### Approve import request
A fabric retailer will submit a request to upload a set of products on your behalf. Once submitted, this “import request” requires your approval.
When the retailer submits the import request, you receive an email with instructions and a link to view the products and approve the request.
You don’t have to take any action at this time.
1. Click **Complete Task** to continue onboarding.
2. (Optional) Click **Schedule a Demo Call** after the **Notifications** section, before **Complete Onboarding**.
### Notifications
Click **Start** next to the Notifications section of the Onboarding Tasks page to configure which push notifications you receive.
There are four types of notifications to configure:
* **Connection:** notifications whenever there are changes to your connections or connection notes
* **Order Received:** notifications whenever you receive an order
* **Order Change Requests:** notifications when a customer has requested a change to their order
* **Order Digest:** a notification at the end of each business day that contains a summary of that day’s new or open orders
For each step in the Notifications workflow, enter an email address to enable the notification and click **Save & Continue**. To disable the notification, click **Skip Notification**.
### Schedule a demo call (Optional)
Still have questions about fabric? Feel free to schedule a call with our team of specialists to discuss your questions and concerns! We recommend that you invite any members of your team who may be using **Dropship** to join the onboarding call.
## Complete Onboarding
After you have finished all of your onboarding tasks, your retail partner will receive a notification to activate your connection. Once the retailer has activated the connection, click the **Complete Onboarding** button at the bottom of the Onboarding Tasks page. You will start receiving orders in the Dropship portal.
# Support
## Overview
fabric Tech Support is available for all current customers and registered prospects.
Before issuing a support request, you can refer to our [Knowledge base](/v3/guides/) for Copilot questions or the [Developer Portal](/v3/api-reference/) for info on our APIs.
## Dropship Support for Suppliers
Under the **Support** dropdown in the menu at the top of the page, select **File a Ticket,** complete the form, and click the **Submit** button. The support dropdown exists on all pages within the platform. It's helpful to submit your request directly from the page where you are experiencing the issue.
Note: Please use your company email address for all form completion.
## Definitions
Use the following lists to help guide you when filling out the Issue Type and Priority dropdown fields. Ensuring these fields are filled out correctly will help fabric's support team respond to your ticket quickly and accurately.
#### Issue types
* Product Training: Demo fabric Dropship or feature training request.
* Merchandising: Product Help (Submission of proposals, Cost Updates, Import Request Issues, Broken Images).
* Upload Failure: Import issues (Products, Inventory, Shipment, Invoices).
* Order Help: Help during closing orders or registering shipments.
* Shopify: Shopify Help (Order fulfillment and Inventory Help).
* ShipStation: ShipStation Help (Order and Fulfillment Help).
* WooCommerce: WooCommerce Help (Order and Fulfillment Help).
* BigCommerce: BigCommerce Help (Order and Fulfillment Help).
* Account Help: Supplier, Retailer Settings Help, Adding new users.
* EDI Integration: EDI Help (Order fulfillment and Inventory Help).
* API Integration: API Help (Order fulfillment and Inventory Help).
* Reporting: Reporting requests (Invoice export).
* Inventory Issues: Inventory Errors (Inventory not updating in fabric system).
* Proposal Help: Data Correction (fabric Dropship data team proposal help).
#### Priority types
* Urgent: Complete loss of access to fabric Dropship.
* High: Major functionality is severely impaired (Timeout issues, Product Update Requests not passing Shopify API).
* Normal: Non-critical loss of functionality of the software or application (Shipment not registering, invoice issue, Order management issues).
* Low: General usage questions and product help issues (Documentation errors, Adding users, Product Imports, Proposal).
## General support
If you need Tech Support for the fabric Core Platform, [click here](https://support.fabric.inc/hc/en-us/requests/new).
# WooCommerce Integration
## Initial Setup
To access Integrations, click on your account name in the menu at the top of the page. In the dropdown that appears, select **Supplier Settings**. On the Supplier Settings page, find and click on the **Integrations** tile.
On the Integrations page, click on the **Add Integration** button at the top-right of the page. In the Add Integration popup that appears, click the **Add** button in the WooCommerce tile.
You will be prompted to fill out your **WooCommerce Store URL**. When finished, click the **Add Integration** button.
After successful authorization, WooCommerce will show up on the list of the integrations in the Integrations section of Dropship.
## Configuration
On the Integrations page, find and click on the **Options** button to the right of the WooCommerce logo and select **Configuration** from the dropdown. The Configuration page allows you to make changes related to how order and transaction information is shared between Dropship and WooCommerce.
### Configure Webhooks
Choose whether or not to enable webhooks for **Orders**, **Inventory**, or **Fulfillment**.
* **Orders:** With the orders integration enabled, fabric can automatically send purchase orders from your supplier partners directly to your WooCommerce account. Enabling this integration means that orders from ALL of your supplier connections in fabric will flow through this integration.
* **Inventory:** Dropship requires frequent inventory updates to reduce cancellations due to stockouts. The WooCommerce integration can sync inventory with Dropship automatically. Turn this integration off if you would prefer to update inventory manually.
* **Fulfillment:** Dropship requires frequent order fulfillment updates to track orders. Our WooCommerce integration can sync order fulfillment with Dropship automatically. Turn this integration off if you would prefer to update order fulfillment manually.
**Note:** You can enable and disable these webhooks at any time.
### Webhook History
On the Integrations page, find and click on the **Options** button to the right of the WooCommerce logo and select **Webhook History** from the dropdown.
The Webhook History page shows details of all the events that have been captured by Dropship from your WooCommerce store:
* **ID:** The ID of the webhook as captured by Dropship.
* **Topic:** The topic that was captured as part of the webhook.
* **Status:** The status of the webhook (success or failure).
* **Payload:** The data that was sent in the webhook payload.
* **Received:** The timestamp of when the webhook was captured. This is in the user’s local time zone.
Use the Filter feature at the top of the table to adjust the webhook information you see.
# Algolia connector
Use Algolia’s search suite to meet search, recommendation and browsing needs everywhere. Send product, pricing, and inventory data to Algolia to power your storefront search, recommendation, and browse experience.
### Use case
fabric aggregates product, pricing, and inventory data which is sent to the Algolia SDKs to be indexed. This indexed data is used to build custom search, recommendations, and browsing experiences based on your Algolia account setup.
#### Available actions
* Define index settings during customer onboarding process
* Get index instance
* Save records
* Delete records
### Set up the Algolia connector in your fabric account
1. Complete the setup and activation for your Algolia account
2. Submit a support request to [fabric customer success](https://support.fabric.inc/hc/en-us/requests/new) with the following details:
* [Algolia App Id](https://support.algolia.com/hc/en-us/articles/11040113398673-Where-can-I-find-my-application-ID-and-the-index-name)
* [Algolia Admin key](https://support.algolia.com/hc/en-us/articles/11972559809681-How-do-I-find-my-Admin-API-key)
3. Using the table below, provide fabric customer success with the search configuration values you require.
| Search configuration | Description | Value |
| ------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------ |
| **Should Save Zero Price Item** | Should save zero price item checks for records with pries equal to 0 and determines if these items should be indexed. The default value is false. | True/False |
| **Should Save Variants** | Should save variants checks if variant records should be published. The default value is false. | True/False |
| **Should Index Alternate Categories** | Determines if Product alternate categories should be indexed. The default value is false. | True/False |
| **Should Use I18N Service** (Localization) | Used to index localized data. Default value is false. | True/False |
| **Price Lists** | Determines the list of priceListIds to be requested when calling fabric Offers APIs. This is used when an item has many currencies associated with the price. The default value is null. | Enabled/Null |
Note: once you have completed the initial setup. You must use the Algolia dashboard to change the index settings.
# Avalara connector
Avalara helps businesses of all sizes get tax compliance right. In partnership with leading ERP, accounting, ecommerce, and other financial management system providers, Avalara delivers cloud-based compliance solutions for various transaction taxes, including sales and use, VAT, GST, excise, communications, lodging, and other indirect tax types.
### Use case
Avalara is set in the merchant’s fabric account and used by the storefront to calculate tax during checkout. The fabric checkout experience calls Avalara to create tax calculations during checkout.
#### Available actions
* Create Avalara Tax Estimate
### Set up the Avalara connector in your fabric account
1. Complete the setup for your [Avalara account](https://home.avalara.com).
2. Submit a support request to [fabric customer success](https://support.fabric.inc/hc/en-us/requests/new) with the following details:
* AVA\_ACCOUNT\_ID for example 110034662
* AVA\_API\_KEY for example, C12EER1422IU76
* AVA\_COMPANY\_CODE for example, NBF
* AVA\_CUSTOMER\_CODE for example DEFAULT
* Avalara environment: Sandbox or Production
# Constructor.io connector
Bring together site wide ecommerce search and product discovery, merchant solutions, and enterprise-ready delivery all in one Al-powered, KPI-obsessed platform built for the results that matter to you. Send product, pricing, and inventory data to Constructor.io to power your storefront search, recommendation, and browse experience.
### Use case
Constructor.io syncs with fabrics Product item information such as titles, colors, and SKUs. When an item is updated in Product Catalog, the event is captured and also sent to Constructor.io where it's processed using their certified SDK.
#### Available actions
* Create item
* Delete item
* Update item
### Set up the Constructor.io connector in your fabric account
1. Complete the setup and activation for your Constructor.io account
2. Submit a support request to [fabric customer success](https://support.fabric.inc/hc/en-us/requests/new) with the following details:
* Constructor.io API Key (index key)
* [Constructor.io API Token](https://docs.constructor.io/rest%5Fapi/authentication/)
# Overview
fabric supports integrations with many of its core applications such as Product Catalog, Orders, Inventory, Cart, Checkout, and more. Integrations make working with your choice of a technical vendor easy without the need for custom code.
### Standard integrations
fabric has a set of pre-built standard integrations. These standardized integrations cover common use cases making them easy to set up. Standard integrations don't support customizations to the code but can be configured within 24 hours. The following standard integrations are currently supported:
* [Stripe Connector](/v3/guides/integrations/stripe-connector)
* [Algolia Connector](/v3/guides/integrations/algolia-connector)
* [Constructor.io Connector](/v3/guides/integrations/constructor-io-connector)
* [Avalara connector](/v3/guides/integrations/avalara-connector)
Custom integrations aren't supported at this time.
### Security
fabric takes security seriously and always follows the recommended standards. AWS secret manager handles all the values passing between the standard connectors and keeps everything encrypted. Additionally, fabric uses each connectors official SDK to send and receive encrypted data.
### Monitoring
Currently, fabric monitors all the standard integrations internally by a number of metrics such as latency. It's encouraged to use a standard integrations respective dashboard to receive more direct monitoring metrics. For example, to confirm a standard integration connector is working as intended, you can check the respective connectors dashboard. The dashboard displays changes that should be happening such as product information updates or payments.
### Contact and support
If you have any additional questions, please reach out to [fabric customer success](https://support.fabric.inc/hc/en-us/requests/new).
# Stripe connector
Stripe enables merchants to accept payments online, in person, and around the world with a payments solution built for any business—from scaling startups to global enterprises.
### Use case
Stripe is set to a merchant’s account and used by the fabric storefront to process payments during checkout. The fabric checkout experience calls Stripe to authorize, process, refund, or void payments.
#### Available actions
* Authorize payments
* Get payment
* Capture payment
* Refund payment
* Void payment
* Create customer
* Create payment
* Get customer
* Generate client token
### Set up the Stripe connector in your fabric account
1. Complete the setup and activation for your Stripe account
2. Submit a support request to [fabric customer success](https://support.fabric.inc/hc/en-us/requests/new) with the following details:
* [Stripe Secret Key](https://stripe.com/docs/keys)
* [Stripe Public Key](https://stripe.com/docs/keys)
3. Provide the following payment settings values:
| Setting | Description | Value |
| ---------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------ |
| **Auto capture authorization** | Indicates if the capture should be performed in the authorization request. The `Auto_Capture` default is off. | on/off |
| **Payment method deleted after authorization** | Indicates if the payment token should be kept or invalidated for later uses. The `KEEP_TOKEN` default value is set to perform the token invalidation. This is so guest users can be handled by the connector. | on/off |
# Create a Network
This topic covers the process for creating a new network used to fulfill orders and sort inventory.
## Prerequisites
* Ensure that you have the **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more information, see the [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Creating a Network
1. In the left menu, click **Inventory** > **Networks**.
The **Manage Networks** page is displayed.
2. Click **Create Network**.
The **Create Network** page is displayed.
### Adding basic information
1. In the **Network Name** field, enter a name.
fabric suggests that you provide a descriptive and unique name for each network. For example, *NA Fulfillment STH Network*.
2. (Optional) In the **Description** field, provide a description.
3. In the **Select type of Network** field, select one of the following:
* [Single Network](#creating-a-single-network): To create conditional rules, products, and locations for an individual network.
* [Multiple Networks](#creating-a-new-multi-network): To group existing networks together to form a new network.
### Creating a single network
In the **Setup your Rules** section, you must create rules. These rules are used to match items and locations to a network.
1. In the **Attribute type** field, select one of the following:
* **Product**: Applies rules that search for product attributes in your product catalog and adds matching products to your network.
* **Location**: Applies rules that search for locations based on the defined location attributes and adds matching locations to your network.
2. In the **Attribute name** field, select an attribute name.
3. In the **Contains** field, select a condition.
4. In the **Add Value** field, enter an attribute value.
To add values, type the value and press enter. Multiple values are supported.
For example, if you want to add only *North America* locations to a network, you can select the **Attribute type** `Location` to add locations to your network. To filter what locations are going to be added, select an **Attribute name** such as `channelId` with the operator `Contains`, and the value `NA`. This adds any locations with a `channelId` containing `NA` to the network.
1. (Optional) You can add an additional rule condition by clicking **Add condition**. This condition is an **AND** condition. To add an **OR** condition, click **Add Rule**.
2. In the **Add Inventory Availability** section, use the **Safety Stock Quantity** field to enter the number of units you want to reserve.
Safety stock is a quantity of inventory kept on hand to protect against uncertainties in demand or supply. The actual safety stock for a network is the sum of the network-level safety stock plus the aggregated safety stock for every location in the network.
The low stock level field is used to trigger alerts or actions when inventory for a product or in a location falls below the specified threshold. This prevent stockouts and helps maintain optimal inventory levels.
1. In the **Define low stock level** section, enter the number of units to trigger a low stock alert.
### Creating a new multi network
The **Multiple Networks** option allows you to add multiple **Single Networks** together to form a new network. For example, if you recently expanded to ship international, you can differentiate North America, Asia, Europe and other continents by combining them into a new network. This network can then be referenced during inventory and order fulfillment instead of needing to individually list each single network.
1. In the **Single Network** field, select a network.
2. Click **Add**.
The network is added to the table. Continue to add networks as needed.
If you want to edit a network's **Safety Stock** or **Low Stock** levels, you must select the network from the **Manage Networks** page and edit it. Editing a **Single Network** that's apart of **Multiple Networks** will update its settings and rules across networks.
# Creating a Location
Locations are used to fulfill orders
This topic covers the process for creating a new location used to fulfill orders.
## Prerequisites
* Ensure that you have the **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more information, see the [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Creating a Location
1. In the left menu, click **Inventory** > **Locations**.
The **Locations** page is displayed.
2. Click **Create Location**.
The **Create Location** page is displayed.
By default, all new locations are assigned **Active** status. Locations with an **Active** status are part of your inventory network, while those with an **Inactive** status aren't.
1. You can remove a location from your inventory network by changing the **Active** toggle setting to **InActive**.
### Adding basic information
1. In the **Location Name** field, enter a name.
fabric suggests that you provide a descriptive and unique name for each location. For example, *Washington large item warehouse*.
2. In the **Location Number** field, enter a location number.
3. In the **Location type** field, select one of the following options:
* **Store**
* **Distribution Center** (DC)
Two different location types are available, **Store** and **Distribution Center** (DC).
4. In the **Coordinate 1** and **Coordinate 2** fields, enter the location's longitude and latitude coordinates.
The coordinates are used for geolocation during order allocation. The longitude value must fall between *-180* and *180*, and the latitude value must be between *-90* and *90*. For example, Coordinate 1 can be set to *-122.3493* and Coordinate *2* set to *47.6205*.
### Adding an operating schedule
The **Operating Schedule** sections contains an **Operating Hours** tab, where you can add the location’s hours with the option with separate hours for store operation and curbside pickup.
1. (Optional) To enable specific operating hours, click the **Enable specific operating hours (optional)** field.
The **Select working days** and **Store hours and curbside pickup are the same** fields are displayed.
2. In the **Select working days** field, choose the days you want to set as working days.
For each selected day, **Operating hours** and **Operation location** fields are displayed.
3. In the **Operating hours** fields, select the opening and closing hours.
Clicking the operating hours field opens a menu with increments of 30 minutes starting at 12:00 AM.
4. In the **Operating location** field, select one of the following options:
* **Store and Curbside Pickup**
* **Store only**
* **Curbside pickup only**
* **Closed**
5. (Optional) To have separate hours for **Curbside** and **Store**, click the plus (`+`) icon.
A new blank day is added where you can select different **Operating hours** and a different **Operating location**. Selecting the copy icon clones the day, and selecting the delete icon deletes the row.
### Capacity limits
You can optionally set the maximum number of allocations that a location can process at one time. By default, capacity limits are disabled. Disabling the capacity limit allows the location to be assigned unlimited allocations for fulfillment, until inventory is unavailable.
1. To set a capacity limit, click **Enable capacity limit (optional)**.
The **Default Capacity Limit** field is displayed.
2. Enter the capacity limit.
### Contact & address
In the **Contact & Address** section, fill out the information for a primary contact for the location, as well as, the location’s physical address.
All fields are optional except for **Region** which is required.
After updating the capacity limits, you can click **Create** to create the location or proceed to adding **Custom Attributes**.
## Custom Attributes
Clicking the **Custom Attributes** tab opens the **Additional Attributes** section for the **Create Location** page.
When you want to reference locations in network rules during fulfillment, you can assign attributes, such as a region, to each location. This prevents fulfillments from taking place in the wrong region. For example, a retailer might have warehouses in the United States, Europe, and Mexico. This retailer can create a *North America* network that references all locations in North America using the *location* attribute. When fulfilling orders, the fulfillment ruleset will ensure that the region matches the location with inventory preventing costly fulfillments outside North America.
1. To add custom attributes, click the **Add custom attributes** field.
A list of location attributes is displayed. When creating an order attribute, you are asked to provide a section. Only the attributes for the location section are displayed. You can create a new location attribute by following the instructions in the [Order Attributes](/v3/guides/orders/settings/order-attributes) section.
2. Select the attributes that you want to add.
Clicking an attribute displays a checkmark next to it and adds it to the **Add custom attribute** field.
3. Click **Add**.
4. Depending on the attributes that are selected, enter the required attribute value.
For example, if you select **location**, a **location** field is displayed, and you can enter your location’s address. This attribute can then be referenced when creating an [order fulfillment ruleset](/v3/guides/orders/order-fulfillment-logic/create-a-new-rule-set-ui).
# Exporting Locations
The export record CSV files consist of locations, scheduled outages, and temporary capacity override data. The exported data is based on the filters currently applied to the **Locations** table, which consists of the location number, name, address, status, and capacity. You can export records for particular locations by applying the necessary filters to refine the results before exporting. These records can be used by your internal systems or third-party tools.
## Prerequisites
* Ensure that you have **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Exporting Location Records
1. In the left menu, click **Inventory** > **Locations**.
The **Locations** page is displayed.
2. Click **Export**.
The **Export** window is displayed. Each export type displays how many locations, scheduled outages, or temporary capacity plans are available. The results depend on the filters applied and the locations displayed based on those filters.
3. Select one of the following export types:
* **Locations data**: Displays the number of locations found within your filter parameters. Select this option to export data containing all location attributes and store hours.
* **Scheduled outages**: Displays the number of locations with scheduled outages found within your filter parameters. Select this option to export all outage attributes such as `outageId`, `OutageNumber`, `locationNumber`, schedule dates, and the `reasonCode`.
* **Temporary capacity plans**: Displays the number of locations with temporary capacity overrides found within your filter parameters. Select this option to export all temporary capacity override attributes such as `capacityOverrideId`, `capacityOverrideNumber`, `locationNumber`, schedule dates, and the `reasonCode`.
4. Click **Export**.
The export is downloaded as a .ZIP file that contains a CSV file and saved to your computer. Additionally, a window is displayed with a link to the **Activity Log** page. This page allows you to re-download the export and view its status.
# Importing Locations
The **Import Locations** feature allows you to efficiently add multiple store or warehouse locations to fabric. This streamlined process eliminates the need for manual data entry, reducing the risk of errors while saving you time and effort. To assist with this process, fabric provides CSV template files for **Locations**, **Temporary Location Capacity**, and **Scheduled Location Closures**.
## Prerequisites
* Ensure that you have **Orders & Inventory Editor** or **Administrator** privileges to fabric Orders. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Importing Locations
1. In the left menu, click **Inventory** > **Locations**.
The **Locations** page is displayed.
2. Click **Import**.
The **Import CSV file** window is displayed.
3. Select one of the following fields depending on your requirements:
* **Locations**: Use this option to import locations that currently do not exist in fabric.
* **Scheduled Location Closures**: Use this option to import location schedule updates and changes.
* **Temporary Location Capacity**: Use this option to import temporary location capacity updates.
You must select the correct field to download its corresponding template.
4. Download the sample template by clicking **template here** at the bottom of the window.
5. Depending on the CSV file you downloaded, review the required and optional columns for the template:
* [Locations template](#locations-csv-file-template) for the **location.csv** file.
* [Location outages template](#location-outages-csv-file-template) for the **location\_outage.csv** file.
* [Location capacity overrides template](#location-capacity-overrides-csv-file-template) for the **location\_capacity\_override.csv** file.
6. In the **Import CSV file** window, do one of the following:
* Drag your file to the **drag and drop** field.
* Click **Select a File** from your computer and select your CSV file.
The file is uploaded displaying the file name and size.
7. (Optional) You can click **Remove** to delete the uploaded file or **Replace** to replace the file.
8. Click **Submit**.
The import status can be viewed on the **Inventory** > **Activity Log** page.
### Locations CSV file template
Importing locations requires updating the *location.csv* template file. If a field in a column remains blank, it's set to null by the system. Ensure fields don't contain blank spaces, returns, line breaks, or other characters. Not following the format suggested in the template can result in errors when uploading.
| Column | Description |
| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **locationNum** (Required) | Specifies the unique location number. |
| **name** (Required) | Specifies the location name. |
| **isActive** | Determines if the location is active or inactive for order fulfillment operations. This can be set to `TRUE` for active and `FALSE` for inactive. |
| **address\_addressLine1** | Specifies the locations first address line. |
| **address\_addressLine2** | Specifies the locations second address line. |
| **address\_addressLine3** | Specifies the locations third address line. |
| **address\_addressLine4** | Specifies the locations fourth address line. |
| **address\_city** | Specifies the location city name. |
| **address\_countryCode** | Specifies the locations country code. For example, `CA` for Canada or `US` for United States. |
| **address\_state** (Required) | Specifies the locations region, state, or province. |
| **address\_postalCode** | Specifies the locations postal or zip code. |
| **address\_type** | Specifies the locations address type. For example, `Home` or `Business`. |
| **contacts** | Specifies the locations contact details. Each child attribute in the contacts object is separated by an underscore. For example, `HOME_home@gmail.com_604-999-1860_JoeMadison`. |
| **capacity\_isInfiniteAllocation** | Determines if the location has a capacity limit or not. Set to `TRUE` to disable capacity limit and `FALSE` to enable capacity limit. |
| **capacity\_maxAllocations** | Determines the locations capacity limit amount. For example, `100` allocations. This value is required if **capacity\_isInfiniteAllocation** is `FALSE`. |
| **capacity\_currentAllocations** | Specifies the locations current amount of allocations. This value is required if **capacity\_isInfiniteAllocation** is `FALSE`. |
| **operatingHours\_day\_hours\_open\_hours\_close\_hours\_type** | Specifies the locations operating hours. The following format is used to provide operation hours, day of the week, store opening time in 24 hour format, closing time in 24 hour format, location type. For example, `MONDAY_2022-10-19T15:26:30.884+00:00_2022-10-19T15:26:30.884+00:00_PICKUP`. |
| **attributes\_source** | Example of a custom source attribute. By default this columns values are empty. |
| **attributes\_openedAt** | Example of a custom date-time attribute. By default this columns values are empty. |
| **attributes\_region** | Example of a custom region attribute. By default this columns values are empty. |
| **services\_channel** | Specifies the locations sales channel ID. |
| **services\_brand** | Specifies the locations brands. |
### Location outages CSV file template
Importing location outages requires updating the *location\_outage.csv* template file. If a field in a column remains blank, it's set to null by the system. Ensure fields don't contain blank spaces, returns, line breaks, or other characters. Not following the format suggested in the template can result in errors when uploading.
| Column | Description |
| ----------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **disabledFulfillmentMethods** (Required) | Specifies the fulfillment method you want to disable for a location. For example, `["PICKUP"]`. |
| **locationNumber** (Required) | Specifies the unique location number. |
| **schedule.endDate** | Specifies the end date and time of the location outage in UTC format. For example, `2025-12-20T09:30:31.198Z`. |
| **schedule.isIndefinite** (Required) | Determines whether the location outage remains in effect indefinitely. Set to `FALSE` if you have provided a start and end data for the outage. Set to `TRUE` if you want the outage to remain in effect indefinitely. |
| **schedule.startDate** | Specifies the start date and time of the location outage in UTC format. For example, `2025-12-20T09:30:31.198Z`. |
| **outageNumber** | Indicates the reason for the outage. |
### Location capacity overrides CSV file template
Importing capacity overrides requires updating the *location\_capacity\_override.csv* template file. If a field in a column remains blank, it's set to null by the system. Ensure fields don't contain blank spaces, returns, line breaks, or other characters. Not following the format suggested in the template can result in errors when uploading.
| Column | Description |
| ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **capacity** (Required) | Specifies the temporary capacity increase amount. For example, `100`. |
| **locationNumber** (Required) | Specifies the unique location number. |
| **schedule.startDate** | Specifies the start date and time of the capacity override in UTC format. For example, `2025-12-20T09:30:31.198Z`. |
| **schedule.endDate** | Specifies the end date and time of the capacity override in UTC format. For example, `2025-12-20T09:30:31.198Z`. |
| **schedule.isIndefinite** (Required) | Determines whether the capacity override remains in effect indefinitely. Set to `FALSE` if you have provided a start and end data for the override. Set to `TRUE` if you want the override to remain in effect indefinitely. |
# Inventory
See the stock of goods across locations all in one spot
The **Inventory** page displays a table containing a list of all the items in your inventory across all locations. This table contains metrics such *SKU*, *Location*, *Channel*, *Status*, *Last Updated*, and the total quantity of each item that's *Available to Purchase*, *Available to Backorder*, and *Available to Preorder*.
## Prerequisites
* Ensure that you have **Inventory Editor** or **Administrator** privileges to fabric Inventory or **Inventory Viewer** to view the page. For more information, see the [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Filtering Inventory
The **Inventory** page displays a [inventory table](#inventory-table) that includes every SKU. This list can be filtered by **Channel**, **Network code**, **Status**, and **Last Updated** so that the list only displays inventory that match the filter parameters.
By default, only the SKUs updated in the last 7 days are displayed.
To view additional filters, click the **More** button. The additional options enable you to filter by most attributes associated with inventory, such as *style*, *shipping weight*, *prop 65 warning*, *primary color*, and more.
You can apply any combination of standard filters and additional filters from the **More** menu simultaneously.
## Inventory Table
Clicking a SKU in your inventory table displays the **Inventory Detail** page. This page displays details such as how that SKUs stock is allocated across your locations, attributes, and an activity log.
| Column | Description |
| -------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **SKU** | A stock-keeping unit (SKU) is a unique identifier assigned to each distinct product variation. |
| **Location** | Displays the warehouse or store location where the inventory is stored. |
| **Channel** | Displays the channel, such as **12** for the United States or **13** for Canada. Additional channels created in fabric Experiences or using the API are also available. |
| **Status** | Displays the real-time status of a specific product SKU at a specific location. For more information, see the [Inventory Statuses](#inventory-statuses) section. |
| **Available To Purchase** | Displays the current *available to purchase* amount for a SKU at the specified location. |
| **Available To Backorder** | Displays the current available to *backorder* amount for a SKU at the specified location. |
| **Available To Preorder** | Displays the current available to *preorder* amount for a SKU at the specified location. |
| **Last Updated** | Displays when the inventory was last updated. |
### Inventory statuses
The inventory status metric is used describe the current status of an individual SKU for each location. The following table describes each inventory status:
| Status | Description |
| ---------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Available** | Indicates that the specific SKU is currently in stock and can be purchased. |
| **Low stock** | Indicates that the SKUs available stock has fallen below a predetermined threshold. The `lowStock` value is an optional integer that can be set when [creating inventory](/v3/api-reference/inventory/inventory/create-inventory) for a SKU. |
| **Out of stock** | Indicates the SKU has no stock including *available to purchase*, *backorder*, and *preorder* amounts. |
| **Backorder** | Indicates the SKU is available for *backorder*. |
| **Preorder** | Indicates the SKU is available for *preorder*. |
If a SKU is available for both **Backorder** and **Preorder** but has no **Available to Purchase** amount. The **Backorder** status is displayed.
# Overview
fabric Inventory is your single source of truth for inventory data. You can receive and track inventory across networks and locations.
## Prerequisites
Copilot is the primary interface for working with fabric applications. You will need an active account, including an account ID, to access Copilot. Contact your Copilot Admin or Customer Success representative to obtain these credentials.
## Launching Inventory
To launch Inventory, log in to your Copilot account and select **Inventory** from the left-hand navigation.
## Navigation
Inventory is divided into three separate sections accessible from the left column:
* [Manage Inventory](/v3/guides/inventory/manage-inventory-overview) - your dashboard for managing and tracking inventory
* [Networks](/v3/guides/inventory/create-a-network) - create rules to define inventory availability
* [Locations](/v3/guides/inventory/create-location) - manage location information
## Role-Based Access Control (RBAC)
fabric Copilot provides the ability to restrict the access of different users to information and actions available to them through roles. For more information and instructions on how to set up these controls, [visit the RBAC documentation](/v3/guides/settings/rbac/role-based-access-control).
# Configuring Scheduled Closures
Scheduled closures allow you to manage location availability for fulfillment to plan for holidays, weather events, and operational downtime.
## Procedure
1. In the left menu, click **Inventory > Locations**.\
The **Locations** page is displayed.
2. Click a location’s number.\
The **Edit Location** page is displayed.
3. In the **Location Status** section, click the **Scheduled Closures** tab.\
The **Scheduled Closures** tab is displayed.
4. Click **Schedule Closure**.\
The **Schedule Closure** window is displayed.
5. To set the beginning date of the closure for the location, in the **Start Closure Date** field, enter the date.
* Do one of the following:
* Use the calendar to select the date.
* Enter a date in the following format: mm/dd/yyyy.
6. To set the beginning time of the closure for the location, in the **Start Closure Time** field, enter the time.
* Do one of the following:
* Select a time.
* Enter a time in hh:mm format and specify AM or PM.\
The time zone is recorded from your browser. fabric recommends you turn off any VPNs before setting up scheduled closures.
7. To specify an end date and time for the closure, follow the instructions in steps 5 and 6 to configure the **End Closure Date** and **End Closure Time** fields.\
The **Specify closure end date** field is selected by default. If you don't want to specify an end date, clear the selection.
8. (Optional) To specify the shipping methods this closure applies to, do the following:
* Clear the selection in the **Applies to all shipping methods** field.\
The **Shipping methods** field is displayed.
* In the **Shipping methods** field, select the shipping methods the closure applies to.\
Note: SDD stands for same-day-delivery.
9. In the **Reason Code** field, select the reason for the closure.\
NOTE: Contact [fabric support](https://support.fabric.inc/hc/en-us/requests/new) for help setting up reason codes.
10. (Optional) To add a short description about the reason for the closure, click **Add Notes** and enter a description.
11. Click **Schedule**.
The outage is scheduled for the duration you defined.
# Order Alerts
The Order **Alerts setup** page displays an overview of the currently configured order alerts. Order alerts are used to monitor trailing metrics that can affect revenue and efficiency such as returns, cancellations, reorder rates, payment failures, and more.
Alerts are classified based on severity thresholds such as low, medium, and high severity levels. You can view the current status of all alerts on the **Home** > **Alerts** page.
## Alert Table Field Descriptions
| Field | Description |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------- |
| **Alert name** | The alert name assigned when creating the alert. |
| **Document** | The module within **Orders** that the alert is for. The options are **Order**, **Invoice**, **Allocation**, or **Inventory**. |
| **Status** | The current status, such as active or inactive, of the alert. |
| **Created by** | The tenant id of the user who created the alert. |
| **Last updated** | A system-generated time indicating when the allocation record was last modified. |
## Creating Order Alerts
1. In the left menu, click **Orders** > **Settings** > **Alerts**.
The **Alerts Setup** page is displayed.
2. Click **Create Alert**.
The **Create Alert** page is displayed.
3. In the **Basic Information** section, do the following:
* Enter an alert name. For example, *Low Orders Allocated*.
* Optionally provide an alert **Description**.
4. In the **Alert scope** section, do the following:
* In the **Document** field, select a document type.
* In the **Template** field, select a template.
Depending on the document type you select, the available templates for the document type are displayed. If you want to create a custom alert, follow the instructions in the [Creating fabric Alerts](https://developer.fabric.inc/v3/guides/home/alerts/creating-alerts) documentation.
* In the **Low Severity** field, enter a number representing the low severity threshold to trigger a low alert.
* In the **Medium Severity** field, enter a number representing the medium severity threshold to trigger a medium alert.
* In the **High Severity** field, enter a number representing the high severity threshold to trigger a high alert.
5. In the **Alert notification** section, select the **Notify by email** as required.
If you don't select the **Notify by email** field, email notifications aren't sent to users who are subscribed to alerts. However, the alert is still displayed on the **Home** > **Alerts** page.
If you select the **Notify by email** field, fabric automatically sends email alert notifications to users who have subscribed to alerts. For more information on how to subscribe to an alert, see the [Managing fabric Alerts](https://developer.fabric.inc/v3/guides/home/alerts/managing-alerts) documentation.
## Editing an Alert
1. In the left menu, click **Orders** > **Settings** > **Alerts**.
The **Alerts Setup** page is displayed.
2. In the **Alert name** column, click an alert.
The **View Alert** page is displayed. You can edit the details in the **Basic Information**, **Alert Scope**, and **Alert notification** sections. For more information on each of the fields, see the [Creating Order Alerts](#creating-order-alerts) section.
3. To save the alert, click **Edit**.
The edits are saved and the **Last updated** field in the **Alerts Setup** page is updated.
## Deactivating Alerts
**Note:** Currently, alerts can't be deleted. You can only deactivate an alert if you don't wish to receive a notification.
1. In the left menu, click **Orders** > **Settings** > **Alerts**.
The **Alerts Setup** page is displayed.
2. In the **Alert name** column, click an alert.
The **View Alert** page is displayed.
3. Click the **Active** toggle.
The deactivate alert window is displayed.
4. Click **Yes, Deactivate**.
The **Active** toggle now displays **Inactive**. The system auto saves these changes.
5. To return to the **Alerts Setup** page, click **Cancel**
The status of the alert is set to **Inactive** in the **Status** column in the alert setup table .
## Related Topics
* [Order Attributes](/v3/guides/orders/settings/order-attributes)
* [Shipping Methods](/v3/guides/orders/settings/shipping-methods)
* [Backorders and Preorders](/v3/guides/orders/settings/backorder-preorder)
* [Order Policies](/v3/guides/orders/settings/policies)
# Order Policies
Policies allow you to define how your business processes returns, cancellations, and exchanges.
Any number of policies are supported, however, you can only have a one default policy each for returns, cancellations, and exchanges. Default policies apply when no other policy condition is met. For example, the default return policy might have a 5\$ return fee. However, for items with the `Overweight` attribute, the return fee should be higher. By creating a policy that looks for the product attribute `Overweight`, returns and exchanges with this attribute can be handled differently.
## Prerequisites
* Ensure that you have **Administrator** or **Editor** privileges to fabric Orders. For more detailed information on these settings, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles) section.
## Policies Table Field Descriptions
| Field | Description |
| ---------------- | ---------------------------------------------------------------------------------- |
| **Name** | The policy name assigned when creating the policy. |
| **Policy type** | The type of policy. Policies can be **Cancellation**, **Exchange**, or **Return**. |
| **Channels** | The channels the policy is applied to. |
| **Currencies** | The currencies used for any fees associated with the policy. |
| **Last updated** | A system-generated time indicating when the policy was last modified. |
| **Status** | The status indicating whether a policy is set as the default. |
### Standard filters and searching
You can use the search field to find a policy by its name. If you don't know the policy name, you can use the following standard filters to refine the policies in the **Policies** table:
| Filter | Description |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Channel** | The channel name, depending on the available channels. The default available options are United States or Canada. You can use any other channels created in fabric Experiences or using the APIs. |
| **Currency** | The three-digit currency code used to process policy fees. |
| **Policy type** | The type of policy. You can filter the policies based on the type of the policy, such as **Cancellation**, **Exchange**, and **Return**. |
## Creating a Policy
1. In the left menu, click **Orders** > **Settings** > **Policies**.
The Policies page is displayed.
2. Click **Create Policy**.
The **Create Policy** page is displayed.
3. In the **Policy name** field, enter a self-explanatory name.
For example, *US Return Policy*.
4. In the **Policy type** field, select one of the following:
* Return
* Cancellation
* Exchange
5. (Optional) Click the **Set as default returns policy** field.
Each of the policy types can have one default policy associated with them. This means you can have a default return, cancellation, and exchange policy.
6. (Optional) In the **Description** field, enter a description of the policy.
7. (Optional) Click the **Apply to all channels** field.
Selecting this option automatically applies the policy to all your channels.
Don't select this option if this policy doesn't apply to different regions/countries.
8. In the **Channels** field, select the channels you want the policy to apply to.
This field is disabled if you selected the **Apply to all channels** field.
Depending on the **Policy type** that's selected, the **Returns**, **Exchange**, or **Cancellation** section is displayed.
1. For the selected section, enter the following details to specify the duration of each operation:
* Days
* Hours
* Minutes
* Seconds
The values entered in these fields determine the time frames for returns, cancellations, or exchanges for this policy.
2. To create a refund fee, in the **Refund Fee** field, do the following:
* In the **Currency** field, select a currency.
* In the **Fee type** field, enter a description for the fee.
* In the **Return fee** field, enter a dollar amount.
* Click **Add**.
The **Refund Fee** is added to the refund fee table.
Cancellations don't support **Refund Fees**.
3. To create **Reason Codes**, click **Add reason code**.
4. In the **Add reason code** window, do the following:
* In the **Code** field, enter the reason code.
* In the **Description** field, enter a description for the reason code.
* Click **Save**.
The reason code is added to the **Reason Codes** table.
5. To include product attributes in the policy, click **Add product attribute**.
Three new fields appear in the **Product Attribute Selection** section. This section is used to apply policies to specific items.
6. In the **Product attribute** field, select a product attribute.
This field is populated based on your product catalog attributes.
7. In the **Operator** field, select an operator.
8. In the **Values** field, select a value.
9. Click **Save** at the top-right of the page.
The policy is created and added to the policy table on the **Policies** page. If you set the policy as default, the status is set to **Default** and the policy appears sorted at the top of the table.
## Managing Policies
1. In the left menu, click **Orders** > **Settings** > **Policies**.
The Policies page is displayed.
2. Using the **Policies** table and [filter options](#standard-filters-and-searching), find the policy you want to edit.
3. Click the policy **Name** or hover over the policy and click **Edit**.
The **Edit** page is displayed.
**Note**: If the policy is a default policy, you can't edit the **Basic Information** section.
4. Edit the policy following the steps outlined in the [Creating a Policy](#creating-a-policy) section.
5. Click **Save**.
The **Last updated** field in the **Policies** table is updated and the policy saved.
## Related Topics
* [Order Attributes](/v3/guides/orders/settings/order-attributes)
* [Shipping Methods](/v3/guides/orders/settings/shipping-methods)
* [Backorders and Preorders](/v3/guides/orders/settings/backorder-preorder)
* [Order Alerts](/v3/guides/orders/settings/order-alerts)
# Account Details
### Overview
On the **Account Details** page, you can:
* View your account (tenant) ID and the fabric applications you have access to. The account ID is included in the profile information in the top right of any page in Copilot. You need account ID to access any of fabric’s endpoints.
* View your organization’s details, such as the organization ID.
* Request a new account. Note that requesting a new account is limited to fabric users with administrative permissions.
### Related Topics
* [Getting the Account ID](/v3/guides/settings/account-details/getting-the-account-id)
* [Request New Account](/v3/guides/settings/account-details/requesting-a-new-account)
* [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control)
# Getting the Account ID
### Overview
The account ID, also referred to as the tenant ID in fabric, is required for accessing the API endpoints.
### Procedure
1. In the left menu, click **Settings > Account Settings**.
2. Click **Account Details**.\
The **Account Details** page is displayed.
The account ID is displayed in the **Account Details** section.
You can also get the account ID by clicking on the profile icon in the top right of any page in Copilot and copying the ID.
### Related Topics
* [Account Details](/v3/guides/settings/account-details/account-details)
* [Request New Account](/v3/guides/settings/account-details/requesting-a-new-account)
# Requesting a New Account
## Overview
fabric users with administrator privileges can use the **Request New Account** feature to create additional accounts under their organization's profile. a merchant might want separate accounts for various sales channels or different development environments, such as staging and production. Even though each account can operate independently, this feature allows merchants to oversee and manage all accounts within the same organization profile.
## Prerequisites
Ensure you have [administrator privileges](/v3/guides/settings/rbac/role-based-access-control) to request a new account.
## Procedure
1. In the left menu, click **Settings > Account Settings**.
2. Click **Account Details**.\
The **Account Details** page is displayed.
3. Click **Request new account**.\
The **Request new account** page is displayed.
4. In the **Account Name** field, enter the account’s name.
5. In the Reason for new account field, select one of the following:
* **Environment will be used for learning**
* **Environment will be used for development**
* **Environment will be used for QA**
* **Environment will be used for UAT**
* **Environment will be used for production**
* **Environment will be used for demos**
6. (Optional) Enter a **Description** of the new account.
7. Click **Submit Request**.
You will receive an email with a link to activate the new account.
### Post requisites
1. Check your email for the confirmation message containing the activation link.
2. Click the activation link to activate the new account.
## Related Topics
* [Account Details](/v3/guides/settings/account-details/account-details)
* [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control)
# Currencies
### Overview
With the internationalization feature in Copilot, you can manage currencies and enable multi-currency pricing. You can also to set a default currency for your storefront.
### Procedure
1. In the left menu, click **Settings > Account Settings**.
2. Click **Internationalization**.\
The Internationalization page is displayed.
3. Click the **Currencies** tab.\
The Currencies tab is displayed.
4. In the **Currency** field, do one of the following:
* From the drop-down menu, select a currency.
* Enter the three-letter currency code in the search field. For example, use **USD** for US Dollar.
5. Click **Add currency**.
The new currency is added to the list of currencies below.
### Changing the Default Currency
1. On the Internationalization page, click on the **Currencies** tab.
2. To set a currency as default, hover over the currency and click on the **vertical ellipses icon (⋮)** that appears at the right.
3. Click **Make default**.
The currency is set as the default.
### Related Topics
* [Internationalization Overview](/v3/guides/settings/internationalization/internationalization)
* [Languages](/v3/guides/settings/internationalization/languages)
# Internationalization
### Overview
fabric's internationalization (I18N) feature allows merchants to tailor their storefront experiences and products based on customers' geographic needs. Through centralized configuration in Copilot, you can manage languages and currencies, enabling localized content and multi-currency pricing within the fabric platform.
### Related Topics
* [Languages](/v3/guides/settings/internationalization/languages)
* [Currencies](/v3/guides/settings/internationalization/urrencies)
# Languages
### Overview
With the internationalization feature in Copilot, you can manage languages and enable localized content. You can also to set a default language for your storefront.
### Procedure
1. In the left menu, click **Settings > Account Settings**.
2. Click **Internationalization**.\
The Internationalization page is displayed.
3. In the **Locale code** field, do one of the following:
* From the drop-down menu, select a locale.
* Enter the two letter language-country string in the search field. For example, enter **en-US** for US English or **en-GB** for British English.
4. Click **Add locale**.
The new locale is added to the list of locales.
### Changing the Default Locale
1. To set a locale as default, on the Internationalization page, hover over the locale and click the **vertical ellipses icon (⋮)** that appears at the right.
2. Click **Make default**.
The locale is set as the default.
### Related Topics
* [Internationalization Overview](/v3/guides/settings/internationalization/internationalization)
* [Currencies](/v3/guides/settings/internationalization/currencies)
# Inviting Users
fabric users with administrator privileges can invite new users to their organization’s fabric account.
This topic covers the process of inviting new users to your organization.
## Prerequisites
* Ensure you have administrator privileges to invite new users.
## Procedure
1. In the left menu, click **Settings > Account Settings**.
The **Account Settings** page is displayed.
2. Click **User Management**.
The **User Management** page is displayed.
3. Click **Invite new users**.
The **Invite new users** window is displayed.
4. In the **First Name** field, enter the user’s first name.
5. In the **Last Name** field, enter the user’s last name.
6. In the **Email address** field, enter the user’s email address.
You can add multiple users by clicking **Add new user**.
7. In the **Invite as** field, select the roles you want to assign to each user.
The selected roles are assigned to every user you invited.
8. Click **Send invitations**.
A new user's status is set to **Pending**. They will receive an email with a link to activate their accounts. Upon activation, their status is set to **Active**.
## Related Topics
* [Managing Users](/v3/guides/settings/user-management/managing-users)
* [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control)
# User Management
With fabric’s role-based access control settings, you can restrict which users are authorized to manage or access certain parts of your organization’s fabric account.
On the **User Management** page, you can:
* Manage the users in your fabric account.
* Assign roles to control levels of access.
* Update account information for existing users.
* Delete users.
## Viewing All Users
1. Click **Account Settings**.
The **Account Settings** page is displayed.
2. Click **User Management**.
The **User Management** page is displayed with a table containing all the users in your organization.
### Filtering users
The **User Management** table can be filtered by **Role** and **Status** so that the table only displays users that match the filter parameters. Additionally, using the search bar, you can filter by name or email.
### User management table
The **User Management** table displays information on the user, their status, when they last logged in, and their current roles. The following table describes each column:
| Field | Description |
| --------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
| **User** | Displays the first name, last name, and email of the user. |
| **Status** | Displays the current status of the user. **Active** status indicates that the user can log in and has accepted the initial login email. **Pending** status indicates that the user is added, but not accepted the login email. |
| **Last active** | Displays the user's most recent login date. |
| **Role** | Displays a list of roles currently assigned to the user. If the user has more than two roles, the total number of roles is shown. Hovering over this number shows each individual role in a text popover. |
## Related Topics
* [Inviting Users](/v3/guides/settings/user-management/inviting-users)
* [Managing Users](/v3/guides/settings/user-management/managing-users)
* [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control)
# Completing Store Fulfillments
The store fulfillment feature is used to streamline the order fulfillment process within a retail store. fabric integrates with your online website and directs fulfillment requests to your physical store locations based on characteristics, such as geolocation, store inventory levels, and more. Unlike store transfers and adjustments, store associates can't create a store fulfillment.
Currently, there are no role restrictions for who can complete fulfillments.
## Completing a Fulfillment
1. You can [view fulfillments](/v3/guides/store-fulfillment/viewing-fulfillments) by clicking **Fulfillments** in the left menu.
Only your selected store's fulfillments are displayed.
2. Click **Pending Orders** from the left menu.
The [Pending Orders](/v3/guides/store-fulfillment/viewing-fulfillments#pending-fulfillments) page is displayed. Store associates should prioritize completing fulfillments in the following order: **Next Day**, **Expedited**, **Pickup**, **Standard**.
3. Click any order.
The fulfillment order page is displayed. This page provides the following action options for completing the transfer:
* [Pick](#pick)
* [Pack](#pack)
* [Ship](#ship)
### Pick
The pick step is used to confirm the contents of the fulfillment. You can confirm an item by scanning its barcode or through manual entry.
1. Scan the barcode of the first item.
The item is added to a list. You can scan multiple items.
2. (Optional) If the item doesn't scan, do the following to manually add a SKU:
1. Click the ellipsis button (**⋮**).
2. In the dropdown menu, select **Manually add items**.
The manual input window is displayed.
3. Manually enter the barcode.
4. Click **Done**.
3. Confirm that the scanned item is correct.
Some items can have an incorrect barcode or variations. We recommend that you double-check to make sure the correct item is displayed to avoid any such errors.
4. In the **Quantity** field, enter the quantity.
By default, quantity is set to one when you scan an item.
5. Click **Pack**.
### Pack
The packing stage is where you confirm the size of the parcel and physically add items to the parcel. You will see the items that were picked and their quantity above the *Package* section.
Each company has a default bag or box size for packing. Confirm the bag or box is the correct size.
A company can optionally set a weight limit for a package to prevent it from being damaged during transit.
When the shipping label is printed, the shipping carrier checks the size of each carton or parcel to allocate space in the shipping truck.
You can change the size of a parcel anytime during packing if you need more space.
1. (Optional) If you want to change the size of the parcel, click the ellipsis (**⋮**) and select the **Change package type/size** option.
The **Parcel Size** window appears.
1. Select a new size for the parcel.
2. Click **Select**.
2. Click the ellipsis (**⋮**) and select the **Scan into parcel** option.
3. Click **Click on scan to add items**.
4. Scan the barcode of each item.
You must match the number of items scanned to the quantity that's provided in the *Pick* step.
5. (Optional) If the item doesn't scan, do the following to manually add a SKU:
1. Click the ellipsis button (**⋮**).
2. In the dropdown that appears, select **Manually add items**.
The manual input window is displayed.
3. To add items, click the **+** icon.
4. Click **Done**.
6. Click **Done**.
### Ship
The ship option is enabled only after completing the packaging step.
1. Click **Select Shipping Carrier**.
The **Pick shipping method** window is displayed.
Two different types of shipping methods are available:
* *Selecting a carrier*: Select a preferred carrier method, such as FedEx or UPS, as the shipping method.
* **BOPIS**: The customer will pick up the order at the store.
1. Click **Select shipping method**.
The shipping method that you selected is displayed in the **Shipping Carrier** section.
2. Click **Print Label**.
3. Click the print icon next to both **Print shipping labels** and **Print packing slips**.
4. Put the printed packing slips in the parcel.
5. Tape and seal the box.
6. Attach the printed shipping labels to the parcel.
7. Click **Done**.
The transfers status is updated to `SHIPPED` or `PICKED UP`. With this status update, your store inventory levels are adjusted. Once the order is delivered or picked up by the customer, the status changes to `COMPELTED`.
# Transferring Store Inventory
With fabric's storefront app, you can transfer and balance store inventory levels and send items to another store or to a Distribution center (DC). Once a shipping label is created and printed for a store transfer, your store inventory levels are adjusted.
You can view transfers by clicking **Transfers** in the left menu. Only your selected store's transfers are displayed.
Currently, there are no role restrictions for managing pick, pack, and shipping an item to transfer inventory.
## Creating an Inventory Transfer
1. In the left menu, click **Transfers**.
2. To create a new transfer, click **Create New Transfer**.
The **Create New Transfer** window is displayed. The sending store location is automatically set to your store or DC’s location.
3. In the **Receiving Store** field, select a store.
A green checkmark appears to confirm the sending and receiving stores are selected.
4. Click **Create Transfer**.
The transfer page is displayed with a message confirming the transfer # was successfully created.
The transfer page displays the **Sending Store**, **Receiving Location**, [transfer type](v3/guides/store-fulfillment/viewing-transfers#transfers-table), and provides action options for managing the transfer:
* [Pick](#pick)
* [Pack](#pack)
* [Ship](#ship)
### Pick
The pick step is used to determine the contents of the transfer. You can add items by scanning the items barcode or manually entering the barcode.
1. Scan the barcode of the first item.
The item is added to a list. You can scan multiple items.
2. (Optional) If the item doesn't scan, do the following to manually add a SKU:
1. Click the ellipsis button (**⋮**).
2. In the dropdown menu, select **Manually add items**.
The manual input window is displayed.
3. Click **Done**.
3. Confirm that the scanned item is correct.
Some items can have an incorrect barcode or variations and result in inconsistencies at the receiving location. We recommend you to double check that the correct item is displayed to avoid any such errors.
4. In the **Quantity** field, enter the quantity.
By default, quantity is set to one when you scan an item.
5. Click **Pack**.
### Pack
The packing stage is where you confirm the size of the parcel and physically add items to the parcel. You will see the items that were picked and their quantity above the *Package* section.
Each company has a default bag or box size for packing. Confirm the bag or box is the correct size.
Each package type has a set weight limit to prevent it from being damaged during the transit.
When the shipping label is printed, the shipping carrier checks the size of each carton or parcel to allocate space in the shipping truck.
You can change the size of a parcel if you need more space anytime during packing.
1. (Optional) If you want to change the size of the parcel, click the ellipsis (**⋮**) and select the **Change package type/size** option.
The **Parcel Size** window appears.
1. Select a new size for the parcel.
2. Click **Select**.
2. Click the ellipsis (**⋮**) and select the **Scan into parcel** option.
3. Scan the barcodes for each item.
You must match the number of items scanned to the quantity that's provided in the *Pick* step.
4. (Optional) If the item doesn't scan, do the following to manually add a SKU:
1. Click the ellipsis button (**⋮**).
2. In the dropdown that appears, select **Manually add items**.
The manual input window is displayed.
3. To add items, click the **+** icon.
4. Click **Done**.
5. Click **Done**.
### Ship
The Ship option is enabled only after completing the packaging step.
1. Click **Select Shipping Carrier**.
The **Pick shipping method** window is displayed.
Two different types of shipping methods are available:
* *Selecting a carrier*: Select a preferred carrier method, such as FedEx or UPS, as the shipping method.
* **Hand Carry Transfer**: An employee or manager will be responsible for delivering the transfer. Use this option to save money on shipping costs.
1. Click **Select shipping method**.
The shipping method that you selected is displayed in the **Shipping Carrier** section.
2. Click **Print Label**.
3. Click the print icon next to both **Print shipping labels** and **Print packing slips**.
4. Put the printed packing slips in the parcel.
5. Tape and seal the box.
6. Attach the printed shipping labels to the parcel.
7. Click **Done**.
The transfers status is updated to `TRANSFER SHIPPED`. With this status update, your store inventory levels are adjusted.
### Reprinting packing labels and slips
1. To reprint a damaged label or missing slip, from the **Transfers** menu, select the transfer.
A preview menu is opened for the transfer.
2. Click the ellipsis (**⋮**) and select one of the following options as required:
* **Print Packing slip**
* **Reprint Shipping labels**
# Editing Store Fulfillments
The store fulfillment feature is used to streamline the order fulfillment process within a retail store. fabric integrates with your online website and directs fulfillment requests to your physical store locations based on characteristics, such as geolocation, store inventory levels, and more.
You can choose from five options based on the current status of the pending fulfillment:
* [Print Packing Slip](#printing-a-new-store-fulfillment-packing-slip): Use this option to print a new packing slip for the store fulfillment.
* [Add Package](#adding-an-additional-package-to-an-existing-store-fulfillment): Use this option when the fulfillment exceeds the default package size or additional packages are needed to complete the fulfillment.
* [Start over](#restarting-a-store-fulfillment): Use this option to restart the fulfillment. This resets the fulfillment back to the packing step.
* [Reprint shipping labels](#reprinting-store-fulfillment-shipping-labels): Use this option to reprint the shipping labels for the store fulfillment.
* [Cancel Entire Order](#canceling-a-store-fulfillment-order): Use this option to cancel the fulfillment. You must select a reason code for the cancelation.
## Printing a New Store Fulfillment Packing Slip
1. In the left menu, click **Fulfillments**.
2. Click **All Orders**.
3. To reprint a damaged or missing packing slip, click the fulfillment from the **Fulfillments** table.
A preview menu is opened for the fulfillment.
4. Click the ellipsis (**⋮**).
5. Click **Print Packing Slip**.
6. Put the new packing slip inside the parcel.
## Adding an Additional Package to an Existing Store Fulfillment
1. In the left menu, click **Fulfillments**.
2. Click **All Orders**.
3. Click the fulfillment from the **Fulfillments** table.
A preview menu is opened for the fulfillment.
4. Click the ellipsis (**⋮**).
5. Click **Add Package**.
The **Packages** section for the fulfillment is updated with the additional package.
6. (Optional) To change the package size, click the ellipsis (**⋮**) next to the package.
The **Package Size** widow is displayed
1. Select a new package size.
2. Click **Select**.
The package size is updated.
## Restarting a Store Fulfillment
You can't start over for a store fulfillment that already has a shipping label.
1. In the left menu, click **Fulfillments**.
2. Click **Pending Orders**.
3. Click the fulfillment from the **Fulfillments** table.
A preview menu is opened for the fulfillment.
4. Click the ellipsis (**⋮**).
5. Click **Start over**.
A confirmation window is displayed.
6. Click **Yes, delete all & start over**.
## Reprinting Store Fulfillment Shipping labels
Only store fulfillment orders that have finished packing and have the `SHIPPED` status can access this option.
1. In the left menu, click **Fulfillments**.
2. Click **Pending Orders**.
3. Click the fulfillment from the **Fulfillments** table.
A preview menu is opened for the fulfillment.
4. Click the ellipsis (**⋮**).
5. Click **Reprint shipping labels**.
6. Attach the new shipping label to the parcel.
## Canceling a Store Fulfillment Order
You can't cancel a fulfillment after the shipping label is created.
1. In the left menu, click **Fulfillments**.
2. Click **Pending Orders**.
3. Click the fulfillment from the **Fulfillments** table.
A preview menu is opened for the fulfillment.
4. Click the ellipsis (**⋮**).
5. Click **Cancel Entire Order**.
The **Cancel Entire Order** window is displayed.
6. In the **Reason Code** field, select a reason code.
7. Click **Done**.
To cancel a single item instead of the entire order, go to the section for [canceling a single item](#cancel-a-single-item).
## Item Options
Each fulfillment starts at the pick phase where you search for the requested items. **Item Options** can be used to manually scan items, look up product info to help find items in the store, and cancel a specific item without canceling the entire order.
1. Click an item in a fulfillment to display the **Item Options** window with the following options:
* [Manually pick](#manually-pick-an-item)
* [Product info](#lookup-product-info-for-an-item)
* [Cancel item](#canceling-a-single-item)
* [Gifting](#gifting-options)
* [Unpick item](#unpicking-an-item)
### Manually pick an item
The **Manual Pick** option allows you to change the quantity of items expected for a fulfillment.
This shouldn't be used to cancel items but adjust errors in the fulfillment itself.
1. Click the item.
The **Item Options** window is displayed.
2. Click **Manually Pick**.
The **Manually Pick** window is displayed.
3. Click the quantity icon to open the **Manual Pick** window.
4. To add items, click the **+** icon.
5. Click **Done**.
### Lookup product info for an item
You can lookup product info such as the **SKU**, **Style Number**, **Size**, **Color**, and other important attributes for any product in a fulfillment. The number of available attributes can vary and depends on a product's available information.
1. Click the item.
The **Item Options** window is displayed.
2. Click **Product Info**.
The **Product Info** window is displayed.
### Canceling a single item
You can cancel one item at a time without canceling the entire order. To do this, a reason code is required such as, **Damaged**, **Out of Stock**, or **Customer Request**. Ensure that the correct order is being updated before canceling items.
Store inventory counters are updated based on the selected reason code. A damaged item is temporarily marked as unsellable until confirmed by a store manager.
1. Click the item.
The **Item Options** window is displayed.
2. Click **Cancel Item**.
The **Reason Codes** window is displayed.
3. To select a reason code, click the **+** icon.
The number of reason codes you can select is based on the pick quantity for an item.
4. Click **Done**.
### Gifting options
Items with the gifting tag require gift wrapping.
1. To mark and item as giftwrapped, click the item.
The **Item Options** window is displayed.
2. Click the gift icon.
The **Gifting** window is displayed.
3. Select the **Gift wrap** option.
4. Click **Proceed to Pack**
The items gift status is updated.
### Unpicking an item
While changing shifts or completing fulfillments that carried over to another day, sometimes items can be misplaced. If you notice a discrepancy in picking, you can unpick an item while you search for it. This isn't the same as canceling an item. Unpick allows you to reset the instance of a single item without starting the entire fulfillment over. Only once you have confirmed the item isn't available should it be canceled.
For example, let's assume an order has 4 pants, 5 shirts, a backpack, and 3 pairs of socks. Employee A says they picked all the items and hands it over to employee B during a shift change. Employee A accidentally sold one of the pairs of socks they had picked for the order just before the shift change. When employee B counts the socks they notice that only 2 are picked, not 3. A line of customers has formed and they can't look for the missing socks at this moment. To prevent another employee from packing or completing the order, they unpick the socks as a reminder to find all 3 pairs before packing and shipping the fulfillment.
1. To unpick an item, click the item.
The **Item Options** window is displayed.
2. Click **Unpick Item**.
The **Do you want to unpick this item?** confirmation window is displayed.
3. Click **Yes**.
The items pick quantity is reset to 0 for that item.
# Editing Store Inventory Transfers
With fabric's storefront app, you can transfer and balance store inventory levels and send items to another store or to a Distribution center (DC). Once a shipping label is created and printed for a store transfer, your store inventory levels are adjusted.
You can choose from five options based on the current status of the inventory transfer:
* [Print packing slip](#printing-a-new-packing-slip): Use this option to print a new packing slip for a store transfer.
* [Reprint shipping labels](#reprinting-shipping-labels): Use this option to reprint the shipping labels for a store transfer.
* [Start over](restarting-a-store-transfer): Use this option to delete all parcels, remove all items, and start the store transfer over.
* [Manually add items](manually-adding-items-to-store-transfers): Use this option to enter a SKU manually for transfering inventory to another store.
* [Reject transfer](canceling-a-store-transfer): Use this option to cancel transfering inventory to another store.
## Printing a New Packing Slip
Only the items that have finished packing for transfers and have the `TRANSFER SHIPPED` status can access this option.
1. In the left menu, click **Transfers**.
2. To reprint a damaged or missing packing slip, select the transfer from the **Transfers** menu.
A preview menu is opened for the transfer.
3. Click the ellipsis (**⋮**).
4. Click **Print packing slip**.
5. Put the new packing slip inside the parcel.
## Reprinting Shipping Labels
Only transfers that have finished packing and have the `TRANSFER SHIPPED` status can access this option.
1. In the left menu, click **Transfers**.
2. To reprint a damaged or missing shipping label, in the **Transfers** menu, select the transfer.
A preview menu is opened for the transfer.
3. Click the ellipsis (**⋮**).
4. Click **Reprint Shipping Labels**.
5. Attach the new shipping label to the parcel.
## Restarting a Store Transfer
You can't start over for a transfer that already has a shipping label.
1. In the left menu, click **Transfers**.
2. To start a transfer over, select the transfer from the **Transfers** menu.
A preview menu is opened for the transfer.
3. Click the ellipsis (**⋮**).
4. Click **Start over**.
A confirmation window is displayed.
5. Click **Yes**.
All parcels and items are removed, and the transfer is reset.
## Manually Adding Items to Store Transfers
1. In the left menu, click **Transfers**.
2. To manually add items, select the transfer from the **Transfers** menu.
A preview menu is opened for the transfer.
3. Click the ellipsis (**⋮**).
4. Click **Manually add items**.
The **Manual Input** window is displayed.
5. In the **Enter SKU** field, enter the items SKU.
6. Click **Done**.
The item is added to the transfer.
## Canceling a Store Transfer
You can't cancel transfering an item to a store after the shipping label is created for the transfer.
1. In the left menu, click **Transfers**.
2. To cancel a transfer, select the transfer from the **Transfers** menu.
A preview menu is opened for the transfer.
3. Click the ellipsis (**⋮**).
4. Click **Reject Transfer**.
The **Reject Transfer** window is displayed.
5. In the **Reason Code** field, select a reason code.
6. Click **Done**.
The transfer is canceled.
# Order Lookup
The order lookup feature is used to search for orders associated with your selected store location. fabric integrates with inventory and order management systems to display order information, such as the tracking number, order date, and status.
Only orders from your selected store location are displayed.
## Searching for an Order
1. To view the **Order Lookup** page, in the left menu, click **Order Lookup** .
2. In the default search fields, enter required information, such as the **Order #** or **Customer Phone #**.
* **Order #**: The unique order identifier assigned to an order during checkout.
* **Customer First Name**: The customer's first name.
* **Customer Last Name**: The customer's last name.
* **Customer Phone #**: The customer's primary phone number.
* **Customer Email Address**: The customer's primary email address.
* **Loyalty #**: The customer's loyalty number.
* **Zip Code**: The customer's zip code.
3. Click **Search Order**.
The [order lookup table](#order-lookup-result-table) is displayed with a list of results.
## Order Lookup Result Table
A successful search displays a table containing any orders that meet the search criteria. For example, searching by a customer's phone number displays all orders associated with that phone number for your store location. The results are sorted by the most recent order date.
| Column | Description |
| ----------------- | ------------------------------------------------------------------------------------------------------------- |
| **Customer Name** | The first and last name of the customer. |
| **Order #** | The unique order identifier assigned to an order during checkout. |
| **Status** | The current status of the order. |
| **Total Units** | The number of items the order contains. |
| **Order Type** | The origin of the order, such as Point of Sale (POS), Web (Online), or Customer Service Representative (CSR). |
| **Order Date** | The date the order was placed in the month/day/year format. |
Orders can contain hundreds of attributes and some sensitive information. To view more information on an order, you must log in to **Orders** in Copilot.
### Filtering results
The Order Lookup results table allows you to add additional filters for three categories:
* **Customer Details**
* **Date**
* **Zip Code**.
1. To add additional filters, click the filter icon.
The **Filters** window is displayed.
2. To display the available filters, select one of the following categories:
* **Customer Details**: Filters by customer details, such as first name, last name, phone number, email, or loyalty number.
* **Date**: Filters by the time when an order was created, such as within the last 30 days or 60 days.
* **Zip Code**: Filters by the customer's zip code.
3. Enter additional details for the selected filter.
4. Click **Apply Filter**.
# Completing Customer Handoffs
The Handoffs feature filters store pickup orders, enabling store associates to update orders by changing the status from **Awaiting Pickup** to **Picked Up**, or **Canceled**. A handoff order displays in the [customer pickup table](#customer-pickup-table) after a fulfillment for a Buy Online Pickup in Store(BOPIS ) order is marked as completed.
## Picking up the Entire Order
1. You can [view handoffs](/v3/guides/store-fulfillment/viewing-customer-pickups) by clicking **Handoffs** in the left menu.
Only the selected store's handoff orders are displayed.
2. Click any order.
The pickup menu for the order is displayed.
3. Before continuing with the pickup, confirm with the customer that the correct order is selected.
fabric recommends using a phone number or email since names can be similar.
4. In the pickup menu, click **Pickup Entire Order**.
The customer signature window is displayed.
5. Get a signature from the customer to acknowledge the pickup.
6. Click **Accept & Continue to Label**.
The **Print or Email Labels** window is displayed.
7. (Optional) To print or email labels at the customers request, click one of the following options:
* **Send Email**: The shipping label and packing slips are sent to the customer's primary email address.
* **Print shipping label**: A printed copy of the shipping label is sent to the store printer for printing.
* **Print packing slips**: Printed copies of the packing slips is sent to the store printer for printing.
8. Click **Complete**.
The order is complete and the order status is updated to **Picked Up**.
## Picking up a Partial Order
1. To [view all handoffs](/v3/guides/store-fulfillment/viewing-customer-pickups), in the left menu, click **Handoffs**.
Only the selected store's handoffs are displayed.
2. Click any order.
The pickup menu for the order is displayed.
3. Before continuing with the pickup, confirm with the customer that the correct order is selected.
fabric recommends using a phone number or email since names can be similar.
4. In the pickup menu, click **Pickup Partial Order**.
The **Select Items for Pickup** menu is displayed.
5. To update the quantity of a selected item, click the **+** icon.
Always double-check that the items and quantity are correct.
6. Click **Continue to Signature**.
The customer signature window is displayed.
7. Get a signature from the customer to acknowledge the pickup.
8. Click, **Accept & Continue to Label**.
The **Print or Email Labels** window is displayed.
9. (Optional) To print or email labels at the customers request, click one of the following options:
* **Send Email**: The shipping label and packing slips are sent to the customers primary email address.
* **Print shipping label**: A printed copy of the shipping label is sent to the store printer for printing.
* **Print packing slips**: Printed copies of the packing slips is sent to the store printer for printing.
10. Click **Complete**.
### Skipping items
Orders can be damaged during transit or a customer can change their mind while in store. If this happens, an item can be skipped for pickup by providing a reason code such as *Damaged* during the pickup process.
1. Follow [picking up a partial order](#picking-up-a-partial-order) to step 5.
2. On the **Select Items for Pickup** window, clear the checkbox field next to the item that needs to be skipped.
The **Select Reason** field is displayed below the item.
3. Click the **Select Reason** field.
All available reason codes are displayed.
4. To add a reason code, click the **+** icon.
You can add multiple reason codes based on the quantity of an item in an order. For example, if three of the same pair of shoes exists in an order, you can select up to three reason codes if all three pairs are damaged or missing.
5. Click **Continue to Signature**.
The customer signature window is displayed.
6. Get a signature from the customer to acknowledge the pickup.
7. Click, **Accept & Continue to Label**.
The **Print or Email Labels** window is displayed.
8. (Optional) To print or email labels at the customers request, click one of the following options:
* **Send Email**: The shipping label and packing slips are sent to the customers primary email address.
* **Print shipping label**: A printed copy of the shipping label is sent to the store printer for printing.
* **Print packing slips**: Printed copies of the packing slips is sent to the store printer for printing.
9. Click **Complete**.
# Store Inventory Lookup
The store inventory lookup feature is used to view inventory levels for a particular SKU across different store locations. fabric provides a real-time view of inventory by integrating with inventory and order management systems, showing the quantities available for immediate purchase and those eligible for backorder across store locations.
## Searching for Inventory
1. To view the **Inventory Lookup** page, in the left menu, click **Inventory**.
2. (Optional) If you want to use additional filters for your search, click **More**
The **Filters** window is displayed. The available filters depend on your company's inventory attributes.
3. In the default search fields, enter the required information, such as the SKU or store.
* **SKU #**: A unique item identifier, for example, *WEH34T2*.
* **Store #**: Filters inventory by store number. For example, if you enter *90012*, only inventory for that store is displayed for the search result. Multiple store numbers can be entered.
* **City**: Filters inventory based on the city entered, for example, *Maine*.
* **State**: Filters inventory based on the state or province entered, for example, *Washington*.
* **Item Size**: Filters inventory based on the size, for example, *Large* or *10 x 14 x 8* inches.
* **Item Style**: Filters inventory based on the style number. This can be used to filter for variants such as *style B* or *style 2* of a specific SKU.
4. Click **Search Inventory**.
The [inventory lookup table](#inventory-lookup-table) is displayed with a list of results.
## Inventory Lookup Table
After searching for inventory, a search results table is displayed with a list of the filters you applied.
To view an items details, click the item.
The items details window is displayed.
| Column | Description |
| -------------------------- | ----------------------------------------------------------------------- |
| **SKU** | A unique item identifier. For example, *WEH34T2*. |
| **Style #** | The style number used to differentiate item variants with the same SKU. |
| **Address** | The city and state where the inventory is located. |
| **Distance (Miles)** | The distance from your store location. |
| **Available to Purchase** | The total number of an item at a store location. |
| **Available to Backorder** | The total number of item eligible for backorder across store locations. |
# Changing the Store Location
Store associates are assigned to specific locations within the system. If an associate works at multiple locations, they can switch seamlessly between them.
The Store Fulfillment Application provides real-time inventory tracking for each store location. This enables:
* **Visibility into store operations**: Each location displays its pending, in-progress, and completed transfers for receivings, adjustments, and fulfillments.
* **Flexibility for dynamic operations:** You can create temporary pop-up stores and redirect orders to accommodate events or seasonal demands.
## Changing the Store Location
1. Inn the top-right of the page, click the **Profile** icon .
The **Profile** window is displayed.
2. In the **Location** field, click the location.
The **Change Store** window is displayed. Your selected store location is indicated with the `CURRENT` tag.
3. Select a store from the list that's displayed.
4. Click **Update Store**.
The store location is updated.
# Viewing Store Adjustments
Adjustments are used to streamline store-level inventory management by automatically adjusting stock levels based on real-time sales and fulfillment activities. By integrating with Point-Of-Sale (POS) systems and Warehouse Management Systems (WMS), fabric ensures accurate inventory counts and prevents stockouts or overstocks.
You can view adjustments by clicking **Adjustments** in the left menu.
Currently, anyone can approve or cancel an adjustment.
## Filtering Adjustments
You can search for a specific adjustment by entering the **Adjustment #** in the search bar.
Adjustments can be filtered by [status](#adjustment-statuses) or by [reason codes](#reason-codes). You can also select multiple filters. After you select a filter, the adjustment table is automatically updated.
Selecting the refresh button refreshes the adjustment table and clears all filters.
## Adjustments Table
The adjustments table displays all the adjustments for a particular store. By default, this table displays the most recently created adjustments.
The table only displays the adjustments for the store in the last 30 days. Older adjustments must be filtered using the **Adjustment #** in the search field.
| Column | Description |
| ---------------- | ------------------------------------------------------------------------------------------- |
| **Adjustment #** | A unique adjustment identifier assigned for an adjustment by the system when you create it. |
| **Reason Code** | The [reason code](#reason-codes) given to the adjustment when it was created. |
| **Created By** | Displays who created the adjustment. |
| **Created Date** | Displays the month and year the adjustment was made. |
| **Status** | Displays the current adjustment [status](#adjustment-statuses). |
### Adjustment statuses
Adjustment statuses track the progress of an adjustment.
| Status | Description |
| ----------- | -------------------------------------------------------------------- |
| `REQUESTED` | Indicates that the adjustment is pending approval. |
| `COMPLETED` | Indicates that the adjustment is approved and inventory was updated. |
| `CANCELED` | Indicates that the adjustment isn't approved and was canceled. |
### Reason codes
Reason codes are used to categorize and explain the reason for an adjustment to the inventory. These codes provide context for the adjustment and help track trends or identify issues.
Reason codes are separated into two categories:
* Adding inventory
* Removing inventory
The following codes are suggested reason codes. These can be customized as needed.
#### Add units
Codes that increase a stores inventory.
| Reason Code | Description |
| --------------------------------- | ------------------------------------------------------------------------------------------------ |
| `MANUAL_ADJUSTMENT` | Indicates that inventory was found and other reason codes don't apply. |
| `MARKETING` | Indicates the item is no longer being used for marketing purposes. |
| `WRONG ITEM SHIPPED TO CUSTOMER` | Indicates the item was returned to the store by a customer who received the wrong item. |
| `MISSING UNITS SHIPMENT/TRANSFER` | Indicates the item was included in a shipment or transfer but excluded from the receivings list. |
#### Remove units
Codes that reduce a store's inventory.
| Reason Code | Description |
| --------------------------------- | -------------------------------------------------------------------------------------------- |
| `DAMAGED` | Indicates the item is damaged. |
| `INSURANCE CLAIM` | Indicates the item is damaged and covered under warranty. |
| `DESTROY AT STORE` | Indicates the item was destroyed at the store. |
| `ITEM NOT FOUND` | Indicates the item was displaying *in stock* but an associate was unable to locate the item. |
| `SHOPLIFTING INCIDENT` | Indicates the items are no longer available due to shoplifting. |
| `MARKETING` | Indicates the item is being used for marketing purposes and no longer available. |
| `MISSING UNITS SHIPMENT/TRANSFER` | Indicates the item was supposed to be a part of a shipment or transfer but wasn't received. |
# Viewing Customer Handoffs
The **Handoffs** feature filters store pickup orders enabling store associates to find and change orders with the **Awaiting Pickup** status to **Picked Up** or **Canceled**. A handoff order displays in the [customer pickup table](#customer-pickup-table) after a fulfillment for a Buy Online Pickup in Store(BOPIS ) order is marked as completed.
## Filtering Customer Pickups
You can search for a specific pickup order by entering the **Order #** in the search bar.
Customer pickups can be filtered by [pickup status](#customer-pickup-statuses). After you select a filter, the customer pickup table is automatically updated.
To clear all filters, click the **Refresh** button. The customer pickup table is updated and all filters are cleared.
## Customer Pickup Table
The customer pickup table displays all the handoff orders for a particular store. By default, this table displays the most recently created orders with the **Awaiting Pickup** status.
The table only displays the handoff orders for the store in the last 30 days. Older handoff orders must be filtered using the **Order #** in the search field.
| Column | Description |
| ----------------- | --------------------------------------------------------------------------------------------------------- |
| **Order #** | A unique order identifier assigned to an order during checkout. |
| **Status** | The current [pickup status](#customer-pickup-statuses) for an order. |
| **Tags** | An optional tag assigned to the order, such as gift wrapping. |
| **Order Date** | The date the order was placed in the month/day/year format. |
| **Customer Name** | The first and last name of the customer. |
| **Pickup By** | The last day for order pickup to avoid cancellation, as specified in your company's terms and conditions. |
### Customer pickup statuses
| Status | Description |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Awaiting Pickup** | The order is ready to pickup and the customer is notified. |
| **Picked Up** | The customer picked up the order. When an orders status is changed from **Awaiting Pickup** to **Picked Up**, a timestamp is added indicating the pickup date in month/day/year format. |
| **Canceled** | The order was canceled at the request of the customer or it exceeded your policy pickup window. |
### Viewing pickup details
Clicking an order displays the pickup menu with details, such as the customer's name, phone number, email, items, and a list of packages. You can expand item details by clicking the arrow next to the item.
| Field | Description |
| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Name** | The customer's first and last name. |
| **Phone** | The customer's primary phone number. |
| **Email** | The customer's primary email address. |
| **Items** | The **Items** field displays a list of items containing the item name, quantity, image, SKU, and tags associated with the item. Expanding an item displays a larger image of the item with its **SKU**, **Size**, and **Color**. |
| **Packages** | The **Packages** field displays all the packages in the order and their sizes. Expanding a package displays the items in it. |
# Viewing Store Fulfillments
The store fulfillment feature is used to streamline the order fulfillment process within a retail store. fabric integrates with your online website and directs fulfillment requests to your physical store locations based on characteristics, such as geolocation, store inventory levels, and more. The store fulfillments feature provides store associates a user-friendly interface to efficiently pick, pack, and ship online customer orders.
You can view fulfillments by clicking **Fulfillments** in the left menu.
Currently, there are no role restrictions for who can complete fulfillments.
## Filtering Store Fulfillments
You can search for a specific fulfillment by entering the **Order #** in the search bar.
Fulfillments can be filtered by **Service Levels**, **Ownership**, [Status](#fulfillment-statuses), and **Special Handling**. You can also select multiple filters. After you select a filter, the fulfillment table is automatically updated.
To clear all filters, click the **Refresh** button. The fulfillment table is updated and all filters are cleared.
## Store Fulfillments Table
Fulfillments are categorized in the following tables in the left menu:
* **Pending**: A table with all pending fulfillments for your store location.
* **Completed**: A table with all completed fulfillments for your store location.
* **All**: A table with all fulfillments for your store location.
Fulfillment tables display all the categorized fulfillments for a particular store in the last 30 days. You can access the older fulfillments by searching with the **Order #** of the fulfillment.
| Column | Description |
| ------------------ | --------------------------------------------------------------------------- |
| **Order #** | A unique order identifier assigned to an order during checkout. |
| **Status** | The current [fulfillment status](#store-fulfillment-statuses) for an order. |
| **Tags** | An optional tag assigned to the order such as gift wrapping. |
| **Order Date** | The date the order was placed in the Month/Day/Year format. |
| **Customer Name** | The first and last name of the customer. |
| **Associate Name** | The name of the associate who last updated the order status. |
### Pending fulfillments
Pending fulfillments can be categorized into four main types:
* **Pickup**: Online orders with the pick up in-store option selected at checkout.
* **Next Day**: Orders with next day overnight shipping selected at checkout. These orders must be processed the same day.
* **Standard**: Orders with standard shipping selected at checkout.
* **Expedited**: Orders with expedited shipping selected at checkout. These orders must be processed the same day.
### Store fulfillment statuses
| Status | Description |
| ------------- | ----------------------------------------------------------- |
| **New** | A new fulfillment order is assigned to your store location. |
| **Pick** | The fulfillment items are being located in the store. |
| **Pack** | The fulfillment is being packaged. |
| **Shipped** | The fulfillment shipping method is selected and shipped. |
| **Canceled** | The fulfillment was canceled by a store associate. |
| **Completed** | The fulfillment is complete. |
| **Picked Up** | The fulfillment was picked up by the customer. |
# Viewing Store Receivings
Receivings are shipments coming from other stores, store to store, or Distribution Centres (DC). These shipments give you the details on what items are expected and their estimated arrival date. Once a store associate verifies the items in the shipment, the inventory system is updated to show the new stock levels.
You can view receivings by clicking **Receivings** in the left menu.
Currently, anyone can approve or cancel a receiving.
## Receiving Types
Receivings are categorized into two possible types each containing a [receiving table](#receivings-table).
| Type | Description |
| ------------------ | ------------------------------------------------------------------------------------------------ |
| **Store to Store** | Displays the total transfers occurring between store locations. |
| **Store to DC** | Displays the total transfers that are being sent from a store location to a distribution center. |
## Filtering Receivings
You can search for a specific receiving by entering the **Tracking #** in the search bar.
Receivings can be filtered by **Transferred at**. Once a filter is selected, the receivings table is automatically updated.
Selecting the refresh button refreshes the receivings table and clears all filters.
## Receivings Table
The receivings table displays all receivings for a selected type. By default, this table displays receivings in the order of the arrival date.
Clicking a receiving opens the details displaying the sending location, receiving location, items, and current status.
The table only displays the receivings for the store in the last 30 days. Older receivings must be filtered using the **Tracking #** in the search field.
| Column | Description |
| -------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| **Tracking #** | A unique tracking identifier assigned by the system when creating a transfer or provided by a shipping carrier for DC receivings. |
| **Carton #** | A unique carton number assigned to a box of items. |
| **Status** | Displays the current receiving [status](#receiving-statuses). |
| **Sending Location** | Displays the store number, name, and city for the receiving location of a carton. |
| **Arrival Date** | Displays the expected arrival date for the receiving using the Month/Day/Year format. |
### Receiving statuses
Receiving statuses track the progress of a receiving.
| Status | Description |
| ----------- | ----------------------------------------------------------------------------------------------- |
| `Shipped` | Indicates that the receiving is created and in transit to the **Sending Location** destination. |
| `Delivered` | Indicates the carton arrived at the **Sending Location**. |
| `Received` | Indicates that the a store associate checked the items and marked the carton as received. |
# Viewing Store Transfers
Transfers are used to balance store inventory levels and allow you to send items to another store or to a Distribution center (DC). When you set the status for a transfer to *Pack*, the inventory levels for the store are automatically adjusted.
You can view transfers by clicking **Transfers** in the left menu. Only your selected store's transfers are displayed.
Currently, anyone can create, pick, and pack a transfer.
## Transfer types
Transfers are categorized into three possible types each containing a [transfer table](#transfers-table).
| Type | Description |
| ------------------ | ------------------------------------------------------------------------------------------------------------- |
| **Store to Store** | Displays transfers occurring between store locations. |
| **Store to DC** | Displays transfers that are being sent from a store location to a distribution center. |
| **DC to Store** | Lists transfers being sent to store locations. However, this type is available only for distribution centers. |
## Filtering Transfers
You can search for a specific transfer by entering the **Transfer #** in the search bar.
Transfers can be filtered by [Status](#transfer-statuses) or by [Type](#type-codes). Multiple filters can be selected. Once a filter is selected, the transfer table is automatically updated.
Selecting the refresh button refreshes the transfers table and clears all filters.
## Transfers Table
The transfer table displays all the transfers for a selected store and provides a brief summary of how many transfers are in the **Pick**, **Pack**, and **Shipped** status. By default, this table displays the most recently created transfers with the **Pack** status.
The table only displays the transfers for the store in the last 30 days. Older transfers must be filtered using the **Carton #** in the search field.
| Column | Description |
| ---------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Carton #** | Specifies the unique carton identifier assigned by the system for a new transfer when you create it. |
| **Tracking #** | Specifies the tracking numbers. Tracking numbers are provided by the shipping carrier. To receive tracking numbers automatically, you must integrate fabric store fulfillment with a carrier's third-party API. |
| **Status** | Displays the current transfer [status](#transfer-statuses). |
| **Total Units** | Displays the total quantity of items in a transfer. |
| **Created By** | Displays who created the transfer. |
| **Created Date** | Displays the day the transfer is made in the month/day/year format. |
### Transfer statuses
Transfer statuses track the progress of a transfer.
| Status | Description |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **Shipped** | Indicates the carrier is selected and shipping labels created. At this point the selected shipping carrier is responsible for pickup. This status doesn't change regardless of shipping carrier statuses such as in transit, awaiting pickup, and out for delivery. |
| **Pick** | Indicates that items are being selected for the transfer. |
| **Pack** | Indicates that the *Parcel Size* is selected and that item packing and quantity confirmation has started. |
# Authorize user apps with and without PKCE
authentication_v3 get /oauth2/default/v1/authorize
Use this endpoint to authenticate user apps using fabric Identity. When calling this endpoint, the immediate response will be a browser redirect to the hosted Login page configured in fabric Identity. After successful authentication of the user on the hosted Login page, fabric Identity will redirect back to the user app using the provided `redirect_uri`. This endpoint supports both authorization code flow with and without Proof of Code Exchange (PKCE).
**Note**: This endpoint isn't required for system app authentication (refer to `/token` endpoint instead)
# Fetch access token
authentication_v3 post /oauth2/{authServerId}/v1/token
This endpoint allows apps to fetch access tokens. For user apps, use this endpoint after the `/authorize` endpoint and the subsequent callback. For user apps this endpoint supports generation of access token from authorization code or from refresh token, sent in the previous `authorize` endpoint's callback. For system apps this endpoint can directly be used to get an access token, no prior `/authorize` end point call is needed.
NOTE: Fetching a token for a system app via the browser on our developer portal WILL NOT WORK as browser requests to the token endpoint must use PKCE. Instead, send the request through a server side/native method and ensure the 'Origin' header isn't present.
# Authentication Endpoints
These APIs allow apps to authenticate themselves or their end users with fabric Identity. The objective of these APIs is to return an access token to apps, which can then be used to invoke other fabric APIs.
[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/identity.json)
# Concepts
### App
All API clients calling any of the fabric platform APIs are logically defined within fabric Identity as **apps**. Each app needs to secure an access token from fabric Identity before invoking other fabric APIs.
### Authentication
**Authentication** is the mechanism of validating the identity of an app or its end user with fabric Identity. Once the app or end user is confirmed, fabric Identity generates and signs an access token. This access token is used by apps as a [bearer token](https://datatracker.ietf.org/doc/html/rfc6750) to call fabric platform APIs.
### Authorization
**Authorization** is the mechanism that restricts access to certain APIs after successful authentication. fabric Identity supports role-based access control of all its platform APIs. This means applications and application end users can be assigned the necessary roles to access only required fabric platform APIs.
### Access Control
If users are who they say they're (authentication), and they have permission to access resources (authorization), **access control** verifies that the user has permission to access the requested resource.
### Authentication/Authorization/Access Control Example
Pat E. Smith and Sandy Beaches both have reservations at the fabric Arms hotel. Pat, however, is a member of the hotel’s loyalty program, and will have a deluxe room, with access to the fabric Lounge, while Sandy has reserved a regular room. Pat and Sandy show up at the same time to check in. The front desk agents ask them for their driver’s licenses to make sure they're who they say they are. This is **authentication**.
While preparing the key cards for the two guests, the hotel system **authorizes** Pat for access to a specific deluxe room, the fabric Lounge, and the hotel’s exercise room. It also **authorizes** Sandy for access to a specific standard room, and the hotel’s exercise room. Once made and programmed, Pat and Sandy receive their key cards.
Pat and Sandy go to their individual rooms, and their key cards provide access to their rooms. Pat goes down to exercise, and the key card reader on the exercise room acknowledges that the key card has been authorized for that room. Sandy, who is a bit of a rebel, tries to get into the fabric Lounge. The key card reader on the lounge door sends the card info to the **access control** server, which determines that Sandy doesn't have access, and Sandy isn't allowed in the lounge.
### App Types
App types help determine how apps authenticate with fabric Identity and use its features.
![User App vs System App](https://mintlify.s3.us-west-1.amazonaws.com/fabric-demo/images/user-app-vs-sys-app.png "User App vs System App")
A **user app** uses fabric Identity to authenticate its end users. Based on the flow selected (*Authorization Code Flow* or *Authorization Code Flow with PKCE*), the app needs a client ID and optionally a client secret. A user app relies on the login page hosted by fabric Identity to log in its end users. This is suitable for e-commerce apps that direct their authentication and authorization needs to fabric Identity. fabric Identity provides several out-of-the-box features for such applications; this allows developers to focus on the user commerce experience, rather than on user login, authentication, and authorization.
A **system app** generates an access token to identify itself using a client ID and client secret. These apps don't use fabric Identity to authenticate their end users; rather they use system-to-system communications with fabric APIs. Typical use cases include applications like ERP, OMS, and WMS making calls to fabric APIs to update inventory, change pricing rules, refund orders, etc.
### User Pools
**User pools** help developers provide single sign-on capability to their applications' end users.
![User Pools](https://mintlify.s3.us-west-1.amazonaws.com/fabric-demo/images/user-pools.png "User Pools")
Before using fabric Identity to implement single sign-on, it's important to define user pools and associate the pools with one or more user app. User apps in the same user pool can validate the access token of any logged-in pool user, allowing SSO within that pool.
New users registering themselves in a user app (for example, shopper self-registration in the ecommerce app) will be created in the user pools associated with the user app. Apps can then use the user's access token to switch between user apps within the same user pool.
As system apps don't authenticate any end users, they're not associated with user pools.
### Access Token
An **access token** is a [signed JWT token](https://en.wikipedia.org/wiki/JSON%5FWeb%5FToken) provided to an app after successful authentication by fabric Identity. After an access token that has been provided to a user app for an individual end user has been successfully authenticated, it will be referred to as a **user token**. An access token provided to a system app serves the app itself, rather than an end user, and is referred to as a **system token**.
User tokens and system tokens should be authentication Bearer tokens when invoking fabric platform APIs.
By default, user tokens are valid for 30 minutes. Once a user's access token is expired, a user app can get a new access token for the end user by using the refresh token. This avoids requiring the logged-in end user to go through the login page again.
By default, system tokens are valid for 10 minutes. Once expired, system apps must reauthenticate and generate a new access token. Refresh tokens aren't generated for system apps.
### Refresh Token
A **refresh token** is a [signed JWT token](https://en.wikipedia.org/wiki/JSON%5FWeb%5FToken) received by a user app, along with the access token. A user app uses the refresh token to get a new access token once the previous token expires, without having the end user go to a login page again.
Every time a refresh token is used to get a new access token, a new refresh token is also generated. This token should be stored by the app and should be treated as sensitive as an access token itself.
### OpenID Connect
**OpenID Connect** is an established standard based on OAuth 2.0, which defines authentication flows specific to the needs of cloud based applications. Please refer to [OpenID Connect](https://openid.net/connect/) for further details.
fabric Identity supports the following flows within OpenID Connect:
* *Authorization Code Flow with PKCE*: Recommended for all **web app** apps
* *Client Credential Flow*: For all **headless** apps
For devices and applications that don't support PKCE, fabric Identity supports the regular *Authorization Code Flow (without PKCE)*. However, this option is recommended only when the app has a [backend for frontend](https://medium.com/mobilepeople/backend-for-frontend-pattern-why-you-need-to-know-it-46f94ce420b0) pattern implemented.
# Getting Started with System Apps
Create a system app with fabric Identity and ensure the following details are available before starting the authentication flow.
`client-id` - A unique ID that represents the system app, and is required for OpenID Connect authentication flows.
`client-secret` - An app-specific secret that allows fabric Identity to validate the system app. This secret is mandatory for system apps to integrate with fabric Identity.
`Authorization Url` - The fabric Identity HTTP endpoint that the system app communicates with to get its access token. Every fabric merchant is provided with a unique URL.
Currently, fabric customers don't have a self-service capability to create the system app and get the `client-id`, `client-secret`, and `Authorization Url` by themselves. Contact [fabric support](https://support.fabric.inc/hc/en-us/requests/new) for help in creating these.
# System App Authentication
A system app uses OpenID Connect's [Client Credential Flow](https://datatracker.ietf.org/doc/html/rfc6749#section-4.4) to obtain an access token referred to as **system token**. Before starting, ensure the necessary app credentials and URLs are available as mentioned in the [Getting Started](/v3/api-reference/authentication-v3/authentication-endpoints/fetch-access-token) guide.
### Getting system token
In the [Client Credential Flow](https://datatracker.ietf.org/doc/html/rfc6749#section-4.4), get an access token by calling the `/token` endpoint:
`curl --location --request POST '${Authorization Url}/v1/token' \ --header 'accept: application/json' \ --header 'authorization: Basic ' \ --header 'cache-control: no-cache' \ --header 'content-type: application/x-www-form-urlencoded' \ --data-urlencode 'grant_type=client_credentials' \ --data-urlencode 'scope=s2s'
`
The `authorization:` header in the request above is determined per [HTTP Basic Authentication](https://en.wikipedia.org/wiki/Basic%5Faccess%5Fauthentication) where the `client-id` and `client-secret` are used as *username* and *password*, respectively. `Authorization Url` is a unique URL of each fabric merchant. It's common across all system apps defined for a single merchant.
fabric Identity returns the access token in the following response:
`{
"token_type": "Bearer",
"expires_in": 600,
"access_token": "eyJraWQiOiIt...",
"scope": "s2s"
}
`
`access_token` is the system token generated by fabric Identity and is used by the system app for all subsequent fabric API calls. System token expiration is set to 10 minutes (600 seconds) by default. Once the token expires, the API client is expected to generate another access token using the same HTTP call shown above.
### Using system token
Upon receiving a valid access token, the API client can call any fabric API by specifying the `access_token` as the [Bearer token](https://datatracker.ietf.org/doc/html/rfc6750) in the `authorization` header:
`curl --location --request GET '${fabric Endpoint Url}/v1/product' \ --header 'accept: application/json' \ --header 'authorization: Bearer ${access_token}' \ --header 'cache-control: no-cache' \
`
# Best Practices for Customizing Login Flows
fabric Identity supports only the Okta hosted login page for customizing and styling. Here are some best practices that fabric recommends when customizing the login flows.
### Login page domain name
Use a subdomain of the user app's actual domain to host the login page. For example, if the user app is hosted on the domain `example.com`, use a subdomain such as `login.example.com` for the Okta org. Because the hosted login page is a redirect from the user app, making it appear under a subdomain increases the end users' confidence to provide their credentials on the login page.
The Okta org domain name is also used in email communications sent to the user (welcome email, forgot password email, etc.). Make sure you test these flows during development to ensure that they're redirecting the user to the intended login page.
### Common SSO branding
The hosted login page is the same for all user apps within a single user pool. Hence, if the same user pool allows single sign on for users across multiple brands, the login page should be styled and themed as a common entry point for all of the brands.
### Minimize non-login related customizations within the login page
Okta uses inline JavaScript to customize its hosted login page. This allows developers to customize the login page to implement custom functionality. fabric recommends that the customizations are limited only to the user app's login functionality. For example, while it's possible to have dynamic headers and footers on the login page (by making a `fetch` call), they're not recommended on the login page because they're not related to login functionality. Instead, use static headers and footers on the login page.
### Use a separate user pool for each environment served by the same fabric merchant
A single fabric Copilot merchant can support multiple user pools. If the development team is using a single sandbox for both development and staging environments of a user app, ensure that two separate user apps are created in separate user pools of the same merchant. By default, fabric Identity creates one user pool per fabric merchant. Additional user pools can be created upon request.
### Implement custom validation when extending the self-registration form
Okta allows extending the user registration form to request additional details from the user during signup. For these additional fields, ensure that you implement the necessary validations in the custom login page. While Okta supports designating which of these additional details are mandatory, it can't validate field format or value. For example, it can't, by itself, validate if an entered ZIP code is a valid ZIP code. Currently, the only field types allowed are `string`, `number`, `boolean`, and `integer`.
### Understand how Okta's Sign-In Widget works
Most login customization can be done by setting the appropriate configurations on Okta's Sign-In Widget, or by providing callback handlers to this widget. The API for this is documented [here](https://github.com/okta/okta-signin-widget#api-reference). fabric strongly recommends that app developers read this documentation before creating custom login pages.
# Customizing Customer Login
fabric Identity uses [Okta](https://www.okta.com/) for managing users, login pages, and several account management flows. In fabric Identity, a separate [Okta organization](https://developer.okta.com/docs/concepts/okta-organizations/) (org) is created for every user pool. By default, a new Okta org is created for each merchant in fabric, associated with that merchant's default user pool. Upon request, additional user pools - and Okta orgs - can be created for any merchant.
Using Okta allows app developers to customize several aspects of user login and management. This section describes customizations to individual Okta orgs.
### Login Page
When using user apps, the user login page is hosted by the fabric-provisioned Okta org. This login page uses simple HTML that leverages the Okta sign-in widget, and allows app developers to add additional customizations. Customization examples include:
* Changing the host name of the login page to use a merchant's specific sub-domain.
* Styling the login page and the sign-in widget to any custom theme using CSS. As it's plain HTML, any additional headers and footers can also be included in the login page to align with the storefront.
* Including any additional login or remote calls by embedding JavaScript within the HTML page
* Writing hooks into the Okta sign-in widget, which further allows Okta to handle events within the login flow.
Currently, fabric supports only Okta's hosted login page.
See [this page](https://help.okta.com/en/prod/Content/Topics/Settings/custom-okta-hosted-sign-in-page.htm) for further details on customizations available.
### Password Policies
By default, fabric Identity applies the following password policy for end users of the user app:
* Minimum of 8 character length
* At least one upper case letter, one lower case letter, one number
* The password shouldn't have any part of the user's name
* The password shouldn't be one of the last 4 passwords (when resetting)
* The user locks out by 10 unsuccessful attempts.
Okta allows defining custom password policies that can customized for password strength, password aging, and lockout behavior. All of these are possible with Okta's simple configuration. More details can be found [on this page](https://help.okta.com/en-us/Content/Topics/Security/policies/configure-password-policies.htm).
### Self-Service Registration
Okta allows end users to register themselves through an email verification process. This can be enabled as a feature flag on Okta and is enabled by default for new merchants within fabric. Additional details of the end users can be requested by customizing the registration form. When using fabric customer APIs, these details are also available for the new customer record created for the self-registered user.
See [this page](https://help.okta.com/en/prod/Content/Topics/users-groups-profiles/usgp-self-service.htm) for further instructions on how to customize the registration form.
### Support for Social Login
Storefronts often need to support social logins using Meta (formerly Facebook), Google, etc. Okta's in-built support for all major social media logins makes it easy for app developers to include this in their designs.
See [this page](https://developer.okta.com/docs/concepts/identity-providers/) for instructions on how to integrate social logins with the login page.
### Email Templates
Okta provides the ability to customize auth-related emails sent to end users according to a merchant's branding and styling. It allows simple branding changes by defining foreground and background color schemes, including merchant logos, and customizing the sender email ID. For extensive customizations, it also provides an HTML-based template editor for individual emails. fabric Identity supports the following emails sent through Okta:
* Registration
* Email verification
* User activation
* Forgot password
Please contact [fabric support](https://support.fabric.inc/hc/en-us/requests/new) to get access to Okta org in order to perform these customizations.
# Getting Started with User Apps
fabric Identity provides a default user pool for all user apps created by a particular merchant. If the developers need to separate the user app end users, new user pools can be created and associated with the respective user apps.
Before integrating a user app with fabric Identity, determine the authentication scenario for the app by answering the following questions:
* Does this user app need to share end users with other apps? If so, have the necessary user pools been created?
* Which flow will the user app use?
* *Authorization Code Flow with PKCE*: fabric recommends using this flow for all user applications unless there is no PKCE support available within a specific device or browser.
* *Authorization Code Flow*: This is the classic [Authorization Code Flow](https://openid.net/specs/openid-connect-core-1%5F0.html#CodeFlowAuth) mentioned in the OpenID Connect specification. It should be used only if PKCE flow isn't supported in the app environment. This flow requires a [backend-for-frontend](https://samnewman.io/patterns/architectural/bff/) layer within the user app that, in turn, integrates with fabric Identity.
* What's the user app's domain name? This is required for fabric Identity to whitelist the application's `redirect-url`, which is required as part of the authentication flow.
Once these questions are answered, create a user app to represent the actual app being built, and provide the user pool, authorization flow, and app domain details determined above. If you need new user pools, create them before creating the user apps. Before integrating with fabric Identity, ensure the following details are available for each user app :
`client-id` - A unique ID that represents the user app, and is required for OpenID Connect authentication flows.
`client-secret` - An app-specific secret that allows fabric Identity to validate the user app. This is required only if the user app will use the classic [Authorization Code Flow](https://openid.net/specs/openid-connect-core-1%5F0.html#CodeFlowAuth) defined in the OpenID Connect specification.
`Authorization Url` - The fabric Identity HTTP endpoint that the user app communicates with to get its access token.
Currently, fabric customers don't have self-service capability to create user pools and user apps by themselves. Contact [fabric support](https://support.fabric.inc/hc/en-us/requests/new) for help in creating these.
# Migrate Existing Users to a User App
fabric's customers often need to migrate existing users from their current IDP solutions to fabric Identity. This can be achieved by using the *bulk user import feature* available in fabric Identity.
To help perform the import, provide fabric Identity with a CSV file containing the following details about each user.
| Column Name | Is Mandatory | Comments |
| ------------ | ------------ | --------------------------------------- |
| `id` | Yes | Row identifier in the CSV |
| `firstName` | Yes | User's first name |
| `lastName` | Yes | User's last name |
| `middleName` | No | User's middle name |
| `email` | Yes | User's email address |
| `login` | Yes | User's login ID (usually email address) |
Note:
* Column names in the CSV file must match those above.
* User uniqueness is based on email.
* This process doesn't support passwords.
If users have additional fields to be imported, please refer to fabric's [Customer API documentation](/v3/api-reference/customers/customer-profile/add-a-new-customer).
### End user experience
Following successful bulk user import, the end users must use the forgot password flow (available from the login page) to reset their passwords.
fabric recommends that the login page be customized to prompt the users about the security solution change, and to use the forgot password flow to reset their passwords.
Currently, this bulk user import can be performed only by fabric, upon request. Contact [fabric support](https://support.fabric.inc/hc/en-us/requests/new) for help with user imports.
# User App Authentication
A user app can authenticate with fabric Identity in one of two ways:
* [Authorization Code Flow with PKCE](https://datatracker.ietf.org/doc/html/rfc7636)
* [Authorization Code Flow](https://openid.net/specs/openid-connect-core-1%5F0.html#CodeFlowAuth)
### Using Authorization Code Flow with PKCE (recommended)
This flow requires the following parameters (for more information, see the [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-userapps) guide):
`client-id` - A unique ID that represents the user app, and is required for OpenID Connect authentication flows.
`Authorization Url` - The fabric Identity HTTP endpoint that the user app communicates with to get its access token.
Once these are available, you can build the authentication flow as depicted below:
![Authentication Flow with PKCE](https://mintlify.s3.us-west-1.amazonaws.com/fabric-demo/images/auth-flow-with-pkce.png "Authentication Flow with PKCE")
**1. Generate PKCE `code-verifier` and `code-challenge`**
In this step, the single page app or mobile app, represented by the respective user app in fabric Identity, generates a `code-verifier`, which you will use to generate the `code-challenge`. These codes ensure that the access token returned by fabric Identity (step 8) is returned to the correct requestor.
`code-verifier`: Random URL-safe string of at least 43 characters. [Click here](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1) for more details.
`code-challenge`: Base64 URL-encoded SHA-256 hash of the `code-verifier`.
The app should store the `code-verifier` securely to be used later (step 6). The `code-challenge` is sent earlier in the call to the `/authorize` endpoint (step 2).
**2. Authorization code request with `code-challenge` to `/authorize`**
In this step, the app should send a GET request to fabric Identity's `/authorize` endpoint and load the GET URL into the `window.location`. This allows fabric Identity to send a browser redirect, and take the end user to the hosted login page.
This is a representation of the URL that should be constructed and loaded into `window.location`:
```
https://${Authorization Url}/v1/authorize?client_id=${client-id}&response_type=code&scope=openid&redirect_uri=${redirect-uri}&state=${state}&code_challenge_method=S256&code_challenge=
```
* `Authorization Url`: The URL made available upon creating a user app. See [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-userapps) for more details.
* `client-id`: A unique ID that represents the user app. See [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-userapps) for more details.
* `redirect-uri`: The URI that fabric Identity redirects to after successful authentication. This should be a URI of the requesting user app and should contain a temporary authorization code (see step 5). The app should use the query parameters on the `redirect-uri` to complete the authentication flow with fabric Identity.
* `state`: An opaque value (can be a random string) the app uses to maintain state between the request and callback from fabric Identity. This parameter is typically used for preventing cross-site request forgery. [Click here](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.1) for more information.
* `code_challenge`: An SHA256 hash of the `code-verifier`. [Click here](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2) for more details.
**3. fabric Identity sends 302 redirect to authentication prompt**
As a response to step 2, fabric Identity sends a redirect to the client browser to bring up the hosted login page. This hosted login page can also be configured for social logins, sign-up, and forgot-password links.
**4. Enter credentials and provide consent**
End users provide their credentials for authentication. If requested to do so, they will also indicate consent to have fabric Identity share their basic profile information with the calling app.
**5. Authorization code response returned to the specified redirect URI**
After a successful login, fabric Identity redirects the end user to the `redirect-uri` defined in step 2. As part of this redirect, fabric Identity sends the following additional details as query parameters:
* `code`: A temporary authorization code which will be returned to fabric Identity along with `code-verifier` to get an access token.
* `state`: The same `state` sent by the app to fabric Identity in step 2.
**6. Send authorization code with `code-verifier`**
Once the app receives the redirect from fabric Identity, it validates that the `state` field matches the one sent in step 2. After validation, the app fetches an access token by using the `code` to make a POST request to fabric Identity.
Example of the POST request (represented as a curl command):
```bash
curl --request POST \
--url https://${Authorization Url}/v1/token \
-H 'accept: application/json' \
-H 'content-type: application/x-www-form-urlencoded' \
-d 'grant_type=authorization_code'
-d 'client_id=${client-id}'
-d 'redirect_uri=${redirect-uri}'
-d 'code=${code}'
-d 'code_verifier=${code-verifier}'
```
* `Authorization Url`: The URL made available upon creating a user app. See [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-userapps) for more details.
* `client-id`: A unique ID that represents the user app. See [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-userapps) for more details.
* `redirect-uri`: The same URI that the app originally sent to fabric Identity in step 2.
* `code`: The authorization code received by the app in step 5.
* `code-verifier`: The original `code-verifier` generated by the app in step 1.
**7. Validate `code-verifier`**
Once the POST request is received by the `/token` endpoint, fabric Identity validates the `code-verifier` by computing its SHA256 value, and verifying that against the `code-challenge` the app sent in step 2. If successfully validated, the endpoint returns the response, which includes the access token (next step).
**8. Respond with access token**
Upon successful `code-verifier` validation, fabric Identity returns the response with the access token:
```json
{
"access_token": "eyJhbGciOiJ...",
"expires_in": 3600,
"id_token": "eyJhbGciOiJI...",
"refresh_token": "cBMrwDsXRwPqVmCQx7I5IX0jQ9-Lc_zHOgYeab1xZm4"
"scope": "openid offline_access",
"token_type": "Bearer"
}
```
The `access_token` returned in the response above is a [user token](/v3/api-reference/authentication-v3/concepts#access-token) that has a default expiration of 30 minutes (3600 seconds). This token is used by the app as a [bearer token](https://datatracker.ietf.org/doc/html/rfc6750) to access fabric APIs.
The response also contains a `refresh_token`, which the app can use to fetch a new `access_token` when previous one expires.
**9. Request fabric platform API access using access token as bearer token**
The app can now invoke any fabric API using the `access_token` received in the previous step. This token is sent in the `Authorization` header as a `Bearer` token, which is then validated by the fabric API.
App developers can use third-party libraries ([Click here](https://www.npmjs.com/package/js-pkce) for an example) to achieve the authentication flows described above.
### Using Authorization Code Flow
fabric recommends using authorization code flow only when lacking browser support for PKCE. Also, as this flow needs the user app to pass the `client-secret`, it's essential that the app implements a backend for frontend (BFF) layer to exchange tokens with fabric Identity.
Ensure the following parameters are available before getting started with this authentication flow (for more information, see the [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-user-apps) guide):
`client-id` - A unique ID that represents the user app, and is required for OpenID Connect authentication flows.
`client-secret` - An app-specific secret that allows fabric Identity to validate the user app.
`Authorization Url` - The fabric Identity HTTP endpoint that the user app communicates with to get its access token.
Once these are available, you can build the authentication flow as depicted below:
![Authentication Flow](https://mintlify.s3.us-west-1.amazonaws.com/fabric-demo/images/auth-code-flow.png "Authentication Flow without PKCE")
**1. Authorization code request to /authorize**
In this step, the app should send a GET request to fabric Identity's `/authorize` endpoint and load the GET URL into the `window.location`. This allows fabric Identity to send a browser redirect, and take the end user to the hosted login page.
This is a representation of the URL that should be constructed and loaded into `window.location`:
```
https://${Authorization Url}/oauth2/default/v1/authorize?client_id=${client-id}&response_type=code&scope=openid&redirect_uri=${redirect-uri}&state=${state}
```
* `Authorization Url`: The URL made available upon creating a user app. See [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-userapps) for more details.
* `client-id`: A unique ID that represents the user app. See [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-userapps) for more details.
* `redirect-uri`: The URI that fabric Identity redirects to after successful authentication. This should be a URI of the requesting user app and should contain a temporary authorization code (see step 4). The app should use the query parameters on the `redirect-uri` to complete the authentication flow with fabric Identity.
* `state`: An opaque value (can be a random string) the app uses to maintain state between the request and callback from fabric Identity. This parameter is typically used for preventing cross-site request forgery. [Click here](https://datatracker.ietf.org/doc/html/rfc6749#section-4.1.1) for more information.
* `code_challenge`: An SHA256 hash of the `code-verifier`. [Click here](https://datatracker.ietf.org/doc/html/rfc7636#section-4.2) for more details.
**2. fabric Identity sends 302 redirect to authentication prompt**
As a response to step 1, fabric Identity sends a redirect to the client browser to bring up the hosted login page. This hosted login page can also be configured for social logins, sign-up, and forgot-password links.
**3. Enter credentials and provide consent**
End users provide their credentials for authentication. If requested to do so, they will also indicate consent to have fabric Identity share their basic profile information with the calling app.
**4. Authorization code response returned to the specified redirect URI**
After a successful login, fabric Identity redirects the end user to the `redirect-uri` defined in step 1. As part of this redirect, fabric Identity sends the following additional details as query parameters:
* `code`: A temporary authorization code which will be returned to fabric Identity. This code would be used in step 5 and 6 to finally fetch the access token.
* `state`: The same `state` sent by the app to fabric Identity in step 1.
**5. Send authorization code to BFF**
The browser component of the user app sends the `code` (received in step 4) to the BFF (backend for frontend) component of the app. This is done so that browser loading JS files can avoid having the `client-secret` visible to the end user. This is a custom implementation done by the developer, as it's a call between the browser and the BFF layer of their user app.
**6. Send `client-secret` to fetch access token**
The BFF layer of the user app sends the `code` (received in step 5) along with the `client-secret` to authorization server. Upon validating the `client-secret`, the authorization server sends the access token in the response of this call.
Following is an example of the POST request that's made by the BFF layer to the authorization server:
```bash
curl --request POST \
--url https://${Authorization Url}/v1/token \
-H 'accept: application/json' \
-H 'content-type: application/x-www-form-urlencoded' \
-H 'Authorization:
-d 'grant_type=authorization_code'
-d 'redirect_uri=${redirect-uri}'
-d 'code=${code}'
```
* `Authorization Url`: The URL made available upon creating a user app. See [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-user-apps) for more details.
* `client-id`: A unique ID that represents the user app. See [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-user-apps) for more details.
* `client-secret` - An app-specific secret that allows fabric Identity to validate the user app.
* `redirect-uri`: The same URI that the app originally sent to fabric Identity in step 2.
* `code`: The authorization code received by the app in step 5.
Upon successful validation of `client-secret`, fabric Identity returns the response that includes the access token:
```json
{
"access_token": "eyJhbGciOiJ...",
"expires_in": 3600,
"id_token": "eyJhbGciOiJI...",
"refresh_token": "cBMrwDsXRwPqVmCQx7I5IX0jQ9-Lc_zHOgYeab1xZm4"
"scope": "openid offline_access",
"token_type": "Bearer"
}
```
The `access_token` returned in the response above is a [user token](/v3/api-reference/authentication-v3/concepts#access-token) that has a default expiration of 30 minutes (3600 seconds). This token is used by the app as a [bearer token](https://datatracker.ietf.org/doc/html/rfc6750) to access fabric APIs.
The response also contains a `refresh_token`, which the app can use to fetch a new `access_token` when previous one expires.
**7. Send the access token to save in session storage**
This is a custom implementation done by the developer ensuring that the access token is saved on the end user's session store within the browser so that it can be used by the user app in all subsequent calls to fabric APIs.
**8. Request fabric platform API using access token as bearer token**
The app can now invoke any fabric API using the `access_token` received in the previous step. This token is sent in the `Authorization` header as a `Bearer` token, which is then validated by the fabric API.
### Refresh Access Token
User tokens generated by fabric Identity have a default expiration of 30 minutes. Refresh tokens, on the other hand are longer-living tokens and can be used to retrieve new access tokens without asking the end user to login again. For security reasons, every time a refresh token is used to get a new access token, the previous refresh token is discarded and a new one is created. Refresh tokens are also discarded if not used for seven days. If a refresh token expires, the app can follow the previous authentication flow and have the end user login again.
Sample call to get a new access token from a refresh token:
```bash
curl --location --request POST 'https://${Authorization Url}/v1/token' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--data-urlencode 'grant_type=refresh_token' \
--data-urlencode 'redirect_uri=${redirect-uri}' \
--data-urlencode 'scope=offline_access openid' \
--data-urlencode 'refresh_token=${refresh-token}' \
--data-urlencode 'client_id=${client-id}'
```
* `Authorization Url`: The URL made available upon creating a user app. See [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-user-apps) for more details.
* `client-id`: A unique ID that represents the user app. See [Getting Started](/v3/api-reference/authentication-v3/user-apps/getting-started-with-user-apps) for more details.
* `redirect-uri`: The same URI that the app originally sent to fabric Identity in step 2.
* `refresh-token`: Refresh token received by the app along with the access token.
Sample response sent from fabric Identity for the refresh request:
```json
{
"token_type": "Bearer",
"expires_in": 3600,
"access_token": "eyJraWQiO...",
"scope": "offline_access openid",
"refresh_token": "jSdVOtddMk8HMHP...",
"id_token": "eyJraWQ..."
}
```
The response contains both a new `access_token` and a new `refresh_token`.
# API Authentication
fabric APIs use [System Apps](/v3/guides/settings/api-apps/creating-system-app), which employ [OpenID Connect's Client Credential Flow](https://datatracker.ietf.org/doc/html/rfc6749#section-4.4) for API authentication.
## System App Authentication
System App authentication is the process by which a system application verifies its identity and obtains authorization to access specific APIs or services. System Applications, also called System Apps, are specialized software applications designed to perform automated tasks and system-level functions. System Apps don't authenticate end-users and aren't associated with user pools, hence these API applications aren't intended for direct use by shoppers for storefront authentication. System Apps only facilitates secure and efficient system-level interactions with fabric APIs. System Apps are commonly deployed in enterprise contexts, including systems such as Enterprise Resource Planning (ERP), Order Management Systems (OMS), Warehouse Management Systems (WMS) and Storefronts.
A System App uses OpenID Connect to obtain an access token referred to as a system token:
1. The System App possesses a unique identifier called a [client ID](/v3/guides/settings/api-apps/getting-sysapp-credentials) and a confidential [client secret](/v3/guides/settings/api-apps/getting-sysapp-credentials).
2. To start authentication, the system app sends a request to an authorization server, providing its client ID and client secret.
3. If the provided client ID and client secret are valid, the authorization server issues an access token referred to as a system token to the System App.\
This system token serves as the key for the system app to make authorized requests to APIs or services, representing the system during interactions. System Apps use this token for all subsequent fabric API calls.
## Related Resources
* [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis)
* [API Authentication](/v3/api-reference/getting-started/api-authentication)
* [Glossary](/v3/guides/get-started/glossary)
* [Getting System App Credentials](/v3/guides/settings/api-apps/getting-sysapp-credentials)
* [fabric support](https://support.fabric.inc/hc/en-us/requests/new)
* [License](https://fabric.inc/api-license)
* [Demo Request](https://fabric.inc/demo-request)
# API References
fabric APIs are based on Representational State Transfer (REST) architectural principles and follow the OpenAPI 3.0 standard. You can connect to the APIs using fabric tools, or call individually from other systems to build custom solutions of any size or configuration.
fabric provides the following APIs:
* [Cart](/v3/api-reference/cart/cart--3-0-0) and [Checkout](/v3/api-reference/checkout/checkout--3-0-0)(CnC): fabric's service for the management of online shopping carts, including items and configuration of shipping, fulfillment, and payment options to ensure a smooth checkout experience for your customers. [Cart collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/cart.json) and [checkout collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/checkout.json) are available for you to download.
* [Identity](/v3/api-reference/authentication-v3/concepts): Identity API allows you to manage user roles and permissions to ensure secure and personalized access to your storefront or e-commerce systems. [Identity collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/identity.json) is available for you to download.
* [Offers](/v3/api-reference/offers/offers--3-0-0): fabric’s pricing and promotions engine with tools to manage price lists, item prices, and discounts.. [Offers collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/offers.json) is available for you to download. For more information about offers, see the [Offers Overview](/v3/api-reference/offers/offers--3-0-0), [Pricing](/v3/api-reference/offers/prices/overview), [Promotions](/v3/api-reference/offers/promotions/overview), and [Coupons](/v3/api-reference/offers/coupons/overview) sections.
* [Orders](/v3/api-reference/orders/orders--3-0-0): fabric's API for centralized order, inventory, and warehouse information. Orders API supports order placement, allocation, handling back orders and pre-orders, exporting data, generating invoices, creating and managing shopping lists, sending notifications, handling cancellations and returns, order tracking, fraud checks, updating payment status, creating appeasements, creating and managing shipments, shipping methods, and more. [Orders collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/ordersAllocations.json) is available for you to download.
* [Product Catalog](/v3/api-reference/product-catalog/products---attributes-api): Product Catalog API enables you to efficiently manage your product catalog to ensure accurate and up-to-date information across all your sales channels. \[Product Catalog collection]\([https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/Product](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/Product) CatalogAttributes.json) is available for you to download.
* [Inventory](/v3/api-reference/inventory/inventory--3-0-0): fabric's API for tracking inventory across networks and locations. [Inventory collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/inventory.json) is available for you to download.
### Related Resources
* [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis)
* [API Authentication](/v3/api-reference/getting-started/api-authentication)
* [Glossary](/v3/guides/get-started/glossary)
* [Getting System App Credentials](/v3/guides/settings/api-apps/getting-sysapp-credentials)
* [fabric support](https://support.fabric.inc/hc/en-us/requests/new)
* [License](https://fabric.inc/api-license)
* [Demo Request](https://fabric.inc/demo-request)
# Example
### Make your first API request
This section provides you the instructions to use the [Create Attribute](/v3/api-reference/product-catalog/attributes/create-attribute) endpoint. With this endpoint, you can create attributes that can be assigned to a product or category.
#### Prerequisites:
* Generate the access token by following the instructions in the [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis).
* Get the `x-fabric-tenant-id` by following the instructions in the [Getting the Account ID](/v3/guides/settings/account-details/getting-the-account-id).
#### Procedure
1. Open your preferred API testing tool or command-line interface.
2. To run the following API call, set the following headers in the request with the corresponding values and add the payload as in the example:
* `x-fabric-tenant-id`: Replace `` with your fabric tenant ID.
* `Authorization`: Replace `` with the access token obtained from the previous steps.
* `Content-Type`: Set this header to `application/json`.
```bash
curl --location 'https://api.fabric.inc/v3/product-attributes' \
--header 'x-fabric-tenant-id: ' \
--header 'Authorization: ' \
--header 'Content-Type: application/json' \
--data '{
"name": "20063",
"localizedProperties": {
"en-US": {
"name": "demo_en_us_attribute"
}
},
"description": "Demo_attribute",
"type": "TEXT",
"target": "PRODUCT",
"isLocalizable": false,
"validation": {
"isMandatory": false,
"subType": "SMALL_TEXT",
"customValidationFormula": ""
}
}'
```
Note that this payload is an example. You can edit it as required.
3\. Send a POST request to the `https://api.fabric.inc/v3/product-attributes` endpoint.\
A response with the status code 200 is returned with the following information:
```bash
{
"id": "",
"name": "",
"description": "",
"isLocalizable": ,
"target": "",
"type": "",
"validation": {
"isMandatory": ,
"subType": "",
"customValidationFormula": "",
"isManualOverwrite":
},
"updatedAt": "",
"createdAt": "",
"updatedBy": ""
}
```
### Related Resources
* [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis)
* [API Authentication](/v3/api-reference/getting-started/api-authentication)
* [Glossary](/v3/guides/get-started/glossary)
* [Getting System App Credentials](/v3/guides/settings/api-apps/getting-sysapp-credentials)
* [fabric support](https://support.fabric.inc/hc/en-us/requests/new)
* [License](https://fabric.inc/api-license)
* [Demo Request](https://fabric.inc/demo-request)
# Getting Started with fabric APIs
This topic will provide instructions to start using fabric’s APIs to build unique and flexible shopping experiences for your customers. fabric recommends [Postman](https://www.postman.com/downloads/) as the API client.
### API URL
The base URL, which is also called `fabric-base-url`, `https://api.fabric.inc/v3/{product}` is the standard URL to which the requests are sent for all fabric APIs.
### Prerequisites
Before you can start using fabric’s APIs:
* **Get your trial account:** Reach out for a trial account with fabric and to get your environment and credentials set up for you. This will help you set up your Copilot account.
* **Access to your Copilot Account:** Ensure you have the credentials to access your Copilot account; if you don't have an account, reach out. Once you have an account, you can add other team members for effective collaboration.
* [Get the API collection that you want to use](/v3/api-reference/getting-started/api-references): Ensure you have access to the API collection for the product you want to try. For more information, see the [API References](/v3/api-reference/getting-started/api-references) section.
* Ensure that a [system app is created](/v3/guides/settings/api-apps/api-apps) for your account. You must have admin rights to create a system app in Copilot. For more information on creating system apps, see the [Creating a System App](/v3/guides/settings/api-apps/creating-system-app) section.\
This system app is used to authenticate you when you use fabric API endpoints. For more information about API authentication, see the [System App Authentication](/v3/api-reference/getting-started/api-authentication) section.
* Download the [Postman](https://www.postman.com/downloads/) client.
### Procedure
1. **Log in** to your Copilot account.
2. In the left menu, click **Settings > Developer Tools**.
3. Click **API Apps**.
* The API Apps page is displayed. This page provides a list of apps created in your account. The **app type** field specifies whether the application is a user app or system app.
4. Click the name of a system app that's already created for your account.\
The details of the system app are displayed.
5. Make a note of the following settings:
* **Authorization URL:** A unique URL of each fabric merchant, common across all system apps defined for a single merchant.
* **Client ID:** Public identifier of an app.
* **Client Secret:** The Secret known only to your application and the authorization server used to authenticate the app.\
These values are required for authentication of your system app and to start using the APIs. For more information about these settings, see the [API Apps](/v3/guides/settings/api-apps/api-apps) page.
6. In the following code sample for the /token endpoint, replace the `{{authURL}}`, `{{clientId}}`, and `{{clientSecret}}` with the corresponding values from step 5:
```shell
curl --location --request POST '{{authURL}}/v1/token'
--header 'accept: application/json'
--header 'cache-control: no-cache'
--header 'content-type: application/x-www-form-urlencoded'
--data-urlencode 'grant_type=client_credentials'
--data-urlencode 'scope=s2s'
--data-urlencode 'client_id={{clientId}}'
--data-urlencode 'client_secret={{clientSecret}}'
```
1. Log in to the Postman client.
2. To generate an access token, do the following steps:
1. In the left menu, click **Import**.
2. Import the code sample from Step 6.
3. Run the `/token` endpoint.
```js
{
"token_type": "Bearer",
"expires_in": 600,
"access_token": "eyJraWQiOiIt...",
"scope": "s2s"
}
```
3. Make a note of the access token.\
The access token is used to authenticate all your API requests. The token expires after 10 minutes. You must generate a new access token to continue using the API endpoints.
4. [Make your first API request](/v3/api-reference/getting-started/making-your-first-api-request).
### Related resources
* [Glossary](/v3/guides/get-started/glossary)
* [API Authentication](/v3/api-reference/getting-started/api-authentication)
* [API Apps](/v3/guides/settings/api-apps/api-apps)
* [Getting System App Credentials](/v3/guides/settings/api-apps/getting-system-app-credentials)
* [Authentication Concepts](/v3/api-reference/authentication-v3/concepts)
* [fabric support](https://support.fabric.inc/hc/en-us/requests/new)
* [License](https://fabric.inc/api-license)
* [Demo Request](https://fabric.inc/demo-request)
# Identifiers
## Identifiers in fabric APIs
This topic explains how fabric uses `sku`, `itemId`, `pricelineId`, and `inventoryId` as methods of identification with our APIs.
In general, fabric uses `sku` to specify a product because it's used across all domains. However, other identifiers are also used in certain API services.
We recommend avoiding `itemId` in V3 API implementations. However, `itemId` is still supported and used in V2.
The following table provides a list of all identifiers used across different services and the corresponding services:
| **Identifier** | **Description** |
| -------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `sku` | This identifier is used across all services, such as [Product Catalog](#product-catalog), [Offers](#offers), [Carts](#carts), [Orders](#orders), and [Inventory](#inventory). |
| `itemId` | This identifier is used in [Offers](#offers), [Carts](#carts), [Orders](#orders), and [Inventory](#inventory). The [Product Catalog](#product-catalog) service does not use `itemId`. In [Carts](#carts), a user-generated `itemId` is used, separate from the `itemId` used in other services. |
| `priceListId` | This identifier is used in [Offers](#offers) and [Carts](#carts). |
| `inventoryId` | This identifier is used only in [Inventory](#inventory). |
## Product catalog
### Storage keeping unit (SKU)
`sku` is entered by the user when adding a product into product catalog.
In product catalog, a `sku` is an unique identifier for a specific product. You can perform several key actions to manage products and their lifecycle.
The `sku` is the preferred method for managing products. It allows you to monitor, publish, and unpublish products.
The following table shows examples of operations in Product catalog that are supported using `sku`:
| **Operations** | **Descriptions** |
| ------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ |
| [Retrieve a product](/v3/api-reference/product-catalog/product-operations-by-sku/get-product-by-sku) | View the details of a single product, including its attributes and variants. |
| [Retrieve products](/v3/api-reference/product-catalog/product-operations-by-sku/get-products-by-skus) | Get a paginated list of products, including items, bundles, or variants, with their attributes and variants. |
| [Update product attributes](/v3/api-reference/product-catalog/product-operations-by-sku/update-product-attributes-by-sku) | Replace all existing product attributes. |
| [Partially update product attributes](/v3/api-reference/product-catalog/product-operations-by-id/partially-update-product-attributes-by-id) | Modify specific product attributes without affecting others. |
| [Delete product](/v3/api-reference/product-catalog/product-operations-by-sku/delete-product-by-sku) | Remove a product from the catalog, with an option to delete associated variants. |
| [Publish product](/v3/api-reference/product-catalog/product-operations-by-sku/publish-product-by-sku) | Change a product’s status from "Draft" to "Published." |
| [Retrieve published product](/v3/api-reference/product-catalog/published-products-by-sku/get-published-product-by-sku) | Get the details of a published product for display on your Storefront. |
## Offers
### Storage keeping unit (SKU)
fabric's Offers APIs enable you to manage prices and create various types of discounts and promotions using `sku`.
The following are some examples of operations in Offers that are supported using `sku`:
| **Operations** | **Descriptions** |
| ------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------- |
| [Set the price of an item](/v3/api-reference/offers/prices/create-price) | When creating a price for an item, `sku` or `itemId` can be used as an identifier in the request body. |
| [Retrieve price of an item](/v3/api-reference/offers/prices/get-price-by-sku) | When retrieving the default price for an item, `sku` can be used as an identifier if `priceListId` isn't specified. |
| [Delete price of an item](/v3/api-reference/offers/prices/delete-price-by-sku) | When removing an items price, `sku` can be used as an identifier if `priceListId` isn't specified. |
| [Retrieve product and price details](/v3/api-reference/offers/priced-products/get-product-and-price-details-by-sku) | When retrieving a products price, details, or any additional information, `sku` can be used as an identifier. |
### Item ID
fabric's Offers APIs enable you to manage prices and create various types of discounts and promotions using `itemId`.
The following are some examples of operations in Offers that are supported using `itemId`:
| **Operations** | **Descriptions** |
| ------------------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------- |
| [Set the price of an item](/v3/api-reference/offers/prices/create-price) | When creating a price for an item, `sku` or `itemId` can be used as an identifier in the request body. |
| [Retrieve price of an item](/v3/api-reference/offers/prices/get-price-by-itemid) | When retrieving the default price for an item, `itemId` can be used as an identifier if `priceListId` isn't specified. |
| [Delete price of an item](/v3/api-reference/offers/prices/delete-price-by-itemid) | When removing an items price, `itemId` can be used as an identifier if `priceListId` isn't specified. |
| [Retrieve product and price details](/v3/api-reference/offers/priced-products/get-product-and-price-details-by-product-item-id) | When retrieving a products price, details, or any additional information, `itemId` can be used as an identifier. |
### Price list ID
Offers API creates a `priceListId` when generating a price list, which includes generic information such as currency.
The `priceListId` is used to identify entities that specify how the items should be priced.
The following are some examples of how `priceListId` is utilized:
| **Operations** | **Descriptions** |
| ------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| [Create price list](/v3/api-reference/offers/price-lists/create-price-list) | When creating price list for an item, `priceListId` is automatically generated and is used to identify different price lists. |
| [Create promotion](/v3/api-reference/offers/promotions/create-promotion) | If the `priceList` is eligible, a promotion is created for the item. |
| [Retrieve SKUs in a price list](/v3/api-reference/offers/priced-products/get-skus-in-price-list) | In a given price list, all associated `sku` and `productItemId` values are returned in the response body. |
| [Retrieve priced products](/v3/api-reference/offers/priced-products/get-priced-products) | If `priceListId` is sent in the request body, all items belonging to the price list are returned in the response body. |
## Carts
### Storage keeping unit (SKU)
The Carts API allows you to add, update, and remove items, and those items can be identified by `sku`, from the storefront cart.
When creating a checkout, the system uses the `cartId` to identify all items using `sku` in the specific cart.
While `sku` isn't used in the path parameter for Carts endpoints, it's used in the request body. The following shows examples of operations where you use `sku` in the request body and view it in the response body:
| **Operations** | **Descriptions** |
| -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
| [Create a line item](/v3/api-reference/cart/line-items/create-a-line-item) | Adds a line item to the cart using `sku`. |
| [Update a line item](/v3/api-reference/cart/line-items/update-a-line-item) | Updates a line item in the cart to a new item by referencing the `sku`. |
| [Retrieve a cart](/v3/api-reference/cart/carts/get-a-cart) | In the cart details, you can view the line items and their associated `sku` values. |
### Item ID
The Carts endpoint creates a cart-specific `itemId`, also referred to as `lineItemId`. You can use the `itemId` to add an item to the corresponding `cartId` and adjust prices.
The following are some examples of operations in Carts that are supported using `itemId`:
| **Operations** | **Descriptions** |
| ------------------------------------------------------------------------------------------------------------------ | ---------------------------------------------------------------------------- |
| [Add an item into the specified cart](/v3/api-reference/cart/line-items/create-a-line-item) | Manually enter the `itemId`, which can then be used in other cart endpoints. |
| [Update an item in the specified cart](/v3/api-reference/cart/line-items/update-a-line-item) | Update item details within a specific cart using `lineItemId`. |
| [Adjust price of the item in the specified cart](/v3/api-reference/cart/adjustments/adjust-prices-for-a-cart-item) | Adjust the prices of an item in the specified cart. |
### Price list ID
The Carts API uses `priceListId` to calculate prices and evaluate discounts for individual products and carts. This ensures accurate pricing when items are added to a cart.
The following are some examples of how `priceListId` is utilized:
| **Operations** | **Descriptions** |
| -------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------- |
| [Add an item into the specific cart](/v3/api-reference/cart/line-items/create-a-line-item) | When a line item is added to the cart, the respective `priceListId` is included to identify the cart's price. |
| [Update an item in the specified cart](/v3/api-reference/cart/line-items/update-a-line-item) | When a line item is updated, the price is also adjusted. |
## Orders
### Storage keeping unit (SKU)
When creating or modifying an order, you can add one or more `sku` by selecting a network and channel, a network and channel, which enables browsing for all the available `sku`.
Only `sku` with an "Available" stock status and availability greater than or equal to one can be added to an order.
You can select more than one `sku` at once and specify the quantity for each.
Orders display `sku` information, including `sku`, price per unit, quantity, and availability.
`sku` is used as unique identifier for items in an order. Order details typically show `sku`, quantity, and total cost for each item.
The following are some examples of when `sku` is used to verify that orders contain the correct items:
| **Operations** | **Descriptions** |
| ----------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------ |
| **[Create a new order](/v3/api-reference/orders/orders/create-new-order)** | When creating a new order, the item’s `sku` and `itemId` are used to verify that the correct item is processed. |
| **[Search for backorders or preorders](/v3/api-reference/orders/backorders-preorders/search-for-backorders-or-preorders-by-query)** | After searching for backorders or preorders, you can use the `sku` to verify that the correct items are included in the order. |
| **[Search for allocation](/v3/api-reference/orders/allocations/search-for-allocations-by-query)** | One of the filter criteria for searching inventory allocation is `sku`. |
| **[Create a new shipment](/v3/api-reference/orders/shipments/create-new-shipment)** | To fulfill an order and ship it, the items that are set to ship can be identified by `sku`. |
### Item ID
When creating or modifying an order, you can add one ore more `sku` by selecting a network and channel, and then browsing available `itemId`.
Only `itemId` with an "Available" stock status and availability greater than or equal to one can be added to an order.
You can select more than one `itemId` at once and specify the quantity for each.
Orders display `itemId` information, including `itemId`, price per unit, quantity, and availability.
`itemId` is used as a unique identifier for items in an order. Order details typically show `itemId`, quantity, and total cost for each item.
The following are some examples of when `itemId` is used to verify that orders contain the correct items:
| **Operations** | **Descriptions** |
| ----------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------- |
| **[Create a new order](/v3/api-reference/orders/orders/create-new-order)** | When creating a new order, the item’s `sku` and `itemId` are used to verify that the correct item is processed. |
| **[Search for backorders or preorders](/v3/api-reference/orders/backorders-preorders/search-for-backorders-or-preorders-by-query)** | After searching for backorders or preorders, you can use the `itemId` to verify that the correct items are included in the order. |
| **[Search for allocation](/v3/api-reference/orders/allocations/search-for-allocations-by-query)** | One of the filter criteria for searching inventory allocation is `itemId`. |
| **[Create a new shipment](/v3/api-reference/orders/shipments/create-new-shipment)** | To fulfill an order and ship it, the items that are set to ship can be identified by `itemId`. |
## Inventory
### Storage keeping unit (SKU)
When you create inventory, the `sku` is stored as a native value.
During network setup, you can apply conditional rules to include specific SKUs and configure safety stock levels to maintain optimal inventory availability.
Inventory networks also aggregate `sku` quantities across various locations. Even if `sku` isn't directly referenced in some endpoints, they play a crucial role in the background.
The following are some examples of operations in Inventory that are supported using `sku`:
| **Operations** | **Descriptions** |
| ----------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **[Create inventory](/v3/api-reference/inventory/inventory/create-inventory)** | Create inventory using a combination of location number, channel ID, and either `sku` or `itemId`. |
| **[Add new property to an existing inventory](/v3/api-reference/inventory/inventory/update-inventory-by-adding-new-property)** | By using `sku` to identify inventory, you can add a new property or update an existing one by specifying it in the request body. |
| **[Find inventory of specific items](/v3/api-reference/inventory/inventory/find-inventory-of-specific-items-in-a-specific-region)** | Search for all items in the location specified in the request body that match the `sku` in the request body. |
| **[Create inventory network](/v3/api-reference/inventory/networks/create-inventory-network)** | Creates an inventory network. Although `sku` isn’t used directly, it’s utilized within the network to monitor item quantities. |
### Item ID
When you create inventory, the `itemId` is stored as a native value.
During network setup, you can apply conditional rules to include a specific `itemId` and configure safety stock levels to maintain optimal inventory availability.
Inventory networks also aggregate `itemId` quantities across various locations. Even if `sku` isn't directly referenced in some endpoints, they play a crucial role in the background.
The following are some examples of operations in Inventory that are supported by `itemId`:
| **Operations** | **Descriptions** |
| ----------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| **[Create inventory](/v3/api-reference/inventory/inventory/create-inventory)** | Create inventory using a combination of location number, channel ID, and either `sku` or `itemId`. |
| **[Add new property to an existing inventory](/v3/api-reference/inventory/inventory/update-inventory-by-adding-new-property)** | By using `itemId` to identify inventory, you can add a new property or update an existing one by specifying it in the request body. |
| **[Find inventory of specific items](/v3/api-reference/inventory/inventory/find-inventory-of-specific-items-in-a-specific-region)** | Search for all items in the location specified in the request body that match the `itemId` in the request body. |
| **[Create inventory network](/v3/api-reference/inventory/networks/create-inventory-network)** | Creates an inventory network. Although `itemId` isn’t used directly, it’s utilized within the network to monitor item quantities. |
Shipping Method Association: `itemId` are used to determine which items are associated with specific shipping methods.
### Inventory ID
`inventoryId` is used to track inventory to manage and track product stock across different locations, channels, and items.
Inventory is the only domain that uses `inventoryId`.
The following are some examples of how `inventoryId` is utilized:
| **Operations** | **Descriptions** |
| --------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ |
| [Create inventory](/v3/api-reference/inventory/inventory/create-inventory) | The system automatically generates a unique `inventoryId` when you create new inventory for a `sku`. |
| [Change inventory counters](/v3/api-reference/inventory/inventory/adjust-inventory-counters) | Adjust inventory counters by passing the `inventoryId` in the request body. |
| [Update inventory with a new property](/v3/api-reference/inventory/inventory/update-inventory-by-adding-new-property) | Verify that the correct inventory was updated by checking the `inventoryId` in the response body after the update. |
# Making your first API request
When making calls to fabric APIs, you must use the following HTTP headers to provide context.
* **`--header`**: This flag is used to include headers in the request. The most commonly used headers in fabric APIs are:
* **`x-fabric-tenant-id`**: This is a custom header used by the API to identify the tenant making the request. You can [find the tenant-id](/v3/guides/settings/account-details/getting-the-account-id) in Copilot.
* **`Content-Type: application/json`**: This tells the server that the data being sent in the request is in JSON format.
* **`Authorization: Bearer`**: This is the authorization token used to authenticate the request. You must pass the access token generated from the system app.
* **`x-fabric-channel-id`**: This is a custom header, used to identify the channel through which the request is being made. This is primarily used for a multichannel use case. Usually, the default value is 12 (US).
fabric API responses are in JSON format.
#### Prerequisites
Before you can start using fabric APIs:
* Generate the access token by following the instructions in the [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis) section.
* Get the x-fabric-tenant-id by following the instructions in the [Getting the Account ID](/v3/guides/settings/account-details/getting-the-account-id) section.
#### Procedure
The following steps use [Create attribute](/v3/api-reference/product-catalog/attributes/create-attribute) as an example:
1. Log in to Postman client.
2. In the left menu, click **Import**
The import window will display.
3. In the import window, copy and paste the following code:
```bash
curl --request POST \
--url https://api.fabric.inc/v3/product-attributes \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer ' \
--header 'x-fabric-tenant-id: ' \
--data '{
"name": "Category datetime example",
"isLocalizable": false,
"target": "CATEGORY",
"type": "DATETIME",
"validation": {
"isMandatory": false,
"isManualOverwrite": false,
"formula": "",
"dateFormat": "MM/DD/YYYY"
}
}'
```
4. To populate the headers, click the **Headers** tab and do the following:
* To enter **`Authorization: Bearer`**, replace **Bearer \** with the access token you generated from [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis) section.
* To enter **`x-fabric-channel-id`**, replace **\** with the tenant-id you obtained from [Getting the Account ID](/v3/guides/settings/account-details/getting-the-account-id) section.
5. Click **Send**.
### Related Resources
* [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis)
* [API Authentication](/v3/api-reference/getting-started/api-authentication)
* [Glossary](/v3/guides/get-started/glossary)
* [Getting System App Credentials](/v3/guides/settings/api-apps/getting-sysapp-credentials)
* [fabric support](https://support.fabric.inc/hc/en-us/requests/new)
* [License](https://fabric.inc/api-license)
* [Demo Request](https://fabric.inc/demo-request)
# Overview
The API reference guide provides comprehensive documentation on the API endpoints offered by Commerce fabric Inc, also known as fabric. This guide details how to use these endpoints and assists users in integrating fabric's capabilities into their ecommerce solutions, enabling developers and businesses to leverage the full potential of the platform.
## Audience and Purpose
This documentation is designed for system integrators, developers, and merchant users. The aim is to provide these users with detailed information on how to effectively integrate, use, and adapt the fabric platform for their specific ecommerce needs.
## Terms and Conventions
In the API reference guide , the term *we* refers to fabric. The term customers may have different meanings depending on the context. Customer is used to denote the consumers of fabric's products and services and is also used to imply the service Customer, which is used to manage information for both individual customers and organizations with whom you conduct business, including any contracts in place.
The term *customers*, when lowercase, typically refers to the users of fabric's products. However, in certain contexts where it's capitalized, it indicates [fabric’s Customers](/v3/guides/customers/overview) feature.
The term *product* denotes any item or service available for sale. However, in specific contexts, it directly refers to fabric’s [Product Catalog](/v3/api-reference/product-catalog/products-api---overview) APIs.
For all other terms used in fabric, see the [Glossary](/v3/guides/get-started/glossary).
## fabric Commerce Platform
**fabric** is a cloud-native, headless, API-first ecommerce platform offering a comprehensive suite of APIs and applications that help you build your ecommerce store with flexibility, scalability, and speed. With a separate sales channel for front-end and backend processing systems, fabric Commerce Platform provides developers with the flexibility to build, integrate, and maintain highly personalized B2C or multi-channel commerce experiences with precision.
**fabric Commerce Platform** supports multiple geographical regions. For each tenant, accounts and stores are created in a specific region. However, tenants can also have one account to maintain multiple regions.
For evaluating fabric commerce platform and other fabric products [click here](https://live.copilot.fabric.inc/onboarding/signup) to sign up for a free trial and set up your environment and credentials.
## Related Resources
* [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis)
* [API Authentication](/v3/api-reference/getting-started/api-authentication)
* [Glossary](/v3/guides/get-started/glossary)
* [API Apps](/v3/guides/settings/api-apps/api-apps)
* [Getting System App Credentials](/v3/guides/settings/api-apps/getting-sysapp-credentials)
* [fabric support](https://support.fabric.inc/hc/en-us/requests/new)
* [License](https://fabric.inc/api-license)
* [Demo Request](https://fabric.inc/demo-request)
# Security and Compliance
Learn how we protect customer data, user data, and the reliability of our commerce services and applications.
We use an SRE (Site Reliability Engineering) team to manage, maintain, and operate our security policies and procedures. We also use secure engineering and quality assurance practices to ensure ongoing security compliance.
fabric’s core product is hosted on Amazon Web Services (AWS) cloud infrastructure that supports security standards and compliance certifications which could help our customers satisfy compliance requirements for virtually every regulatory agency around the globe. Additionally, fabric holds following compliance certifications / attestations and self assessment questionnaires:
* SOC 2 Type I
* SOC 2 Type II
* PCI DSS (SAQ - A)
fabric doesn't process / store credit card information directly. Instead, third party payment gateways (PCI compliant) are used to handle payment transactions. We can supply certificates, insurance policies, and security playbooks on request.
## Access Control Management
All access to fabric infrastructure is based on RBAC and the principle of least privilege. We manage access control logging at the user level for console and CLI actions. This log allows us to trace code-level commits and offers traceable and auditable protocols for code-level commits, along with actions to manage code between environments. Additionally, all access to the fabric AWS environment is only provided through Multi-Factor Authentication (MFA).
fabric leverages industry recognized hashing, encryption and salting mechanisms to protect all credentials stored in the environment. To secure user credentials, TLS is used to encrypt the requests and responses throughout the login process and credential information is encrypted at rest using server side encryption. Credentials are verified by the comparison of a salted hash of the password using a high-computational effort hashing algorithm (such as bcrypt) against a persisted value and calls to the login API are rate limited to protect against brute force attacks. User account is disabled after 10 unsuccessful login attempts.
Logged in users are provided with a JSON Web Token that proves the user’s identity and contains claims that will be used to authorize subsequent requests. The token is signed with fabric’s private key as described in [RFC 7519](https://datatracker.ietf.org/doc/html/rfc7519), allowing the integrity of the token to be evaluated by receiving systems.
## Data and Asset Protection
fabric leverages security tools, processes and cloud native services to protect the infrastructure, including:
* DDOS protection
* WAF protection
* Bot configuration and IP whitelisting
* Performing Static Application Security Testing (SAST) through tools integrated into the CI/ CD pipeline
* Code reviews to protect against OWASP Top 10 vulnerabilities and more
* EDR (Endpoint Detection and Response) tool for user workstations and cloud instances
The SRE team at fabric has a data loss recovery plan for all systems in place. In addition to this, we:
* Store all customer-related information on secure cloud accounts
* Only allow SRE personnel to grant access to cloud accounts and all digital data
* Deploy the Storefront with a dedicated managed database as a VPC (Virtual Private Cloud)
* Employ secure, multi-zonal replication and encryption of data
* Protect data transfer with SSE (Server-Side Encryption)
* Retain data only for a month after the end of the contract
* Accept a request from you to delete your data
* Only work with third parties who meet our security and insurance conditions
## Incident Response Management
We actively monitor all logs, reports, and alerts to detect threats. Our incident response team is available 24/7/365 on an on-call schedule for global coverage. In case of an incident, the SRE team recreates or verifies the suspected issue. Then, we bring the appropriate resources together to address the incident.
Our standard priority-based incident response SLA is provided below. Here, P1 refers to the highest priority and P4 the lowest.
* First email response within 30 minutes
* Follow up responses every hour until the issue is resolved
* SLA: as soon as possible
* Report issue by phone
* First email response within 30 minutes
* Second follow up response within 6 hours
* SLA: 2-3 business days
* Report issue by email only
* First email response within 30 minutes
* Second follow up response within business 2-3 days
* SLA: 5-7 business days
* Report issue by email only
This policy may be customized at your request as part of the MSA and onboarding process.
## Vulnerability Assessment
fabric’s continuous vulnerability management program consists of two pillars:
* Deep integration into fabric’s CI/CD Pipeline
* Scheduled vulnerability scans of deployed code
We create and run automated security unit tests on each code change before the deployment. To identify vulnerabilities, we also perform a security scan every four weeks. We rate vulnerabilities as critical, high, medium, and low. Critical and high vulnerabilities are acted upon within 3 to 7 days, medium within 14 days, and low within 30 days.
Periodic secure coding audits and external penetration tests follow the security scan. During the security review, a trained reviewer analyzes the code for potential security flaws. The analysis is based on standards of the OWASP Security Knowledge Framework.
# Using Developer Portal
[The developer portal](https://developer.fabric.inc/) provides API definitions that include working code examples and the ability to make authenticated API requests directly within the documentation. This section provides step-by-step instructions on how to make API calls from the developer portal.
#### Prerequisites
* Install the [Postman](https://www.postman.com/downloads/) client.
* Generate the access token by following the instructions in the [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis) section.
* Get the `x-fabric-tenant-id` by following the instructions in the [Getting the Account ID](/v3/guides/settings/account-details/getting-the-account-id) section.
### Procedure
1. Go to the [fabric Developer Portal](https://developer.fabric.inc/).
2. To try an API endpoint, go to the corresponding page.\
For example, to add an attribute go to the [Create Attribute](/v3/api-reference/product-catalog/attributes/create-attribute) page. You can click the **Examples** menu in the request field to view request examples with data.
3. To run the API request, do the following:
* In the **Bearer** field in the right pane, enter the access token.
* In the **BODY PARAMS** section, enter the required setting for each parameter.
* In the **Headers** section, enter the required setting for each parameter.
* In the right pane, click **Try it**.
The response is displayed in JSON format. You can also click the Examples menu in the right pane to see different response examples.
### Related Resources
* [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis)
* [API Authentication](/v3/api-reference/getting-started/api-authentication)
* [Glossary](/v3/guides/get-started/glossary)
* [Getting System App Credentials](/v3/guides/settings/api-apps/getting-sysapp-credentials)
* [fabric support](https://support.fabric.inc/hc/en-us/requests/new)
* [License](https://fabric.inc/api-license)
* [Demo Request](https://fabric.inc/demo-request)
# Create product attribute group
attribute.openapi post /product-attribute-groups
Attribute group is a collection of attributes that can be assigned to products or categories. This endpoint creates an attribute group with associated attributes so that it's easier to assign attributes to products and categories **Note**: At least one attribute must be specified.
# Delete attribute group
attribute.openapi delete /product-attribute-groups/{id}
To ensure product details are up to date, it's important to remove unused, incorrect attribute groups. This endpoint deletes an attribute group by its ID.
# Find attribute groups
attribute.openapi post /product-attribute-groups/search
Attribute groups are a collection of attributes that can be assigned to products or categories. This endpoint searches for attribute groups based on the search criteria specified in the request body.
# Get all product attribute groups
attribute.openapi get /product-attribute-groups
Attribute group is a collection of attributes that can be assigned to products or categories. This endpoint gets all the existing attribute groups along with their attributes.
# Get single attribute group
attribute.openapi get /product-attribute-groups/{id}
Attribute groups are a collection of attributes that can be assigned to products or categories. This endpoint gets details of the product attribute groups for the specified ID for proper details of product information on your e-commerce portal.
# Attribute Groups
An Attribute Group is a collection of product attributes that helps categorize products into various semantic groups based on meaning and purpose, allowing for easier management and organization in the Product Catalog. Supports CRUD operations for managing attribute groups.
# Update attribute group
attribute.openapi put /product-attribute-groups/{id}
When launching a new product line, it may be necessary to update certain aspects, such as adding or deleting attributes, updating attribute group name, or adjusting the sequence in which they appear on UI. This endpoint is used to group attributes and mark them as editable or read-only. In addition, you can update the details of attribute groups such as name, description, priority order, and more. This endpoint completely replaces the existing details.
# Get attributes mapping
attribute.openapi get /product-attribute-mappings
Before adding an item (with or without variants) to fabric **Product Catalog**, you must map merchant-specific attributes to fabric-specific attributes.
Once mapping is created, this endpoint is used to get the mapping details.
# Attributes Mapping
fabric has a predefined set of mandatory attributes for `Items` and `Categories`. However, as merchants, you may have your own naming conventions for these attributes. For instance, a mandatory attribute 'unique item identifier' may be referred to as `SKU` by fabric and as `productId` by merchant. To address this inconsistency, merchant-defined attributes are mapped to fabric attributes as productId -> fabric SKU. These endpoints are used to get and update mapping of attributes.
# Update attributes mapping
attribute.openapi put /product-attribute-mappings
This endpoint updates mapping of merchant-defined attributes to fabric-defined standard attributes. This will help ensure consistency.
# Create attribute
attribute.openapi post /product-attributes
In fabric **Product Catalog**, both products (Items, Variants, and Bundles) and categories have attributes. For products, they may be technical specifications like size, weight, etc., design specifications like color, material, etc. For Categories, they may be basic specifications such as name, description, ID, etc. This endpoint creates attributes that can be assigned to a `target` - Product or Category.
# Delete single attribute
attribute.openapi delete /product-attributes/{id}
Over time, fabric **Product Catalog** may accumulate attributes that are no longer relevant or were created with incorrect or incomplete information. This can cause downstream issues. This endpoint provides the flexibility to delete an attribute by its ID, without impacting other attributes **Note**: An attribute can't be deleted if it's already assigned to `Item` or `Category`.
# Find attributes
attribute.openapi post /product-attributes/search
With this endpoint, you can search for attributes based on criteria such as name, creation or modification date, attribute type, and other factors.
# Get attributes
attribute.openapi get /product-attributes
Once attributes are created, this endpoint gets all the available attributes that can be assigned to the requested `target` - `item` or `category`. You can refine search results by specifying `offset` and `limit`. When they're not specified, by default, you'll get up to 10 attributes.
# Get single attribute
attribute.openapi get /product-attributes/{id}
E-commerce platforms (web or app) show product details based on attributes such as name, size, color, and other specifications. This endpoint gets the details of a particular attribute by its ID, which is used to display on the e-commerce platform.
# Attributes
Supports CRUD operations for managing attributes. These endpoints generally require an attribute `target` to be specified to ensure appropriate separation and assignment of attributes to the correct target - `Item` or `Category`.
# Update single attribute
attribute.openapi put /product-attributes/{id}
This endpoint updates attribute details such as name, description, type and subtype, target, validation criteria, and more, for the specified ID.
# Create multiple categories
category.openapi post /categories/batch
Items are organized within categories, which form the original hierarchical tree structure with multiple levels of nested categories.
This endpoint is used to add new categories within this structure.
**Note**: 1. Upon onboarding a new merchant to fabric
**Product Catalog**, a root category is automatically generated.
2. This endpoint doesn't support adding of parent and its children categories at the same time.
3. You can add up to 25 categories.
# Update multiple categories
category.openapi put /categories
With this endpoint, you can update up to 25 categories and add new child categories. You can update the name of the category as required, update the parent category, change category attributes for improved product discovery, and modify product attributes to efficient product filtering.
# Create category
category.openapi post /categories
Items are organized within categories, which form the original hierarchical tree structure with multiple levels of nested categories.
This endpoint is used to create a new category within this
structure. **Note**: 1. Upon onboarding a new merchant to fabric
**Product Catalog**, a root category is automatically generated.
2. This endpoint doesn't support adding of children categories. Use the Update category endpoint - `PUT /categories/{id}` endpoint to add child categories.
# Delete category
category.openapi delete /categories/{id}
If there is a change in product offerings , one or more categories may become unnecessary. This endpoint is used to delete a category by its ID.
# Find categories
category.openapi post /categories/search
This endpoint is used to search and find specific categories based on the search criteria given in the request body. This endpoint is also used to find the root category that's automatically created when the merchant is onboarded to fabric **Product Catalog**.
# Get a single category
category.openapi get /categories/{id}
The Category system is the original tree hierarchy used to organize and categorize products. This endpoint gets the details of a specific category by its ID. The response includes basic info (ID, name, localized name (if applicable), list of category attributes, product attributes, associated product IDs, associated child categories, and more.
# Get attribute groups of a category
category.openapi get /categories/{id}/attribute-groups
Attribute groups are a collection of attributes that can be assigned to an item or a category. For example, an `Electronics` category may have `Dimensions` as one of the attribute groups, with `length`, `width`, and `height` as individual attributes. This endpoint gets all attribute groups for the given category. For each attribute group, you can view its basic details such as ID, name, and priority as well as attribute details including validation rules, localized versions, and more
# Get navigation path for categories
category.openapi get /categories-path
In **Product Catalog**, items are organized in a hierarchy tree structure of parent and children categories. This endpoint gets the navigation path starting from the root (level 0) until the given category IDs.
# Get products by category
category.openapi get /categories/{id}/products
To ensure correct items are grouped together within a category, it's important to review them in the context of each category. This endpoint gets a paginated list of products. For each product, you can view its attribute details, localized properties, variant IDs as well as the `categoryId`. You can refine your search results by specifying `offset`, and `limit`. When they're no specified, you'll get up to 10 results.
# Categories
Categories are organized into a hierarchical tree structure based on common attributes, allowing logical grouping of items. The Categories endpoints enable CRUD operations, which include creating, finding, and managing categories.
# Partially update category
category.openapi patch /categories/{id}
In contrast to the Update Category endpoint - `PUT /categories/{id}`, which fully overwrites the category details, this endpoint allows for selective modification of specific details, such as fixing any typos present in category names as well as facilitating addition or removal of category attributes or product attributes.
# Update category
category.openapi put /categories/{id}
Child categories can't be added while creating a new category (using the `POST /categories` endpoint). This endpoint is used to add a child category to a parent category. In addition, when there are changes in product offerings, this endpoint is used to change the item and category attributes as well as rename the category. This endpoint completely replaces the existing details.
# Data Ingestion Best Practices
## Overview
Optimized data management is at the core of every successful e-commerce operation. For fabric users managing extensive product catalogs, finely tuned data ingestion is paramount.
Adhering to fabric’s best practices will ensure the fastest processing speed, optimum resource management, and enhanced accuracy when importing your data.
This topic covers subjects such as file size restrictions, types of import actions, reconciling errors, and most importantly, the best method of data ingestion: **delta updates**.
## File Size and Upload Guidelines
Before you upload your first file, it's important to understand file size restrictions and how fabric handles files that exceed those restrictions.
* **No files larger than 300MB**
Limit the size of your uploads to 300MB.
* **Split files larger than 300MB into smaller ones**
Splitting large files into smaller ones before uploading them is the quickest way to import large amounts of data. For fastest processing, the ideal file size is between 80-100MB.
* **Parallel processing**
fabric can process multiple files in parallel. The number of parallel files depends on your package. When the limit has been reached, subsequent files will be in a “scheduled” status until moved into the queue. Reach out to your account representative to learn more.
* **Automatic file chunking is available**
fabric can automatically chunk files larger than 300MB into smaller files to improve performance. This feature is only available in select packages. Reach out to your account representative to learn more.
## Delta Updates
A delta update involves transmitting only the changed data fields when making an update. This is in contrast to the more traditional “full feed” updates that send the entire dataset. By sending only the changed data fields, fabric can process updates without reprocessing unchanged data.
**Delta updates are the preferred method for all uploads.**
### Delta updates vs. full feed updates
| | Full Feed Data Updates | Delta Data Updates |
| -------------------------- | --------------------------------------------------------------- | ------------------------------------------------------------- |
| **Resource Usage** | Requires more resources | Requires fewer resources |
| **Processing Time** | Longer processing time | Shorter processing time |
| **Data Transmission** | Transmits entire dataset | Transmits only modified data fields |
| **Network Bandwidth** | Consumes more network bandwidth | Requires less network bandwidth |
| **Storage** | Requires more storage space | Requires less storage space |
| **Error Handling** | Prone to errors during full data transmission | Less prone to errors due to focused updates |
| **Scalability** | Less scalable for large datasets | More scalable, especially for large datasets |
| **Data Accuracy** | Potential for data redundancy and inconsistency | Enhances data accuracy by focusing on changes |
| **Operational Efficiency** | Lower operational efficiency due to higher resource consumption | Higher operational efficiency due to optimized resource usage |
| **Incremental Updates** | Updates entire dataset each time | Updates only modified data fields incrementally |
## Ways to Import Data
You can import data into fabric using the following methods:
* CSV import using API
* Import using RESTful APIs
* CSV import using the Copilot interface
The import method you choose is up to you, but in each case, uploading smaller files and using the delta update method will result in quicker processing, better resource management, and a higher degree of accuracy.
## Data Formatting
It's crucial to make sure your dataset is accurate and compatible with fabric’s formatting before initiating the upload process. Validate your data to avoid errors by reviewing the file to identify any changes since the last upload and confirm that the data structure and format are correct. See the following pages for formatting guidelines:
* [Importing Items](https://developer.fabric.inc/v3/guides/product-catalog/list/items/importing-items#csv-file-guidelines)
* [Importing Bundles](https://developer.fabric.inc/v3/guides/product-catalog/list/bundles/importing-bundles#csv-file-guidelines)
* [Importing Product Attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/importing-product-attributes#attribute-data-formatting)
* [Importing Categories](https://developer.fabric.inc/v3/guides/product-catalog/categories/importing-categories#csv-file-guidelines)
## Import Actions
The actions you use when importing items, bundles, categories, and collections tell fabric how you are modifying your data. The following actions are available:
* **UPSERT:** Creates a new product if the product doesn't exist, or it updates an existing product.
* **CREATE:** Creates a new product.
* **UPDATE:** Updates existing product.
* **PUBLISH:** Publishes an existing product that was in draft state. The product is published to the storefront.
* **UNPUBLISH\_KEEP\_DRAFT:** Unpublishes an existing product. If the product already has a draft version, the live version is unpublished and discarded. If product doesn't already have a draft version, the live version is unpublished and saved as a draft.
* **UNPUBLISH\_KEEP\_LIVE:** Unpublishes an existing product. If the product already has a draft version, the draft version is discarded.
* **DELETE:** Deletes the existing product.
* **ATTACH\_VARIANT:** Adds variants to an existing parent product. The variant column holds the variant to be attached to the SKU.
* **DETACH\_VARIANT:** Detaches existing variants. The variant column holds the variant to be detached from the SKU.
* **CHANGE\_CATEGORY:** Updates the category of existing product.
* **ATTACH\_CHANNELS:** Appends listed channels to the product, allowing it to be available across various sales channels. You can specify the channels to be attached in the Channels column. After attaching channels, users should verify the attachment post-action to confirm the successful addition of channels to the product.
* **DETACH\_CHANNELS:** Removes listed channels from a product. Users specify the channels to be detached in the Channels column. This action is useful when a product needs to be removed from specific sales channels while remaining available on others. Users should verify the detachment of channels post-action to ensure the desired channels are removed from the product.
## Reconciling Errors
If there are errors during processing, download the error file and review each error to identify the problem. Correct the errors by updating the CSV file with the necessary changes and validate the corrected CSV file before re-importing.
* [Troubleshooting Item Imports](https://developer.fabric.inc/v3/guides/product-catalog/list/items/importing-items#troubleshooting)
* [Troubleshooting Bundle Imports](https://developer.fabric.inc/v3/guides/product-catalog/list/bundles/importing-bundles#troubleshooting)
# Configuring Product Catalog
The following workflow diagram illustrates the step-by-step interaction process with the Product Catalog API:
![Getting Started Diagram](https://mintlify.s3.us-west-1.amazonaws.com/fabric-demo/images/gettingstartedworkflow.jpg)
The following steps outline the process:
1. Create attributes that can be assigned to categories and associated products.
2. Map fabric-mandatory attributes with merchant-defined attributes.
3. Create categories as the primary organizational structure.
4. Assign attributes to categories.
5. Create collections to display products on storefronts and support storefront-specific use cases, including promotions.
6. Add products, such as individual items, variants, and bundles of items and variants.
## Prerequisites
You must have the following:
* **Access and Permissions Setup**
* Ensure that you have Admin or Editor role to set up Product Catalog. For more information about the roles and permissions offered through fabric **Identity** service, see the [Role-based Access Control (RBAC)](/v2/docs/role-based-access-control-products-roles) section.
* Click [here](/v2/docs/role-based-access-control-products-roles) to understand the roles and permissions supported through Role-based Access Control (RBAC) offered through fabric **Identity** service.
* Use the V3 version of the [Product Catalog API](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsAPI.json).
* **Authentication and Security Protocols**
* Ensure that you have a valid [Authorization Token](/v3/api-reference/authentication-v3/authentication-endpoints/fetch-access-token) to provide in the header. For additional information, see the [Client S2S Authorization token](/v3/api-reference/authentication-v3/authentication-endpoints/fetch-access-token) guide.
## Procedure
Use this procedure to configure Product Catalog. The API collections for the endpoints are:
* Postman collection for [attributes](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsAttributes.json).
* Postman collection for [categories](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsCategories.json).
* Postman collection for [products](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsAPI.json).
1. Create attributes using one of the following methods:
* **Individually**: Create a new attribute using the [Create attribute](/v3/api-reference/product-catalog/attributes/create-attribute) endpoint. By specifying the `target` in the request body as a `product` or `category`, you can assign the attribute to a product or a category, respectively.
* **Bulk Import**: Import multiple attributes through bulk import APIs. For more information, see the [bulk import guide](#import-products-data-through-bulk-import).
* (Optional) Create attribute groups using the [Create attribute groups](/v3/api-reference/product-catalog/attribute-groups/create-product-attribute-group) endpoint and group relevant attributes. The attribute groups can then be assigned to products.
2. Map the mandatory fabric attributes, such as `sku`, `title`, `image`, and `active` status, to the corresponding attribute names provided by the merchant. To create new mapping or update an existing mapping, use the [Update attribute](/v3/api-reference/product-catalog/attributes-mapping/update-attributes-mapping) endpoint.
3. Create categories using one of the following methods:
* **Individually**: Create a new category using the [Create category](/v3/api-reference/product-catalog/categories/create-category) endpoint. A root category is created by default and can't be modified.
* **Import Multiple Categories**: Add multiple new categories using the [Create multiple categories](/v3/api-reference/product-catalog/bulk-action-for-categories-and-collections/create-multiple-categories) endpoint. You can add up to 25 categories.
* **Bulk Import**: Add multiple categories (more than 25) through bulk import APIs. For additional information, refer to the [bulk import guide](#import-products-data-through-bulk-import). You can add other category IDs to `categoryIdsIncluded` which automatically includes a categories catalog of items. Similarly, you can exclude categories using `categoryIdsExcluded`.
4. Assign attributes to categories using the [Create category](/v3/api-reference/product-catalog/categories/create-category) and [Partially update category](/v3/api-reference/product-catalog/categories/partially-update-category) endpoint. The attributes of a category automatically cascade to all products associated with that category.
5. (Optional) Create collections to display products on storefront using the [Create collections](/v3/api-reference/product-catalog/collections/create-collection) endpoint.
6. Add products, which may be items, variants, and bundles, using one of the following methods:
* **Add Item**: Add items using the following methods:
* **Individually**: Add a single item using the [Add product](/v3/api-reference/product-catalog/product-operations-by-id/add-product) endpoint and specify the `type` as item.
* **Add Multiple items**: Add multiple items using the [Add products](/v3/api-reference/product-catalog/product-operations-by-id/add-product) endpoint and specify the `type` as item. You can add up to 25 items in a single request.
* **Bulk Import**: Import multiple products through bulk import APIs. For additional information, refer to [bulk import guide](#import-products-data-through-bulk-import).
* **Add Variants**: For creating variants for a product, you must set the product's `status` flag to `LIVE`. If a product status is `DRAFT`, variants are treated as separate products. Add variants using the following methods:
* **Individually**: Add a single variant using the [Add product](/v3/api-reference/product-catalog/product-operations-by-id/add-product) endpoint and specify the `type` as variant.
* **Add Multiple Variants**: Add multiple variants using the [Add Products](/v3/api-reference/product-catalog/product-operations-by-id/add-product) endpoint and specify the `type` as variant. You can add up to 25 variants.
* **Bulk Import**: Import variants using the bulk import APIs. For additional information, refer to the [bulk import guide](#import-products-data-through-bulk-import).\
**Note**: To add a variant, its `parentProduct` must be in published or draft status. Initially, the `type` remains as `item` until the parent is published. Once the parent is published, the `type` is updated to `variant`. Additionally, both the parent and its children should belong to the same category and channel.
* **Add Bundles**: Add bundles using the following methods:
* **Individually**: Add a single bundle using the [Add Product](/v3/api-reference/product-catalog/product-operations-by-id/add-product) endpoint and specify the `type` as bundle.
* **Add Multiple Products**: Add multiple bundles using the [Add Products](/v3/api-reference/product-catalog/product-operations-by-id/add-product) endpoint and specify the type as bundle. You can add up to 25 bundles.
* **Bulk Import**: Import bundles using the [bulk import guide](#import-products-data-through-bulk-import) API. When bulk importing attributes, specify their corresponding type and subtype in the template. The following list shows the Attribute types and their corresponding Attribute sub types:
* **Serial:** None
* **Date-Time:** None
* **Boolean:** None
* **Number:** None
* **Text:** Small text
* **Text:** Text area
* **Text:** HTML
* **Options:** Single
* **Options:** Multiple
**Note**: When creating a bundle, make sure to specify the `bundleProducts`. Ensure the individual items or their variants, which you intend to include in the bundle, already exist in the system.
### Import Product Data Through Bulk Import
The following diagram illustrates the step-by-step process to bulk import attributes, categories, collections, items, variants, and bundles:
![Bulk Import Workflow](https://mintlify.s3.us-west-1.amazonaws.com/fabric-demo/images/bulkimport.jpg)
Take the following steps to bulk import:
1. Download the [template](/v3/api-reference/product-catalog/files/generate-the-import-template) based on the `type`, which could be items, variants, bundles, attributes, categories, or collections. A CSV template with header columns is returned in the response. You can add required data in the template and save the file in your local system.\
The following code sample provides an example for the template:
Bash
```
curl --request POST \
--url https://api.fabric.inc/v3/product-templates/actions/generate \
--header 'accept: text/csv' \
--header 'content-type: application/json' \
--data '
{
"type": "ITEM",
"categoryId": "648014741adc8a9de14e1a68",
"locale": "en-US"
}
'
```
The following code sample provides an example to bulk import attributes:
Bash
```
curl --request POST \
--url https://api.fabric.inc/v3/product-templates/actions/generate \
--header 'accept: text/csv' \
--header 'content-type: application/json' \
--data '{"type":"ATTRIBUTE"}'
```
1. Retrieve the AWS S3 bucket URL used to upload the import file by using the [Create file object and get upload location](/v3/api-reference/product-catalog/files/create-file-object-and-get-file-upload-location) endpoint.\
The following code sample provides an example to retrieve the upload URL to import a file:
Bash
```
curl --request POST \
--url https://api.fabric.inc/v3/product-files \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--data '
{
"type": "ITEM_VARIANT_EXPORT",
"name": "bulk_import_123345677788999.csv",
"locale": "en-US"
}
'
```
1. Make a PUT request with the upload URL, returned in the response of the step 2, to upload the updated CSV file from your local system.
2. Download one or more previously imported or exported files, including error files, use the [Get files available for a merchant](/v3/api-reference/product-catalog/files/get-files-available-for-a-merchant) endpoint.\
The following code sample provides an example:
Bash
```
curl --request GET \
--url 'https://api.fabric.inc/v3/product-files?offset=0&limit=10' \
--header 'accept: application/json'
```
1. To view the status of previously imported or exported files, use the [Get jobs](/v3/api-reference/product-catalog/jobs/get-jobs-related-to-products) endpoint.\
The following code sample provides an example to retrieve the import history:
Bash
```
curl --request GET \
--url 'https://api.fabric.inc/v3/product-jobs?offset=0&limit=10' \
--header 'accept: application/json'
```
# Examples
The following examples provide step-by-step instructions to create a category and its structure with attributes, collections, and products. This example uses a furniture store selling lamps.
Use the following table to reference the category, subcategories, and products that will be created.
| Category | Sub-Categories | Products |
| -------- | -------------- | --------------------------- |
| Lamps | | |
| | Ceiling Lamps | |
| | | Atlas Pendant Ceiling Lamp |
| | | Apollo Pendant Ceiling Lamp |
| | Table Lamps | |
| | | Hudson Table Lamp |
| | | Luminary Table Lamp |
in Product Catalog, both products and categories have attributes. Each product can have multiple attributes associated with it. Because you need to add attributes to both categories and products, the first step in building the lamps category is to create the attributes needed to fulfill our objective. In this example, lamps need to have a `Style` attribute for all the products.
## 1. Create the `Style` Attribute with the Values `Modern`, `Traditional`, and `Rustic`
The `product-attributes` endpoint is used to create different product and category attributes. In this example, the `Style` attribute is created for products. This attribute differentiates lamps based on design aesthetics, such as modern or rustic. In this example the `type` is set to `OPTIONS` since multiple accepted values are added.
Note that if you set `isMandatory` to `true` in the request, anything with the `Style` attribute requires a value. This means if a product inherits or has the `Style` attribute, it must have one of the `acceptedValues` outlined in the request below.
Bash
```
curl --location 'https://api.fabric.inc/v3/product-attributes' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-fabric-tenant-id: ' \
--header 'Authorization;' \
--data '
{
"name": "Style",
"type": "OPTIONS",
"target": "PRODUCT",
"isLocalizable":false,
"localizedProperties":{},
"validation": {
"isMandatory": false,
"acceptedValues": ["Modern", "Traditional", "Rustic"],
"subType": "SINGLE",
"isManualOverwrite": false,
"isDecimal": false,
"formula": ""
}
}
'
```
The response includes a product attribute ID for `Style`. This ID is required in subsequent API requests for mapping.
## 2. Create a new `Lamps` Category
Use the `categories` endpoint to create a new category with the name `Lamps`.
Bash
```curl --location 'https://api.fabric.inc/v3/categories' \
--header 'x-fabric-tenant-id: ' \
--header 'Authorization: ' \
--header 'Content-Type: application/json' \
--data '{
"name":"Lamps"
}
'
```
After creating a category successfully, a response with the ID for the new category is returned. Use this ID to set up sub-categories.
## 3. Create the `Ceiling Lamps` and `Table Lamps` sub-categories
Use the bulk insert API for categories when you need to create more than one subcategory at a time. You must provide the `parentCategoryId` that you previously received in step 2 when making the parent category `Lamps`.
Optionally, you can also set `isLocalizable` to `true` and provide localized names.
Bash
```
curl --location 'https://api.fabric.inc/v3/categories/batch' \
--header 'x-fabric-tenant-id: ' \
--header 'Authorization: ' \
--header 'Content-Type: application/json' \
--data '{
"categories": [
{
"parentCategoryId": "65a503418b49c6d313211159",
"name": "Ceiling Lamps",
"isLocalizable": true,
"localizedProperties": {
"en-US": {
"name": "Ceiling Lamps"
},
"es-US": {
"name": "Lámparas de techo"
}
},
},
{
"parentCategoryId": "65a503418b49c6d313211159",
"name": "Table Lamps",
"isLocalizable": true,
"localizedProperties": {
"en-US": {
"name": "Table Lamps"
},
"es-US": {
"name": "Lámparas de mesa"
}
},
}
}
],
}'
```
## 4. Map the `Style` attribute
With attribute mapping, you can update existing attributes and add new attributes to a category or product.
In this example, the product attribute ID corresponding to the `Style` attribute is added to the `Lamps` category, and the `isMandatory` flag set to `true`. With this setting, all products within the `Lamps` category must have a value corresponding to the `Style` attribute.
When you add an attribute to a parent category, such as `Lamps`, it automatically applies to all its sub-categories. In this example, `Ceiling Lamps` and `Table Lamps` are children of the `Lamps` category, so they inherit the mandatory `Style` attribute.
For mapping, use the `categories` endpoint and provide the ID corresponding to the `Style` attribute that's returned in the response from the `product-attribute` endpoint.
Bash
```shell
curl --location --request PUT 'https://api.fabric.inc/v3/categories/557f1f77bcf86cd799439015' \
--header 'accept: application/json' \
--header 'content-type: application/json' \
--header 'x-fabric-tenant-id: ' \
--header 'Authorization: ' \
--data '
{ "name": "Lamps",
"productAttributes": [
{
"isMandatory": true,
"id": "557f1f77bcf86cd799439015"
}
]
}
'
```
## 5. Create products and variants with attributes
This example requires four products with variants, so the products `status` is set to `LIVE` to create variants and the `parentProduct` field is included in the request body. The following code example shows adding the products using the bulk insert API for `products`, which includes the mandatory attributes values:
Bash
```shell
curl --location 'https://api.fabric.inc/v3/product-catalog/batch' \
--header 'x-fabric-tenant-id: ' \
--header 'Authorization: ' \
--header 'Content-Type: application/json' \
--data '{
"products": [
{
"sku": "AGLAMPTL12",
"status":"LIVE",
"categoryId": "65a505cf8b49c6d313211187",
"isActive": true,
"type": "ITEM",
"attributes": [
{
"id": "65a503bfd97969bcbb224415",
"value": ["modern"]
},
{
"id": "6464ecfc4529ad33084c4adb",
"value": "Hudson Table Lamp"
},
{
"id" : "6464ecfc4529ad33084c4ad7",
"value": "AGLAMPTL12"
},
{
"id": "6464ecfc4529ad33084c4acb",
"value" : "https://exampleimagelink.me/assets/images/exampleimagelink.png"
},
{
"id": "6464ecfd4529ad33084c4adf",
"value" : "FALSE"
}
]
},
{
"sku": "AGLAMPTL9",
"status":"LIVE",
"categoryId": "65a505cf8b49c6d313211187",
"isActive": true,
"type": "ITEM",
"attributes": [
{
"id": "65a503bfd97969bcbb224415",
"value": ["rustic"]
},
{
"id": "6464ecfc4529ad33084c4adb",
"value": "Luminary Table Lamp"
},
{
"id" : "6464ecfc4529ad33084c4ad7",
"value": "AGLAMPTL9"
},
{
"id": "6464ecfc4529ad33084c4acb",
"value" : "https://exampleimagelink.me/assets/images/exampleimagelink.png"
},
{
"id": "6464ecfd4529ad33084c4adf",
"value" : "FALSE"
}
]
},
{
"sku": "AGLAMPCL2",
"status":"LIVE",
"categoryId": "65a505cf8b49c6d313211187",
"isActive": true,
"type": "ITEM",
"attributes": [
{
"id": "65a503bfd97969bcbb224415",
"value": ["rustic"]
},
{
"id": "6464ecfc4529ad33084c4adb",
"value": "Apollo Pendant Ceiling Lamp"
},
{
"id" : "6464ecfc4529ad33084c4ad7",
"value": "AGLAMPCL2"
},
{
"id": "6464ecfc4529ad33084c4acb",
"value" : "https://exampleimagelink.me/assets/images/exampleimagelink.png"
},
{
"id": "6464ecfd4529ad33084c4adf",
"value" : "FALSE"
}
]
},
{
"sku": "AGLAMPCL5",
"status":"Live",
"categoryId": "65a505cf8b49c6d313211187",
"isActive": true,
"type": "ITEM",
"attributes": [
{
"id": "65a503bfd97969bcbb224415",
"value": ["modern"]
},
{
"id": "6464ecfc4529ad33084c4adb",
"value": "Atlas Pendant Ceiling Lamp"
},
{
"id" : "6464ecfc4529ad33084c4ad7",
"value": "AGLAMPCL5"
},
{
"id": "6464ecfc4529ad33084c4acb",
"value" : "https://exampleimagelink.me/assets/images/exampleimagelink.png"
},
{
"id": "6464ecfd4529ad33084c4adf",
"value" : "FALSE"
}
]
},
{
"parentProduct": {
"sku": "AGLAMPCL5"
},
"sku": "GLAMPCL5",
"status": "LIVE",
"categoryId": "65a505cf8b49c6d313211187",
"isActive": false,
"type": "VARIANT",
"attributes": [
{
"id": "65a503bfd97969bcbb224415",
"value": ["modern"]
},
{
"id": "6464ecfc4529ad33084c4adb",
"value": "Green"
},
{
"id" : "6464ecfc4529ad33084c4ad7",
"value": "GLAMPCL5"
},
{
"id": "6464ecfc4529ad33084c4acb",
"value" : "https://exampleimagelink.me/assets/images/exampleimagelink.png"
},
{
"id": "6464ecfd4529ad33084c4adf",
"value" : "FALSE"
}
]
},
{
"parentProduct": {
"sku": "AGLAMPCL5"
},
"sku": "AGLAMPCL1",
"status": "LIVE",
"categoryId": "65a505cf8b49c6d313211187",
"isActive": false,
"type": "VARIANT",
"attributes": [
{
"id": "65a503bfd97969bcbb224415",
"value": ["modern"]
},
{
"id": "6464ecfc4529ad33084c4adb",
"value": "Gold"
},
{
"id" : "6464ecfc4529ad33084c4ad7",
"value": "AGLAMPCL1"
},
{
"id": "6464ecfc4529ad33084c4acb",
"value" : "https://exampleimagelink.me/assets/images/exampleimagelink.png"
},
{
"id": "6464ecfd4529ad33084c4adf",
"value" : "FALSE"
}
]
}
]
}'
```
## Create a `Sale` category for `Modern Style Furniture` and `Cyber Monday`
1. Create the parent collection, `Sale`.
Bash
```
curl --location 'https://api.fabric.inc/v3/collections' \
--header 'x-fabric-tenant-id: ' \
--header 'Authorization: ' \
--header 'Content-Type: application/json' \
--data '{
"isRoot": true,
"isLocalizable": false,
"name": "Sale",
}'
```
1. Create the sub category `Current Sales`. The `parentCollectionID` is returned from the previous response when creating the parent collection `Sale`.
Bash
```
curl --location 'https://api.fabric.inc/v3/collections/batch' \
--header 'Authorization: ' \
--header 'Content-Type: application/json' \
--header 'x-fabric-tenant-id: ' \
--data '{
"collections": [
{
"parentCollectionId": "65a5847b8b49c6d313211476",
"name": "Current Sales",
"isLocalizable": false,
"isRoot": false,
"isLeaf": false
}
]
}'
```
1. Create the `Modern Style Furniture` and `Cyber Monday` categories.
Bash
```
curl --location 'https://api.fabric.inc/v3/collections/batch' \
--header 'Authorization: ' \
--header 'Content-Type: application/json' \
--header 'x-fabric-tenant-id: ' \
--data '{
"collections": [
{
"parentCollectionId": "65a58a5b8b49c6d313211486",
"name": "Modern Style Furniture",
"isLocalizable": false,
"isRoot": false,
"isLeaf": false,
"categoryIdsIncluded": [
"65a503418b49c6d313211159"
]
},
{
"parentCollectionId": "65a58a5b8b49c6d313211486",
"name": "Cyber Monday",
"isLocalizable": false,
"isRoot": false,
"isLeaf": false,
"categoryIdsIncluded": [
"65a503418b49c6d313211159"
]
}
]
}'
```
Optionally, you can include products in a sale tab by filtering for specific attributes using `productAttributeFilters`.
```
"productAttributeFilters": [
{
"attributeId": "78184766610c0e32a86d8757",
"condition": "EQUALS",
"value": 2
}
]
```
## Error Handling
For effective error handling, refer to the API documentation which outlines standard HTTP error codes, such as 400 (Bad Request), 404 (Not Found), and 500 (Internal Server Error).
## Next Steps
Once the above steps are completed, you are all set with the basic setup. You may proceed to fully utilize all features and capabilities available to you. Refer to the [Related Resources](/v3/api-reference/product-catalog/developer-guide/introduction#related-resources) for additional information.
# Introduction
fabric **Product Catalog** API supports CRUD operations related to Product Catalog. This service is designed to provide low latency reads and search functionalities for the storefront. It supports event-driven updates to ensure the data is always up-to-date without manual intervention, efficient cache management for faster data retrieval, and scalability to handle high volumes of traffic.
This guide provides step-by-step instructions to help you get started with fabric Product Catalog API, from initial setup to basic usage.
## Target Audience
* Solution Integration (SI) partners responsible for configuring the Product Catalog for e-commerce.
* Third-party developers who set up Product Catalog on behalf of merchants.
* The fabric developers who work with Product Catalog.
## Knowledge and Skill Requirements
The target audience should:
* Understand [REST APIs](https://fabric.inc/blog/developer/api-endpoint), in the context of e-commerce.
* Get familiar with [fabric APIs](https://fabric-demo.mintlify.app/v3/api-reference/getting-started/getting-started-with-fabric-apis).
* Know the [concepts](/v3/api-reference/product-catalog/products-api---overview) related to Product Catalog.
* Create a strategy to [migrate from a third-party product information management system](/v2/docs/migrate-to-fabric), if applicable.
* Understand caching strategies and technologies.
* Have access to development tools capable of interacting with HTTP-based APIs, such as Postman or cURL for testing.
We also recommend you to:
* Maintain a list of attributes that need to be assigned to products and categories.
* Identify the mandatory and optional attributes.
* Develop a strategy for organizing products within a hierarchical tree structure of categories and collections.
* Create a product list consisting of individual items, variants, and bundles of items and variants.
## Related Resources
For additional information, refer to the following:
* Product Catalog [FAQs](/v3/api-reference/product-catalog/products-faqs).
* [Sample store](https://sales-demo-uat.vercel.app) to view the given product organization.
* [User guide](https://developer.fabric.inc/v3/guides/product-catalog/overview) for Product Catalog in Copilot.
* API reference for all operations related to [attributes](/v3/api-reference/product-catalog/attributes/overview)
* API reference for all operations related to [categories](/v3/api-reference/product-catalog/categories/overview).
* API reference for all operations related to [collections](/v3/api-reference/product-catalog/categories/overview).
* API reference for all operations related to products based on [SKU](vv3/api-reference/product-catalog/product-operations-by-sku/overview) or [product ID](vv3/api-reference/product-catalog/product-operations-by-id/overview).
# Postman Collections
The Product Catalog Postman collections make it easy to explore, test, and integrate with the Product Catalog API.
They include pre-built requests for common API operations, allowing you to understand how different endpoints work and test them with real data. With these collections, you can:
* Test API requests directly within Postman without writing code.
* View example payloads and expected responses for each endpoint.
* Modify requests with your own data to fit your unique use cases.
* Speed up API integration.
* Improve troubleshooting.
The following Postman collections are available:
* [Attributes](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsAttributes.json): Create, update, retrieve, and delete product attributes.
* [Categories](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsCategories.json): Create new categories, update existing ones, and retrieve category hierarchies.
* [Products](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsAPI.json): Create new products, update existing product details, retrieve product information, and manage product lifecycle events.
* [Published Products](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsPublishedProducts.json): Retrieve and manage published versions of your products.
* [Files and Jobs](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsFileAndJobs.json): Upload product data files, monitor the progress of file imports, and manage various background jobs.
# Add products
product.openapi post /products/batch
At fabric, the term products refers to items, variants, and/or bundles.
With this endpoint, you can add up to 25 products. Refer to the
examples added for each type. **Note**:
1. If product type is Variant, they can be added using either SKU or ID.
2. When product type is Item, either `parentCategoryId` or `parentCategorySKU` must be specified.
3. When product `type` is Bundle, items in a bundle can be added using either SKU or ID.
4. In the response you can see the products that are added successfully and the ones that couldn't be added.
# Delete products
product.openapi delete /products
To keep the product list (catalog) up to date and current, it's important to remove products that are discontinued permanently. With this endpoint, you can delete up to 25 products either by SKUs or IDs. **Note**:
1. Unless all products are deleted, this endpoint fails.
2. To delete a single product, you can use either the ID-based (`DELETE /products/{id}`) or SKU-based endpoint (`DELETE /products/sku/{sku}`).
# Find products
product.openapi post /products/search
To find specific products for review or reports, you need to specify the criteria for the search. With this endpoint, you can find products (items, variants, and bundles) based on ID or SKU, type, category, and other criteria.
# Get products list
product.openapi get /products
You may have to review products to review or analyze them or create certain reports. This endpoint gets a paginated list of products (items, variants, and bundles) for the specified `locales`. **Note**: Specify product IDs to get only those products. Or, you may mention `offset` and `limit` to refine the search results. When they're not specified, by default, you'll get up to 10 products.
# Update products
product.openapi put /products
With this endpoint, you can update details of multiple products, which could be items, variants, and bundles. **Note**:
1. When product type is `Variant`, it can be added either via SKU or ID.
2. When product type is `Item`, either the `parentCategoryId` or `parentCategorySKU` must be specified.
3. When product type is `Bundle`, the associated items or variants can be added either via SKU or via ID.
4. At least one product must be specified.
# Add product
product.openapi post /products
At fabric, the term products refers to items, variants, and/or bundles.
# Add variants to products by ID
product.openapi post /products/{id}/variants/actions/attach
Variants are the different options of an item such as size, color, and materials. For example, there are 12 variants for a laptop that comes in three sizes (13, 15, and 17 inches) and four colors (red, blue, grey, and white). By adding variants to products, you can offer more options to shoppers. With this endpoint, you can add up to 25 variants to an existing product. **Note**:
1. At least one variant must be specified.
2. If you don't have product ID, use the corresponding SKU-based endpoint - `POST /products/sku/{sku}/variants/actions/attach`.
# Delete product by ID
product.openapi delete /products/{id}
To keep the product list (catalog) up to date and current, it's important to remove products that are discontinued permanently. With this endpoint, you can delete a product (Item, Bundle, or Variant) by ID. Using `deleteVariants` as query parameter, you an optionally specify if you want to delete the associated variants as well. **Note**: If you don't have product ID, use the corresponding SKU-based endpoint - `DELETE /products/sku/{sku}`.
# Get product by ID
product.openapi get /products/{id}
With this endpoint, you can get details of a product (item, bundle, or variant) by ID. The response includes the product's attributes and its variants. You can optionally specify `locales` to get products for specific regions. **Note**: If you don't have product ID, use the corresponding SKU-based endpoint - `GET /products/sku/{sku}`
# Get product variants by ID
product.openapi get /products/{id}/variants
Variants are different options of an item such as size, color, and materials. For example, there are 12 variants for a laptop that comes in three sizes (13, 15, and 17 inches) and four colors (red, blue, grey, and white). By adding variants to products, you can offer more options to shoppers . **Note**:
1. At least one variant must be specified.
2. If you don't have product ID, use the corresponding SKU-based endpoint - `GET /products/sku/{sku}/variants`.
3. The `status` parameter is applicable to the `id` passed in path parameter and not for the variants. That is, the variants returned as part of the response are either the variants attached to the Live or Draft version of the product based on the `status` parameter.
# Partially update product attributes by ID
product.openapi patch /products/{id}/attributes
Product attributes are the objective and factual descriptions of products that shoppers see when they browse through an e-commerce platform. Attributes may be technical specifications like size, weight, etc., design specifications like color, material, etc., or basic specifications such as name, description, ID, etc. With this endpoint, you can partially update attributes of a given product. **Note**:
1. This endpoint is recommended over `PUT /products/{id}/attributes` (Update product attributes by ID) if you want to update only specific attributes without affecting the others.
2. If you don't have product ID, use the corresponding SKU-based endpoint - `PATCH /products/sku/{sku}/attributes`.
# Product Catalog API
Product team: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | License: [fabric API License](https://fabric.inc/api-license)
Product Catalog API, a subset of fabric **Product Catalog**, is designed to improve product management. A product can refer to an item, variant, or bundle.
Product Catalog API enables you to create items, add variants to an item, create a bundle, add items to a bundle, update product attributes, get details of one or more products, delete products and search for products. Each product has a title, ID, category, and assigned attributes. Multiple options of a given item become variants of that item and they're nested under a parent item, allowing the different options to appear for the item.
[Find out more about Product Catalog](https://developer.fabric.inc/v3/guides/product-catalog/overview)
[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsAPI.json)
# Remove variants by ID
product.openapi post /products/{id}/variants/actions/detach
When one or more variants of a product are discontinued or no longer required, you don't want them to appear as options for the product. This endpoint provides the flexibility to remove up to 25 variants by ID and manage options efficiently. **Note**:
1. Variants are only detached from the given product, not deleted. They can be reattached to the same or another product at a later point.
2. At least one variant must be specified.
3. If you don't have product ID, use the corresponding SKU-based endpoint - `POST /products/sku/{sku}/variants/actions/detach`.
# Update product
product.openapi put /products/{id}
With this endpoint, you can update details of a single product, which could be an items, variant, or a bundles. **Note**:
1. When product type is `Variant`, it can be added either using SKU or ID.
2. When product type is `Item`, either `parentCategoryId` or `parentCategorySKU` must be specified.
3. When product type is Bundle, associated items or variants can also be added either using SKU or via ID.
4. At least one product must be specified.
# Update product attributes by ID
product.openapi put /products/{id}/attributes
Product attributes are the objective and factual descriptions of products that shoppers see when they browse through an e-commerce platform. Attributes may be technical specifications like size, weight, etc., design specifications like color, material, etc., or basic specifications such as name, description, ID, etc. This endpoint is used to update product attributes, completely replacing the existing ones. **Note**:
1. This endpoint is recommended over `PATCH /products/{id}/attributes`, if the update involves replacing all the attributes. If there are any missing or null fields in the request, the original values will be replaced with empty ones.
2. If you don't have product ID, use the corresponding SKU-based endpoint - `PUT /products/sku/{sku}/attributes`.
# Add variants to products by SKU
product.openapi post /products/sku/{sku}/variants/actions/attach
Variants are the different options of an item such as size, color, and materials. For example, there are 12 variants for a laptop that comes in three sizes (13, 15, and 17 inches) and four colors (red, blue, grey, and white). By adding variants to products, you can offer more options to shoppers. With this endpoint, you can add up to 25 variants to an existing product **Note**:
1. At least one variant must be specified.
2. If you don't have product ID, use the corresponding ID-based endpoint - `POST /products/{id}/variants/actions/attach`.
# Delete product by SKU
product.openapi delete /products/sku/{sku}
To keep the product list (catalog) up to date and current, it's important to remove products that are discontinued permanently. With this endpoint, you can delete a product (Item, Bundle, or Variant) by SKU. Using `deleteVariants` as query parameter, you an optionally specify if you want to delete the associated variants as well. **Note**: If you don't have product SKU, use the corresponding ID-based endpoint - `DELETE /products/{id}`.
# Get product by SKU
product.openapi get /products/sku/{sku}
You may want to periodically review details of a product to ensure they're correct. This endpoint gets details of a product (item, bundle, or variant) by SKU. The response includes products attributes and its variants. You can optionally specify `locales` to get products for specific regions. **Note**: If you don't have product SKU, use the corresponding ID-based endpoint - `GET /products/{id}`.
# Get products by SKUs
product.openapi get /products/sku
Get a paginated list of product (Item, Bundle, or Variant) by SKU, including the attributes and variants. You can optionally specify `locales` to get products for specific regions. **Note**:
1. You can refine the results by specifying `offset` and `limit` values. If you don't specify them, by default, you'll get up to 10 products.
2. If you don't have product SKU, use the corresponding ID-based endpoint - `GET /products/{id}`.
# Partially update product by SKU
product.openapi patch /products/sku/{sku}/attributes
Product attributes are the objective and factual descriptions of products that shoppers see when they browse through an e-commerce platform. Attributes may be technical specifications like size, weight, etc., design specifications like color, material, etc., or basic specifications such as name, description, ID, etc. This endpoint is used to partially update attributes of the given product attributes. **Note**:
1. This endpoint is recommended over `PUT /products/sku/{sku}/attributes` (Update product attributes by SKU) if you want to update only specific attributes without affecting the others.
2. If you don't have product SKU, use the corresponding ID-based endpoint - `PATCH /products/{id}/attributes`.
# Remove product variants by SKU
product.openapi post /products/sku/{sku}/variants/actions/detach
When one or more variants of a product are discontinued or no longer required, you don't want them to appear as options. This endpoint provides the flexibility to remove up to 25 variants by SKU and manage product options, efficiently. **Note**:
1. Variants are only detached from the given product, not deleted. They can be reattached to the same or another product, at a later point.
2. At least one variant must be specified.
3. If you don't have product SKU, use the corresponding ID-based endpoint - `POST /products/{id}/variants/actions/detach`.
# Update product attributes by SKU
product.openapi put /products/sku/{sku}/attributes
Product attributes are the objective and factual descriptions of products that shoppers see when they browse through an e-commerce platform. Attributes may be technical specifications like size, weight, etc., design specifications like color, material, etc., or basic specifications such as name, description, ID, etc. This endpoint is used to update product attributes, completely replacing the existing ones. **Note**:
1. This is recommended over `PATCH /products/sku/{sku}/attributes`, if the update involves replacing all the attributes. If there are any missing or null fields in the request, the original values will be replaced with empty ones.
2. If you don't have product SKU, use the corresponding ID-based endpoint - `PUT /products/{id}/attributes`.
# Update product SKUs
product.openapi put /products/sku
You may need to update the SKUs of one or more products if the products have undergone significant improvements, and you need a way to differentiate between the updated version and the previous one. Or, you may want to address a typographical error or inconsistencies in the SKU naming conventions. This endpoint updates SKUs for up to 25 products. **Note**: Unless all SKUs are updated, the endpoint will fail.
# Product Catalog - Attributes API
Product team: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | License: [fabric API License](https://fabric.inc/api-license)
**Product Catalog** supports two types of attributes: Item Attributes and Category Attributes. Within fabric, a product could be an item, variant, or bundle. Product attributes are factual and objective descriptions that shoppers see when browsing through an e-commerce platform (website or mobile app). These attributes may include technical specifications such as size and weight, design specifications such as color and material, as well as basic details like name, description, and ID. Similarly, Category attributes define the characteristics of parent and children categories. They're essential for organizing products in logical groups, making it easier for shoppers to browse and find products on your platform with minimal cognitive load.
[Find out more about Product Catalog](https://developer.fabric.inc/v3/guides/product-catalog/overview)
[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsAttributes.json)
# Product Catalog API - Overview
## Product Catalog Overview
Product Catalog is a data organization tool that enables merchants to build a centralized source of product information. This information can include technical specifications such as size and weight, design specifications such as color and material, and generic details such as name, description, and ID.
Product categories allow merchants to organize items into logical parent-child groups to make finding products on the storefront easier for the shoppers. While configuring products, merchants can use validations to ensure data consistency and quality for each item and category.
Product Catalog has out-of-the-box integrations with fabric services such as Orders and Offers that enable merchants to add base prices and promotions to any products available in Product Catalog, including categories and collections.
Key Product Catalog capabilities include:
* **Catalog Management**: Create and manage products and services such as items, variants, and bundles. For example, an item could be a coffee table in oak. A variant could be that same coffee table, but in pine. A bundle could be the coffee table sold together with two matching end tables.
* **Taxonomy Management**: Define categories of products to create a structured hierarchy.
* **Distribution management**: Control product data availability for multiple channels and locales and use collections to curate subsets of products for sales and marketing goals, such as holiday sales or seasonal discounts.
* **Bulk Management**: Import product, category, and collection information in a CSV file and export catalog data into a CSV file.
* **Variant management**: Create and manage an unlimited number of variants to indicate that a product is available in different options, such as colors or sizes.
### Use Case
As an example, consider a furniture distributor with an extensive catalog that includes living, dining, and bedroom pieces who wants to display their products for sale on their storefront.
The merchant can upload each item they sell, either individually or in bulk with a CSV file. Attributes of each piece, ranging from physical characteristics such as dimensions and weight to construction characteristics such as materials and finishes can all be included. Variants of items are also supported, so that a coffee table available in mahogany, oak, and pine can all be considered different versions of the same item. In addition, items frequently sold together can be grouped into bundles so that the coffee table can be sold along with a pair of matching end tables.
The merchant can then create a hierarchy of relationships among the items in the catalog that make the most sense to their business. That means the coffee table could be in a category with all living room furniture, or a category of all tables, or both.
Merchants can group items from different categories into themed collections to boost the sales or marketing campaigns. For example, for a Black Friday promotion, merchant can assemble a living room set collection that includes a coffee table, end tables, sofa, loveseat, and lamps.
# API Apps
### Overview
API apps allow multiple software programs to exchange data and make it easier for developers to create applications that leverage external resources and capabilities.
fabric authenticates and authorizes API requests using your account’s API keys. When using any of fabric’s APIs through an API client, you must include an API key as part of the requests. These keys are used to validate the permissions and access rights associated with the client before allowing access to a specific merchant's data.
Copilot has two types of API apps:
* System App: Generates an access token using a client ID and client secret to identify itself and to communicate with other systems. System Apps don't use fabric Identity to authenticate end users, instead use system-to-system communications with fabric APIs. If you want to use your own identity provider, you must create a System App.
* User App: Uses fabric Identity to authenticate end users. A user app relies on the login page that fabric Identity hosts for end users to log in. User apps are used by e-commerce apps that use fabric Identity for their authentication and authorization.
For more information about user apps and system apps, see the [APP Types](/v3/api-reference/authentication-v3/concepts#app-types) section.
### Terminologies
The following terminologies are used when creating or managing fabric API apps:
* **App Name:** The name of the app.
* **Role:** The scope of permissions for the app.
* **User Pool:** The user directory where user credentials are stored.
* **Redirect URL:** The URL the user should be redirected to after successful authentication.
* **Logout URL:** The URL the user should be redirected to after logout.
* **Authorization URL:** The URL to which the user will provide their client id and client secret to. If authorization is successful, then the user will be redirected to their redirect URL with an access token.
* **Client ID:** Public identifier of an app.
* **Client Secret:** The Secret known only to your application and the authorization server used to authenticate the app.
### Related Topics
* [Creating a System App](/v3/guides/settings/api-apps/creating-system-app)
* [Creating a User App](/v3/guides/settings/api-apps/creating-user-app)
* [Managing API Apps](/v3/guides/settings/api-apps/managing-api-apps)
* [Concepts Page](/v3/api-reference/authentication-v3/concepts)
# Creating a System App
### Overview
A **System App** is a type of API app that generates an access token to identify itself using a client ID and client secret. System Apps don't use fabric Identity to authenticate end users; rather they use system-to-system communications with fabric APIs. If you are using your own identity provider, you should create a System App.
Visit the [Concepts page](/v3/api-reference/authentication-v3/concepts) to learn more about System Apps.
### Prerequisites
Ensure you have [admin or restricted admin privileges](/v3/guides/settings/rbac/role-based-access-control) to create a new System App.
### Procedure
1. In the left menu, click **Settings > Developer Tools**.
2. Click **API Apps**.\
The **API Apps** page is displayed.
3. Click **Create API App**.\
The **Create an app** page is displayed.
4. In the **App name** field, enter the name of the application.
5. (Optional) In the **Description** field, enter a description.
6. In the **App type** field, select **System App**.\
The Role field appears.
7. In the **Role** field, select one of the following roles for the app:
* **Admin:** Has admin access for all fabric products.
* **Developer Admin:** Can create server-to-server apps and has admin access for all fabric products.
* **Developer Viewer:** Can view the details of a server-to-server app and has viewer role access for all fabric products.
* **Editor:** Has editor role access for all fabric products.
* **Experiences Editor:** Creates content for use on storefronts in Experiences.
* **Experiences Publisher:** Reviews and approves content to be published in Experiences.
* **Offers Editor:** Creates, updates, and deletes prices, promotions, customer segments, and exclusions in Offers.
* **Orders & Inventory Editor:** Manages orders, locations, inventory, networks, and settings in Orders and Inventory.
* **Product Catalog Editor:** Creates and updates catalog changes in Product Catalog.
* **Viewer:** Has viewer role access for all fabric products.
8. Click **Create**.
The new System App is created.
### Related Topics
* [API Apps](/v3/guides/settings/api-apps/api-apps)
* [Creating a User App](/v3/guides/settings/api-apps/creating-user-app)
* [Managing API Apps](/v3/guides/settings/api-apps/managing-api-apps)
* [Concepts Page](/v3/api-reference/authentication-v3/concepts)
* [fabric APIs - Overview](/v3/api-reference/getting-started/overview)
* [Getting Started with fabric APIs](/v3/api-reference/getting-started/getting-started-with-fabric-apis)
* [Making Your First API Call](/v3/api-reference/getting-started/api-authentication)
# Creating a User App
### Overview
A User App is a type of API app that uses fabric Identity to authenticate end users. A User App relies on the login page that fabric Identity hosts in order for end users to log in. It's suitable for e-commerce apps that direct their authentication and authorization needs to fabric Identity.
Visit the [Concepts page](/v3/api-reference/authentication-v3/concepts) to learn more about User Apps.
### Prerequisites
Ensure you have [admin or restricted admin](/v3/guides/settings/rbac/role-based-access-control) privileges to create a new user app.
### Procedure
1. In the left menu, click **Settings > Developer Tools**.
2. Click **API Apps**.\
The **API Apps** page is displayed.
3. Click **Create API App**.\
The **Create an app** page is displayed.
4. In the **App name** field, enter the name of the application.
5. (Optional) In the **Description** field, enter a description.
6. In the **App type** field, select **User App**.\
The User Pool, Usage Type, Redirect URL, and Logout URL fields appear.
7. In the **[User Pool](/v3/api-reference/authentication-v3/concepts#user-pools)** field, select default.\
If you want to create a new user pool, contact [fabric Customer Support](https://support.fabric.inc/hc/en-us).
8. In the **Usage Type** field, choose one of the following options:
1. **Headless shopper authentication:** Supports a custom log in experience using fabric APIs.
2. **Hosted log in:** Shopper must verify their identity by logging in through Okta.
9. In the **Redirect URL** field, enter a URL to redirect the user to after successful authentication.
10. In the **Logout URL** field, enter a URL to redirect the user to after logging out.
11. Click **Create**.
The new User App is created.
### Related Topics
* [API Apps](/v3/guides/settings/api-apps/api-apps)
* [Creat