# Fabric

## Docs

- [Build, Extend, and Elevate](https://developer.fabric.inc/home): 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.
- [Create user address](https://developer.fabric.inc/v2/api-reference/authentication-v1/address/create-user-address): Create address for specified user
- [Delete specific address](https://developer.fabric.inc/v2/api-reference/authentication-v1/address/delete-specific-address): Delete specified address for specified user
- [Get specific address](https://developer.fabric.inc/v2/api-reference/authentication-v1/address/get-specific-address): Get specified address for specified user
- [List user's addresses](https://developer.fabric.inc/v2/api-reference/authentication-v1/address/list-users-addresses): List all addresses for specified user
- [Address](https://developer.fabric.inc/v2/api-reference/authentication-v1/address/overview)
- [Set default address](https://developer.fabric.inc/v2/api-reference/authentication-v1/address/set-default-address): Set default address for specified user
- [Unset default address](https://developer.fabric.inc/v2/api-reference/authentication-v1/address/unset-default-address): Unset default address for specified user
- [Update specific address](https://developer.fabric.inc/v2/api-reference/authentication-v1/address/update-specific-address): Update specified address for specified user
- [Change password](https://developer.fabric.inc/v2/api-reference/authentication-v1/auth/change-password): Change password for signed-in user<br />Note: Use this endpoint to change a user's password
- [Log in local user](https://developer.fabric.inc/v2/api-reference/authentication-v1/auth/log-in-local-user): Log in local user with password
- [Auth](https://developer.fabric.inc/v2/api-reference/authentication-v1/auth/overview)
- [Refresh local user](https://developer.fabric.inc/v2/api-reference/authentication-v1/auth/refresh-local-user): Refresh local user with refresh token
- [Reset password](https://developer.fabric.inc/v2/api-reference/authentication-v1/auth/reset-password): Reset password for specified user
- [Update password](https://developer.fabric.inc/v2/api-reference/authentication-v1/auth/update-password): Update user password<br />Note: This endpoint is called internally by the "change password" endpoint
- [Verify reset token](https://developer.fabric.inc/v2/api-reference/authentication-v1/auth/verify-reset-token): Verify password reset token
- [Identity APIs](https://developer.fabric.inc/v2/api-reference/authentication-v1/identity-apis)
- [Create guest user](https://developer.fabric.inc/v2/api-reference/authentication-v1/user/create-guest-user): Create guest user
- [Create local user](https://developer.fabric.inc/v2/api-reference/authentication-v1/user/create-local-user): Create local user
- [Get user](https://developer.fabric.inc/v2/api-reference/authentication-v1/user/get-user): Get user details
- [User](https://developer.fabric.inc/v2/api-reference/authentication-v1/user/overview)
- [Update user name](https://developer.fabric.inc/v2/api-reference/authentication-v1/user/update-user-name): Update a user's login user name
- [Adjust prices for a cart item](https://developer.fabric.inc/v2/api-reference/cart-api/adjustments/adjust-prices-for-a-cart-item): Adjust prices for a specific line item within the specified cart.
- [Adjust prices for a specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/adjustments/adjust-prices-for-a-specific-cart): Adjust prices for a specific cart's total amount.
- [Delete a specific price adjustment information for a cart item](https://developer.fabric.inc/v2/api-reference/cart-api/adjustments/delete-a-specific-price-adjustment-information-for-a-cart-item): Delete a specific price adjustment entity from the list of price adjustments made to a particular line item in a given cart. A price adjustment entity is a single object in the price adjustments array.
- [Delete a specific price adjustment information from a given cart](https://developer.fabric.inc/v2/api-reference/cart-api/adjustments/delete-a-specific-price-adjustment-information-from-a-given-cart): Delete a specific price adjustment entity from the list of price adjustments made to the specified cart's total amount. A price adjustment entity is a single object in the price adjustments array.
- [Get all price adjustment details for a specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/adjustments/get-all-price-adjustment-details-for-a-specific-cart): Get all the price adjustments made to a specific cart.
- [Get all price adjustments for a cart item](https://developer.fabric.inc/v2/api-reference/cart-api/adjustments/get-all-price-adjustments-for-a-cart-item): Get all the price adjustments made to a specific line item within the given cart.
- [Adjustments](https://developer.fabric.inc/v2/api-reference/cart-api/adjustments/overview)
- [Update a specific price adjustment information for a cart item](https://developer.fabric.inc/v2/api-reference/cart-api/adjustments/update-a-specific-price-adjustment-information-for-a-cart-item): Update a specific price adjustment entity from the list of price adjustments made to a particular line item in a given cart. A price adjustment entity is a single object in the price adjustments array.
- [Update a specific price adjustment information for a given cart](https://developer.fabric.inc/v2/api-reference/cart-api/adjustments/update-a-specific-price-adjustment-information-for-a-given-cart): Update a specific price adjustment entity from the list of price adjustments made to the specified cart's total amount. A price adjustment entity is a single object in the price adjustments array.
- [Add or update cart attributes](https://developer.fabric.inc/v2/api-reference/cart-api/attribute/add-or-update-cart-attributes): Add or update attributes for a specified cart
- [Add or update item attributes and fees](https://developer.fabric.inc/v2/api-reference/cart-api/attribute/add-or-update-item-attributes-and-fees): Add or update attributes and fees associated with a specific line item in a given cart.
- [Add or update specific item attribute](https://developer.fabric.inc/v2/api-reference/cart-api/attribute/add-or-update-specific-item-attribute): Add or update specified cart item attribute
- [Delete a specific item attribute](https://developer.fabric.inc/v2/api-reference/cart-api/attribute/delete-a-specific-item-attribute): Deletes a specified attribute from a specified item in a specified cart
- [Delete item fees](https://developer.fabric.inc/v2/api-reference/cart-api/attribute/delete-item-fees): Delete a specific fee associated with an individual line item of the specified cart.
- [Delete specific cart attribute](https://developer.fabric.inc/v2/api-reference/cart-api/attribute/delete-specific-cart-attribute): Deletes a specified attribute and metadata from a specified cart
- [Delete specific cart fee](https://developer.fabric.inc/v2/api-reference/cart-api/attribute/delete-specific-cart-fee): Delete a specific fee associated with the given cart.
- [Attribute](https://developer.fabric.inc/v2/api-reference/cart-api/attribute/overview)
- [Cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart)
- [Add items to cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/add-items-to-cart): Add items to cart, or create a new cart if cart does not exist
- [Apply a specific promotion to all items in a specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/apply-a-specific-promotion-to-all-items-in-a-specific-cart): Apply a specified promotion or coupon to all items of a specific cart
- [Create an empty cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/create-an-empty-cart): Create an empty cart with optional customer or configuration parameters
- [Delete cart items](https://developer.fabric.inc/v2/api-reference/cart-api/cart/delete-cart-items): Deletes cart information after purchase of cart items is complete. This is a soft delete that sets the status of the cart to *deleted* after the cart items are purchased and the order moves to shipping. The cart ID is not deleted.
- [Delete items from specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/delete-items-from-specific-cart): Removes all items from specified cart
- [Get all carts](https://developer.fabric.inc/v2/api-reference/cart-api/cart/get-all-carts): Get all carts belonging to the user or to a merchant by authorization token
- [Get specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/get-specific-cart): Get cart for specified cart ID
- [Merge Carts](https://developer.fabric.inc/v2/api-reference/cart-api/cart/merge-carts): Merge guest cart and user cart, CSR cart to user cart and vice versa
- [Merge carts](https://developer.fabric.inc/v2/api-reference/cart-api/cart/merge-carts-1): Merges guest cart and logged-in user cart
- [Cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/overview)
- [Remove an individual promotion from all items in a specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/remove-an-individual-promotion-from-all-items-in-a-specific-cart): Removes a specified promotion from all items in specified cart
- [Remove an item from the cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/remove-an-item-from-the-cart): Deletes a specified item from a specified cart
- [Replaces customer context in cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/replaces-customer-context-in-cart): Create or replace customer context in the cart.
- [Search for carts](https://developer.fabric.inc/v2/api-reference/cart-api/cart/search-for-carts): Search for carts meeting specified criteria, including creation date, status, user, approver, and purchase order
- [Soft reserve cart items](https://developer.fabric.inc/v2/api-reference/cart-api/cart/soft-reserve-cart-items): Using this endpoint, you can reserve items, that are added to a specific cart, in inventory. Additionally, you can update the reservation information if such information is already available for the items of the cart.
- [Split the cart item by quantity](https://developer.fabric.inc/v2/api-reference/cart-api/cart/split-the-cart-item-by-quantity): Split a specific line item into multiple line items by given quantity. This allows adding different attributes (for example, different shipping locations) to each split line item. Each split line item is assigned a unique line item ID after the split.
- [Update items in specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/update-items-in-specific-cart): Updates item information, such as quantity, price, attributes, in a specified cart
- [Update status of specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/cart/update-status-of-specific-cart): Update status of specified cart
- [Create order draft](https://developer.fabric.inc/v2/api-reference/cart-api/order-draft/create-order-draft): Create an order draft for a given cart. During the order draft creation process, payment details are validated before generating the draft. Additionally, it triggers an event if the "ORDER_DRAFT" webhook event is subscribed.
- [Get all order drafts by filter parameters](https://developer.fabric.inc/v2/api-reference/cart-api/order-draft/get-all-order-drafts-by-filter-parameters): Get a paginated list of all order drafts by tenantId (`account`). Optionally, you can provide customer ID to get list of order drafts.
- [Get order draft by ID](https://developer.fabric.inc/v2/api-reference/cart-api/order-draft/get-order-draft-by-id): Get order draft details by order draft ID.
- [Get order draft by order number](https://developer.fabric.inc/v2/api-reference/cart-api/order-draft/get-order-draft-by-order-number): Get all the generated order drafts by order number.
- [Create shipping details for all items specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/shipping/create-shipping-details-for-all-items-specific-cart): Create shipping details for all items in a specified cart. Shipping details are identified by a unique `shippingDetailsId`, and include the shipment's delivery address, shipment method, pickup persons' details, warehouse ID, store ID, and more.
- [Create shipping details for specific items in specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/shipping/create-shipping-details-for-specific-items-in-specific-cart): Create shipping details for specified items in a specified cart. Shipping details are identified by a unique `shippingDetailsId`, and include the shipment's delivery address, shipment method, pickup persons' details, warehouse ID, store ID, and more.
- [Get specific shipping details for a specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/shipping/get-specific-shipping-details-for-a-specific-cart): Get specified shipping details of items in a specified cart
- [Shipping](https://developer.fabric.inc/v2/api-reference/cart-api/shipping/overview)
- [Remove `shippingDetailsId` from cart items](https://developer.fabric.inc/v2/api-reference/cart-api/shipping/remove-`shippingdetailsid`-from-cart-items): Remove `shippingDetailsId` from cart items
- [Update shipping details for all items in a specific cart](https://developer.fabric.inc/v2/api-reference/cart-api/shipping/update-shipping-details-for-all-items-in-a-specific-cart): Update shipping details for all items in a specified cart. Shipping details include the shipment's delivery address, shipment method, pickup persons' details, warehouse ID, store ID, and more.
- [Checkout](https://developer.fabric.inc/v2/api-reference/checkout-api/checkout)
- [Create checkout](https://developer.fabric.inc/v2/api-reference/checkout-api/checkout/create-checkout): Create checkout operation on all the items of a specific cart which is identified by a unique `cartId`. Along with `cartId`, checkout operation includes merchant account Id, amount to be paid, tax to be imposed on cart items and shipping address, and some other details.
- [Checkout](https://developer.fabric.inc/v2/api-reference/checkout-api/checkout/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/account/create-account)
- [null](https://developer.fabric.inc/v2/api-reference/customer/account/delete-account)
- [null](https://developer.fabric.inc/v2/api-reference/customer/account/get-account)
- [null](https://developer.fabric.inc/v2/api-reference/customer/account/get-accounts-children)
- [null](https://developer.fabric.inc/v2/api-reference/customer/account/list-accounts)
- [Account](https://developer.fabric.inc/v2/api-reference/customer/account/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/account/update-account)
- [null](https://developer.fabric.inc/v2/api-reference/customer/address/create-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/address/delete-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/address/get-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/address/list-addresses)
- [Address](https://developer.fabric.inc/v2/api-reference/customer/address/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/address/update-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/contract-pricelist/bulk-update-contract-pricelist)
- [null](https://developer.fabric.inc/v2/api-reference/customer/contracts/bulk-upload-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/contracts/create-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/contracts/delete-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/contracts/get-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/contracts/list-contracts)
- [Contracts](https://developer.fabric.inc/v2/api-reference/customer/contracts/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/contracts/resurrect-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/contracts/update-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/contracts/use-pre-signed-url-to-upload-a-contract)
- [Core Concepts](https://developer.fabric.inc/v2/api-reference/customer/core-concepts)
- [Customer Service](https://developer.fabric.inc/v2/api-reference/customer/customer-service)
- [null](https://developer.fabric.inc/v2/api-reference/customer/individual-addresses/create-individuals-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/individual-addresses/delete-individuals-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/individual-addresses/get-indivudals-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/individual-addresses/list-individuals-addresses)
- [Individual Addresses](https://developer.fabric.inc/v2/api-reference/customer/individual-addresses/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/individual-addresses/update-individuals-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/individual/create-individual)
- [null](https://developer.fabric.inc/v2/api-reference/customer/individual/delete-individual-customer)
- [null](https://developer.fabric.inc/v2/api-reference/customer/individual/get-individual-customer)
- [null](https://developer.fabric.inc/v2/api-reference/customer/individual/list-individuals)
- [Individual](https://developer.fabric.inc/v2/api-reference/customer/individual/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/individual/update-individual)
- [null](https://developer.fabric.inc/v2/api-reference/customer/internal-parties-party/create-association-between-internal-party-and-party)
- [Internal Parties Only](https://developer.fabric.inc/v2/api-reference/customer/internal-parties-party/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/internal-parties-party/remove-association-between-internal-party-and-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/internal-party/create-internal-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/internal-party/delete-internal-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/internal-party/get-internal-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/internal-party/list-internal-parties)
- [Internal Party](https://developer.fabric.inc/v2/api-reference/customer/internal-party/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/internal-party/resurrect-internal-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/internal-party/update-internal-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-addresses/create-organization-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-addresses/delete-organization-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-addresses/get-organization-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-addresses/list-organization-addresses)
- [Organization Addresses](https://developer.fabric.inc/v2/api-reference/customer/organization-addresses/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-addresses/update-organization-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-contracts/create-organization-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-contracts/delete-organization-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-contracts/get-organization-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-contracts/list-organization-contracts)
- [Organization Contracts](https://developer.fabric.inc/v2/api-reference/customer/organization-contracts/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-contracts/resurrect-organization-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-contracts/update-organization-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-group-addresses/list-orgaization-group-addresses)
- [Organization Group Addresses](https://developer.fabric.inc/v2/api-reference/customer/organization-group-addresses/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-group-users/list-organization-group-users)
- [Organization Group Users](https://developer.fabric.inc/v2/api-reference/customer/organization-group-users/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-groups/create-organization-group)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-groups/delete-orgaization-group)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-groups/get-orgaization-group)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-groups/list-organizations-groups)
- [Organization Groups](https://developer.fabric.inc/v2/api-reference/customer/organization-groups/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-groups/updates-organization-group)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-users/create-organization-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-users/delete-organization-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-users/get-organization-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-users/list-organizations-users)
- [Organization Users](https://developer.fabric.inc/v2/api-reference/customer/organization-users/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization-users/update-organization-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization/create-organization)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization/delete-organization)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization/get-organization)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization/list-organizations)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization/resurrect-organization)
- [null](https://developer.fabric.inc/v2/api-reference/customer/organization/update-organization)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-account/delete-party-account)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-account/link-party-and-account)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-account/list-accounts-by-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-account/list-parties-by-account)
- [Party Account](https://developer.fabric.inc/v2/api-reference/customer/party-account/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-address/get-party-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-address/link-party-and-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-address/list-party-addresses)
- [Party Address](https://developer.fabric.inc/v2/api-reference/customer/party-address/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-contracts/list-contracts-by-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-contracts/list-parties-by-contract)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-trait/bulk-create-party-trait)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-trait/bulk-delete-party-traits)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-trait/create-party-trait)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-trait/delete-party-trait)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-trait/get-parties-for-a-trait)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party-trait/get-traits-for-a-party)
- [Party Trait](https://developer.fabric.inc/v2/api-reference/customer/party-trait/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party/create-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party/delete-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party/get-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party/get-party-with-type)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party/list-parties)
- [Party](https://developer.fabric.inc/v2/api-reference/customer/party/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/party/update-party)
- [Search](https://developer.fabric.inc/v2/api-reference/customer/search/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/search/search-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/search/search-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/trait/create-trait)
- [null](https://developer.fabric.inc/v2/api-reference/customer/trait/delete-trait)
- [null](https://developer.fabric.inc/v2/api-reference/customer/trait/list-traits)
- [Trait](https://developer.fabric.inc/v2/api-reference/customer/trait/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/trait/update-trait)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-address/create-user-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-address/delete-user-address)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-address/list-addresses-for-single-user)
- [User Address](https://developer.fabric.inc/v2/api-reference/customer/user-address/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-internal-party/link-user-and-internal-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-internal-party/list-internal-parties-by-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-internal-party/list-users-by-internal-party)
- [User Internal Party](https://developer.fabric.inc/v2/api-reference/customer/user-internal-party/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-internal-party/unlink-user-intenal-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-party/get-party-by-user-and-parent-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-party/link-user-to-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-party/list-parties-by-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-party/list-users-in-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-party/unlink-user-from-party)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-trait/bulk-create-user-trait)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user-trait/bulk-delete-user-trait)
- [User Trait](https://developer.fabric.inc/v2/api-reference/customer/user-trait/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user/bulk-upload-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user/create-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user/delete-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user/get-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user/list-users)
- [User](https://developer.fabric.inc/v2/api-reference/customer/user/overview)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user/update-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/user/use-pre-signed-url-to-upload-a-user)
- [null](https://developer.fabric.inc/v2/api-reference/customer/users--organization/get-all-organizations-for-a-single-user)
- [Get connections of a single vendor](https://developer.fabric.inc/v2/api-reference/dropship/connections/get-connections-of-a-single-vendor): Gets the connection details for a specified vendor
- [Get vendor connections](https://developer.fabric.inc/v2/api-reference/dropship/connections/get-vendor-connections): Gets a list of vendor connections.
- [Getting Started with Dropship Merchant APIs](https://developer.fabric.inc/v2/api-reference/dropship/developer-guide/getting-started-with-dropship-merchant-apis)
- [Dropship API](https://developer.fabric.inc/v2/api-reference/dropship/dropship-api)
- [Get a list of variant inventory positions](https://developer.fabric.inc/v2/api-reference/dropship/inventory/get-a-list-of-variant-inventory-positions): Get variants and their inventory details, including total inventory and inventory based on location.To get items with inventory updated since a Unix epoch Time, pass the `updated_at_{operator}` as a query paramater, where `{operator}` is <br /> **lt** (less than) <br /> **lte** (less than or equal) <br /> **gt** (greater than) <br /> **gte** (greater than or equal).
- [Get inventory of a single variant](https://developer.fabric.inc/v2/api-reference/dropship/inventory/get-inventory-of-a-single-variant): Gets the inventory position for a single variant.
- [Acknowledge receipt of an invoice.](https://developer.fabric.inc/v2/api-reference/dropship/invoices/acknowledge-receipt-of-an-invoice): Retailers, generally, include is_acknowledged=0 as a query string parameter to get only new invoices. Then, for each shipment returned, the retailer should process the shipment and update any necessary internal systems (such as OMS or ERP). After processing a shipment successfully, the retailer should acknowledge the shipment using this endpoint so that subsequent queries to the /shipments/?is_acknowledged=0 endpoing does not return processed shipments.
- [Get details of a single invoice](https://developer.fabric.inc/v2/api-reference/dropship/invoices/get-details-of-a-single-invoice): Gets details of a single invoice
- [List invocies from vendors](https://developer.fabric.inc/v2/api-reference/dropship/invoices/list-invocies-from-vendors): Gets a list of invoices from vendors
- [Create a new order (for a single vendor)](https://developer.fabric.inc/v2/api-reference/dropship/orders/create-a-new-order-for-a-single-vendor): Accepts orders from retailers for a single vendor. When an order is created by a retailer, the order is immediately distributed to the vendor however the vendor is connected to fabric (example: EDI, API, or portal)
- [Create a new order (mixed vendors)](https://developer.fabric.inc/v2/api-reference/dropship/orders/create-a-new-order-mixed-vendors): Creates a new order (mixed vendors)
- [Get orders](https://developer.fabric.inc/v2/api-reference/dropship/orders/get-orders): Gets a list of orders.
- [Get single order details](https://developer.fabric.inc/v2/api-reference/dropship/orders/get-single-order-details): Gets the details of a single order by specifying retailer ID and order ID.
- [Acknowledge receipt of a new permit](https://developer.fabric.inc/v2/api-reference/dropship/products/acknowledge-receipt-of-a-new-permit): Retailers, generally, include is_acknowledged=0 as a query parameter to get only new permits. Then, for each permit returned, retailers should process the permit and update any necessary internal systems, such as Product Catalog. After processing a permit successfully, they should acknowledge the permit using this endpoint so that subsequent queries to the /shipments/?is_acknowledged=0 endpoint does not return the processed shipment.
- [Get active permits](https://developer.fabric.inc/v2/api-reference/dropship/products/get-active-permits): Gets active permits by retailer ad permit IDs.
- [Get details of a single variant](https://developer.fabric.inc/v2/api-reference/dropship/products/get-details-of-a-single-variant): Gets the details of a specified variant.
- [Get single product details](https://developer.fabric.inc/v2/api-reference/dropship/products/get-single-product-details): Gets the details for a specified product.
- [Get variants](https://developer.fabric.inc/v2/api-reference/dropship/products/get-variants): Gets variants 
- [List products](https://developer.fabric.inc/v2/api-reference/dropship/products/list-products): Gets a list of products.
- [Update attributes of a variant](https://developer.fabric.inc/v2/api-reference/dropship/products/update-attributes-of-a-variant): Updates the attributes of a variant
- [Acknowledge return](https://developer.fabric.inc/v2/api-reference/dropship/returns/acknowledge-return): Acknowledge receipt of an approved return.
- [Get a list of returns](https://developer.fabric.inc/v2/api-reference/dropship/returns/get-a-list-of-returns): Gets a list of returns. RMAs are issued when merchandise needs to be, or has already been, returned to the vendor. Either party (vendor or retailer) can initiate the return. Once created, the return's status is set to *pending* while the vendor awaits the delivery of the items to the return address. Upon receipt, the vendor will inspect the items, and if all is well, *close* the return.
- [Get details of a return.](https://developer.fabric.inc/v2/api-reference/dropship/returns/get-details-of-a-return): Gets the details of a return.
- [Register a pending return for a vendor](https://developer.fabric.inc/v2/api-reference/dropship/returns/register-a-pending-return-for-a-vendor): Registers a pending return for a vendor.
- [Acknowledge shipment receipt](https://developer.fabric.inc/v2/api-reference/dropship/shipments/acknowledge-shipment-receipt): After successfully processing a shipment, the shipment should be acknowledged so that it does not appear in subsequent requests to /shipments/?is_acknowledged=0.
- [Get details of a single shipment.](https://developer.fabric.inc/v2/api-reference/dropship/shipments/get-details-of-a-single-shipment): Gets the details of a specified single shipment.
- [List fulfillments or shipments from vendors](https://developer.fabric.inc/v2/api-reference/dropship/shipments/list-fulfillments-or-shipments-from-vendors): Gets a list of fulfillments or shipments that contain details about the variants included in the shipment along with the tracking number. Generally, the is_acknowledged=0 is passed as a query to return only new shipments not yet processed by the retailer.
- [Get Discounts](https://developer.fabric.inc/v2/api-reference/loyalty/discounts/get-discounts): Gets applicable discounts for a transaction. The discounts are categorized as <br /> 1) **Transaction-level discounts**: Applied on the whole transaction. For example, if the transaction is for $100, the discount is applied by percentage or amount to the whole transaction amount. This category includes tier-specific discounts. <br /> 2) **Item-level discounts**: Applied on specific SKU so that discount percentage or amount is applied to specific product (regardless of the quantity). <br /> 3) **Miscellaneous discounts** - This category captures all other types of discounts.
- [Earn Points](https://developer.fabric.inc/v2/api-reference/loyalty/earn/earn-points): Earns and accumulates points based on core (earn and burn) rules, promotional rules, etc. set at the club level. It is possible, for instance, to set rules that a member will earn 10 points for every $100 spent in a purchase transaction, and 10 points are equivalent to $2. Rules are customizable based on the requirement. <br /> Points are categorized as: <br /> 1) Base points: Earned in any purchase transaction  based on the core rule. <br /> 2) Bonus points: Earned as a bonus for example on a large purchase. <br /> 3) Promotional Points: Earned as part of promotional events. <br /> 4) Restricted Points: Points to be used only on specified stores. <br /> <br /> `Earn` endpoint uses the following formula for validating Payload: <br /> 1) `Amount Paid = Gross Amount - Discounts` <br /> 2) `Net Amount = Gross Amount - Taxes - Discounts` <br /> 3) At the Transaction Item level: `Item Price - (Discount/Quantity) = Net Amount / Quantity` <br /> 4) `Total of all Transaction Items' Gross Amount = Total Gross Amount`
- [Get Transactions](https://developer.fabric.inc/v2/api-reference/loyalty/earn/get-transactions): Gets transactions based on the limit (default: 20) and offset (default: 0) values. This endpoint serves to populate the transaction listing page and as a search function based on the query parameters such as date range, transaction ID, etc.
- [Reverse Earned Points](https://developer.fabric.inc/v2/api-reference/loyalty/earn/reverse-earned-points): When a member cancels a purchase transaction or returns an order, this endpoint cancels all the points earned in that transaction.
- [Get Action Reasons](https://developer.fabric.inc/v2/api-reference/loyalty/inquire/get-action-reasons): Gets reason codes and reason descriptions based on the actions defined for your business. This serves as a log for tracking and analysis. As an example, an action such as 'points transfer' has a specific code for it and a description such as 'transferring to relative' associated with it. In addition to the predefined actions, custom actions can be added.
- [Get Expired Points](https://developer.fabric.inc/v2/api-reference/loyalty/inquire/get-expired-points): Gets expired points of a member for a date range, in UTC format. When date range is not specified, all the expired points are retrieved
- [Get Member Points](https://developer.fabric.inc/v2/api-reference/loyalty/inquire/get-member-points): Gets all active and pending (excluding expired) member points along with the points breakdown.
- [Get Point Types](https://developer.fabric.inc/v2/api-reference/loyalty/inquire/get-point-types): Gets all the point types configured for your business. The point types are categorized as: <br /> 1) Base points: Earned in any purchase transaction  based on the core rule. <br /> 2) Bonus points: Earned as a bonus for example on a large purchase. <br /> 3) Promotional Points: Earned as part of promotional events. <br /> 4) Restricted Points: Points to be used only on specific entity/stores. <br /> **Note**: You may choose only the point types that apply to your business.
- [Get Points to be Expired](https://developer.fabric.inc/v2/api-reference/loyalty/inquire/get-points-to-be-expired): Gets all points that will expire within a year starting at 30 days, 60 days, and up to one year.
- [Get Redeemable Points](https://developer.fabric.inc/v2/api-reference/loyalty/inquire/get-redeemable-points): Gets the redeemable points of a member on a given entity. <br /> When points in the member account reach a defined threshold value, the points are converted to rewards, which can be redeemed in the future purchases. <br /> **Note**: The points to rewards conversion may be manual or automatic depending on how it is configured.
- [Member APIs](https://developer.fabric.inc/v2/api-reference/loyalty/member-apis)
- [Activate Points](https://developer.fabric.inc/v2/api-reference/loyalty/members/activate-points): Updates the status of the points from Pending to Active. When setToPending flag is true, the duration in which the points will be in Pending status must be specified between 0-24 hours. When it is 0, the endpoint must be run manually (otherwise, the points earned will remain in Pending status). When the duration is between 1-24 hours, the points stay in Pending status only for the defined period. This endpoint can be configured to run automatically to activate the points. **Note**: Points in the Pending status reflect in the account balance but they can be redeemed only after they reach the defined threshold value and is in Active status.
- [Adjust Points](https://developer.fabric.inc/v2/api-reference/loyalty/members/adjust-points): Allows points adjustment by adding or deducting points from the member’s loyalty account. <br /> **Note**: <br /> 1) Daily cap for adjustment is configurable as per the role requirements. <br /> 2) Point adjustments are recorded as a transaction, where a pre-defined reason code must be selected.
- [Enroll Member](https://developer.fabric.inc/v2/api-reference/loyalty/members/enroll-member): After setting up your loyalty program with fabric, the next crucial step is to enroll members to the program. This endpoint enrolls a loyalty member into a default tier associated with a club. <br /> **Note**: Only a single member can be enrolled at a time.
- [Get Members](https://developer.fabric.inc/v2/api-reference/loyalty/members/get-members): Gets the details of all members of a parent company. Results can be narrowed down by using the query parameters. By specifying the loyaltyNumber or the profileId as query parameter, you can get details of a single member. <br /> **Note**: <br /> 1) Member must be already part of the loyalty program. <br /> 2) Query parameter used to get results must be part of member information.
- [Update Member](https://developer.fabric.inc/v2/api-reference/loyalty/members/update-member): Updates details of an existing member. <br /> **Note**: Only a single member can be updated at a time.
- [Cancel Rewards](https://developer.fabric.inc/v2/api-reference/loyalty/redeem/cancel-rewards): Loyalty points that are converted into reward certificates have an expiration date. Members can cancel their rewards if they are unable to use them before expiration or do not want to use them. The endpoint converts the rewards back into points, for future use. <br /> **Note**: Once the reward is redeemed, it cannot be cancelled. If the member cancels or returns an order, the rewards are reversed back to points using the `Reverse Redeemed Reward` endpoint - POST v1/redeem/reverse.
- [Issue Reward](https://developer.fabric.inc/v2/api-reference/loyalty/redeem/issue-reward): Issues a reward certificate based on the member's request or when the points in the member's account reach a configurable threshold. <br /> **Note** - A single reward is issued at a time. <br /> When the redemptionChoice is set to 'auto', the points are automatically converted to rewards. When the redemptionChoice is 'bank,' the points are converted based on the member's request.<br /> Response of this endpoint includes a redemptionCode, which is required to redeem the reward in the future.
- [Redeem Rewards](https://developer.fabric.inc/v2/api-reference/loyalty/redeem/redeem-rewards): Confirms the redemption and marks the reward as used. This is done based on the redemptionCode that is generated from the response of the 'Issue Variable Rewards' - POST /api/v1/redeem/reward/issue endpoint. <br /> **Note**: <br /> 1) Rewards have to be issued before they can be redeemed. <br /> 2) Rewards must be within their expiration date.
- [Reverse Redeemed Rewards](https://developer.fabric.inc/v2/api-reference/loyalty/redeem/reverse-redeemed-rewards): Converts rewards back to points when the order is cancelled or returned. <br /> **Note**: Once a reward has been redeemed, it cannot be cancelled. To cancel the rewards (convert back to points) before redemption, use the `Cancel Reward` endpoint - POST /api/v1/redeem/cancel.
- [Rewards History](https://developer.fabric.inc/v2/api-reference/loyalty/redeem/rewards-history): Gets status-wise (Active, Cancelled, Redeemed, Reversed, etc.) details of all the rewards of a member. <br /> **Note**: When the profileId query-param is not specified, this endpoint gets all rewards for all members of a company.
- [Generate authorization token for local user](https://developer.fabric.inc/v2/api-reference/offers-v1/login-api/generate-authorization-token-for-local-user): Generates an authorization token using which you can access fabric APIs. Ensure that you provide valid credentials to get an authorization token.
- [Login API](https://developer.fabric.inc/v2/api-reference/offers-v1/login-api/overview)
- [Offers](https://developer.fabric.inc/v2/api-reference/offers-v1/offers)
- [Add or Update Bulk Price](https://developer.fabric.inc/v2/api-reference/offers-v1/pricing/add-or-update-bulk-price): Enables you to add or update prices, in bulk. This API is secured by x-api-key.
- [Create Price](https://developer.fabric.inc/v2/api-reference/offers-v1/pricing/create-price): Enables you to create one or many prices in accordance with how many items are present in the itemIds array.
- [Delete price by ID](https://developer.fabric.inc/v2/api-reference/offers-v1/pricing/delete-price-by-id): Deletes a price in the service by item identifier or its SKU.
- [Get Offers for Items by Item IDs](https://developer.fabric.inc/v2/api-reference/offers-v1/pricing/get-offers-for-items-by-item-ids): Enables you to get offer price of items based on the item Ids.
- [Get Price](https://developer.fabric.inc/v2/api-reference/offers-v1/pricing/get-price): Retrieves paginated list of prices for all items
- [Get Price Details by Price ID](https://developer.fabric.inc/v2/api-reference/offers-v1/pricing/get-price-details-by-price-id): Enables you to get price details based on price ID
- [Get Prices of Items](https://developer.fabric.inc/v2/api-reference/offers-v1/pricing/get-prices-of-items): Enables you to get prices for all items.
- [null](https://developer.fabric.inc/v2/api-reference/offers-v1/pricing/overview)
- [Get List of Promotions](https://developer.fabric.inc/v2/api-reference/offers-v1/promotions/get-list-of-promotions): Enables you to retrieve all the active promotions, in a paginated response.
- [Get Promotions by promotion ID](https://developer.fabric.inc/v2/api-reference/offers-v1/promotions/get-promotions-by-promotion-id): Retrieves details of a specific promotion based on the specified promotion ID.
- [Promotions](https://developer.fabric.inc/v2/api-reference/offers-v1/promotions/overview)
- [Validate Promotions](https://developer.fabric.inc/v2/api-reference/offers-v1/promotions/validate-promotions): Enables you to validate a cart's promotions - coupon codes and implicit promotions - for specified item IDs.
- [Create attribute](https://developer.fabric.inc/v2/api-reference/offers-v2/attributes/create-attribute): Create a attribute record.
- [Delete a specific attribute](https://developer.fabric.inc/v2/api-reference/offers-v2/attributes/delete-a-specific-attribute): Delete a specific attribute by attributeId
- [Get a specific attribute](https://developer.fabric.inc/v2/api-reference/offers-v2/attributes/get-a-specific-attribute): Retrieves details of a specific attribute by attributeId
- [Get list of all attributes](https://developer.fabric.inc/v2/api-reference/offers-v2/attributes/get-list-of-all-attributes): Using this endpoint, you can get a paginated list of attributes. By specfiying the pagination criteria, such as `offset` and `limit`, you can tailor the search results.
- [Update a specific attribute](https://developer.fabric.inc/v2/api-reference/offers-v2/attributes/update-a-specific-attribute): Updates a specific attribute by attributeId
- [Get a list of all coupon codes](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon-code/list-coupon-codes): Retrieves a paginated list of all coupon codes.
- [Coupon Code](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon-code/overview)
- [Create coupon](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon/create-coupon): Enables you to create a coupon that can be applied to get discounts
- [Delete a coupon](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon/delete-a-coupon): Enables you to delete a specific coupon by ID.
- [Enable or disable a coupon](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon/enable-or-disable-a-coupon): This endpoint lets you toggle coupon status- enable or disable.<br /> **Enable a coupon:** Only disabled coupons can be enabled.<br /> **Disable a coupon:** Only *not expired* coupons can be disabled.
- [Generate coupon codes](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon/generate-coupon-codes): Enables you to generate coupon codes based on given parameters
- [Get a specific coupon](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon/get-a-specific-coupon): Retrieves details of a specific coupon by ID
- [Get list of all coupons](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon/get-list-of-all-coupons): Retrieves a paginated list of all coupons.
- [Coupon](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon/overview)
- [Search for coupons](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon/search-for-coupons): Use this endpoint to search for coupons based on filter conditions.
- [Update a coupon](https://developer.fabric.inc/v2/api-reference/offers-v2/coupon/update-a-coupon): Use this endpoint to update a specific coupon, by coupon ID.
- [Exporting Offers CSV](https://developer.fabric.inc/v2/api-reference/offers-v2/developer-guide/exporting-csv)
- [Getting Started](https://developer.fabric.inc/v2/api-reference/offers-v2/developer-guide/getting-started)
- [Introduction to Promotions](https://developer.fabric.inc/v2/api-reference/offers-v2/developer-guide/introduction-to-promotions)
- [Evaluate promotions](https://developer.fabric.inc/v2/api-reference/offers-v2/dynamic-pricing-engine/evaluate-promotions): Evaluates a cart's promotions, discount coupons and implicit promotions, either by specified itemId or by SKU (based on the customer specific configuration set in the backend)
- [Get calculated prices](https://developer.fabric.inc/v2/api-reference/offers-v2/dynamic-pricing-engine/get-calculated-prices): Retrieves prices for items either by SKUs or by item IDs based on the customer specific configuration set in the backend.
- [Dynamic Pricing Strategy](https://developer.fabric.inc/v2/api-reference/offers-v2/dynamic-pricing-engine/overview)
- [Download exported CSV file](https://developer.fabric.inc/v2/api-reference/offers-v2/exports/download-exported-csv-file): This endpoint lets you generate a URL, using fileId, from which you can download the exported CSV file. The generated URL expires in five mins.
- [Get all export requests](https://developer.fabric.inc/v2/api-reference/offers-v2/exports/get-all-export-requests): Get a paginated list of all the export requests.
- [Get export request by ID](https://developer.fabric.inc/v2/api-reference/offers-v2/exports/get-export-request-by-id): Get details of a specific export request by its ID.
- [Initiate export request](https://developer.fabric.inc/v2/api-reference/offers-v2/exports/initiate-export-request): Initiate an export request based on specified filter criteria.
- [Create sku-list](https://developer.fabric.inc/v2/api-reference/offers-v2/global-exclusion/create-sku-list): Creates a sku-list with the target products that are exempted from discounts to be applied.
- [Delete specific SKU-list](https://developer.fabric.inc/v2/api-reference/offers-v2/global-exclusion/delete-specific-sku-list): Deletes a specific SKU-list record by ID.
- [End specific sku-list](https://developer.fabric.inc/v2/api-reference/offers-v2/global-exclusion/end-specific-sku-list): This endpoint lets you end the exclusion of a sku-list from discount, there by allowing the products under the sku-list to be applicable for discount.
- [Get all sku-lists excluded from discounts](https://developer.fabric.inc/v2/api-reference/offers-v2/global-exclusion/get-all-sku-lists-excluded-from-discounts): Retrieves a paginated list of sku-lists that contain products that are excluded from being discounted.
- [Get specific sku-list](https://developer.fabric.inc/v2/api-reference/offers-v2/global-exclusion/get-specific-sku-list): Retrieves a specific sku-list by ID.
- [Global Exclusion](https://developer.fabric.inc/v2/api-reference/offers-v2/global-exclusion/overview)
- [Update specific sku-list](https://developer.fabric.inc/v2/api-reference/offers-v2/global-exclusion/update-specific-sku-list): Updates a specific sku-list record by ID.
- [Get price of a specific item](https://developer.fabric.inc/v2/api-reference/offers-v2/item/get-price-of-a-specific-item): Retrieves price details of an item by itemId
- [Get Skus and itemIds in a specific pricelist](https://developer.fabric.inc/v2/api-reference/offers-v2/item/get-skus-and-itemids-in-a-specific-pricelist): Retrieves Skus and itemIds for which there is a price entry in a specific pricelist. The pricelist is identified by priceListId.
- [Item](https://developer.fabric.inc/v2/api-reference/offers-v2/item/overview)
- [Search products and assigned prices in a specific price list](https://developer.fabric.inc/v2/api-reference/offers-v2/item/search-products-and-assigned-prices-in-a-specific-price-list): Retrieves a paginated list of products and assigned prices in a specific price list based on priceListId and other search parameters as passed in the request body. If price list ID is not provided, default price list is selected for the search.
- [Offers](https://developer.fabric.inc/v2/api-reference/offers-v2/offers)
- [Create price guard](https://developer.fabric.inc/v2/api-reference/offers-v2/price-guard/create-price-guard): Creates a price guard record that can contain various price kinds other than the elemental prices such as base price, sale price, and clearance price.
- [Delete a specific price guard](https://developer.fabric.inc/v2/api-reference/offers-v2/price-guard/delete-a-specific-price-guard): Deletes a specific price guard record by ID.
- [Get all price guards](https://developer.fabric.inc/v2/api-reference/offers-v2/price-guard/get-all-price-guards): Retrieves a paginated list of price guards based on query parameters.
- [Price Guard](https://developer.fabric.inc/v2/api-reference/offers-v2/price-guard/overview)
- [Update a specific price guard](https://developer.fabric.inc/v2/api-reference/offers-v2/price-guard/update-a-specific-price-guard): Updates a specific price guard record by priceguardId.
- [Get all price kinds](https://developer.fabric.inc/v2/api-reference/offers-v2/price-kind/get-all-price-kinds): Retrieves a paginated list of all normal price kinds that are setup earlier. It returns only price-kinds, not the price information. Price kinds indicate if the offer is under clearance or promotion or base price status. If clearance or promotion price is not set up earlier, a price kind is considered as base price.
- [Price Kind](https://developer.fabric.inc/v2/api-reference/offers-v2/price-kind/overview)
- [Create price list](https://developer.fabric.inc/v2/api-reference/offers-v2/price-list/create-price-list): Enables you to create a price list. Depending upon the currency code you set for a price list, you will be able to create or update price (using POST/api-offers/price) under the pricelist for the defined currency code only.
- [Delete a specific price list](https://developer.fabric.inc/v2/api-reference/offers-v2/price-list/delete-a-specific-price-list): Delets a price list by priceListId.
- [Get a specific price list](https://developer.fabric.inc/v2/api-reference/offers-v2/price-list/get-a-specific-price-list): Enables you to retrieve details of a price list by price list ID or name.
- [Get all price lists](https://developer.fabric.inc/v2/api-reference/offers-v2/price-list/get-all-price-lists): Retrieves a paginated list of all price lists.
- [Price List](https://developer.fabric.inc/v2/api-reference/offers-v2/price-list/overview)
- [Update a specific price list](https://developer.fabric.inc/v2/api-reference/offers-v2/price-list/update-a-specific-price-list): Updates a specific price list by price list ID.
- [Create or update price](https://developer.fabric.inc/v2/api-reference/offers-v2/pricing/create-or-update-price): Creates or updates price details for one or many items based on given item IDs. Support for currency code is determined based on the currency code you have set while creating the price list, whuch is identified by priceListId in the request body.
- [Delete price by priceId](https://developer.fabric.inc/v2/api-reference/offers-v2/pricing/delete-price-by-priceid): Deletes a price based on priceListID, and priceId or itemSku or itemId.
- [Get all prices](https://developer.fabric.inc/v2/api-reference/offers-v2/pricing/get-all-prices): Gets a paginated list of all prices.
- [Get price by priceId](https://developer.fabric.inc/v2/api-reference/offers-v2/pricing/get-price-by-priceid): Retrieves paginated list of price details based on priceListId and priceId or itemSku or itemId.
- [Pricing](https://developer.fabric.inc/v2/api-reference/offers-v2/pricing/overview)
- [Get product and price by sku](https://developer.fabric.inc/v2/api-reference/offers-v2/product/get-product-and-price-by-sku): Retrieves product and price details, along with its child products' details if there are any, by specific SKU and priceListId. If price details are not set up previously, it only retrieves the product information; price details are not returned in such cases.
- [Product](https://developer.fabric.inc/v2/api-reference/offers-v2/product/overview)
- [Create promotion](https://developer.fabric.inc/v2/api-reference/offers-v2/promotion/create-promotion): Enables you to create a promotion
- [Delete a specific promotion](https://developer.fabric.inc/v2/api-reference/offers-v2/promotion/delete-a-specific-promotion): Deletes a specific promotion by ID. You can delete all promotions except an active promotion that has `state` defined as `ACTIVE`.
- [Enable or disable a promotion](https://developer.fabric.inc/v2/api-reference/offers-v2/promotion/enable-or-disable-a-promotion): Lets you toggle promotion status by enabling or disabling a promotion, not applicable to *ACTIVE* promotions. <br />**Enable a promotion:** Only *disabled* promotions can be enabled.<br /> **Disable a promotion:** Only *not expired* promotions can be disabled.
- [Get a specific promotion](https://developer.fabric.inc/v2/api-reference/offers-v2/promotion/get-a-specific-promotion): Retrieves details of a specific promotion by ID
- [Get all promotions](https://developer.fabric.inc/v2/api-reference/offers-v2/promotion/get-all-promotions): Retrieves a paginated list of all promotions.
- [Promotion](https://developer.fabric.inc/v2/api-reference/offers-v2/promotion/overview)
- [Search for promotions](https://developer.fabric.inc/v2/api-reference/offers-v2/promotion/search-for-promotions): Use this endpont to search for promotions using filter conditions.
- [Stop a promotion](https://developer.fabric.inc/v2/api-reference/offers-v2/promotion/stop-a-promotion): Lets you stop a specific promotion. This endpoint sets `state` as `EXPIRED`, and expiration date (both start date and end date) to the same current date.
- [Update a specific promotion](https://developer.fabric.inc/v2/api-reference/offers-v2/promotion/update-a-specific-promotion): Updates a specific promotion based on promotion ID
- [Create redemption](https://developer.fabric.inc/v2/api-reference/offers-v2/redemption/create-redemption): Enables you to create a redemption record
- [Delete specific redemption record](https://developer.fabric.inc/v2/api-reference/offers-v2/redemption/delete-specific-redemption-record): Delete a specific redemption record by redemptionId
- [Redemption](https://developer.fabric.inc/v2/api-reference/offers-v2/redemption/overview)
- [Create segment](https://developer.fabric.inc/v2/api-reference/offers-v2/segment/create-segment): Create a segment record.
- [Delete a specific segment](https://developer.fabric.inc/v2/api-reference/offers-v2/segment/delete-a-specific-segment): Delete a specific segment by segmentId
- [Get a specific segment](https://developer.fabric.inc/v2/api-reference/offers-v2/segment/get-a-specific-segment): Retrieves details of a specific segment by segmentId
- [Get list of all segments](https://developer.fabric.inc/v2/api-reference/offers-v2/segment/get-list-of-all-segments): Retrieves a paginated list of segments based on query parameters.
- [Segment](https://developer.fabric.inc/v2/api-reference/offers-v2/segment/overview)
- [Update a specific segment](https://developer.fabric.inc/v2/api-reference/offers-v2/segment/update-a-specific-segment): Updates a specific segment by segmentId
- [Generate URL to bulk upload price details](https://developer.fabric.inc/v2/api-reference/offers-v2/upload-price-csv/generate-url-to-bulk-upload-price-details): This endpoint lets you generate a secured S3 URL using which you can upload the CSV file containing price details. Ensure that all the headers and values in the CSV file are double-quoted. After a file is uploaded, it is processed internally to apply bulk changes to price details.<br /><br />**Note:** The maximum number of rows with price records to upload per CSV file is 5000.
- [Upload Price CSV](https://developer.fabric.inc/v2/api-reference/offers-v2/upload-price-csv/overview)
- [Add attribute to cart](https://developer.fabric.inc/v2/api-reference/orders-v1/attributes/add-attribute-to-cart): Add attribute to cart
- [Add attribute to cart item](https://developer.fabric.inc/v2/api-reference/orders-v1/attributes/add-attribute-to-cart-item): Add attribute to cart item
- [Get all order level attributes](https://developer.fabric.inc/v2/api-reference/orders-v1/attributes/get-all-order-level-attributes): Get all order level attributes
- [Get items attributes](https://developer.fabric.inc/v2/api-reference/orders-v1/attributes/get-items-attributes): Get items attributes
- [Attributes](https://developer.fabric.inc/v2/api-reference/orders-v1/attributes/overview)
- [Create billto for a shipment [Deprecated]](https://developer.fabric.inc/v2/api-reference/orders-v1/bill-to/create-billto-for-a-shipment-[deprecated]): Create billto for a shipment
- [Get bill-to by ID [Deprecated]](https://developer.fabric.inc/v2/api-reference/orders-v1/bill-to/get-bill-to-by-id-[deprecated]): Get bill-to by ID
- [Get bill-to by shipToId [Deprecated]](https://developer.fabric.inc/v2/api-reference/orders-v1/bill-to/get-bill-to-by-shiptoid-[deprecated]): Get bill-to by shipToId
- [Bill To](https://developer.fabric.inc/v2/api-reference/orders-v1/bill-to/overview)
- [Update billto for a shipment [Deprecated]](https://developer.fabric.inc/v2/api-reference/orders-v1/bill-to/update-billto-for-a-shipment-[deprecated]): Update billto for a shipment
- [[Deprecated] Remove Cart (cart decoupled)](https://developer.fabric.inc/v2/api-reference/orders-v1/cart-decoupled/[deprecated]-remove-cart-cart-decoupled): Remove Cart (cart decoupled)
- [Add item to cart (cart decoupled)](https://developer.fabric.inc/v2/api-reference/orders-v1/cart-decoupled/add-item-to-cart-cart-decoupled): Add item to cart (cart decoupled)
- [Empty cart (cart decoupled)](https://developer.fabric.inc/v2/api-reference/orders-v1/cart-decoupled/empty-cart-cart-decoupled): Empty cart (cart decoupled)
- [Get cart for the given cart ID or user auth token (cart decoupled)](https://developer.fabric.inc/v2/api-reference/orders-v1/cart-decoupled/get-cart-for-the-given-cart-id-or-user-auth-token-cart-decoupled): Get cart for the given cart ID or user auth token (cart decoupled)
- [Merge guest cart with user cart (cart decoupled)](https://developer.fabric.inc/v2/api-reference/orders-v1/cart-decoupled/merge-guest-cart-with-user-cart-cart-decoupled): Merge guest cart with user cart (cart decoupled)
- [Cart Decoupled](https://developer.fabric.inc/v2/api-reference/orders-v1/cart-decoupled/overview)
- [Remove item from cart (cart decoupled)](https://developer.fabric.inc/v2/api-reference/orders-v1/cart-decoupled/remove-item-from-cart-cart-decoupled): Remove item from cart (cart decoupled)
- [Update Items already in cart (cart decoupled)](https://developer.fabric.inc/v2/api-reference/orders-v1/cart-decoupled/update-items-already-in-cart-cart-decoupled): Update Items already in cart (cart decoupled)
- [[Deprecated] Cart soft delete](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/[deprecated]-cart-soft-delete): Cart soft delete, add the deleted boolean flag as true and add the order number to the cart.
- [Add item to cart](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/add-item-to-cart): Add item to cart
- [Add promotion to cart](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/add-promotion-to-cart): Add promotion to cart
- [Add shipTo IDs to cart items](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/add-shipto-ids-to-cart-items): Add shipTo IDs to cart items
- [Add shipTo IDs to cart items (v1)](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/add-shipto-ids-to-cart-items-v1): Add shipTo IDs to cart items (v1)
- [Cart soft delete](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/cart-soft-delete): Cart soft delete, add the deleted boolean flag as true and add the order number to the cart.
- [Cart soft delete (cart decoupled)](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/cart-soft-delete-cart-decoupled): Cart soft delete, add the deleted boolean flag as true and add the order number to the cart (cart decoupled)
- [Empty cart for the given cart ID](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/empty-cart-for-the-given-cart-id): Empty cart for the given cart ID
- [Get cart for the given cart ID or user auth token](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/get-cart-for-the-given-cart-id-or-user-auth-token): Get cart for the given cart ID or user auth token
- [Merge user cart and guest cart](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/merge-user-cart-and-guest-cart): Merge user cart and guest cart
- [Cart](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/overview)
- [Query on carts](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/query-on-carts): Find a specific carts that matches the filters
- [Remove item from cart by line item ID](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/remove-item-from-cart-by-line-item-id): Remove item from cart by line item ID
- [Remove promotion from cart](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/remove-promotion-from-cart): Remove promotion from cart
- [Update cart](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/update-cart): Update cart
- [Update cart header](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/update-cart-header): Update cart header
- [Update cart status](https://developer.fabric.inc/v2/api-reference/orders-v1/cart/update-cart-status): Update cart status
- [Bulk insert to inventory](https://developer.fabric.inc/v2/api-reference/orders-v1/inventory/bulk-insert-to-inventory): Bulk insert to inventory
- [Get generic inventory](https://developer.fabric.inc/v2/api-reference/orders-v1/inventory/get-generic-inventory): Get generic inventory
- [Get inventories](https://developer.fabric.inc/v2/api-reference/orders-v1/inventory/get-inventories): Get inventories
- [Get inventory by location](https://developer.fabric.inc/v2/api-reference/orders-v1/inventory/get-inventory-by-location): Get inventory by location
- [Get pickup point](https://developer.fabric.inc/v2/api-reference/orders-v1/inventory/get-pickup-point): Get pickup point
- [Inventory POS](https://developer.fabric.inc/v2/api-reference/orders-v1/inventory/inventory-pos): Inventory POS
- [Inventory](https://developer.fabric.inc/v2/api-reference/orders-v1/inventory/overview)
- [Add items to a known list](https://developer.fabric.inc/v2/api-reference/orders-v1/list/add-items-to-a-known-list): Add items to a known list
- [Create list](https://developer.fabric.inc/v2/api-reference/orders-v1/list/create-list): Create list
- [Delete items from list](https://developer.fabric.inc/v2/api-reference/orders-v1/list/delete-items-from-list): Delete items from list
- [Delete list](https://developer.fabric.inc/v2/api-reference/orders-v1/list/delete-list): Delete list
- [Get list by listId](https://developer.fabric.inc/v2/api-reference/orders-v1/list/get-list-by-listid): Get list by listId
- [Get list by userId](https://developer.fabric.inc/v2/api-reference/orders-v1/list/get-list-by-userid): Get list by userId
- [List](https://developer.fabric.inc/v2/api-reference/orders-v1/list/overview)
- [Query Lists](https://developer.fabric.inc/v2/api-reference/orders-v1/list/query-lists): Query Lists
- [Update list](https://developer.fabric.inc/v2/api-reference/orders-v1/list/update-list): Update list
- [Order Management System](https://developer.fabric.inc/v2/api-reference/orders-v1/order-management-system)
- [Add shipment bulk to order](https://developer.fabric.inc/v2/api-reference/orders-v1/order/add-shipment-bulk-to-order): Add shipment bulk to order
- [Add shipment to order](https://developer.fabric.inc/v2/api-reference/orders-v1/order/add-shipment-to-order): Add shipment to order
- [Bulk cancel orders](https://developer.fabric.inc/v2/api-reference/orders-v1/order/bulk-cancel-orders): Bulk cancel orders
- [Bulk return orders](https://developer.fabric.inc/v2/api-reference/orders-v1/order/bulk-return-orders): Bulk return orders
- [Cancel order](https://developer.fabric.inc/v2/api-reference/orders-v1/order/cancel-order): Cancel order
- [Cancel order by user](https://developer.fabric.inc/v2/api-reference/orders-v1/order/cancel-order-by-user): Cancel order by user
- [Create POS order](https://developer.fabric.inc/v2/api-reference/orders-v1/order/create-pos-order): Create POS order
- [Create subscriptions orders](https://developer.fabric.inc/v2/api-reference/orders-v1/order/create-subscriptions-orders): Create subscriptions orders
- [Get order](https://developer.fabric.inc/v2/api-reference/orders-v1/order/get-order): Get order
- [Get order by email](https://developer.fabric.inc/v2/api-reference/orders-v1/order/get-order-by-email): Get order by email
- [Get order by user](https://developer.fabric.inc/v2/api-reference/orders-v1/order/get-order-by-user): Get order by user
- [Order checkout](https://developer.fabric.inc/v2/api-reference/orders-v1/order/order-checkout): Order checkout
- [Order checkout (v4)](https://developer.fabric.inc/v2/api-reference/orders-v1/order/order-checkout-v4): Order checkout (v4)
- [Order query](https://developer.fabric.inc/v2/api-reference/orders-v1/order/order-query): Order query
- [Order](https://developer.fabric.inc/v2/api-reference/orders-v1/order/overview)
- [Return order](https://developer.fabric.inc/v2/api-reference/orders-v1/order/return-order): Return order
- [Return order by user](https://developer.fabric.inc/v2/api-reference/orders-v1/order/return-order-by-user): Return order by user
- [Return payment by orderId](https://developer.fabric.inc/v2/api-reference/orders-v1/order/return-payment-by-orderid): Return payment by orderId
- [Sync order status](https://developer.fabric.inc/v2/api-reference/orders-v1/order/sync-order-status): Sync order status
- [Add payment to cart](https://developer.fabric.inc/v2/api-reference/orders-v1/payments/add-payment-to-cart): Add payment to cart
- [Confirm Stripe payment intent](https://developer.fabric.inc/v2/api-reference/orders-v1/payments/confirm-stripe-payment-intent): Confirm Stripe payment intent
- [Create payment method](https://developer.fabric.inc/v2/api-reference/orders-v1/payments/create-payment-method): Create payment method
- [Create Stripe payment intent](https://developer.fabric.inc/v2/api-reference/orders-v1/payments/create-stripe-payment-intent): Create Stripe payment intent
- [Delete payment](https://developer.fabric.inc/v2/api-reference/orders-v1/payments/delete-payment): Delete payment
- [Get payment by cartId](https://developer.fabric.inc/v2/api-reference/orders-v1/payments/get-payment-by-cartid): Get payment by cartId
- [Payments](https://developer.fabric.inc/v2/api-reference/orders-v1/payments/overview)
- [Create ship-to](https://developer.fabric.inc/v2/api-reference/orders-v1/ship-to/create-ship-to): Create ship-to
- [Create ship-to (v1)](https://developer.fabric.inc/v2/api-reference/orders-v1/ship-to/create-ship-to-v1): Create ship-to (v1)
- [Get Cart data for the given shipTo ID](https://developer.fabric.inc/v2/api-reference/orders-v1/ship-to/get-cart-data-for-the-given-shipto-id): Get Cart data for the given shipTo ID
- [Get ShipTo by ID](https://developer.fabric.inc/v2/api-reference/orders-v1/ship-to/get-shipto-by-id): Get ShipTo by ID
- [Ship To](https://developer.fabric.inc/v2/api-reference/orders-v1/ship-to/overview)
- [Update ship-to](https://developer.fabric.inc/v2/api-reference/orders-v1/ship-to/update-ship-to): Update ship-to
- [Update ship-to (v1)](https://developer.fabric.inc/v2/api-reference/orders-v1/ship-to/update-ship-to-v1): Update ship-to (v1)
- [Get all shipping methods](https://developer.fabric.inc/v2/api-reference/orders-v1/shipping/get-all-shipping-methods): Get all shipping methods
- [Get expected delivery for items](https://developer.fabric.inc/v2/api-reference/orders-v1/shipping/get-expected-delivery-for-items): Get expected delivery for items
- [Get shipping method](https://developer.fabric.inc/v2/api-reference/orders-v1/shipping/get-shipping-method): Get shipping method
- [Get shipping method by item](https://developer.fabric.inc/v2/api-reference/orders-v1/shipping/get-shipping-method-by-item): Get shipping method by item
- [Shipping](https://developer.fabric.inc/v2/api-reference/orders-v1/shipping/overview)
- [Address validation](https://developer.fabric.inc/v2/api-reference/orders-v1/taxaddress-validate/address-validation): Address validation
- [Address validation (v1)](https://developer.fabric.inc/v2/api-reference/orders-v1/taxaddress-validate/address-validation-v1): Address validation (v1)
- [Create new tax transaction](https://developer.fabric.inc/v2/api-reference/orders-v1/taxaddress-validate/create-new-tax-transaction): Create new tax transaction for Estimates or Final Sales Invoice
- [Tax/Address Validate](https://developer.fabric.inc/v2/api-reference/orders-v1/taxaddress-validate/overview)
- [Get default warehouse location](https://developer.fabric.inc/v2/api-reference/orders-v1/warehouse/get-default-warehouse-location): Get default warehouse location
- [Warehouse](https://developer.fabric.inc/v2/api-reference/orders-v1/warehouse/overview)
- [Create/add to wishlist](https://developer.fabric.inc/v2/api-reference/orders-v1/wishlist/createadd-to-wishlist): Create/add to wishlist
- [Delete from Wishlist](https://developer.fabric.inc/v2/api-reference/orders-v1/wishlist/delete-from-wishlist): Delete from Wishlist
- [Get wishlist](https://developer.fabric.inc/v2/api-reference/orders-v1/wishlist/get-wishlist): Get wishlist
- [Wishlist](https://developer.fabric.inc/v2/api-reference/orders-v1/wishlist/overview)
- [Cancel allocation ](https://developer.fabric.inc/v2/api-reference/orders-v2/allocation/cancel-allocation): Cancels allocation by allocation ID
- [Get allocation](https://developer.fabric.inc/v2/api-reference/orders-v2/allocation/get-allocation): Gets allocation details by allocation ID
- [Get allocation by query](https://developer.fabric.inc/v2/api-reference/orders-v2/allocation/get-allocation-by-query): Finds allocation details based on filter criteria
- [Allocation](https://developer.fabric.inc/v2/api-reference/orders-v2/allocation/overview)
- [Reallocate location](https://developer.fabric.inc/v2/api-reference/orders-v2/allocation/reallocate-location): Updates location number of the existing allocation. To update other details, `PUT /allocation/{allocationId}` endpoint is recommended.
- [Update allocation](https://developer.fabric.inc/v2/api-reference/orders-v2/allocation/update-allocation): Updates allocation for the given order or item. Primary use cases are to update location number (related to warehouse), allocation number (external use), item details, etc. To specifically update Location Number, the *PUT /allocation/reallocate* endpoint is recommended
- [Create appeasement](https://developer.fabric.inc/v2/api-reference/orders-v2/appeasement/create-appeasement): Creates an appeasement for customer order.
- [Appeasement](https://developer.fabric.inc/v2/api-reference/orders-v2/appeasement/overview)
- [called when outer service updated any order has back/pre items, Allocation service after release](https://developer.fabric.inc/v2/api-reference/orders-v2/backorder-preorder-reservation/called-when-outer-service-updated-any-order-has-backpre-items-allocation-service-after-release)
- [Create backOrderPreOrderReservation](https://developer.fabric.inc/v2/api-reference/orders-v2/backorder-preorder-reservation/create-backorderpreorderreservation)
- [Delete BackOrderPreOrderReservation](https://developer.fabric.inc/v2/api-reference/orders-v2/backorder-preorder-reservation/delete-backorderpreorderreservation)
- [Get backOrderPreOrderReservation](https://developer.fabric.inc/v2/api-reference/orders-v2/backorder-preorder-reservation/get-backorderpreorderreservation)
- [Get backOrderPreOrderReservation list](https://developer.fabric.inc/v2/api-reference/orders-v2/backorder-preorder-reservation/get-backorderpreorderreservation-list)
- [Backorder Preorder Reservation](https://developer.fabric.inc/v2/api-reference/orders-v2/backorder-preorder-reservation/overview)
- [To receive a consent from customer for the delay on backorder or preorder fulfilment.](https://developer.fabric.inc/v2/api-reference/orders-v2/backorder-preorder-reservation/to-receive-a-consent-from-customer-for-the-delay-on-backorder-or-preorder-fulfilment)
- [Update BackOrderPreOrderReservation](https://developer.fabric.inc/v2/api-reference/orders-v2/backorder-preorder-reservation/update-backorderpreorderreservation)
- [Create a configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/configuration/create-a-configuration-for-tenant): Create Tenant configuration for the given tenantId
- [Delete the tenant's configuration.](https://developer.fabric.inc/v2/api-reference/orders-v2/configuration/delete-the-tenants-configuration)
- [Get All configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/configuration/get-all-configuration-for-tenant): Get all Tenant configurations for the given tenantId
- [Get configuration for given filters.](https://developer.fabric.inc/v2/api-reference/orders-v2/configuration/get-configuration-for-given-filters): Get Tenant info for the given tenantId
- [Get  configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/configuration/get-configuration-for-tenant): Get Tenant configuration for the given tenantId
- [Configuration](https://developer.fabric.inc/v2/api-reference/orders-v2/configuration/overview)
- [Replace all tenant configuration for tenant](https://developer.fabric.inc/v2/api-reference/orders-v2/configuration/replace-all-tenant-configuration-for-tenant): Replace List of Tenant configuration with new configs for the given tenantId.
- [Replace the configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/configuration/replace-the-configuration-for-tenant): Replace Tenant configuration with new configs for the given tenantId
- [Update All the configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/configuration/update-all-the-configuration-for-tenant): Update Tenant configuration for the given tenantId
- [Update tenant configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/configuration/update-tenant-configuration-for-tenant): Update Tenant configuration for the given tenantId,configName and configType
- [Cross Border](https://developer.fabric.inc/v2/api-reference/orders-v2/cross-border/overview)
- [Releases order](https://developer.fabric.inc/v2/api-reference/orders-v2/cross-border/releases-order): Releases order if the order is elgible for international shipping
- [Validate order for international shipping](https://developer.fabric.inc/v2/api-reference/orders-v2/cross-border/validate-order-for-international-shipping): Validates if the order is eligible for international shipping
- [FAQs](https://developer.fabric.inc/v2/api-reference/orders-v2/developer-guide/faqs)
- [Inventory Setup](https://developer.fabric.inc/v2/api-reference/orders-v2/developer-guide/inventory-setup): This section describes the rules and procedures to set up inventory as per your business needs.
- [List of WebHook Events for Different Services](https://developer.fabric.inc/v2/api-reference/orders-v2/developer-guide/list-of-webhook-events-for-different-services)
- [Order Exchange](https://developer.fabric.inc/v2/api-reference/orders-v2/developer-guide/order-exchange)
- [Order Fulfillment](https://developer.fabric.inc/v2/api-reference/orders-v2/developer-guide/order-fulfillment)
- [Order Return](https://developer.fabric.inc/v2/api-reference/orders-v2/developer-guide/order-return)
- [Overview](https://developer.fabric.inc/v2/api-reference/orders-v2/developer-guide/overview)
- [Export records by query](https://developer.fabric.inc/v2/api-reference/orders-v2/export/export-records-by-query): Exports records by query
- [Get list of files for given module](https://developer.fabric.inc/v2/api-reference/orders-v2/export/get-list-of-files-for-given-module): Retrieves list of files for given module. Accepted values are order, location, allocation, inventory, invoice, and network.
- [Get list of headers for given module](https://developer.fabric.inc/v2/api-reference/orders-v2/export/get-list-of-headers-for-given-module): Retrieves list of headers for given module. Accepted values are order, location, allocation, inventory, invoice, and network.
- [Get OMS export log history by query](https://developer.fabric.inc/v2/api-reference/orders-v2/export/get-oms-export-log-history-by-query): Retrieves OMS export log history by query
- [Get record export status for given request](https://developer.fabric.inc/v2/api-reference/orders-v2/export/get-record-export-status-for-given-request): Retrieves record export status for given request
- [Get URL for downloading exports](https://developer.fabric.inc/v2/api-reference/orders-v2/export/get-url-for-downloading-exports): Gets URL for downloading exports
- [Export](https://developer.fabric.inc/v2/api-reference/orders-v2/export/overview)
- [Create a Fraud configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/fraud-configuration/create-a-fraud-configuration-for-tenant): Create Fraud configuration for the given tenantId
- [Delete the Fraud's configuration.](https://developer.fabric.inc/v2/api-reference/orders-v2/fraud-configuration/delete-the-frauds-configuration)
- [Get All Fraud configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/fraud-configuration/get-all-fraud-configuration-for-tenant): Get all Fraud configurations for the given tenantId
- [Get All Fraud configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/fraud-configuration/get-all-fraud-configuration-for-tenant-1): Get all Fraud configurations for the given tenantId
- [null](https://developer.fabric.inc/v2/api-reference/orders-v2/fraud-configuration/overview)
- [Replace the Fraud configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/fraud-configuration/replace-the-fraud-configuration-for-tenant): Replace Fraud configuration with new configs for the given tenantId
- [Fraud Cancel Order](https://developer.fabric.inc/v2/api-reference/orders-v2/fraud/fraud-cancel-order)
- [Fraud Release Order](https://developer.fabric.inc/v2/api-reference/orders-v2/fraud/fraud-release-order)
- [Fraud](https://developer.fabric.inc/v2/api-reference/orders-v2/fraud/overview)
- [Create inventory attribute](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-attribute/create-inventory-attribute): Creates a unique inventory attribute
- [Get inventory attribute by code](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-attribute/get-inventory-attribute-by-code): Retrieves details of a specific attribute by specified attribute code
- [Inventory Attribute](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-attribute/overview)
- [Create URL to bulk upload inventory](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-bulk-operation/create-url-to-bulk-upload-inventory): Enables you to create a URL for uploading a CSV file to apply bulk changes to inventory models. This endpoint generates a key ID associated with the URL, and this keyId will be used to fetch the status of an uploaded file or to fetch the error file afterwards.
- [Create URL to download error details for an uploaded file](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-bulk-operation/create-url-to-download-error-details-for-an-uploaded-file): Enables you to create a URL to download error details for a file that was previously uploaded to apply bulk changes to inventory records. This endpoint generates a key ID associated with the URL, and this keyId will be used to fetch the status of an upload file or to fetch the error file afterwards.
- [Inventory Bulk Operation](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-bulk-operation/overview)
- [Create counter](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-counter/create-counter): Creates counter (also known as inventory position) for better tracking of inventories.
- [Get all counters](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-counter/get-all-counters): Retrieves all the counters that were previously created
- [Get specific counter](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-counter/get-specific-counter): Retrieves details of a specific counter by specified counter code.
- [Inventory Counter](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-counter/overview)
- [Update specific counter](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-counter/update-specific-counter): Updates a specific counter based on specified counter-code
- [Create network](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-network/create-network): Creates network using conditional rule to add locations and SKU to the network.
- [Delete specific network](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-network/delete-specific-network): Deletes a specific network, with all of its details, by specified network ID. Once deleted, it cannot be undone.
- [Get aggregated networks](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-network/get-aggregated-networks): This endpoint lets you view the aggregated count of the inventory-network based on the network rule configuration (either by network ID or by SKU, or by both).
- [Get all networks](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-network/get-all-networks): Retrieves paginated list of all networks that were previously created
- [Get specific network](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-network/get-specific-network): Retrieves details of a specific network by specified network ID
- [Inventory Network](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-network/overview)
- [Updates specific network](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-network/updates-specific-network): Updates details of a specific network by specified network ID. Details to be updated include network code, name, safety stock, and conditional rule for a specific network.
- [Get inventory upload record for all files](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-upload-log/get-inventory-upload-record-for-all-files): Retrieves a paginated list of inventory bulk upload status for all the files that were uploaded to the database to perform inventory operations.
- [Get inventory upload status for specific file](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-upload-log/get-inventory-upload-status-for-specific-file): This endpoint checks the progress of bulk upload, for a specific Key ID, triggered by uploading a CSV file to the database.
- [Inventory Upload Log](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory-upload-log/overview)
- [Create inventory](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory/create-inventory): Enables you to create inventory based on the combination of location number, channel ID, and item ID or item SKU.
- [Get inventories](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory/get-inventories): Retrieves a paginated list of inventories by network, and at different locations.
- [Get inventories in specific region](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory/get-inventories-in-specific-region): Retrieves list of inventories in a specific region based on postal code, sku, radius within which the inventories are to be retrieved, latitude and longitude of the location.
- [Get inventory of specific item](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory/get-inventory-of-specific-item): Retrieves inventory details of a specific item based on specified item ID
- [Inventory](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory/overview)
- [Update inventory by adding new property](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory/update-inventory-by-adding-new-property): This endpoint does not override all the existing properties, rather it updates inventory by adding new properties or by updating the existing inventory properties that are specified in the request body. Inventory is identified based on the combination of location number, channel ID, and item ID or item SKU.
- [Update inventory by overriding existing values](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory/update-inventory-by-overriding-existing-values): This endpoint updates inventory by overriding the existing values with all the new inventory properties that are specified in the request body, or creates a new inventory if inventory does not exist. If an existing property is not mentioned in the request body, then the value for the existing property will be displayed as `null` or `zero`. Inventory is identified based on the combination of location number, channel ID, and item ID or item SKU.
- [Update inventory position](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory/update-inventory-position): This endpoint is very specific to counter update. It updates inventory position (also known as counter), or displays error if inventory does not exist. Inventory is identified based on the combination of location number, channel ID, and item ID or item SKU.
- [Update inventory position or create inventory](https://developer.fabric.inc/v2/api-reference/orders-v2/inventory/update-inventory-position-or-create-inventory): This endpoint updates inventory position (also known as counter) as per specified request body, Or it creates inventory if inventory does not exist, and thereby updates the counter. Inventory is identified based on the combination of location number, channel ID, and item ID or item SKU.
- [Acknowledge financial posting](https://developer.fabric.inc/v2/api-reference/orders-v2/invoice/acknowledge-financial-posting): Acknowledges financial posting for invoice ID
- [Acknowledge invoice by ID](https://developer.fabric.inc/v2/api-reference/orders-v2/invoice/acknowledge-invoice-by-id): Acknowledges invoice by invoice ID
- [Generate invoice](https://developer.fabric.inc/v2/api-reference/orders-v2/invoice/generate-invoice): Generates invoice for the given invoice type such as, shipment, appeasement, and so on.
- [Get invoice by invoice ID](https://developer.fabric.inc/v2/api-reference/orders-v2/invoice/get-invoice-by-invoice-id): Retrieves invoice by invoice ID
- [Get invoice by query](https://developer.fabric.inc/v2/api-reference/orders-v2/invoice/get-invoice-by-query): Retrieves invoice by query
- [Invoice](https://developer.fabric.inc/v2/api-reference/orders-v2/invoice/overview)
- [Update invoice for financial posting](https://developer.fabric.inc/v2/api-reference/orders-v2/invoice/update-invoice-for-financial-posting): Updates invoice for financial posting for invoice IDs
- [Add items to a specific list](https://developer.fabric.inc/v2/api-reference/orders-v2/list/add-items-to-a-specific-list): Add array of items to a specific list by list ID.
- [Create list](https://developer.fabric.inc/v2/api-reference/orders-v2/list/create-list): Creates a list. When you create a list, a list ID is generated automatically that can be mapped later to add items to the list, and to update and delete the list. After creating a list, you can add items to the list by using `POST/{listId}/items` endpoint.
- [Delete list by Id](https://developer.fabric.inc/v2/api-reference/orders-v2/list/delete-list-by-id): Deletes list by Id. If items are added to the list, records of the added items are deleted if a list is deleted.
- [Get items of a specific list](https://developer.fabric.inc/v2/api-reference/orders-v2/list/get-items-of-a-specific-list): Retrieves items from a specific list by list ID.
- [Get list detail by Id](https://developer.fabric.inc/v2/api-reference/orders-v2/list/get-list-detail-by-id): Retrieves details of a list by its ID.
- [Get lists by userId](https://developer.fabric.inc/v2/api-reference/orders-v2/list/get-lists-by-userid): Retrieves lists created for a specific user, by user ID.
- [List](https://developer.fabric.inc/v2/api-reference/orders-v2/list/overview)
- [Update list by Id](https://developer.fabric.inc/v2/api-reference/orders-v2/list/update-list-by-id): Updates list details by its Id. Updating a list does not does not update item details. To add or delete items to or from a list, use `POST/{listId}/items` endpoint.
- [Create location attribute](https://developer.fabric.inc/v2/api-reference/orders-v2/location-attribute/create-location-attribute): Creates a unique location attribute
- [Delete location attribute by code](https://developer.fabric.inc/v2/api-reference/orders-v2/location-attribute/delete-location-attribute-by-code): deletes the location attribute by attribute code
- [Get all location attributes](https://developer.fabric.inc/v2/api-reference/orders-v2/location-attribute/get-all-location-attributes): Retrieves attributes for all the locations
- [Get location attribute by code](https://developer.fabric.inc/v2/api-reference/orders-v2/location-attribute/get-location-attribute-by-code): Retrieves details of the location attribute by attribute code
- [Location Attribute](https://developer.fabric.inc/v2/api-reference/orders-v2/location-attribute/overview)
- [Update location attribute by code](https://developer.fabric.inc/v2/api-reference/orders-v2/location-attribute/update-location-attribute-by-code): Updates the location attribute by attribute code
- [Create location](https://developer.fabric.inc/v2/api-reference/orders-v2/location/create-location): Creates a location with all of its details, such as location number, name, address, operating hours, operation type, location coordinates, and so on.
- [Delete specific location](https://developer.fabric.inc/v2/api-reference/orders-v2/location/delete-specific-location): Deletes a specific location based on specified location number
- [Get all locations](https://developer.fabric.inc/v2/api-reference/orders-v2/location/get-all-locations): Retrieves a paginated list of all locations
- [Get near by locations within the radius](https://developer.fabric.inc/v2/api-reference/orders-v2/location/get-near-by-locations-within-the-radius): Get near by locations within the radius
- [Get specific location](https://developer.fabric.inc/v2/api-reference/orders-v2/location/get-specific-location): Retrieves details of a specific location based on specified location number
- [Location](https://developer.fabric.inc/v2/api-reference/orders-v2/location/overview)
- [Update location by adding new property](https://developer.fabric.inc/v2/api-reference/orders-v2/location/update-location-by-adding-new-property): This endpoint does not override all the existing properties, rather it updates location by adding only those properties or by updating the existing location properties that are specified in the request body. Location is identified by the unique location number.
- [Update location by overriding existing details](https://developer.fabric.inc/v2/api-reference/orders-v2/location/update-location-by-overriding-existing-details): This endpoint updates details of a location by overriding the existing values with the details that are specified in the request body, or creates a location if location does not exist. If an existing property is not mentioned in the request body, then the value for the existing property will be displayed as null or zero. Location is identified based on the location number.
- [Listen to user and emit acknowledgment](https://developer.fabric.inc/v2/api-reference/orders-v2/notification/listen-to-user-and-emit-acknowledgment): This listener processes the acknowledgement body and adds audit-logs
- [Listen to user and emit notifications](https://developer.fabric.inc/v2/api-reference/orders-v2/notification/listen-to-user-and-emit-notifications): This listener processes the request body and emit notification events to webhook service
- [Create attribute](https://developer.fabric.inc/v2/api-reference/orders-v2/order-attribute/create-attribute): Creates an order-attribute for order fulfillment
- [Delete an attribute by code](https://developer.fabric.inc/v2/api-reference/orders-v2/order-attribute/delete-an-attribute-by-code): Deletes a specific attribute by code
- [Get a specific attribute](https://developer.fabric.inc/v2/api-reference/orders-v2/order-attribute/get-a-specific-attribute): Gets a specific order-attribute by code
- [Get all attributes](https://developer.fabric.inc/v2/api-reference/orders-v2/order-attribute/get-all-attributes): Retrieves all order-attributes
- [Order Attribute](https://developer.fabric.inc/v2/api-reference/orders-v2/order-attribute/overview)
- [update a specific attribute](https://developer.fabric.inc/v2/api-reference/orders-v2/order-attribute/update-a-specific-attribute): Updates a specific order-attribute  by code
- [Cancel order](https://developer.fabric.inc/v2/api-reference/orders-v2/order-cancellation/cancel-order): Cancels order
- [Check order-cancellation eligibility](https://developer.fabric.inc/v2/api-reference/orders-v2/order-cancellation/check-order-cancellation-eligibility): Checks if a specific order is eligible for cancellation.
- [Order Cancellation](https://developer.fabric.inc/v2/api-reference/orders-v2/order-cancellation/overview)
- [Order Management System](https://developer.fabric.inc/v2/api-reference/orders-v2/order-management-system)
- [Check order return eligibility](https://developer.fabric.inc/v2/api-reference/orders-v2/order-return/check-order-return-eligibility): This endpoint checks if an order is eligible for return.
- [Order Return](https://developer.fabric.inc/v2/api-reference/orders-v2/order-return/overview)
- [Return order](https://developer.fabric.inc/v2/api-reference/orders-v2/order-return/return-order): Returns order
- [Check order-exchange eligibility](https://developer.fabric.inc/v2/api-reference/orders-v2/order/check-order-exchange-eligibility): This endpoint checks if a specific item or an entire order, for a merchant, is eligible for exchange or not.
- [Create an order](https://developer.fabric.inc/v2/api-reference/orders-v2/order/create-an-order): Creates an order. After an order is created, *Notification* APIs of fabric OMS send order notification to customers.
- [Get an order](https://developer.fabric.inc/v2/api-reference/orders-v2/order/get-an-order): Retrieves an order by orderId or orderNumber. If orderId or orderNumber is not provided, this endpoint retrieves all orders for a merchant.
- [Get orders by query](https://developer.fabric.inc/v2/api-reference/orders-v2/order/get-orders-by-query): Retrieves orders based on query model passed in the request body.
- [Order](https://developer.fabric.inc/v2/api-reference/orders-v2/order/overview)
- [Update an order](https://developer.fabric.inc/v2/api-reference/orders-v2/order/update-an-order): Updates an order by order number
- [Update customer information for an order](https://developer.fabric.inc/v2/api-reference/orders-v2/order/update-customer-information-for-an-order): Updates customer information of a specific order by order ID.
- [Update pickup information of an order](https://developer.fabric.inc/v2/api-reference/orders-v2/order/update-pickup-information-of-an-order): Updates pickup information of a specific order by order ID.
- [Acknowledge package tracking](https://developer.fabric.inc/v2/api-reference/orders-v2/package-tracking/acknowledge-package-tracking): Acknowledges package tracking details
- [Package Tracking](https://developer.fabric.inc/v2/api-reference/orders-v2/package-tracking/overview)
- [Get payment details for a specific order](https://developer.fabric.inc/v2/api-reference/orders-v2/payment-status/get-payment-details-for-a-specific-order): Retrieves payment details for a specific order by order number
- [Acknowledge gift card activation](https://developer.fabric.inc/v2/api-reference/orders-v2/shipment/acknowledge-gift-card-activation): Acknowledges gift card activation is successful
- [Acknowledge Shipment](https://developer.fabric.inc/v2/api-reference/orders-v2/shipment/acknowledge-shipment): Acknowledges the tracking is created.
- [Activate gift card](https://developer.fabric.inc/v2/api-reference/orders-v2/shipment/activate-gift-card): Activates gift cards (or coupons) added by shoppers during shipment creation.
- [Create reshipment](https://developer.fabric.inc/v2/api-reference/orders-v2/shipment/create-reshipment): Creates reshipment when package goes missing before it is shipped
- [Create Shipment](https://developer.fabric.inc/v2/api-reference/orders-v2/shipment/create-shipment): Creates shipment. An event is generated at this point to Invoice service for invoice creation. The response includes shipmentId, which is required for subsequent calls such as `GET /shipment/{shipmentId}` and `PUT /shipment/{shipmentId}`.
- [Filter shipments](https://developer.fabric.inc/v2/api-reference/orders-v2/shipment/filter-shipments): Gets shipment details based on filter criteria
- [Get Shipment](https://developer.fabric.inc/v2/api-reference/orders-v2/shipment/get-shipment): Gets shipment details by shipment ID
- [Shipment](https://developer.fabric.inc/v2/api-reference/orders-v2/shipment/overview)
- [Update package tracking](https://developer.fabric.inc/v2/api-reference/orders-v2/shipment/update-package-tracking): Updates details of package tracking.
- [Update shipment](https://developer.fabric.inc/v2/api-reference/orders-v2/shipment/update-shipment): Updates shipment details by shipment ID
- [Add items to shipping methods](https://developer.fabric.inc/v2/api-reference/orders-v2/shipping-method/add-items-to-shipping-methods): Associated items to a shipping method
- [Create shipping method](https://developer.fabric.inc/v2/api-reference/orders-v2/shipping-method/create-shipping-method): Creates shipping method. Response includes **shippingMethodId**, which is required for subsequent calls such as `GET /{shipmethodId}`, `PATCH/{shipmethodId}`, `DELETE /{shipmethodId}`, and `GET /{shipMethodId}/items`.
- [Delete shipping method](https://developer.fabric.inc/v2/api-reference/orders-v2/shipping-method/delete-shipping-method): Deletes a shipping method by its ID
- [Filter shipping methods](https://developer.fabric.inc/v2/api-reference/orders-v2/shipping-method/filter-shipping-methods): Gets shipping method by specified filter criteria.
- [Get ItemIds for a shipping method](https://developer.fabric.inc/v2/api-reference/orders-v2/shipping-method/get-itemids-for-a-shipping-method): Gets items associated with a shipping method
- [Get shipping method](https://developer.fabric.inc/v2/api-reference/orders-v2/shipping-method/get-shipping-method): Gets details of a shipping method by its ID.
- [Get shipping methods for an item](https://developer.fabric.inc/v2/api-reference/orders-v2/shipping-method/get-shipping-methods-for-an-item): Gets shipping methods for an item
- [Shipping Method](https://developer.fabric.inc/v2/api-reference/orders-v2/shipping-method/overview)
- [Update shipping method](https://developer.fabric.inc/v2/api-reference/orders-v2/shipping-method/update-shipping-method): Updates shipping method by its Id
- [Create a Target configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/target-configuration/create-a-target-configuration-for-tenant): Create Target configuration for the given tenantId
- [Delete the Target's configuration.](https://developer.fabric.inc/v2/api-reference/orders-v2/target-configuration/delete-the-targets-configuration)
- [Get All Target configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/target-configuration/get-all-target-configuration-for-tenant): Get all Target configurations for the given tenantId
- [Get configuration for tenant.](https://developer.fabric.inc/v2/api-reference/orders-v2/target-configuration/get-configuration-for-tenant): Get Tenant configuration for the given tenantId
- [Target Configuration](https://developer.fabric.inc/v2/api-reference/orders-v2/target-configuration/overview)
- [Create webhook definition](https://developer.fabric.inc/v2/api-reference/orders-v2/webhook/create-webhook-definition): Creates webhook definition with the given target, events, request type, and other values as passed in the request body.
- [Delete webhook definition by ID](https://developer.fabric.inc/v2/api-reference/orders-v2/webhook/delete-webhook-definition-by-id): Deletes webhook definition of a given webhook ID
- [Get all webhook definitions](https://developer.fabric.inc/v2/api-reference/orders-v2/webhook/get-all-webhook-definitions): Retrieve all webhook definitions for a given tenant-Id, offset, and limit.
- [Get webhook definition by ID](https://developer.fabric.inc/v2/api-reference/orders-v2/webhook/get-webhook-definition-by-id): Retrieves webhook definition for a given webhook ID
- [Webhook](https://developer.fabric.inc/v2/api-reference/orders-v2/webhook/overview)
- [Query webhook event log](https://developer.fabric.inc/v2/api-reference/orders-v2/webhook/query-webhook-event-log): Lets you query log of webhook events based on the filter criteria.
- [Retry webhook](https://developer.fabric.inc/v2/api-reference/orders-v2/webhook/retry-webhook): This endpoint lets you manually re-trigger a webhook event.
- [Update webhook definition by ID](https://developer.fabric.inc/v2/api-reference/orders-v2/webhook/update-webhook-definition-by-id): Updates webhook definition for a given webhook ID
- [Create and Update attribute mappings](https://developer.fabric.inc/v2/api-reference/product-catalog/attributes/create-and-update-attribute-mappings): Set your attribute mapping to begin configuring your catalog. You can update the mappings only if there are no SKUs present in the catalog.
- [Create, update and delete attribute groups](https://developer.fabric.inc/v2/api-reference/product-catalog/attributes/create-update-and-delete-attribute-groups): Using attribute groups, you can group various attributes together to make it easier to manage large volume of item information. <br /> Use this endpoint to create, update, or delete attribute groups. <br /> **Note**: In the context of Product Catalog, attribute group is optional. When created, it must have at least one attribute.
- [Create, update and delete category attributes](https://developer.fabric.inc/v2/api-reference/product-catalog/attributes/create-update-and-delete-category-attributes): Creates, updates and deletes category attributes. The primary purpose is to create and edit the attributes to be assigned to categories. <br /> **Note**: They are generic category attributes and not specific to a category.
- [Create update and delete item attributes](https://developer.fabric.inc/v2/api-reference/product-catalog/attributes/create-update-and-delete-item-attributes): Item attributes allow you to define specific characteristics for items. Common examples of attributes include size, color, and material. Well-defined attributes are important because they enable item discovery and make catalog management easier. <br /> This endpoint creates and updates item attributes to be assigned later. <br /> **Note**: <br /> 1) You can add and manage unlimited attributes for your items. Once they are created, they appear as a selectable option on product pages. <br /> 2) In addition, you can assign attributes to items on an individual level or in bulk.
- [Find attribute groups](https://developer.fabric.inc/v2/api-reference/product-catalog/attributes/find-attribute-groups): Find attribute groups based on the given search criteria. You will get a paginated response, which you can narrow down using filter criteria such as `page` and `size`.
- [Find attribute mapping](https://developer.fabric.inc/v2/api-reference/product-catalog/attributes/find-attribute-mapping): Searches for attribute mapping based on the given search criteria. You will get a paginated response, which you can narrow down using filter criteria such as `page` and `size`.
- [Attributes](https://developer.fabric.inc/v2/api-reference/product-catalog/attributes/overview)
- [Generate CSV template file for items](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/generate-csv-template-file-for-items): Generates CSV template to upload items for a specific category.
- [Generate CSV template for bundles](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/generate-csv-template-for-bundles): Generates CSV template to upload bundles for a specific category.
- [Generate CSV template for categories](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/generate-csv-template-for-categories): Generates CSV template to bulk upload categories.
- [Generate CSV template for item attributes](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/generate-csv-template-for-item-attributes): Generates CSV template to upload item attributes. 
- [Generate S3 bucket URL for bundle import](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/generate-s3-bucket-url-for-bundle-import): Generates S3 bucket URL to upload item bundles using CSV file
- [Generate S3 bucket URL for categories import](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/generate-s3-bucket-url-for-categories-import): Generates S3 bucket URL to upload categories using CSV file. Follow these steps to bulk upload categories using CSV: <br /> 1) Download the template using *GET /api-category/v1/category/bulk/template* <br /> 2) Upload the URL using *POST /api-category/v1/upload-url*<br /> 3) Open the URL from the response of the above endpoint (*POST /api-category/v1/upload-url*), change the method to PUT, update **binary** in the requestBody type to view the select file option and upload a CSV from local system <br /> 4) You may check the status using this endpoint *GET /api-category/v1/category/bulk/file/:fileId/status*
- [Generate S3 bucket URL for item attribute import](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/generate-s3-bucket-url-for-item-attribute-import): Generates S3 bucket URL to upload item attribute using CSV file
- [Generate S3 bucket URL for item import](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/generate-s3-bucket-url-for-item-import): Generates S3 bucket URL to upload items using CSV file. Follow these steps for bulk upload using CSV: <br /> 1) Download the template using *GET /api-product/v1/product/bulk/template/:accountid/:nodeId* <br /> 2) Upload the url using *POST /api-product/v1/upload-url*<br /> 3) Open the URL from the response of the above endpoint (*POST /api-product/v1/upload-url*), change the method to PUT, update **binary** in the requestBody type to view the select file option and upload a CSV from local system <br /> 4) You may check the status using this endpoint *GET /api-product/v1/product/bulk/file/:fileId/status*
- [Get file upload status](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/get-file-upload-status): Gets file upload status by file ID.
- [Get file upload status](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/get-file-upload-status-1): Gets file upload status by using file ID
- [Get imported files for bundles](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/get-imported-files-for-bundles): Gets a list of files used to import bundles, along with their current statuses. You will get a paginated response, which you can narrow down using filter criteria such as `page` and `size`.
- [Get imported files for categories](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/get-imported-files-for-categories): Gets a list of files used for importing categories, along with their current statuses. You will get a paginated response, which you can narrow down using filter criteria such as `page` and `size`.
- [Get imported files for item attributes](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/get-imported-files-for-item-attributes): Gets a list of files used to import item attributes, along with their current statuses. You will get a paginated response, which you can narrow down using filter criteria such as `page` and `size`.
- [Get imported files for items](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/get-imported-files-for-items): Gets a list of files used to import items, along with their current statuses. You will get a paginated response, which you can narrow down using filter criteria such as `page` and `size`.
- [Bulk Import](https://developer.fabric.inc/v2/api-reference/product-catalog/bulk-import/overview)
- [Add and remove category source exclusions](https://developer.fabric.inc/v2/api-reference/product-catalog/category/add-and-remove-category-source-exclusions): Adds and removes exclusions for category source, by ID. For example, a category source `Electronics` has Laptop, Mobile, and Tablet as children categories. It's possible to exclude Tablet using this endpoint, so that it does not appear for shoppers.
- [Add and remove category source inclusions](https://developer.fabric.inc/v2/api-reference/product-catalog/category/add-and-remove-category-source-inclusions): Adds and removes category sources. <br /> Primary category is the original catalog tree consisting of nested levels of children categories and is used to place items where they belong. Alternate categories are dynamic and populated from the Primary category, which is the original source of items. Source for an Alternate category points to a Primary category, and makes all items in the Primary category appear within the Alternate category; it behaves like a symlink.
- [Add and remove item attribute conditions](https://developer.fabric.inc/v2/api-reference/product-catalog/category/add-and-remove-item-attribute-conditions): Adds conditions for item attributes so that items can be filtered based on these conditions, from an Alternate category. <br /> For example, a Primary category called **Chairs** has three chairs of different materials. An Alternate category called **Wooden Chairs** with Primary category **Chairs** as source will list all the three chairs. Through this endpoint you can add a 'item attribute condition' to filter chairs made of wood from **Wooden Chairs**. Another example: Using this endpoint, you can combine categories and list items on sale (where sale attribute is true).
- [Assign and unassign category attributes](https://developer.fabric.inc/v2/api-reference/product-catalog/category/assign-and-unassign-category-attributes): Category attributes let you define characteristics of categories and children categories. <br /> This endpoint assigns or unassigns attributes of a single category. The primary purpose is to assign attributes.
- [Assign and unassign item attributes](https://developer.fabric.inc/v2/api-reference/product-catalog/category/assign-and-unassign-item-attributes): Categories are used to segregate and group items. You can specify `mandatory` and `optional` attributes that all items within that category must have. Attributes are used to store structured information about items. <br /> Use this endpoint to create and manage item attributes for the specified category.
- [Create category](https://developer.fabric.inc/v2/api-reference/product-catalog/category/create-category): Creates Primary or Alternate category to organize items into logical groups. <br /> **Note**: <br /> 1) To add **Primary**  category, only `name` is required in the request. <br /> 2) To add a **child** category, both `name` and `parentNodeId` are required. For **child** category, you can additionally specify `order` of display. <br /> 3) To add an **Alternate** category, both `name` and `type` are required. <br /> **Note**: Category details including category ID received in the response are required for subsequent calls. For example, it's required to *Create item* (POST /v1/product/bulk/insert).
- [Create or update multiple categories or collections](https://developer.fabric.inc/v2/api-reference/product-catalog/category/create-or-update-multiple-categories-or-collections): With endpoint, you can create or update up to 20 categories and collections, along with their children. It is particularly useful when dealing with complex organization structures. <br /> **Note**: <br /> 1) `parentNodeName` is a breadcrumb string of parent having delimeter as **->** <br /> 2) **PRIMARY** is the root category (level 0) name. To create root categories or children of PRIMARY root category, pass **PRIMARY** as `parentNodeName` parameter. For collections, the collection name is the root, followed by its children with delimeter <br /> 3) If a category name already exists as a parent category, use this endpoint to update the existing category. Otherwise, it creates a new category under the given parent.
- [Find categories](https://developer.fabric.inc/v2/api-reference/product-catalog/category/find-categories): Finds categories, by keywords, category identifiers, type, or status. <br /> **Note**: <br /> 1) Categories and children categories must already exist in the system. <br /> 2) When query parameters are omitted, this endpoint returns a paginated response with all the categories. Using `size` and `page`, you can narrow down the search results. <br /> 3) GET /v1/category (Store admin context) or Algolia search (Shopper context) is strongly recommended over this endpoint.
- [Find categories](https://developer.fabric.inc/v2/api-reference/product-catalog/category/find-categories-1): Using this endpoint, you can search for categories and collections based on status, type, or category attributes. You will get a paginated response, which you can fine tune by specifying the query parameters `page` and `size`. <br /> Data is retrieved from the database, ensuring latest results.
- [Get assigned category attributes](https://developer.fabric.inc/v2/api-reference/product-catalog/category/get-assigned-category-attributes): Gets all attributes assigned to a category. <br /> **Note**: <br /> *Get category* endpoint (GET /v1/category) returns categories, their attributes, children categories, and breadcrumb details. So, this endpoint is recommended if you have a category ID and only require its attributes.
- [Get assigned item attributes](https://developer.fabric.inc/v2/api-reference/product-catalog/category/get-assigned-item-attributes): Gets all the item attributes for the specified category. <br /> **Note**: Items may also inherit item attributes from parent categories.
- [Get categories](https://developer.fabric.inc/v2/api-reference/product-catalog/category/get-categories): Gets categories and their details including attributes, breadcrumbs, and details of children categories. <br /> **Note**: <br /> 1) Specify either `ids` or `nodeIds` to get specific categories. <br /> 2) Use `type` to get a specific category type. <br /> 3) When query parameters are omitted, this endpoint returns a paginated response listing all Alternate categories in Active status. Using the query parameters `size` and `page`, you can narrow down the search results.
- [Get category source exclusions](https://developer.fabric.inc/v2/api-reference/product-catalog/category/get-category-source-exclusions): Gets available exclusions applied to a category source.
- [Get category source inclusions](https://developer.fabric.inc/v2/api-reference/product-catalog/category/get-category-source-inclusions): Gets all the available category sources. <br /> Items are created under the Primary category, and Alternate categories are created to export alternate organizations of the Primary category. So, the Primary category is the source of items that appear in Alternate categories. The category sources are Primary categories that can be used as item sources in Alternate categories. Sources behave similar to symlinks.
- [Get category tree](https://developer.fabric.inc/v2/api-reference/product-catalog/category/get-category-tree): Hierarchy of parent and children categories form a tree structure. This endpoint returns a tree of categories rooted in the category identified by `id` or `nodeId`.<br /> **Note**: <br /> 1) If parent category does not exist in the system, you'll get a `404 - Not found` error <br /> 2) If a child category does not exist for the given parent, you'll get a success response but `children` property will show a blank array.
- [Get item attribute conditions](https://developer.fabric.inc/v2/api-reference/product-catalog/category/get-item-attribute-conditions): You can filter items from Alternate categories based on the conditions set using the POST /v1/category/item-attribute/condition endpoint. <br /> **Note**: Items may inherit conditions from parent category as well.
- [Get SKUs in a category](https://developer.fabric.inc/v2/api-reference/product-catalog/category/get-skus-in-a-category): Gets SKUs of all items belonging to a category. <br /> **Note**: <br /> 1) Categories must exist in the system to get SKUs in that category. If SKUs are not available in the given category ID, this endpoint returns an empty list.
- [Manage category attributes for multiple categories or collections](https://developer.fabric.inc/v2/api-reference/product-catalog/category/manage-category-attributes-for-multiple-categories-or-collections): With this endpoint, you can efficiently assign and unassign category attributes to specified categories and collections. You can assign or unassign up to 10 category attributes simultaneously. For example, you can assign category attributes, such as material or color, to all clothing categories, such as dresses and shirts.
- [Manage item attributes for multiple categories](https://developer.fabric.inc/v2/api-reference/product-catalog/category/manage-item-attributes-for-multiple-categories): Use this endpoint to assign and unassign item attributes to specified categories. You can assign or unassign up to 10 item attributes simultaneously.
- [Modify category](https://developer.fabric.inc/v2/api-reference/product-catalog/category/modify-category): Updates category details such as name, parent, and its order of appearance amongst sibling categories.
- [Category](https://developer.fabric.inc/v2/api-reference/product-catalog/category/overview)
- [Product Catalog](https://developer.fabric.inc/v2/api-reference/product-catalog/product-information-management)
- [Create items and bundles](https://developer.fabric.inc/v2/api-reference/product-catalog/product/create-items-and-bundles): Creates multiple items or bundles along with their attributes. In addition, this endpoint supports data validation to ensure accuracy and consistency. <br /> **Note**: <br /> 1) As a prerequisite category and attributes must be created beforehand. <br /> 2) To add an item variant, parentSku must be additionally specified. <br /> 3) An item is assigned to only one category but it can be fetched from Alternate categories. <br /> 4) Up to 50 items or bundles can be added.
- [Find items](https://developer.fabric.inc/v2/api-reference/product-catalog/product/find-items): Finds items - both individual items and bundles. You will get a paginagted response, which you can narrow down using filter parameters, including `page` and `size`.
- [Get item attributes](https://developer.fabric.inc/v2/api-reference/product-catalog/product/get-item-attributes): Item attributes define characteristics of an item. For example, item name, its identifiers, and description are the common attributes of any item. Attributes are key-value pairs (color: red) that hold information for each property of an item. <br /> This endpoint gets all attributes of an item, by SKU or itemId. <br /> **Note**: The *Get item* (GET /v1/product) gets item details and their attribute. So, this endpoint is recommended when you have the item SKU or item ID, and only require its attributes.
- [Get items and children items](https://developer.fabric.inc/v2/api-reference/product-catalog/product/get-items-and-children-items): Items can be individual items or a bundle of items. This endpoints allows you to retrieve items - individual items and bundles, along with their attributes, children items and their details. <br /> **Note**: <br /> 1) Optional filter parameters can be passed in as query to narrow down the search results. <br /> 2) This API will only return the count and details of Parent SKU and not its variants
- [Get items and limited children items](https://developer.fabric.inc/v2/api-reference/product-catalog/product/get-items-and-limited-children-items): Gets items (single item or bundles) by `skus` or parent `skus`. When a parent SKU is sent as query parameter, you'll get children items of those SKUs. When `parentSKU` is not specified, children items are not retrieved. Optionally, `page` and `size` can be used as query parameters. **Note**: <br /> 1) `status` and `date` query parameters works only with pagination when `parentSku` is omitted. Separate responses are shown for bundle and product.<br /> 2) when `parentSku` is passed as request parameter, it will only return the paginated response of children of `parentSKU`.
- [Product](https://developer.fabric.inc/v2/api-reference/product-catalog/product/overview)
- [Update items and bundles](https://developer.fabric.inc/v2/api-reference/product-catalog/product/update-items-and-bundles): With this endpoint, you can update multiple items or bundles, along with their attributes. <br /> **Note**: <br /> 1) You can update up to 50 items or bundles. <br /> 2) By specifying the attribute `value` as NULL, a reserved keyword, you can remove the existing attribute value.
- [Update items in bundle](https://developer.fabric.inc/v2/api-reference/product-catalog/product/update-items-in-bundle): Updates bundle by adding or removing items and adjusting quantities.
- [Upsert items and bundles](https://developer.fabric.inc/v2/api-reference/product-catalog/product/upsert-items-and-bundles): With this endpoint, you can create or update items or bundles along with their attributes. <br /> **Note**: <br /> 1) If the SKU already exists, then the given item or bundle is updated. Otherwise, a new item or bundle is created with that SKU. <br /> 2) You can add or update up to 50 items or bundles. <br /> 3) By specifying the attribute `value` as NULL, a reserved keyword, you can remove the existing attribute value.
- [Create cancellation reasons](https://developer.fabric.inc/v2/api-reference/subscriptions/cancellation-reasons/create-cancellation-reasons): Create cancellation reasons
- [Get all cancellation reasons](https://developer.fabric.inc/v2/api-reference/subscriptions/cancellation-reasons/get-all-cancellation-reasons): Get all cancellation reasons
- [Cancellation Reasons](https://developer.fabric.inc/v2/api-reference/subscriptions/cancellation-reasons/overview)
- [Add items to single order](https://developer.fabric.inc/v2/api-reference/subscriptions/orders/add-items-to-single-order): Add items to order specified by order ID
- [Get all orders for a specific customer](https://developer.fabric.inc/v2/api-reference/subscriptions/orders/get-all-orders-for-a-specific-customer): Get all orders for a specified customer, specified by customer ID
- [Get single order](https://developer.fabric.inc/v2/api-reference/subscriptions/orders/get-single-order): Get single order, specified by order ID
- [Orders](https://developer.fabric.inc/v2/api-reference/subscriptions/orders/overview)
- [Remove items from single order](https://developer.fabric.inc/v2/api-reference/subscriptions/orders/remove-items-from-single-order): Remove items from order specified by order ID
- [Skip single order](https://developer.fabric.inc/v2/api-reference/subscriptions/orders/skip-single-order): Skip order specified by order ID
- [Trigger single order](https://developer.fabric.inc/v2/api-reference/subscriptions/orders/trigger-single-order): Trigger order specified by order ID
- [Update single order](https://developer.fabric.inc/v2/api-reference/subscriptions/orders/update-single-order): Update single order, specified by order ID
- [Create subscriber](https://developer.fabric.inc/v2/api-reference/subscriptions/subscribers/create-subscriber): Create new subscriber with specified details
- [Get single subscriber's account](https://developer.fabric.inc/v2/api-reference/subscriptions/subscribers/get-single-subscribers-account): Get details of single customer, specified by customer ID
- [Subscribers](https://developer.fabric.inc/v2/api-reference/subscriptions/subscribers/overview)
- [Update single subscriber](https://developer.fabric.inc/v2/api-reference/subscriptions/subscribers/update-single-subscriber): Update a single subscriber, specified by customer ID
- [Update single subscriber's shipping and billing information](https://developer.fabric.inc/v2/api-reference/subscriptions/subscribers/update-single-subscribers-shipping-and-billing-information): Update single subscriber's shipping and billing information (subscriber specified by customer ID)
- [Create subscription discounts](https://developer.fabric.inc/v2/api-reference/subscriptions/subscription-discounts/create-subscription-discounts): Create subscription discounts
- [Deactivate a subscription discount](https://developer.fabric.inc/v2/api-reference/subscriptions/subscription-discounts/deactivate-a-subscription-discount): Deactivate a specified subscription discount (specified by discount ID)
- [Get a subscription discount](https://developer.fabric.inc/v2/api-reference/subscriptions/subscription-discounts/get-a-subscription-discount): Get a subscription discount for a specified offer (specified by offer ID)
- [Subscription Discounts](https://developer.fabric.inc/v2/api-reference/subscriptions/subscription-discounts/overview)
- [Update a subscription discount](https://developer.fabric.inc/v2/api-reference/subscriptions/subscription-discounts/update-a-subscription-discount): Update a subscription discount for a specified offer (specified by offer ID)
- [Subscriptions API](https://developer.fabric.inc/v2/api-reference/subscriptions/subscriptions-api)
- [Create bulk subscriptions](https://developer.fabric.inc/v2/api-reference/subscriptions/subscriptions/create-bulk-subscriptions): Create bulk subscriptions
- [Deactivate single subscription](https://developer.fabric.inc/v2/api-reference/subscriptions/subscriptions/deactivate-single-subscription): Deactivate single subscription by subscription ID
- [Discontinue items in subscription](https://developer.fabric.inc/v2/api-reference/subscriptions/subscriptions/discontinue-items-in-subscription): Discontinue items in subscription by specifying item SKUs
- [Get all subscriptions](https://developer.fabric.inc/v2/api-reference/subscriptions/subscriptions/get-all-subscriptions): Get all subscriptions (response is paginated)
- [Get single subscription](https://developer.fabric.inc/v2/api-reference/subscriptions/subscriptions/get-single-subscription): Get single subscription by subscription ID
- [Subscriptions](https://developer.fabric.inc/v2/api-reference/subscriptions/subscriptions/overview)
- [Reactivate single subscription](https://developer.fabric.inc/v2/api-reference/subscriptions/subscriptions/reactivate-single-subscription): Reactivate single subscription by subscription ID
- [Replace a subscription item](https://developer.fabric.inc/v2/api-reference/subscriptions/subscriptions/replace-a-subscription-item): Replace a subscription item (with details) by specifying item SKU
- [Update single subscription](https://developer.fabric.inc/v2/api-reference/subscriptions/subscriptions/update-single-subscription): Update single subscription by subscription ID
- [Fetch access token](https://developer.fabric.inc/v2/api-reference/user-self-service-apis/authentication-apis/fetch-access-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.<br/><b><span style={{color: 'red'}}>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.</span></b> Instead, send the request through a server side/native method and ensure the 'Origin' header isn't present.
- [Authentication APIs](https://developer.fabric.inc/v2/api-reference/user-self-service-apis/authentication-apis/overview)
- [Introduction](https://developer.fabric.inc/v2/api-reference/user-self-service-apis/introduction)
- [Change password](https://developer.fabric.inc/v2/api-reference/user-self-service-apis/user-self-service-apis/change-password): This API allows a logged in user to change his password (post login). This API is not applicable when the user has logged in or registered using a social login.
- [Forgot password](https://developer.fabric.inc/v2/api-reference/user-self-service-apis/user-self-service-apis/forgot-password): This API allows the users to reset their password when they are unable to login. This API is not applicable when the user has logged in or registered using a social login.
- [Get user details](https://developer.fabric.inc/v2/api-reference/user-self-service-apis/user-self-service-apis/get-user-details): This API allows a logged in user to get his own details from the fabric Identity. The API is designed to return the details of the user whose bearer token is sent in the header.
- [User Self Service APIs](https://developer.fabric.inc/v2/api-reference/user-self-service-apis/user-self-service-apis/overview)
- [Update user details](https://developer.fabric.inc/v2/api-reference/user-self-service-apis/user-self-service-apis/update-user-details): This API allows a logged in user to update his own details in the fabric Identity. fabric Identity stores only the infromation that is necessary for user authentication functionality. The other customer details of the user like shipping and communication preferences are to be stored in the customer service APIs of fabric.
- [Global Componenets](https://developer.fabric.inc/v2/api-reference/xm-v1/global-components/overview)
- [Retrieves Live Global Components](https://developer.fabric.inc/v2/api-reference/xm-v1/global-components/retrieves-live-global-components): Returns a list of all the live global component data
- [Menu](https://developer.fabric.inc/v2/api-reference/xm-v1/menu/overview)
- [Retrieves All Menu Items](https://developer.fabric.inc/v2/api-reference/xm-v1/menu/retrieves-all-menu-items): Returns a list of all active menus all their menu items
- [Retrieves Menu List](https://developer.fabric.inc/v2/api-reference/xm-v1/menu/retrieves-menu-list): Returns a list of all the menus and its immediate sub-menus
- [Pages](https://developer.fabric.inc/v2/api-reference/xm-v1/pages/overview)
- [Retrieves Live Page By URL](https://developer.fabric.inc/v2/api-reference/xm-v1/pages/retrieves-live-page-by-url): Returns the live page for the specified page url
- [Retrieves Live Pages](https://developer.fabric.inc/v2/api-reference/xm-v1/pages/retrieves-live-pages): Returns a list of all the live pages
- [XM](https://developer.fabric.inc/v2/api-reference/xm-v1/xm)
- [Get Live Global Components For A Channel](https://developer.fabric.inc/v2/api-reference/xm-v2/global-components/get-live-global-components-for-a-channel): Gets a list of all the live global component data for a specified channel
- [Global Componenets](https://developer.fabric.inc/v2/api-reference/xm-v2/global-components/overview)
- [Get Live Menu For A Channel](https://developer.fabric.inc/v2/api-reference/xm-v2/menu/get-live-menu-for-a-channel): Gets live menu of the specified channel along with all its menu items
- [Menu](https://developer.fabric.inc/v2/api-reference/xm-v2/menu/overview)
- [Get Live Page For A Channel By URL](https://developer.fabric.inc/v2/api-reference/xm-v2/pages/get-live-page-for-a-channel-by-url): Gets live page for the specified page URL and channel
- [Get Live Pages For Specified Channels](https://developer.fabric.inc/v2/api-reference/xm-v2/pages/get-live-pages-for-specified-channels): Get a list of all the live pages for the specified channels
- [Get meta information about live pages](https://developer.fabric.inc/v2/api-reference/xm-v2/pages/get-meta-information-about-live-pages): Get all the meta information such as name, url, channels, and SEO fields.
- [Pages](https://developer.fabric.inc/v2/api-reference/xm-v2/pages/overview)
- [XM](https://developer.fabric.inc/v2/api-reference/xm-v2/xm)
- [Contracts](https://developer.fabric.inc/v2/guides/customers/contracts): Manage business-to-business pricing agreements
- [Customers](https://developer.fabric.inc/v2/guides/customers/customers): Manage business-to-consumer (B2C) customers
- [Organizations](https://developer.fabric.inc/v2/guides/customers/organizations): Manage business-to-business (B2B) customers
- [Overview](https://developer.fabric.inc/v2/guides/customers/overview)
- [Quickstart](https://developer.fabric.inc/v2/guides/customers/quickstart): Basic instructions to configure Customer for initial use
- [Global Elements](https://developer.fabric.inc/v2/guides/experiences/global-elements): Create and modify sitewide content
- [Menu](https://developer.fabric.inc/v2/guides/experiences/menu): Menus enable custom navigation paths that can be quickly modified.
- [Menu V2](https://developer.fabric.inc/v2/guides/experiences/menu-v2): Version, schedule and publish different menu options.
- [Multi-Channel](https://developer.fabric.inc/v2/guides/experiences/multi-channel): Create unique user experiences for each online sales avenue.
- [Overview](https://developer.fabric.inc/v2/guides/experiences/overview): Experiences is a content management system (CMS) with a web-based editor for content layout and authoring.
- [Pages](https://developer.fabric.inc/v2/guides/experiences/pages): Pages is your artboard to lay out and populate content.
- [Quickstart](https://developer.fabric.inc/v2/guides/experiences/quickstart): Basic steps to begin building your site in Experiences
- [Release Notes](https://developer.fabric.inc/v2/guides/experiences/release-notes)
- [Settings](https://developer.fabric.inc/v2/guides/experiences/settings): Tailor Experiences to your standardized motif on all platforms and channels
- [API Key Management](https://developer.fabric.inc/v2/guides/getting-started/api-key-management)
- [Migrate from Magento to fabric](https://developer.fabric.inc/v2/guides/getting-started/migrate-to-fabric/migrate-from-magento-to-fabric)
- [Migrate from Oracle ATG to fabric](https://developer.fabric.inc/v2/guides/getting-started/migrate-to-fabric/migrate-from-oracle-atg-to-fabric)
- [Migrate from Salesforce Commerce to fabric](https://developer.fabric.inc/v2/guides/getting-started/migrate-to-fabric/migrate-from-salesforce-commerce-to-fabric)
- [Migrate from Shopify Plus to fabric](https://developer.fabric.inc/v2/guides/getting-started/migrate-to-fabric/migrate-from-shopify-plus-to-fabric)
- [Migrate to fabric](https://developer.fabric.inc/v2/guides/getting-started/migrate-to-fabric/migrate-to-fabric): Prepare for moving from monolithic commerce platforms to fabric's service-oriented commerce platform.
- [Overview](https://developer.fabric.inc/v2/guides/getting-started/overview): The Copilot interface is the starting point for accessing all fabric offerings.
- [Customers Roles](https://developer.fabric.inc/v2/guides/getting-started/rbac/customers-roles)
- [Experiences Roles](https://developer.fabric.inc/v2/guides/getting-started/rbac/experiences-roles)
- [Inviting Users](https://developer.fabric.inc/v2/guides/getting-started/rbac/inviting-users)
- [Managing Users](https://developer.fabric.inc/v2/guides/getting-started/rbac/managing-users)
- [Offers Roles](https://developer.fabric.inc/v2/guides/getting-started/rbac/offers-roles)
- [Orders Roles](https://developer.fabric.inc/v2/guides/getting-started/rbac/orders-roles)
- [Product Catalog Roles](https://developer.fabric.inc/v2/guides/getting-started/rbac/products-roles)
- [Role-Based Access Control (RBAC)](https://developer.fabric.inc/v2/guides/getting-started/rbac/role-based-access-control)
- [Security & Compliance](https://developer.fabric.inc/v2/guides/getting-started/security---compliance): Learn how we protect customer data, user data, and the reliability of our commerce services and applications.
- [Inventory](https://developer.fabric.inc/v2/guides/inventory/inventory): See the stock of goods across locations all in one spot
- [Locations](https://developer.fabric.inc/v2/guides/inventory/locations): Define location details and manage how they fulfill orders
- [Network](https://developer.fabric.inc/v2/guides/inventory/network): Create rules to define inventory availability
- [Overview](https://developer.fabric.inc/v2/guides/inventory/overview)
- [Dashboard](https://developer.fabric.inc/v2/guides/loyalty/dashboard): A quick look at loyalty member metrics
- [Hierarchy](https://developer.fabric.inc/v2/guides/loyalty/hierarchy): Design your LMS Program with Tier Groups, stores, and more
- [Manage Users](https://developer.fabric.inc/v2/guides/loyalty/manage-users): Manage the profiles with access to your Loyalty account
- [Members](https://developer.fabric.inc/v2/guides/loyalty/members): Manage accounts enrolled in your LMS
- [Overview](https://developer.fabric.inc/v2/guides/loyalty/overview): LMS with the flexibility to define, configure, and execute loyalty programs across platforms
- [Points](https://developer.fabric.inc/v2/guides/loyalty/points): Set how loyalty members earn and spend points
- [Promotions](https://developer.fabric.inc/v2/guides/loyalty/promotions): Create member rewards
- [Quickstart](https://developer.fabric.inc/v2/guides/loyalty/quickstart): Steps to build your first Loyalty Management System in fabric
- [Release Notes](https://developer.fabric.inc/v2/guides/loyalty/release-notes)
- [Reports](https://developer.fabric.inc/v2/guides/loyalty/reports): Generate member profile and reward reports
- [BigCommerce Integration](https://developer.fabric.inc/v2/guides/marketplace-retailers/bigcommerce-integration)
- [Import Products & Attributes](https://developer.fabric.inc/v2/guides/marketplace-retailers/import-products---attributes)
- [Inventory](https://developer.fabric.inc/v2/guides/marketplace-retailers/inventory): View and export inventory reports on both the item and supplier levels.
- [Inviting Suppliers](https://developer.fabric.inc/v2/guides/marketplace-retailers/inviting-suppliers): Invite new suppliers to your dropship program and manage existing connected suppliers.
- [Invoices](https://developer.fabric.inc/v2/guides/marketplace-retailers/invoices): View and manage invoices for all dropship orders.
- [Create Purchase Order](https://developer.fabric.inc/v2/guides/marketplace-retailers/orders/create-purchase-order): Generate a custom purchase order manually.
- [Managing cancels & backorders](https://developer.fabric.inc/v2/guides/marketplace-retailers/orders/managing-cancels---backorders): Manage orders canceled or flagged as backordered by a supplier.
- [Order Detail](https://developer.fabric.inc/v2/guides/marketplace-retailers/orders/order-detail): Search for and view detailed information on each order.
- [Orders](https://developer.fabric.inc/v2/guides/marketplace-retailers/orders/orders): Visualize the information needed to manage all aspects of your dropship orders across all connected suppliers.
- [Returns and Credit Memos](https://developer.fabric.inc/v2/guides/marketplace-retailers/orders/returns-and-credit-memos): Create returns on orders and manage the credit memos associated with those returns.
- [Shipping & Tracking](https://developer.fabric.inc/v2/guides/marketplace-retailers/orders/shipping---tracking)
- [Overview](https://developer.fabric.inc/v2/guides/marketplace-retailers/overview): Rapidly launch, operate, and scale a curated assortment of products from an unlimited number of dropship suppliers.
- [Proposals](https://developer.fabric.inc/v2/guides/marketplace-retailers/proposals): Review and approve proposals online.
- [Release Notes](https://developer.fabric.inc/v2/guides/marketplace-retailers/release-notes)
- [Compliance Scorecard](https://developer.fabric.inc/v2/guides/marketplace-retailers/reports/compliance-scorecard)
- [Reports](https://developer.fabric.inc/v2/guides/marketplace-retailers/reports/reports)
- [Sales Performance Reporting](https://developer.fabric.inc/v2/guides/marketplace-retailers/reports/sales-performance-reporting)
- [Attribute Value Transformers](https://developer.fabric.inc/v2/guides/marketplace-retailers/settings/attribute-value-transformers): Transform the value of attributes automatically and accurately.
- [Categories & Commission Profiles](https://developer.fabric.inc/v2/guides/marketplace-retailers/settings/categories---commission-profiles)
- [Proposal Departments](https://developer.fabric.inc/v2/guides/marketplace-retailers/settings/proposal-departments): Standardize product data rules for all suppliers across various categories.
- [Rulesets](https://developer.fabric.inc/v2/guides/marketplace-retailers/settings/rulesets): Set the conditions and validations used by the Proposal Department.
- [Settings](https://developer.fabric.inc/v2/guides/marketplace-retailers/settings/settings): Add users and configure notifications in Marketplace.
- [Templates](https://developer.fabric.inc/v2/guides/marketplace-retailers/settings/templates): Keep data consistent between internal and external systems
- [Shopify Integration](https://developer.fabric.inc/v2/guides/marketplace-retailers/shopify-integration): Integrate your fabric Marketplace account with your Shopify account
- [Supplier Information](https://developer.fabric.inc/v2/guides/marketplace-retailers/supplier-information)
- [Supplier Payment](https://developer.fabric.inc/v2/guides/marketplace-retailers/supplier-payment): Track supplier invoices and payments
- [Support](https://developer.fabric.inc/v2/guides/marketplace-retailers/support)
- [BigCommerce Integration](https://developer.fabric.inc/v2/guides/marketplace-suppliers/bigcommerce-integration)
- [Adding Fulfillment Locations](https://developer.fabric.inc/v2/guides/marketplace-suppliers/fulfillment/adding-fulfillment-locations)
- [Bulk Actions for Orders](https://developer.fabric.inc/v2/guides/marketplace-suppliers/fulfillment/bulk-actions-for-orders)
- [Fulfillment](https://developer.fabric.inc/v2/guides/marketplace-suppliers/fulfillment/fulfillment): Process and ship orders from all connected retail partners.
- [Invoices](https://developer.fabric.inc/v2/guides/marketplace-suppliers/fulfillment/invoices): Invoice orders directly within Marketplace individually or in bulk via file upload.
- [Shipments & Tracking](https://developer.fabric.inc/v2/guides/marketplace-suppliers/fulfillment/shipments---tracking): Update orders with tracking information on a single order or in bulk via file upload and generate shipping labels.
- [Inventory](https://developer.fabric.inc/v2/guides/marketplace-suppliers/inventory): Maintain inventory positions for your items in Marketplace via file upload.
- [Overview](https://developer.fabric.inc/v2/guides/marketplace-suppliers/overview): fabric Marketplace provides suppliers a platform to discover, connect with, and grow successful partnerships with retailers to expand their reach and distribution
- [Import Products from Shopify](https://developer.fabric.inc/v2/guides/marketplace-suppliers/product-management/import-products-from-shopify)
- [Product Management](https://developer.fabric.inc/v2/guides/marketplace-suppliers/product-management/product-management): Upload all your product offerings and submit them to your connected retailer partners.
- [Release Notes](https://developer.fabric.inc/v2/guides/marketplace-suppliers/release-notes)
- [Reporting](https://developer.fabric.inc/v2/guides/marketplace-suppliers/reporting)
- [Retailer Information](https://developer.fabric.inc/v2/guides/marketplace-suppliers/retailer-information)
- [Returns](https://developer.fabric.inc/v2/guides/marketplace-suppliers/returns): Approve and reject returns, then issue credit memos in Marketplace
- [Settings](https://developer.fabric.inc/v2/guides/marketplace-suppliers/settings): Manage information about your business and its operations.
- [ShipStation Integration](https://developer.fabric.inc/v2/guides/marketplace-suppliers/shipstation-integration)
- [Shopify Integration](https://developer.fabric.inc/v2/guides/marketplace-suppliers/shopify-integration)
- [Supplier Onboarding Guide](https://developer.fabric.inc/v2/guides/marketplace-suppliers/supplier-onboarding-guide)
- [Support](https://developer.fabric.inc/v2/guides/marketplace-suppliers/support)
- [WooCommerce Integration](https://developer.fabric.inc/v2/guides/marketplace-suppliers/woocommerce-integration)
- [Coupons](https://developer.fabric.inc/v2/guides/offers/coupons): Create codes that customers can enter at checkout to receive a discount
- [Overview](https://developer.fabric.inc/v2/guides/offers/overview): Offers is fabric's pricing and promotions engine with tools to manage your pricing, promotions, and coupons in one place.
- [Pricing](https://developer.fabric.inc/v2/guides/offers/pricing): Set and track the price of your products
- [Promotions](https://developer.fabric.inc/v2/guides/offers/promotions): Create discounts automatically applied to all customers' carts
- [Quickstart](https://developer.fabric.inc/v2/guides/offers/quickstart): Basic steps to begin building your first promotion
- [Release Notes](https://developer.fabric.inc/v2/guides/offers/release-notes)
- [Settings](https://developer.fabric.inc/v2/guides/offers/settings)
- [History](https://developer.fabric.inc/v2/guides/orders/history)
- [Order Management](https://developer.fabric.inc/v2/guides/orders/order-management)
- [Overview](https://developer.fabric.inc/v2/guides/orders/overview): Build a centralized source of order, inventory, and warehouse information with fabric Orders.
- [Quickstart](https://developer.fabric.inc/v2/guides/orders/quickstart)
- [Release Notes](https://developer.fabric.inc/v2/guides/orders/release-notes)
- [Settings](https://developer.fabric.inc/v2/guides/orders/settings): Create tailored checkout offers, fulfillment rules, and shipping options
- [Attributes](https://developer.fabric.inc/v2/guides/product-catalog/attributes/attributes): Attributes are terms that describe the characteristics of any component.
- [Bulk Uploads](https://developer.fabric.inc/v2/guides/product-catalog/attributes/bulk-uploads)
- [Categories](https://developer.fabric.inc/v2/guides/product-catalog/categories): Group products together for better discovery and management.
- [Collections](https://developer.fabric.inc/v2/guides/product-catalog/collections)
- [Bulk Uploads](https://developer.fabric.inc/v2/guides/product-catalog/list/bulk-uploads)
- [List](https://developer.fabric.inc/v2/guides/product-catalog/list/list): The Product Catalog List is where you import, review, and revise all products.
- [Overview](https://developer.fabric.inc/v2/guides/product-catalog/overview): Product Catalog is a centralized source for all salable item information.
- [Quickstart](https://developer.fabric.inc/v2/guides/product-catalog/quickstart): Basic steps to configure Product Catalog for initial use
- [Release Notes](https://developer.fabric.inc/v2/guides/product-catalog/release-notes)
- [Settings](https://developer.fabric.inc/v2/guides/product-catalog/settings): Configure Product Catalog to maximize efficiency and interface properly with other systems.
- [Batch Processing](https://developer.fabric.inc/v2/guides/store-fulfillment/mobile-app/batch-processing)
- [Fulfillments Main Screen](https://developer.fabric.inc/v2/guides/store-fulfillment/mobile-app/fulfillments-main-screen)
- [Mobile App](https://developer.fabric.inc/v2/guides/store-fulfillment/mobile-app/mobile-app)
- [Packing Orders](https://developer.fabric.inc/v2/guides/store-fulfillment/mobile-app/packing-orders)
- [Picking Orders](https://developer.fabric.inc/v2/guides/store-fulfillment/mobile-app/picking-orders)
- [Pickups Main Screen](https://developer.fabric.inc/v2/guides/store-fulfillment/mobile-app/pickups-main-screen)
- [Shipping Orders](https://developer.fabric.inc/v2/guides/store-fulfillment/mobile-app/shipping-orders)
- [Batch Processing](https://developer.fabric.inc/v2/guides/store-fulfillment/web-app/batch-processing)
- [Fulfillments Main Screen](https://developer.fabric.inc/v2/guides/store-fulfillment/web-app/fulfillments-main-screen)
- [Packing Orders](https://developer.fabric.inc/v2/guides/store-fulfillment/web-app/packing-orders)
- [Picking Orders](https://developer.fabric.inc/v2/guides/store-fulfillment/web-app/picking-orders)
- [Pickups Main Screen](https://developer.fabric.inc/v2/guides/store-fulfillment/web-app/pickups-main-screen)
- [Shipping Orders](https://developer.fabric.inc/v2/guides/store-fulfillment/web-app/shipping-orders)
- [Web App](https://developer.fabric.inc/v2/guides/store-fulfillment/web-app/web-app)
- [Customers](https://developer.fabric.inc/v2/guides/subscriptions/customers): View and manage customers and their subscriptions
- [Overview](https://developer.fabric.inc/v2/guides/subscriptions/overview): Sell and ship items to your customers on a recurring basis
- [Plan Manager](https://developer.fabric.inc/v2/guides/subscriptions/plan-manager): Create and manage subscription options
- [Quickstart](https://developer.fabric.inc/v2/guides/subscriptions/quickstart): Basic instructions for building your first subscription plan
- [Release Notes](https://developer.fabric.inc/v2/guides/subscriptions/release-notes)
- [Settings](https://developer.fabric.inc/v2/guides/subscriptions/settings): Configure webhooks, custom attributes, and notification settings
- [Subscriptions](https://developer.fabric.inc/v2/guides/subscriptions/subscriptions): View and manage all subscriptions
- [Build, Extend, and Elevate](https://developer.fabric.inc/v2/home): 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.
- [How to Integrate Backend Applications to Call fabric APIs](https://developer.fabric.inc/v2/recipes/sample): General guidelines to integrate with backend APIs or your backend daemon application with the appropriate permissions to call fabric APIs.
- [Authorize user apps with and without PKCE](https://developer.fabric.inc/v3/api-reference/authentication-v3/authentication-endpoints/authorize-user-app-with-and-without-pkce): 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). <br /> **Note**: This endpoint isn't required for system app authentication (refer to `/token` endpoint instead)
- [Fetch access token](https://developer.fabric.inc/v3/api-reference/authentication-v3/authentication-endpoints/fetch-access-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.<br/><b><span style={{color: 'red'}}>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.</span></b> Instead, send the request through a server side/native method and ensure the 'Origin' header isn't present.
- [Authentication Endpoints](https://developer.fabric.inc/v3/api-reference/authentication-v3/authentication-endpoints/overview)
- [Concepts](https://developer.fabric.inc/v3/api-reference/authentication-v3/concepts)
- [Getting Started with System Apps](https://developer.fabric.inc/v3/api-reference/authentication-v3/system-apps/getting-started-with-system-apps)
- [System App Authentication](https://developer.fabric.inc/v3/api-reference/authentication-v3/system-apps/system-app-authentication)
- [Best Practices for Customizing Login Flows](https://developer.fabric.inc/v3/api-reference/authentication-v3/user-apps/best-practices-for-customizing-login-flows)
- [Customizing Customer Login](https://developer.fabric.inc/v3/api-reference/authentication-v3/user-apps/customizing-customer-login)
- [Getting Started with User Apps](https://developer.fabric.inc/v3/api-reference/authentication-v3/user-apps/getting-started-with-user-apps)
- [Migrate Existing Users to a User App](https://developer.fabric.inc/v3/api-reference/authentication-v3/user-apps/migrate-existing-users-to-a-user-app)
- [User App Authentication](https://developer.fabric.inc/v3/api-reference/authentication-v3/user-apps/user-app-authentication)
- [Create address](https://developer.fabric.inc/v3/api-reference/carts-v3/addresses/create-addresses): Adds a billing address to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Delete address](https://developer.fabric.inc/v3/api-reference/carts-v3/addresses/delete-addresses): Removes the billing address associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Address ID from the [Create address](/v3/api-reference/carts-v3/addresses/create-addresses) endpoint is used in the path parameter.

- [Get address](https://developer.fabric.inc/v3/api-reference/carts-v3/addresses/get-addresses): Gets the billing address associated the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Address ID from the [Create address](/v3/api-reference/carts-v3/addresses/create-addresses) endpoint is used in the path parameter.

- [Update address](https://developer.fabric.inc/v3/api-reference/carts-v3/addresses/update-addresses): Updates the billing address associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Address ID from the [Create address](/v3/api-reference/carts-v3/addresses/create-addresses) endpoint is used in the path parameter.

- [Add cart attributes](https://developer.fabric.inc/v3/api-reference/carts-v3/cart-actions/add-attributes): Partially updates attributes of your choice in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Delete cart attributes](https://developer.fabric.inc/v3/api-reference/carts-v3/cart-actions/delete-attributes): Partially deletes attributes of your choice associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Merge carts](https://developer.fabric.inc/v3/api-reference/carts-v3/cart-actions/merge): This endpoint merges two carts together. Specify one cart in the path parameter and the second cart in the request body.

To learn more about merge cart behaviors, you can check out the [Merge Cart Behaviors](/v3/api-reference/carts-v3/merge-carts-behaviors) page.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Create adjustment](https://developer.fabric.inc/v3/api-reference/carts-v3/carts-adjustments/create-adjustments): Creates adjustments to the corresponding cart. This is useful when a price needs to be adjusted by a CSR agent.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Remove adjustment](https://developer.fabric.inc/v3/api-reference/carts-v3/carts-adjustments/delete-adjustments): Removes an adjustment made to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Adjustment ID from the [Create adjustment](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) endpoint is used in the path parameter.

- [Update adjustment](https://developer.fabric.inc/v3/api-reference/carts-v3/carts-adjustments/update-adjustments): Updates the adjustments made to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Adjustment ID from the [Create adjustment](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) endpoint is used in the path parameter.

- [Create an empty cart](https://developer.fabric.inc/v3/api-reference/carts-v3/carts/carts): Use this endpoint to create a new cart.

**Default Configurations**: To create a cart with default configurations, send a request with an empty body.

**Provided Configurations**: To create a cart with provided configurations, include the configurations in the request body. To learn more about configuration behaviors, visit the [Configuration Behaviors](/v3/api-reference/carts-v3/configuration-behaviors) page.

- [Delete cart](https://developer.fabric.inc/v3/api-reference/carts-v3/carts/delete-cart): Removes the cart corresponding to the provided cart ID.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Get the provided cart](https://developer.fabric.inc/v3/api-reference/carts-v3/carts/get-cart): Retrieves the cart information corresponding to the provided cart ID.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Search for multiple carts](https://developer.fabric.inc/v3/api-reference/carts-v3/carts/search): Returns a list of carts based on the search criteria.
- [Sequence calling](https://developer.fabric.inc/v3/api-reference/carts-v3/carts/sequence): Use this endpoint to execute multiple cart-related operations with a single request. This allows you to perform various actions such as creating a cart, adding items, and checking out in a single API call.

 **Note:** The order of operations matters since IDs are carried over from call to call.

 The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Update cart](https://developer.fabric.inc/v3/api-reference/carts-v3/carts/update-cart): Updates the cart information corresponding to the provided cart ID.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Configuration Behaviors](https://developer.fabric.inc/v3/api-reference/carts-v3/configuration-behaviors)
- [Add Coupon](https://developer.fabric.inc/v3/api-reference/carts-v3/coupons/add-coupons): Adds a coupon to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Coupon ID, which is the coupon code generated when [creating a custom coupon](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) in Copilot, is used in the path parameter.

- [Removes Coupon](https://developer.fabric.inc/v3/api-reference/carts-v3/coupons/remove-coupons): Removes the existing coupon from the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Coupon ID is a coupon code generated when [creating a custom coupon](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) in Copilot and is used in the path parameter.

- [Add customer attributes](https://developer.fabric.inc/v3/api-reference/carts-v3/customer/add-customer-attributes): Partially updates attributes of your choice in the customer object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Delete customer attributes](https://developer.fabric.inc/v3/api-reference/carts-v3/customer/delete-customer-attributes): Partially deletes attributes of your choice in the customer object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Update customer](https://developer.fabric.inc/v3/api-reference/carts-v3/customer/update-customer): Updates the customer information in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Configuring  Adjustment](https://developer.fabric.inc/v3/api-reference/carts-v3/developer-guide/configuring-adjustments)
- [Configuring Fees](https://developer.fabric.inc/v3/api-reference/carts-v3/developer-guide/configuring-fees)
- [Configuring Fulfillment](https://developer.fabric.inc/v3/api-reference/carts-v3/developer-guide/configuring-fulfillment)
- [Configuring Order Drafts](https://developer.fabric.inc/v3/api-reference/carts-v3/developer-guide/configuring-order-drafts)
- [Configuring Payment](https://developer.fabric.inc/v3/api-reference/carts-v3/developer-guide/configuring-payment)
- [Configuring Search Cart](https://developer.fabric.inc/v3/api-reference/carts-v3/developer-guide/configuring-search-cart)
- [Configuring Split Line Items](https://developer.fabric.inc/v3/api-reference/carts-v3/developer-guide/configuring-split-line-items)
- [Configuring Taxes](https://developer.fabric.inc/v3/api-reference/carts-v3/developer-guide/configuring-taxes)
- [Getting Started with fabric Carts API](https://developer.fabric.inc/v3/api-reference/carts-v3/developer-guide/getting-started)
- [Create fee](https://developer.fabric.inc/v3/api-reference/carts-v3/fees/create-fees): Creates a fee that is applied to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Delete fee](https://developer.fabric.inc/v3/api-reference/carts-v3/fees/delete-fees): Removes a fee from the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fee ID from the [Create fee](/v3/api-reference/carts-v3/fees/delete-fees) endpoint is used in the path parameter.

- [Update fee](https://developer.fabric.inc/v3/api-reference/carts-v3/fees/update-fees): Updates a fee in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fee ID from the [Create fee](/v3/api-reference/carts-v3/fees/delete-fees) endpoint is used in the path parameter.

- [Create fulfillment adjustment](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment-adjustments/create-fulfillment-adjustments): Creates an adjustment to the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

- [Delete fulfillment adjustment](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment-adjustments/delete-fulfillment-adjustments): Removes the adjustment from the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

The Adjustment ID from the [Create fulfillment adjustment](/v3/api-reference/carts-v3/fulfillment-adjustments/create-fulfillment-adjustments) endpoint is used in the path parameter.

- [Update fulfillment adjustment](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment-adjustments/update-fulfillment-adjustments): Updates the adjustment to the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

The Adjustment ID from the [Create fulfillment adjustment](/v3/api-reference/carts-v3/fulfillment-adjustments/create-fulfillment-adjustments) endpoint is used in the path parameter.

- [Create fulfillment fee](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment-fees/add-fulfillment): Creates a fee associated the fulfillment.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

- [Delete fulfillment fee](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment-fees/delete-fulfillment): Removes the fee from associated with the fulfillment.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

The Fee ID from the [Create fulfillment fee](/v3/api-reference/carts-v3/fulfillment-fees/add-fulfillment) endpoint is used in the path parameter.

- [Update fulfillment fee](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment-fees/update-fulfillment): Updates the fee associated with the fulfillment.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fee ID from the [Create fulfillment fee](/v3/api-reference/carts-v3/fulfillment-fees/add-fulfillment) endpoint is used in the path parameter.

- [Add fulfillment attributes](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment/add-fulfillments-attribute): Partially updates the attributes of the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

- [Create fulfillment](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment/create-fulfillments): Creates a fulfillment to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Delete fulfillment](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment/delete-fulfillments): Removes the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

- [Delete fulfillment attributes](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment/delete-fulfillments-attribute): Partially deletes attributes of your choice in the fulfillment object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

- [Get fulfillment](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment/retrieve-fulfillments): Returns the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

- [Update fulfillment](https://developer.fabric.inc/v3/api-reference/carts-v3/fulfillment/update-fulfillments): Updates the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

- [Update item attributes](https://developer.fabric.inc/v3/api-reference/carts-v3/item-actions/add-item-attributes): Partially updates the attributes of your choice in the item object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

- [Delete item attributes](https://developer.fabric.inc/v3/api-reference/carts-v3/item-actions/delete-item-attributes): Partially deletes attributes of your choice in the item object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

- [Split line items](https://developer.fabric.inc/v3/api-reference/carts-v3/item-actions/split): Splits the item associated with the corresponding cart into multiple line items based on quantity.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

- [Create item adjustment](https://developer.fabric.inc/v3/api-reference/carts-v3/item-adjustments/create-item-adjustments): Creates an adjustment for the item in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

- [Delete item adjustment](https://developer.fabric.inc/v3/api-reference/carts-v3/item-adjustments/delete-item-adjustments): Deletes the adjustment from the item associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

The Adjustment ID from the [Create item adjustment](/v3/api-reference/carts-v3/item-adjustments/create-item-adjustments) endpoint is used in the path parameter.

- [Update item adjustment](https://developer.fabric.inc/v3/api-reference/carts-v3/item-adjustments/update-item-adjustments): Updates the adjustment to the item associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

The Adjustment ID from the [Create item adjustment](/v3/api-reference/carts-v3/item-adjustments/create-item-adjustments) endpoint is used in the path parameter.

- [Create item fee](https://developer.fabric.inc/v3/api-reference/carts-v3/item-fees/create-item-fees): Creates a fee for the item.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

- [Delete item fee](https://developer.fabric.inc/v3/api-reference/carts-v3/item-fees/delete-item-fees): Deletes the fee that is applied to the item.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

The Fee ID from the [Create item fee](/v3/api-reference/carts-v3/item-fees/create-item-fees) endpoint is used in the path parameter.

- [Update item fee](https://developer.fabric.inc/v3/api-reference/carts-v3/item-fees/update-item-fees): Updates the fee that is applied to the item.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

The Fee ID from the [Create item fee](/v3/api-reference/carts-v3/item-fees/create-item-fees) endpoint is used in the path parameter.

- [Delete item](https://developer.fabric.inc/v3/api-reference/carts-v3/items/delete-items): Deletes the item from the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

- [Get item](https://developer.fabric.inc/v3/api-reference/carts-v3/items/get-items): Returns the item from the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

- [Create item](https://developer.fabric.inc/v3/api-reference/carts-v3/items/items): Creates the item in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Update item](https://developer.fabric.inc/v3/api-reference/carts-v3/items/update-items): Updates the item in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

- [Merge Cart Behaviors](https://developer.fabric.inc/v3/api-reference/carts-v3/merge-carts-behaviors)
- [Apply coupon](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/carts/add-coupon): Apply a coupon code to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The coupon code generated when [creating a custom coupon](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) in Copilot is used in the path parameter.

- [Delete cart](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/carts/delete-cart): Removes the cart corresponding to the provided cart ID.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Removes coupon](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/carts/delete-coupon): Removes the coupon from the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Get the cart](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/carts/get-cart): Retrieves the cart information corresponding to the provided cart ID.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Create an order draft](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/carts/order-drafts): Creates an order from the current cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Add items](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/line-items/add-items): Add items to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Delete items](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/line-items/delete-items): Removes the items from the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Split line items](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/line-items/split-items): Splits the item associated with the corresponding cart into multiple line items based on quantity.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

- [Update items](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/line-items/update-items): Updates the item information in the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Authorize payments](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/payments/authorize): Authorize payments made within the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Void payments](https://developer.fabric.inc/v3/api-reference/carts-v3/orchestrator/payments/void): Void payments made within the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Create an order draft](https://developer.fabric.inc/v3/api-reference/carts-v3/order-drafts/create-order-drafts): Create an order using the cart ID of the cart that contains the order.
- [Get the order draft by the customer ID](https://developer.fabric.inc/v3/api-reference/carts-v3/order-drafts/get-order-drafts-customerid): Retrieves the order draft using the customer ID associated with it from [Create an order draft](/v3/api-reference/carts-v3/order-drafts/create-order-drafts) endpoint.
- [Get the order draft by the order draft ID](https://developer.fabric.inc/v3/api-reference/carts-v3/order-drafts/get-order-drafts-draftid): Retrieves the order draft using the order ID associated with it from [Create an order draft](/v3/api-reference/carts-v3/order-drafts/create-order-drafts) endpoint.
- [Get the order draft by the order draft number](https://developer.fabric.inc/v3/api-reference/carts-v3/order-drafts/get-order-drafts-number): Retrieves the order draft using the order number associated with it from [Create an order draft](/v3/api-reference/carts-v3/order-drafts/create-order-drafts) endpoint.
- [Overview](https://developer.fabric.inc/v3/api-reference/carts-v3/overview)
- [Add payment attributes](https://developer.fabric.inc/v3/api-reference/carts-v3/payments/add-payment-attributes): Partially updates attributes of your choice in the payment.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The ID from the [Create payment](/v3/api-reference/carts-v3/payments/create-payments) endpoint is used in the path parameter.

- [Create payment](https://developer.fabric.inc/v3/api-reference/carts-v3/payments/create-payments): Adds a payment method to the corresponding cart to process a transaction.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Delete payment attributes](https://developer.fabric.inc/v3/api-reference/carts-v3/payments/delete-payment-attributes): Partially deletes attributes of your choice in the payment object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The ID from the [Create payment](/v3/api-reference/carts-v3/payments/create-payments) endpoint is used in the path parameter.

- [Delete payment](https://developer.fabric.inc/v3/api-reference/carts-v3/payments/delete-payments): Removes the payment from the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The ID from the [Create payment](/v3/api-reference/carts-v3/payments/create-payments) endpoint is used in the path parameter.

- [Update payment](https://developer.fabric.inc/v3/api-reference/carts-v3/payments/update-payments): Updates the payment in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The ID from the [Create payment](/v3/api-reference/carts-v3/payments/create-payments) endpoint is used in the path parameter.

- [Replace inventory data](https://developer.fabric.inc/v3/api-reference/carts-v3/validations/add-inventory-data): Replaces inventory data associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Replace product data](https://developer.fabric.inc/v3/api-reference/carts-v3/validations/add-product-data): Replaces product data associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Replace promotions](https://developer.fabric.inc/v3/api-reference/carts-v3/validations/add-promotions): Replaces promotions associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Replace tax data](https://developer.fabric.inc/v3/api-reference/carts-v3/validations/add-tax): Replaces tax data associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Updates inventory data](https://developer.fabric.inc/v3/api-reference/carts-v3/validations/updates-inventory-data): Partially updates inventory data associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Updates product data](https://developer.fabric.inc/v3/api-reference/carts-v3/validations/updates-product-data): Partially updates product data associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

- [Create a file object and retrieve the file upload URL](https://developer.fabric.inc/v3/api-reference/catalog-connector/files/create-file): Use this endpoint to retrieve the URL of the AWS S3 location to upload the file that you want to import to the Catalog Connector.
- [Download a file by ID](https://developer.fabric.inc/v3/api-reference/catalog-connector/files/download-file): Use this endpoint to retrieve the URL used to download a previously processed file. You can then make a GET request with this URL to retrieve the products data in CSV or JSONL format.
<Note> The download link is valid for five minutes. </Note>

- [Retrieve import and export history](https://developer.fabric.inc/v3/api-reference/catalog-connector/files/get-file): Use this endpoint to access files previously imported to or exported from the Catalog Connector, sorted in chronological order. You can refine the search results by using the following query parameters:
- `ids`: Provide a comma-separated list of file IDs to retrieve multiple files by their IDs. Note that pagination isn't supported when using this parameter.
- Format type (`formatType`) :  Specify the format of the file to filter files by format. The options are **CSV** or **JSONL**.
- Operation type (`type`): Use this parameter to specify whether you want imported or exported files.
- Pagination (`offset`, `limit`):  Use offset and limit parameters to refine the number of results returned.
- `sort`:  Use this parameter to view results in ascending or descending order.
If no query parameters are specified, the endpoint returns up to 10 records.

- [Retrieve an import template](https://developer.fabric.inc/v3/api-reference/catalog-connector/files/retrieve-import-template): Use this endpoint to retrieve the product import template for Catalog Connector in either CSV or JSONL format, based on your preferred data handling method. You can open CSV template in applications, such as Excel or Google Sheets and JSONL template in text editors compatible with JSONL, such as Visual Studio Code. After filling in product data, save the template file with a unique name on your local system.
- [Export products](https://developer.fabric.inc/v3/api-reference/catalog-connector/jobs/export): Use this endpoint to start an internal job to export products from Catalog Connector. 
Specify the `formatType` query parameter to export data in either CSV or JSONL format. In the request body, provide the `ids` of all products to be exported, the product type, and the locale.

- [Retrieve jobs](https://developer.fabric.inc/v3/api-reference/catalog-connector/jobs/retrieve-jobs): Use this endpoint to retrieve a paginated list of import and export jobs related to Catalog Connector.
The following constraints apply when using the query parameters:
  - The query parameter job `ids` can't be combined with any other query parameters.
  - The query parameter `inputFileIds` can only be combined with the query parameter `lastJobOnly`. 
  - Pagination isn't supported when `ids` or `inputFileIds` is specified.

- [Delete a product by Item ID](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/item-operations/delete-by-item): Use this endpoint to delete a single product by its `itemId`. 

If you don't have the `itemId`, use one of the endpoints to delete the product: 
  - [Delete a product by SKU](/v3/api-reference/catalog-connector/operations/sku-operations/delete-with-sku). 
  - [Delete a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/delete-by-product).

- [Retrieve a product or a variant by Item ID](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/item-operations/retrieve-by-item): Use this endpoint to retrieve a single product by its `itemId`. You must specify the query parameters `itemId` and `locale`. Optionally, you can set the following query parameters to `true` to refine the search results:
You must specify the query parameters `itemId` and `locale`. 
Optionally, you can set the following query parameters to `true` to refine the search results:
  - `excludeBundleProducts`: Exclude bundled products from the response.
  - `excludeCollections`: Exclude collections from the response.
  - `excludeCategories`: Exclude categories from the response.
  - `excludeAttributes`: Exclude attributes from the response. 
  - `excludeVariants`: Exclude variants from the response. 

If you don't have the `itemId`, use one of the endpoints to retrieve the product: 
    - [Update a product by SKU](/v3/api-reference/catalog-connector/operations/sku-operations/update-with-sku). 
    - [Update a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/update-by-product).

- [Update a product by the Item ID.](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/item-operations/update-by-item): Use this endpoint to update a single product by using its `itemId`. You can update the product's details, such as its name, category details, product images, attributes, and collections. However, you can't update the `itemId`. The new data completely replaces the existing data. 
You can update the product's details, such as its name, category details, product images, attributes, and collections. However, you can't update the itemId. The new data completely replaces the existing data. 

If you don't have the `itemId`, use the one of the endpoints to delete the product:
  - [Update a product by SKU](/v3/api-reference/catalog-connector/operations/sku-operations/update-with-sku).
  - [Update a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/update-by-product).

- [Add a product](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/product-operations/add-product): Use this endpoint to add a single product to Catalog Connector. You must specify the `locale` in the query parameter and the product data in the request body. Only `sku` is mandatory for product data. Optionally, you can specify the `type` as item, variant, or bundle. The default setting for `type` is item.

- [Delete a product by product ID](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/product-operations/delete-by-product): Use this endpoint to delete a single product by its `productId`. 
If you don't have the `productId`, use one of the endpoints to delete the product:
  - [Delete a product by SKU](/v3/api-reference/catalog-connector/operations/sku-operations/delete-with-sku).
  - [Delete a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/delete-by-item).

- [Retrieve a product by product ID](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/product-operations/retrieve-by-product): Use this endpoint to retrieve a single product by its `productId`. 
You must specify the query parameters `productId` and `locale`. 
Optionally, you can set the following query parameters to `true` to refine the search results:
  - `excludeBundleProducts`: Exclude bundled products from the response.
  - `excludeCollections`: Exclude collections from the response.
  - `excludeCategories`: Exclude categories from the response.
  - `excludeAttributes`: Exclude attributes from the response. 
  - `excludeVariants`: Exclude variants from the response. 

If you don't have the `productId`, use one of the endpoints to retrieve the product:
  - [Retrieve a product by SKU](/v3/api-reference/catalog-connector/operations/sku-operations/update-with-sku). 
  - [Retrieve a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/update-by-item).

- [Update a product by product ID](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/product-operations/update-by-product): Use this endpoint to update a single product by its `productId`. 
You can update the product's details, such as its name, category details, product images, attributes, and collections. However, you can't update the productId.
The new data completely replaces the existing data.

If you don't have the `productId`, use one of the corresponding endpoints:
  - [Update a product by SKU](/v3/api-reference/catalog-connector/operations/product-operations/update-by-product).
  - [Update a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/update-by-item).

- [Find products](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/search): Use this endpoint to search for products based on names, IDs, SKUs, image URLs, and more. By specifying the appropriate query parameters, you can exclude one or more types of data, such as collections, categories, variants, attributes, and products within a bundle.
<Note> 
  - Use the `CONTAINS` search operation to search for products based on keywords of SKU, name, and more. 
  - Use the `IN` search operation to search for products based on one or more values, such as IDs, names, SKUs, image URLs, attributes, and types.
  - Use the less than or equals to, `LTE`, greater than or equals to, `GTE`, less than, `LT`, greater than, `GT` and equals `EQ` operations to search for date-specific values, such as time of creation or modification.
</Note>

- [Delete a product by SKU](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/sku-operations/delete-with-sku): Use this endpoint to delete a single product by using its SKU. 

If you don't have the product SKU, use one of the endpoints to delete the product: 
 - [Delete a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/delete-by-product).
 - [Delete a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/delete-by-item).

- [Retrieve a product by SKU](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/sku-operations/retrieve-with-sku): Use this endpoint to retrieve a single product by its SKU. You must specify the query parameters `sku` and `locale` to corresponding to the product. Optionally, you can set the following query parameters to `true` to refine the search results:
  - `excludeBundleProducts`: Exclude bundled products from the response.
  - `excludeCollections`: Exclude collections from the response.
  - `excludeCategories`: Exclude categories from the response.
  - `excludeAttributes`: Exclude attributes from the response. 
  - `excludeVariants`: Exclude variants from the response. 

If you don't have the product SKU, use one of the endpoints to retrieve the product: 
    - [Retrieve a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/retrieve-by-product). 
    - [Retrieve a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/retrieve-by-item).

- [Update a product by SKU](https://developer.fabric.inc/v3/api-reference/catalog-connector/operations/sku-operations/update-with-sku): Use this endpoint to update details of a product by its SKU. You can update details of the product, such as the product name, category details, product images, attributes, and collections. The new data replaces the existing data. Note that you can't update the SKU.
  
If you don't have the product SKU, use one of the endpoints update the product details:
  - [Update a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/update-by-product). 
  - [Update a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/update-by-item).

- [Catalog Connector Overview](https://developer.fabric.inc/v3/api-reference/catalog-connector/overview)
- [Add a new address](https://developer.fabric.inc/v3/api-reference/customers/customer-address/add-a-new-address): Using this endpoint, you can add a new address for the customer by `customerId`.
- [Delete customer's address](https://developer.fabric.inc/v3/api-reference/customers/customer-address/delete-customers-address): Using this endpoint, you can delete an existing address of a customer based on the `customerId` and `addressId`.
- [Get customer's address](https://developer.fabric.inc/v3/api-reference/customers/customer-address/get-customers-address): Using this endpoint, you can get a single address of a customer based on the `customerId` and `addressId`.
- [Get customer's addresses](https://developer.fabric.inc/v3/api-reference/customers/customer-address/get-customers-addresses): Using this endpoint, you can get all addresses of a customer. <br /> By specifying the query parameters `offset` and `limit`, you can narrow down the search results. You can also `sort` the results in an ascending or descending order. Additionally, with the `isDeleted` query parameter, you can filter for either deleted or non-deleted customers. When no query parameter is specified, by default, you get up to 10 records.
- [Customer Address](https://developer.fabric.inc/v3/api-reference/customers/customer-address/overview)
- [Partially update customer's address](https://developer.fabric.inc/v3/api-reference/customers/customer-address/partially-update-customers-address): Using this endpoint, you can partially update a customer's address based on the `customerId` and `addressId`. To fully replace an existing address, use the `PUT /customers/{customerId}/customer-address/{addressId}` endpoint.
- [Search for customer's addresses](https://developer.fabric.inc/v3/api-reference/customers/customer-address/search-for-customers-addresses): With this endpoint, you can search for customer's addresses based on the specified filter conditions. In addition, you can tailor the search results by including or excluding the deleted addresses and the default addresses.<br />**Note**:A customer can have a default address for both billing and shipping.
- [Update customer's address](https://developer.fabric.inc/v3/api-reference/customers/customer-address/update-customers-address): Using this endpoint, you can update a customer's address based on the `customerId` and `addressId`. This replaces the existing address with the new one. If you want to make only a partial update, use the `PATCH /customers/{customerId}/customer-address/{addressId}` endpoint.
- [Add a new customer](https://developer.fabric.inc/v3/api-reference/customers/customer-profile/add-a-new-customer): Using this endpoint, you can add a new customer to the system. The response includes an `id` which is required in subsequent calls, such as `GET /customers/{customerId}`, `PUT /customers/{customerId}`, `PATCH /customers/{customerId}`, and more. <br /> When `externalId` is specified, the customers have the ability to manage their own details through the storefront UI.
- [Delete customer](https://developer.fabric.inc/v3/api-reference/customers/customer-profile/delete-customer): With this endpoint, you can delete an existing customer data by `customerId`.
- [Get customer details](https://developer.fabric.inc/v3/api-reference/customers/customer-profile/get-customer-details): Using this endpoint, you can get details of a single customer by `customerId`.
- [Get customers](https://developer.fabric.inc/v3/api-reference/customers/customer-profile/get-customers): Use this endpoint to get a paginated list of customers. <br /> By specifying the query parameters `offset` and `limit`, you can narrow down the search results. You can also `sort` the results in an ascending or descending order. Additionally, with the `isDeleted` query parameter, you can filter for either deleted or non-deleted customers. When no query parameter is specified, by default, you get up to 10 records.
- [Partially update customer details](https://developer.fabric.inc/v3/api-reference/customers/customer-profile/partially-update-customer-details): Using this endpoint, you can partially update details of a customer by `customerId`. To fully replace the details of an existing customer, use the `PUT /customers/{customerId}` endpoint.
- [Search for customer](https://developer.fabric.inc/v3/api-reference/customers/customer-profile/search-for-customer): Using this endpoint, you can search for customers based on filter conditions. By specifying `offset` and `limit`, you can narrow down your search results. In addition, using the `isDelete` property in the request body, you can filter for either deleted or non-deleted customers.
- [Update customer details](https://developer.fabric.inc/v3/api-reference/customers/customer-profile/update-customer-details): Using this endpoint, you can update details of an existing customer by `customerId`. <br /> This endpoint replaces the existing details of the customer. If you want to make only a partial update, without replacing the entire details, use the `PATCH /customers/{customerId}` endpoint.
- [Update customer status](https://developer.fabric.inc/v3/api-reference/customers/customer-profile/update-customer-status): With this endpoint, you can update the account status of an existing customer by `customerId`.
- [Add address - customer context.](https://developer.fabric.inc/v3/api-reference/customers/customer-self/add-address--customer-context): Using this endpoint, a customer can add their address through a storefront UI.
- [Delete address - customer context](https://developer.fabric.inc/v3/api-reference/customers/customer-self/delete-address--customer-context): Using this endpoint, a customer can delete their own address through the storefront UI based on `addressId`.
- [Get customer details - customer context](https://developer.fabric.inc/v3/api-reference/customers/customer-self/get-customer-details--customer-context): Using this endpoint, a customer can view their details through the storefront UI.
- [Customer Self](https://developer.fabric.inc/v3/api-reference/customers/customer-self/overview)
- [Update address - customer context](https://developer.fabric.inc/v3/api-reference/customers/customer-self/update-address--customer-context): Using this endpoint, a customer can update their own address through the storefront UI based on `addressId`.
- [Update customer details - customer context](https://developer.fabric.inc/v3/api-reference/customers/customer-self/update-customer-details--customer-context): Using this endpoint, customers can update their own details through the storefront UI.
- [View address - customer context](https://developer.fabric.inc/v3/api-reference/customers/customer-self/view-address--customer-context): Using this endpoint, a customer can view their own address through the storefront UI based on the `addressId`.
- [View addresses - customer context](https://developer.fabric.inc/v3/api-reference/customers/customer-self/view-addresses--customer-context): Using this endpoint, a customer can view their own addresses through the storefront UI.
- [API Authentication](https://developer.fabric.inc/v3/api-reference/getting-started/api-authentication)
- [API References](https://developer.fabric.inc/v3/api-reference/getting-started/api-references)
- [Example](https://developer.fabric.inc/v3/api-reference/getting-started/example)
- [Getting Started with fabric APIs](https://developer.fabric.inc/v3/api-reference/getting-started/getting-started-with-fabric-apis)
- [Identifiers](https://developer.fabric.inc/v3/api-reference/getting-started/identifiers)
- [Making your first API request](https://developer.fabric.inc/v3/api-reference/getting-started/making-your-first-api-request)
- [Overview](https://developer.fabric.inc/v3/api-reference/getting-started/overview)
- [Security and Compliance](https://developer.fabric.inc/v3/api-reference/getting-started/security-and-compliance): Learn how we protect customer data, user data, and the reliability of our commerce services and applications.
- [Using Developer Portal](https://developer.fabric.inc/v3/api-reference/getting-started/using-developer-portal)
- [Algolia standard integration](https://developer.fabric.inc/v3/api-reference/integrations/algolia-standard-integration)
- [Avalara standard integration](https://developer.fabric.inc/v3/api-reference/integrations/avalara-standard-integration)
- [Constructor.io standard integration](https://developer.fabric.inc/v3/api-reference/integrations/constructor-io-standard-integration)
- [Overview](https://developer.fabric.inc/v3/api-reference/integrations/overview)
- [Stripe standard integration](https://developer.fabric.inc/v3/api-reference/integrations/stripe-standard-integration)
- [Create counter](https://developer.fabric.inc/v3/api-reference/inventory/counters/create-counter): Create counter (also known as inventory position) for better tracking of inventories.
- [Get all counters](https://developer.fabric.inc/v3/api-reference/inventory/counters/get-all-counters): Get all configured counters.
- [Get counter by code](https://developer.fabric.inc/v3/api-reference/inventory/counters/get-counter-by-code): Get details of a specific counter by specified counter code.
- [Getting Started with Counters](https://developer.fabric.inc/v3/api-reference/inventory/counters/overview)
- [Update counter by code](https://developer.fabric.inc/v3/api-reference/inventory/counters/update-counter-by-code): Update a specific counter based on specified counter code.
- [Create an inventory import file configuration](https://developer.fabric.inc/v3/api-reference/inventory/imports/create-import-configs): Create inventory import file configuration containing rules for queried file prefix
- [Delete inventory import file config](https://developer.fabric.inc/v3/api-reference/inventory/imports/delete-an-import-config-by-id): Delete inventory import file config containing rules for queried file prefix
- [Force import halt](https://developer.fabric.inc/v3/api-reference/inventory/imports/force-trigger): Force import halted due to zeroed out Inventories more than threshold
- [Get uploaded file status and details](https://developer.fabric.inc/v3/api-reference/inventory/imports/get-file-status-by-id): Get uploaded file status and details by specifying `importId`.
- [Get inventory import upload file configuration](https://developer.fabric.inc/v3/api-reference/inventory/imports/get-import-config-by-id): Get inventory import file configurations containing rules for queried file prefix
- [Get all file configurations](https://developer.fabric.inc/v3/api-reference/inventory/imports/get-import-configuration): Get all file configurations for matching filter criteria
- [Get uploaded files that match specified criteria](https://developer.fabric.inc/v3/api-reference/inventory/imports/get-uploaded-files): Get uploaded files that match specified criteria. Returned as paginated records.
- [Import inventory data](https://developer.fabric.inc/v3/api-reference/inventory/imports/import-inventory): Import inventory data by specifying file name. Successfully uploading the file triggers the import process, which is an event-driven extraction of the file's data to update the respective resource's system.
- [Update inventory import file configuration](https://developer.fabric.inc/v3/api-reference/inventory/imports/update-import-config-by-id): Update inventory import file configuration
- [Inventory (3.0.0)](https://developer.fabric.inc/v3/api-reference/inventory/inventory--3-0-0)
- [Inventory FAQ](https://developer.fabric.inc/v3/api-reference/inventory/inventory-faq-s)
- [Adjust inventory counters](https://developer.fabric.inc/v3/api-reference/inventory/inventory/adjust-inventory-counters): With this endpoint, you can modify inventory counters (also known as inventory positions) to maintain accurate inventory records. These counters are adjusted when new inventory is received or when an item is shipped. If the inventory does not exist, an error message will be displayed. An inventory can have multiple counters, and all counters will be updated when this endpoint is used.
- [Create inventory](https://developer.fabric.inc/v3/api-reference/inventory/inventory/create-inventory): Create inventory based on the combination of location number, channel ID, and item ID or SKU.
- [Find inventories of specific items](https://developer.fabric.inc/v3/api-reference/inventory/inventory/find-inventories-of-specific-items): Search for inventories of specific items by SKUs, itemIds, location numbers, and other parameters as specified in the request body. This endpoint retrieves the exact available quantity of the searched inventory.
- [Find inventory of specific items in a specific region](https://developer.fabric.inc/v3/api-reference/inventory/inventory/find-inventory-of-specific-items-in-a-specific-region): Search for list of inventories of specific items  in a specific region based on SKUs, postal code, latitude, longitude, and other details of the location as specified in the request body.
- [Getting Started with Inventory](https://developer.fabric.inc/v3/api-reference/inventory/inventory/overview)
- [Search for inventories](https://developer.fabric.inc/v3/api-reference/inventory/inventory/search-for-inventories): Search for inventories based on filter criteria.
- [Update inventory by adding new property](https://developer.fabric.inc/v3/api-reference/inventory/inventory/update-inventory-by-adding-new-property): Add a new property to existing inventory. <p> **Note:** This endpoint does not override all the existing properties; rather it updates inventory by adding new properties or by updating the existing inventory properties that are specified in the request body. Inventory is identified based on the combination of location number, channel ID, and item ID or SKU. </p>
- [Cancel an outage using outageNumber](https://developer.fabric.inc/v3/api-reference/inventory/locations/cancel-outage-by-outage-number): Using the location outages cancel endpoint you can cancel a location outage by providing the `outageNumber`.
- [Cancel an outage using outageID](https://developer.fabric.inc/v3/api-reference/inventory/locations/cancel-outage-by-outageid): The location outages cancel endpoint is used to cancel an outage by providing the `outageId`.
- [Create a location](https://developer.fabric.inc/v3/api-reference/inventory/locations/create-a-location): Create a location to use for managing inventory and orders.
- [Create Outage](https://developer.fabric.inc/v3/api-reference/inventory/locations/create-location-outage): The location outages endpoint is used to create a location outage.
- [Delete a location](https://developer.fabric.inc/v3/api-reference/inventory/locations/delete-a-location): Delete a location by location number.
- [Get LocationOutages by query](https://developer.fabric.inc/v3/api-reference/inventory/locations/find-location-outage): Get a filtered list of LocationOutages.
- [Get a specific location](https://developer.fabric.inc/v3/api-reference/inventory/locations/get-a-specific-location): Get a specific location by location number.
- [Get locations by query](https://developer.fabric.inc/v3/api-reference/inventory/locations/get-locations-by-query): Get a list of locations by specified filter criteria.
- [Getting Started with Locations](https://developer.fabric.inc/v3/api-reference/inventory/locations/overview)
- [Search for nearby locations](https://developer.fabric.inc/v3/api-reference/inventory/locations/search-for-nearby-locations): Search for nearby locations based on city name, state, postal code, and other geographical details as mentioned in the request body.
- [Update a specific location](https://developer.fabric.inc/v3/api-reference/inventory/locations/update-a-specific-location): Update details of a specific location by location number.
- [Update an outage by outageNumber](https://developer.fabric.inc/v3/api-reference/inventory/locations/update-outage-by-outage-number): You can use the location outages outage number endpoint to update the details of a specific location outage by providing its outageNumber.
- [Update an outage using outageID](https://developer.fabric.inc/v3/api-reference/inventory/locations/update-outage-by-outageid): Update the details of a specified location outage by providing the `outageId`.
- [Create inventory network](https://developer.fabric.inc/v3/api-reference/inventory/networks/create-inventory-network): Create a network using conditional rules to add locations and SKU to the network.
- [Delete network by code](https://developer.fabric.inc/v3/api-reference/inventory/networks/delete-network-by-code): Delete a specific network, with all its details, by specified network code. Once deleted, it can't be undone.
- [Get all networks](https://developer.fabric.inc/v3/api-reference/inventory/networks/get-all-networks): Get a paginated list of all the created networks.
- [Get network by code](https://developer.fabric.inc/v3/api-reference/inventory/networks/get-network-by-code): Get details of a specific network by code.
- [Search for inventory hard reservations](https://developer.fabric.inc/v3/api-reference/inventory/networks/search-hard-reserve): Search for hard reservations based on filter criteria.
- [Release soft reservation](https://developer.fabric.inc/v3/api-reference/inventory/networks/soft-release): Release soft reservation.
- [Soft reservation](https://developer.fabric.inc/v3/api-reference/inventory/networks/soft-reserve): Soft reserve quantity.
- [Update network by code](https://developer.fabric.inc/v3/api-reference/inventory/networks/update-network-by-code): Update details of a specific inventory network by specified network code.
- [Create add-on](https://developer.fabric.inc/v3/api-reference/offers/add-ons/create-add-on): Create an add-on with its price and currency details. By creating add-ons, you can enhance customer experience by allowing them to choose personalized products while placing an order.
- [Delete a specific add-on](https://developer.fabric.inc/v3/api-reference/offers/add-ons/delete-a-specific-add-on): Delete an add-on by ID.
- [Get a specific add-on](https://developer.fabric.inc/v3/api-reference/offers/add-ons/get-a-specific-add-on): Get a specific add-on by ID.
- [Get all add-ons](https://developer.fabric.inc/v3/api-reference/offers/add-ons/get-all-add-ons): Get a paginated list of all the created add-ons.
- [Add-ons](https://developer.fabric.inc/v3/api-reference/offers/add-ons/overview)
- [Update a specific add-on](https://developer.fabric.inc/v3/api-reference/offers/add-ons/update-a-specific-add-on): Update a specific add-on by ID.
- [Create attribute](https://developer.fabric.inc/v3/api-reference/offers/attributes/create-attribute): Use this endpoint to create a new attribute. Attributes can be used as part of the qualifications for promotions or coupons.
- [Delete attribute](https://developer.fabric.inc/v3/api-reference/offers/attributes/delete-attribute): Using this endpoint, you can delete an attribute by its ID.
- [Get all attributes](https://developer.fabric.inc/v3/api-reference/offers/attributes/get-all-attributes): Using this endpoint, you can get a paginated list of attributes. You can narrow down the search results by specifying pagination criteria, and you can also sort the results.
- [Get attribute](https://developer.fabric.inc/v3/api-reference/offers/attributes/get-attribute): Using this endpoint, you can get details of an attribute by its ID.
- [Update attribute](https://developer.fabric.inc/v3/api-reference/offers/attributes/update-attribute): Using this endpoint, you can update an attribute by its ID. You can primarily update attribute and its value.
- [Bulk update coupon codes](https://developer.fabric.inc/v3/api-reference/offers/coupon-codes/bulk-update-coupon-codes): Use this endpoint to update multiple coupon codes using identifiers. Identifiers are a unique combination of a coupon code and a promotion ID. You can update up to 25 codes at a time.
- [Get all coupon codes](https://developer.fabric.inc/v3/api-reference/offers/coupon-codes/get-all-coupon-codes): This endpoint provides coupon code lists. Use parameters to filter results, for example, set `status` as 'ACTIVE' for active coupons, or add `userId` for user-specific coupon codes. Navigate the results using the query parameters `size` and `startCursor`.
- [Create coupon](https://developer.fabric.inc/v3/api-reference/offers/coupons/create-coupon): Create a coupon with the requested conditions.
- [Delete a specific coupon](https://developer.fabric.inc/v3/api-reference/offers/coupons/delete-a-specific-coupon): Delete a specific coupon by ID
- [Enable or disable a coupon](https://developer.fabric.inc/v3/api-reference/offers/coupons/enable-or-disable-a-coupon): Change coupon status by ID. **Enable a coupon:** Only *disabled* coupons can be enabled. **Disable a coupon:** Only *not expired* coupons can be disabled.
- [Generate coupon codes](https://developer.fabric.inc/v3/api-reference/offers/coupons/generate-coupon-codes): Generate coupon codes based on the given parameter.
- [Get all coupons](https://developer.fabric.inc/v3/api-reference/offers/coupons/get-all-coupons): Get a paginated list of coupons.
- [Coupons](https://developer.fabric.inc/v3/api-reference/offers/coupons/overview)
- [Retrieve a coupon](https://developer.fabric.inc/v3/api-reference/offers/coupons/retrieve-a-coupon): Use this endpoint to retrieve the details of a coupon by its ID.
- [Search for coupons](https://developer.fabric.inc/v3/api-reference/offers/coupons/search-for-coupons): Use this endpoint to search for coupons based on filter conditions.
- [Update a specific coupon](https://developer.fabric.inc/v3/api-reference/offers/coupons/update-a-specific-coupon): Update a specific coupon by ID.
- [Exporting Offers CSV](https://developer.fabric.inc/v3/api-reference/offers/developer-guide/exporting-csv)
- [Download exported CSV file](https://developer.fabric.inc/v3/api-reference/offers/exports/download-exported-csv-file): This endpoint lets you generate a URL, using fileId, from which you can download the exported CSV file. The generated URL expires in five mins.
- [Get all export requests](https://developer.fabric.inc/v3/api-reference/offers/exports/get-all-export-requests): Get a paginated list of all the export requests.
- [Get export request by ID](https://developer.fabric.inc/v3/api-reference/offers/exports/get-export-request-by-id): Get details of a specific export request by its ID.
- [Initiate export request](https://developer.fabric.inc/v3/api-reference/offers/exports/initiate-export-request): Initiate an export request based on specified filter criteria.
- [Generate URL to import a CSV file](https://developer.fabric.inc/v3/api-reference/offers/imports/generate-url-to-import-a-csv-file): Use this endpoint to create a secured S3 URL to import a CSV file, allowing for bulk data updates from the information within the file. For example, if the data in the file is price type, then only the price related data will be updated. Note that an error will be shown if the type of data included in the file doesn't match with the data type mentioned in the request body. You must upload only one single file, specifically in the CSV format, to the generated URL.
- [Get import job by ID](https://developer.fabric.inc/v3/api-reference/offers/imports/get-import-job-by-id): Get details of a specific import job by job ID.
- [Get import jobs](https://developer.fabric.inc/v3/api-reference/offers/imports/get-import-jobs): Get a paginated list of import jobs.
- [Retrieve the download URL for an error file](https://developer.fabric.inc/v3/api-reference/offers/imports/retrieve-the-download-url-for-an-error-file): Use this endpoint to retrieve an AWS S3 URL to access the error data of a previously imported file. The URL is valid for five minutes. Make a GET request with this URL to download the error data  in a CSV format.
- [Offers (3.0.0)](https://developer.fabric.inc/v3/api-reference/offers/offers--3-0-0)
- [Create price control](https://developer.fabric.inc/v3/api-reference/offers/price-controls/create-price-control): Create a price control record that contains various price types other than the elemental prices such as base price, sale price, and sale price.
- [Delete price controls by itemId](https://developer.fabric.inc/v3/api-reference/offers/price-controls/delete-price-controls-by-itemid): Delete price controls of a specific item by `itemId`
- [Get all price controls](https://developer.fabric.inc/v3/api-reference/offers/price-controls/get-all-price-controls): Get a paginated list of all the created price controls.
- [Get price controls by itemId](https://developer.fabric.inc/v3/api-reference/offers/price-controls/get-price-controls-by-itemid): Get price control records of an item by `itemId` and `priceListId`. If `priceListId` isn't specified, price controls of the item will be retrieved under the default price list.
- [Get price controls by SKU](https://developer.fabric.inc/v3/api-reference/offers/price-controls/get-price-controls-by-sku): Get price controls of a specific product by `sku`.
- [Price Controls](https://developer.fabric.inc/v3/api-reference/offers/price-controls/overview)
- [Update price controls by itemId](https://developer.fabric.inc/v3/api-reference/offers/price-controls/update-price-controls-by-itemid): Update price controls of a specific item by `itemId` and `piceListId`. If `priceListId` isn't specified, price controls of the item will be updated under the default price list.
- [Create price list](https://developer.fabric.inc/v3/api-reference/offers/price-lists/create-price-list): Create a price list. Based on the currency code you define for a price list, you will be able to create or update prices under the price list for the defined currency code only.
- [Delete a specific price list](https://developer.fabric.inc/v3/api-reference/offers/price-lists/delete-a-specific-price-list): Delete a specific price list by ID.
- [Get a specific price list](https://developer.fabric.inc/v3/api-reference/offers/price-lists/get-a-specific-price-list): Get a specific price list by ID.
- [Get all price lists](https://developer.fabric.inc/v3/api-reference/offers/price-lists/get-all-price-lists): Get a paginated list of all price lists.
- [Price Lists](https://developer.fabric.inc/v3/api-reference/offers/price-lists/overview)
- [Update a specific price list](https://developer.fabric.inc/v3/api-reference/offers/price-lists/update-a-specific-price-list): Update a specific price list by ID.
- [Create price method](https://developer.fabric.inc/v3/api-reference/offers/price-methods/create-price-method): Create a price method that you can use to set up the SKU price. Price method can be created based on SKU quantity, dimension of the SKU, or any other strategy that aligns with the business.
- [Delete a specific price method](https://developer.fabric.inc/v3/api-reference/offers/price-methods/delete-a-specific-price-method): Delete a specific price method by ID.
- [Get all price methods](https://developer.fabric.inc/v3/api-reference/offers/price-methods/get-all-price-methods): Get a paginated list of all price methods of SKUs.
- [Price Methods](https://developer.fabric.inc/v3/api-reference/offers/price-methods/overview)
- [Update a specific price method](https://developer.fabric.inc/v3/api-reference/offers/price-methods/update-a-specific-price-method): Update a specific price method by ID.
- [Get price types](https://developer.fabric.inc/v3/api-reference/offers/price-types/get-price-types): Get a paginated list of all price types.
- [Price Types](https://developer.fabric.inc/v3/api-reference/offers/price-types/overview)
- [Get priced products](https://developer.fabric.inc/v3/api-reference/offers/priced-products/get-priced-products): Get a paginated list of products and prices for the specified price list ID.
- [Get product and price details by product item ID](https://developer.fabric.inc/v3/api-reference/offers/priced-products/get-product-and-price-details-by-product-item-id): Get product and price details by product item ID
- [Get product and price details by SKU](https://developer.fabric.inc/v3/api-reference/offers/priced-products/get-product-and-price-details-by-sku): Retrieves the details of a product and its associated prices using the SKU, including the details for the variants of the product, if any.
- [Get SKUs in price list](https://developer.fabric.inc/v3/api-reference/offers/priced-products/get-skus-in-price-list): Retrieve SKUs and product item IDs that have a price entry in the given price list.
- [Create batch prices](https://developer.fabric.inc/v3/api-reference/offers/prices/create-batch-prices): Create one or more prices for items based on `itemId` and `itemSku`.
- [Create price](https://developer.fabric.inc/v3/api-reference/offers/prices/create-price): Create or update price of an item based on given `itemId` and `itemSku`
- [Delete price by itemId](https://developer.fabric.inc/v3/api-reference/offers/prices/delete-price-by-itemid): Delete price details by `itemId`. If `priceListId` isn't specified, price is deleted for the `itemId` that belongs to the default price list.
- [Delete price by SKU](https://developer.fabric.inc/v3/api-reference/offers/prices/delete-price-by-sku): Delete price record for the given `sku` and `priceListId`.
- [Get all active prices](https://developer.fabric.inc/v3/api-reference/offers/prices/get-all-active-prices): Get a paginated list of active and scheduled prices. Active prices have start date greater than the current date and end date is in the future.
- [Get price by itemId](https://developer.fabric.inc/v3/api-reference/offers/prices/get-price-by-itemid): Get a paginated list of price details for the given `itemId` and `priceListId`. If `priceListId` isn't specified, prices are retrieved for the `itemId` that belongs to the default price list.
- [Get price by SKU](https://developer.fabric.inc/v3/api-reference/offers/prices/get-price-by-sku): Get price details for the `sku` and `priceListId`. If `priceListId` isn't specified, price is retrieved for the `sku` that belongs to the default price list.
- [Prices](https://developer.fabric.inc/v3/api-reference/offers/prices/overview)
- [Create product exclusion list](https://developer.fabric.inc/v3/api-reference/offers/product-exclusion-lists/create-product-exclusion-list): Create a product exclusion list with target products that will be exempted from being discounted.
- [Delete a specific product exclusion list](https://developer.fabric.inc/v3/api-reference/offers/product-exclusion-lists/delete-a-specific-product-exclusion-list): Delete a specific product exclusion list by ID.
- [End a product exclusion list](https://developer.fabric.inc/v3/api-reference/offers/product-exclusion-lists/end-a-product-exclusion-list): End a product exclusion list by setting the start date and end date to the same current date. When you end a product exclusion list, target products of the product exclusion list become eligible for discounts.
- [Get a specific product exclusion list](https://developer.fabric.inc/v3/api-reference/offers/product-exclusion-lists/get-a-specific-product-exclusion-list): Get a specific product exclusion list by ID. The response contains a list of target products that are exempted from being discounted based on the `scopes` value.
- [Get all product exclusion lists](https://developer.fabric.inc/v3/api-reference/offers/product-exclusion-lists/get-all-product-exclusion-lists): Get a paginated list of product exclusion lists based on the query parameters.
- [Product Exclusion Lists](https://developer.fabric.inc/v3/api-reference/offers/product-exclusion-lists/overview)
- [Update a specific product exclusion list](https://developer.fabric.inc/v3/api-reference/offers/product-exclusion-lists/update-a-specific-product-exclusion-list): Update a specific product exclusion list record by ID.
- [Create promotion](https://developer.fabric.inc/v3/api-reference/offers/promotions/create-promotion): Create a promotion that you can apply to one or more items to increase sales, or to a segment of customers to reward existing customers or attract new customers. Promotions are configured with rules that define the type of promotion, conditions, and discounts.
- [Delete a specific promotion](https://developer.fabric.inc/v3/api-reference/offers/promotions/delete-a-specific-promotion): Delete a specific promotion by ID.
- [Enable or disable a promotion](https://developer.fabric.inc/v3/api-reference/offers/promotions/enable-or-disable-a-promotion): Use this endpoint to change promotion status by enabling or disabling a promotion. Note that you can't change the status of a promotion that's currently _ACTIVE_. You can enable the promotions that are currently _disabled_ and disable the promotions that haven't expired yet.
- [End a promotion](https://developer.fabric.inc/v3/api-reference/offers/promotions/end-a-promotion): End a specific promotion by ID. To end a promotion, set `status` to `EXPIRED`, and expiration date (both `startAt` and `endAt`) to the same current date.
- [Get a specific promotion](https://developer.fabric.inc/v3/api-reference/offers/promotions/get-a-specific-promotion): Get a specific promotion by ID.
- [Get all promotions](https://developer.fabric.inc/v3/api-reference/offers/promotions/get-all-promotions): Get a paginated list of all promotions.
- [Promotions](https://developer.fabric.inc/v3/api-reference/offers/promotions/overview)
- [Search for promotions](https://developer.fabric.inc/v3/api-reference/offers/promotions/search-for-promotions): Use this endpoint to search for promotions based on filter conditions.
- [Update a specific promotion](https://developer.fabric.inc/v3/api-reference/offers/promotions/update-a-specific-promotion): Update a specific promotion by ID.
- [Calculate prices for products by IDs](https://developer.fabric.inc/v3/api-reference/offers/real-time-pricing-engine/calculate-prices-for-products-by-ids): Use this endpoint to calculate prices for one or more products in a specific price list based on product IDs. Note that the `itemId` is the default identifier of a product. If you want to set SKUs as the identifier of a product identifiers, reach out to the fabric support at support@fabric.inc.
- [Calculate prices for products by SKUs](https://developer.fabric.inc/v3/api-reference/offers/real-time-pricing-engine/calculate-prices-for-products-by-skus): Use this endpoint to calculate prices for one or more products in a specific price list by product SKUs. Note that the `itemId` is used as the default identifier for a product. If you want to set SKUs as product identifiers, you must contact fabric support at support@fabric.inc.
- [Evaluate cart promotions](https://developer.fabric.inc/v3/api-reference/offers/real-time-pricing-engine/evaluate-cart-promotions): Evaluate cart's total cost instantly, after applying all applicable promotions and discount coupons. Using this endpoint, submit a range of data that will be referenced against the conditions that are set earlier using the promotions, coupons or prices APIs. The response includes the details of the promotions and discounts applied. These promotions and discounts can be displayed on your website to help shoppers know that they're getting their expected discounts.
- [Real-time Pricing Engine](https://developer.fabric.inc/v3/api-reference/offers/real-time-pricing-engine/overview)
- [Bulk update redemptions](https://developer.fabric.inc/v3/api-reference/offers/redemptions/bulk-update-redemptions): Use this endpoint to update multiple redemptions. You can update up to 25 redemptions at a time.
- [Create redemption](https://developer.fabric.inc/v3/api-reference/offers/redemptions/create-redemption): Create redemption for a specific coupon by coupon ID.
- [Create redemption](https://developer.fabric.inc/v3/api-reference/offers/redemptions/create-redemption-1): Create a redemption record for a specific promotion.
- [Delete redemption by ID](https://developer.fabric.inc/v3/api-reference/offers/redemptions/delete-redemption-by-id): Delete a specific redemption by redemption ID.
- [Delete redemption by ID](https://developer.fabric.inc/v3/api-reference/offers/redemptions/delete-redemption-by-id-1): Delete a specific redemption by redemption ID.
- [Get all redemption details](https://developer.fabric.inc/v3/api-reference/offers/redemptions/get-all-redemption-details): Use this endpoint to get a list of redemption records. You can also filter the records by using different parameters, such as coupon code, user ID, email address, order ID, store ID, and more.
- [Get redemption by ID](https://developer.fabric.inc/v3/api-reference/offers/redemptions/get-redemption-by-id): Get a specific redemption by redemption ID.
- [Redemptions](https://developer.fabric.inc/v3/api-reference/offers/redemptions/overview)
- [Update redemption by ID](https://developer.fabric.inc/v3/api-reference/offers/redemptions/update-redemption-by-id): Update a specific redemption by redemption ID.
- [Create segment](https://developer.fabric.inc/v3/api-reference/offers/segments/create-segment): Create a segment to group a specific set of customers. By segmenting customers, you can gain insight into which products are popular among different customer segments, and can create targeted retention strategies. You can also create targeted marketing campaigns that can result in higher conversion rates and increased sales.
- [Delete a specific segment](https://developer.fabric.inc/v3/api-reference/offers/segments/delete-a-specific-segment): Delete a specific segment by ID.
- [Get a specific segment](https://developer.fabric.inc/v3/api-reference/offers/segments/get-a-specific-segment): Get details of a specific segment by ID.
- [Get all segments](https://developer.fabric.inc/v3/api-reference/offers/segments/get-all-segments): Get a paginated list of all the created segments.
- [Segments](https://developer.fabric.inc/v3/api-reference/offers/segments/overview)
- [Update a specific segment](https://developer.fabric.inc/v3/api-reference/offers/segments/update-a-specific-segment): Update a specific segment by ID.
- [Coupon](https://developer.fabric.inc/v3/api-reference/offers/webhook-events/coupon)
- [Global Exclusion](https://developer.fabric.inc/v3/api-reference/offers/webhook-events/global-exclusion)
- [Glossary](https://developer.fabric.inc/v3/api-reference/offers/webhook-events/glossary): This section collects brief definitions of some of the technical terms used in the documentation for Convoy.
- [Price](https://developer.fabric.inc/v3/api-reference/offers/webhook-events/price)
- [Price List](https://developer.fabric.inc/v3/api-reference/offers/webhook-events/price-list)
- [Promotion](https://developer.fabric.inc/v3/api-reference/offers/webhook-events/promotion)
- [Redemption](https://developer.fabric.inc/v3/api-reference/offers/webhook-events/redemption)
- [Ship To](https://developer.fabric.inc/v3/api-reference/offers/webhook-events/ship-to)
- [Subscribing Events](https://developer.fabric.inc/v3/api-reference/offers/webhook-events/subscribing-events)
- [Webhook Events](https://developer.fabric.inc/v3/api-reference/offers/webhook-events/webhook-events)
- [Get allocation by ID](https://developer.fabric.inc/v3/api-reference/orders/allocations/get-allocation-by-id): Get allocation details by allocation ID. The allocation ID can be obtained using the `/allocations/search` endpoint or stored externally, for example, in the WMS order database.
- [Getting Started with Allocations](https://developer.fabric.inc/v3/api-reference/orders/allocations/overview)
- [Search for allocations by query](https://developer.fabric.inc/v3/api-reference/orders/allocations/search-for-allocations-by-query): Search for inventory allocations based on the matching filter criteria.
- [Update allocation or initiate reallocation](https://developer.fabric.inc/v3/api-reference/orders/allocations/update-allocation-or-initiate-reallocation): Update allocation or initiate reallocation of the order by `allocationRequestId`.
- [Update allocation attributes](https://developer.fabric.inc/v3/api-reference/orders/allocations/update-attributes): Update allocation attributes by `allocationId`.
- [Create appeasement by order ID](https://developer.fabric.inc/v3/api-reference/orders/appeasements/create-appeasement-by-order-id): When customer is dissatisfied with their shopping experience, you may want to offer an appeasements amount such as partial refund to keep them happy. <p> This endpoint is used to create appeasement request by order ID </p> <p>. **Note**: If you do not have an order ID, but have an order number, use the order number-based endpoint - `POST /orders/order-number/{orderNumber}/actions/create-appeasement`.</p>
- [Create appeasement by order number](https://developer.fabric.inc/v3/api-reference/orders/appeasements/create-appeasement-by-order-number): When customer is dissatisfied with their shopping experience, you may want to offer an appeasement amount to keep them happy. <p> This endpoint is used to create appeasement request by order number.</p> <p> **Note**: If you don't have order number, use the corresponding order ID-based endpoint - `POST /orders/{orderId}/actions/create-appeasement`</p>
- [Getting Started with Appeasements](https://developer.fabric.inc/v3/api-reference/orders/appeasements/overview)
- [Get backorder or preorder details by ID](https://developer.fabric.inc/v3/api-reference/orders/backorders-preorders/get-backorder-or-preorder-details-by-id): Get backorder or preorder reservation details by ID.
- [Getting Started with Backorders & Preorders](https://developer.fabric.inc/v3/api-reference/orders/backorders-preorders/overview)
- [Record customer agreement to delay shipment](https://developer.fabric.inc/v3/api-reference/orders/backorders-preorders/record-customer-agreement-to-delay-shipment): Record customer's agreement to delay the shipment.
- [Search for backorders or preorders by query](https://developer.fabric.inc/v3/api-reference/orders/backorders-preorders/search-for-backorders-or-preorders-by-query): Search for the backorder or preorder reservations based on filter criteria.
- [Cancel order by order ID](https://developer.fabric.inc/v3/api-reference/orders/cancellations/cancel-order-by-order-id): When customer's order cancellation request is determined to be eligible, this endpoint processes the cancellation by order ID. <p> **Note**: If you do not have the order number, use the corresponding order number-based endpoint - `POST /orders/order-number/{orderNumber}/actions/cancel`.</p>
- [Cancel order by order number](https://developer.fabric.inc/v3/api-reference/orders/cancellations/cancel-order-by-order-number): When customer's order cancellation request is determined to be eligible, this endpoint processes the cancellation by order number. <p> **Note**: If you do not have order number, use the corresponding order ID-based endpoint - `POST /orders/{orderId}/actions/cancel`. </p>
- [Get order cancellation eligibility by order ID](https://developer.fabric.inc/v3/api-reference/orders/cancellations/get-order-cancellation-eligibility-by-order-id): Either customer may initiate cancellation due to an incorrect order placement or as a merchant, you may initiate cancellation due to product unavailability, pricing errors, payment failure, or shipping restrictions. Before processing cancellation, it's crucial to determine the eligibility of the cancellation request. <p> This endpoint gets the eligibility of order cancellation by order ID. You can additionally specify `lineItemIds` to get the eligibility of specific line items.</p> <p> **Note**: If you do not have order ID, use the corresponding order number-based endpoint -`POST /orders/order-number/{orderNumber}/actions/check-exchange-eligibility`.</p>
- [Get order cancellation eligibility by order number](https://developer.fabric.inc/v3/api-reference/orders/cancellations/get-order-cancellation-eligibility-by-order-number): Either customer may initiate cancellation due to an incorrect order placement or as a merchant, you may initiate cancellation due to product unavailability, pricing errors, payment failure, or shipping restrictions. Before processing cancellation, it's crucial to determine the eligibility of the cancellation request. <p> This endpoint gets the eligibility of the cancellation request by order number. You can additionally specify `lineItemIds` to get the eligibility of specific line items.</p> <p> **Note**: If you do not have order number, use the corresponding order ID-based endpoint - `/orders/{orderId}/actions/check-cancel-eligibility`.</p>
- [Getting Started with Cancellations](https://developer.fabric.inc/v3/api-reference/orders/cancellations/overview)
- [Check credits eligibility by order ID](https://developer.fabric.inc/v3/api-reference/orders/credits/check-credits-eligibility-by-order-id): In case of refund scenarios, credits such as gift card may be offered to customers for various reasons such as damaged products, later deliveries, or other qualifying factors as per your policy. <p> This endpoint checks the credits eligibility by order ID, allowing businesses to manage credits effectively and provide appropriate compensation to eligible customers.</p>
- [Create credits by order ID](https://developer.fabric.inc/v3/api-reference/orders/credits/create-credits-by-order-id): Use this endpoint to create credits by order ID.
- [Create credits by order number](https://developer.fabric.inc/v3/api-reference/orders/credits/create-credits-by-order-number): The following endpoint is used to create credits using an order number.
- [Update credit status by order number](https://developer.fabric.inc/v3/api-reference/orders/credits/update-credit-status-by-order-number): The update credit status endpoint is used to update the credits status, notes, and additional credit attributes.
- [Update credits by order ID](https://developer.fabric.inc/v3/api-reference/orders/credits/update-credits-by-order-id): Use this endpoint to update the credit status, as well as to add any associated notes and additional attributes.
- [Inventory Setup](https://developer.fabric.inc/v3/api-reference/orders/developer-guide/inventory-setup)
- [List of Webhook Events](https://developer.fabric.inc/v3/api-reference/orders/developer-guide/list-of-webhook-events)
- [Importing order and inventory data](https://developer.fabric.inc/v3/api-reference/orders/developer-guide/order-and-inventory-import)
- [Order Exchange](https://developer.fabric.inc/v3/api-reference/orders/developer-guide/order-exchange)
- [Order Fulfillment](https://developer.fabric.inc/v3/api-reference/orders/developer-guide/order-fulfillment)
- [Order Return](https://developer.fabric.inc/v3/api-reference/orders/developer-guide/order-return)
- [Overview](https://developer.fabric.inc/v3/api-reference/orders/developer-guide/overview)
- [Export data by query](https://developer.fabric.inc/v3/api-reference/orders/exports/export-data-by-query): Initiate data export by the given filter criteria.
- [Get export job by exportId](https://developer.fabric.inc/v3/api-reference/orders/exports/get-export-job-by-exportid): Get details of a specific export job by specified `exportId`.
- [Get export jobs by query](https://developer.fabric.inc/v3/api-reference/orders/exports/get-export-jobs-by-query): Get a paginated list of all the export jobs based on the filter criteria specified in the request body.
- [Get file headers by module](https://developer.fabric.inc/v3/api-reference/orders/exports/get-file-headers-by-module): Get the list of file headers for a given module.<p>**Note:** File headers are basically the column headers or titles of the exported document.</p>
- [Getting Started with Exports](https://developer.fabric.inc/v3/api-reference/orders/exports/overview)
- [Cancel fraud order by order ID](https://developer.fabric.inc/v3/api-reference/orders/frauds/cancel-fraud-order-by-order-id): If an order is suspected to be fraudulent, it is immediately placed on hold for verification. After verification, if it is confirmed as fraudulent, this endpoint is used to cancel the order. <p> **Note**: If you do not have order ID, use the corresponding order number-based endpoint - `POST - /orders/order-number/{orderNumber}/actions/fraud-cancel` </p>
- [Cancel fraud order by order number](https://developer.fabric.inc/v3/api-reference/orders/frauds/cancel-fraud-order-by-order-number): If an order is suspected to be fraudulent, it is immediately placed on hold for verification. After verification, if it's confirmed as fraudulent, this endpoint is used to cancel the order by order number. <p> **Note**: If you don't have order number, use the corresponding order ID-based endpoint - `POST /orders/{orderId}/actions/fraud-cancel`.</p>
- [Getting Started with Frauds](https://developer.fabric.inc/v3/api-reference/orders/frauds/overview)
- [Release fraud order](https://developer.fabric.inc/v3/api-reference/orders/frauds/release-fraud-order): If an order is suspected to be fraudulent, it is immediately placed on hold for verification. After verification, if it is confirmed as non-fraudulent, this endpoint is used to release the order from hold, by order number so that it can be processed. <p> **Note**: When you don't have order number, use the corresponding order ID-based endpoint - `POST /orders/{orderId}/actions/fraud-release`.</p>
- [Release fraud order by order ID](https://developer.fabric.inc/v3/api-reference/orders/frauds/release-fraud-order-by-order-id): If an order is suspected to be fraudulent, it is immediately placed on hold for verification. After verification, if it is confirmed as non-fraudulent, this endpoint is used to release the order from hold, by order ID, so that it can be processed. <p> **Note**: When you don't have order ID, use the corresponding order number-based endpoint - `POST /orders/order-number/{orderNumber}/actions/fraud-release`.</p>
- [Get uploaded file status and details](https://developer.fabric.inc/v3/api-reference/orders/imports/get-uploaded-file-status-and-details): Get uploaded file status and details by specifying `importId`.
- [Get uploaded files that match specified criteria](https://developer.fabric.inc/v3/api-reference/orders/imports/get-uploaded-files-that-match-specified-criteria): Get uploaded files that match specified criteria. Returned as paginated records.
- [Getting Started with Imports](https://developer.fabric.inc/v3/api-reference/orders/imports/overview)
- [Upload bulk file to import data](https://developer.fabric.inc/v3/api-reference/orders/imports/upload-bulk-file-to-import-data): Upload bulk file by specifying file name. Successfully uploading the file triggers the import process, which is an event-driven extraction of the file's data to update the respective resource's system.
- [null](https://developer.fabric.inc/v3/api-reference/orders/inventory-transfer/cancel-inventory-transfer)
- [null](https://developer.fabric.inc/v3/api-reference/orders/inventory-transfer/create-inventory-transfer)
- [null](https://developer.fabric.inc/v3/api-reference/orders/inventory-transfer/get-inventory-transfer-by-transfershipmentid)
- [null](https://developer.fabric.inc/v3/api-reference/orders/inventory-transfer/inventory-transfer-query)
- [null](https://developer.fabric.inc/v3/api-reference/orders/inventory-transfer/inventory-transfer-search)
- [null](https://developer.fabric.inc/v3/api-reference/orders/inventory-transfer/package-tracking-acknowledge)
- [null](https://developer.fabric.inc/v3/api-reference/orders/inventory-transfer/packing-and-unpacking)
- [null](https://developer.fabric.inc/v3/api-reference/orders/inventory-transfer/receive-inventory-tracking)
- [null](https://developer.fabric.inc/v3/api-reference/orders/inventory-transfer/update-tracking-for-an-inventory-transfer)
- [Acknowledge financial transaction](https://developer.fabric.inc/v3/api-reference/orders/invoices/acknowledge-financial-transaction): When an order is created or processed, fabric generates invoice and sends it to merchants or third-party systems for further financial processing of the order. This endpoint lets merchants acknowledge that they have received the invoice with payment information.
- [Get invoice by ID](https://developer.fabric.inc/v3/api-reference/orders/invoices/get-invoice-by-id): Get details of an invoice by invoice ID.
- [Getting Started with Invoices](https://developer.fabric.inc/v3/api-reference/orders/invoices/overview)
- [Search for invoices](https://developer.fabric.inc/v3/api-reference/orders/invoices/search-for-invoices): Search for invoices by matching filter criteria.
- [Get acknowledgment receipt for notification](https://developer.fabric.inc/v3/api-reference/orders/notifications/get-acknowledgment-receipt-for-notification): This endpoint gets notification acknowledgment from external service.
- [Getting Started with Notifications](https://developer.fabric.inc/v3/api-reference/orders/notifications/overview)
- [Resend notifications](https://developer.fabric.inc/v3/api-reference/orders/notifications/resend-notifications): When an order is placed, the first notification is automatically sent to shopper. If the first notification isn't delivered for reasons such as incorrect email or server issues, this endpoint resends notification for specific events.
- [Orders (3.0.0)](https://developer.fabric.inc/v3/api-reference/orders/orders--3-0-0)
- [Orders FAQ](https://developer.fabric.inc/v3/api-reference/orders/orders-faq-s)
- [Check appeasement eligibility by order number](https://developer.fabric.inc/v3/api-reference/orders/orders/check-appeasement-eligibility): This endpoint checks for the appeasement eligibility of an order by order number.
- [Check appeasement eligibility by order ID](https://developer.fabric.inc/v3/api-reference/orders/orders/check-appeasement-eligibility-by-id): This endpoint checks for the appeasement eligibility of an order by orderId.
- [Check credits eligibility by order number](https://developer.fabric.inc/v3/api-reference/orders/orders/check-credit-eligibility): When processing refunds, credits such as a gift card may be offered to customers for various reasons such as damaged products, later deliveries, or other qualifying factors as per your policy. <p> This endpoint checks the credits eligibility by order number, allowing you to manage credits effectively and provide appropriate compensation to eligible customers. </p>
- [Get order exchange eligibility by order number](https://developer.fabric.inc/v3/api-reference/orders/orders/check-exchange-eligibility): Customers may want exchange an item because of size, fit, color, or style preferences. Before processing exchange, it's crucial to verify whether the item is eligible for exchange as per your policy. <p> This endpoint gets the exchange eligibility by order number. You can additionally specify `lineItemId` to get eligibility for a specific item.</p> <p> **Note**: If you do not have the order number, but have the order ID, use the order ID-based endpoint - `POST /orders/{orderId}/actions/check-exchange-eligibility`. </p>
- [Create new order](https://developer.fabric.inc/v3/api-reference/orders/orders/create-new-order): This endpoint creates a new order in the fabric Orders (OMS) system, regardless of whether it originates from fabric CnC service or an external system. The response includes an order ID, which is required for subsequent calls such as updating pickup information, getting order details, verifying eligibility for order cancellations, returns, exchanges, as well as creating appeasements, and processing order returns, cancellations, and exchanges.
- [Find orders](https://developer.fabric.inc/v3/api-reference/orders/orders/find-orders): Customers may want to review their past orders or, as merchants, you may have to answer queries related to past orders, and analyze sales. <p> To support the previously mentioned use cases, this endpoint searches for orders based on filter conditions specified in the request body. By using `offset` and `limit` you can refine the search results. When they are not specified, you will get up to 10 results. </p>
- [Get order by order ID](https://developer.fabric.inc/v3/api-reference/orders/orders/get-order-by-order-id): As a merchant, you may need to review or monitor an order to answer customer inquiries, resolve a complaint, or for analytics and reporting. With this endpoint, you can get order details by order ID. <p> **Note**: If you do not have the order ID, use the corresponding order number-based endpoint - `GET /orders/order-number/{orderNumber}`.</p>
- [Get order by order number](https://developer.fabric.inc/v3/api-reference/orders/orders/get-order-by-order-number): As a merchant, you may need to review or monitor an order to answer customer inquiries, resolve a complaint or for analytics and reporting. With this endpoint, you can get order details by order number. <p> **Note**: If you do not have the order number, use the corresponding order ID-based endpoint - `GET /orders/{orderId}`. </p>
- [Getting Started with Orders](https://developer.fabric.inc/v3/api-reference/orders/orders/overview)
- [Update Shipping information for an existing order by order number](https://developer.fabric.inc/v3/api-reference/orders/orders/update-attributes): The following endpoint is used to update attributes by order number.
- [Update Order Attributes](https://developer.fabric.inc/v3/api-reference/orders/orders/update-attributes-by-id): The update attributes endpoint is used to update order attributes using the order ID. Attributes can be updated in the integration layer to modify external system related information.
- [Update customer details for given order IDs](https://developer.fabric.inc/v3/api-reference/orders/orders/update-customer-details-for-given-order-ids): In many scenarios, customer details may change over time. For example, a customer might change their email, phone, or company affiliation. <p> By providing the order IDs and the updated customer details, this endpoint facilitates updating customer info for the given order IDs. This ensures order-related communication reaches the customer and they get timely customer service. </p>
- [Updates order pick-up details](https://developer.fabric.inc/v3/api-reference/orders/orders/updates-order-pick-up-details): Customers can choose to either have their order delivered to them or opt to pick up from a store or warehouse. In a Buy Online Pickup in Store (BOPIS) scenario, there may be situations when the primary pickup person has changed. <p> This endpoint allows for the updating pickup person details in BOPIS, ensuring that the most up-to-date information is available.</p>
- [Authorize order payments](https://developer.fabric.inc/v3/api-reference/orders/payments/authorize-payments): This endpoint is used synchronously or asynchronously for authorizing order payments pending for authorization.
- [Getting Started with Order Payments](https://developer.fabric.inc/v3/api-reference/orders/payments/overview)
- [Update order payment status by order ID](https://developer.fabric.inc/v3/api-reference/orders/payments/update-order-payment-status-by-order-id): This endpoint is used sync order payments when transactions happen externally. Additionally, used for updating order payment status and the amount, whether it is captured, refunded or void amount. <p> If you don't have order ID, use the corresponding order number-based endpoint - POST /orders/order-number/{orderNumber}/actions/update-payment-status.</p>
- [Update status of order payment by order number](https://developer.fabric.inc/v3/api-reference/orders/payments/update-status-of-order-payment-by-order-number): This endpoint is used sync order payments when transactions happen externally. Additionally, used for updating order payment status and the amount, whether it is captured, refunded or void amount. <p> If you don't have order number, use the corresponding order ID-based endpoint - POST /orders/{orderId}/actions/update-payment-status. </p>
- [Get eligibility of returns for items in an order by order ID](https://developer.fabric.inc/v3/api-reference/orders/returns/get-eligibility-of-returns-for-items-in-an-order-by-order-id): Customers may want to return one or more items because they do not meet the expectations or customer has changed their mind. Before processing return, it's crucial to verify whether the items are eligible for return as per your policy <p> This endpoint gets the eligibility of your return by order number. You can additionally specify `lineItemId` to get the eligibility of a single line item.</p> <p> **Note**: If you do not have the order ID, use the corresponding order number-based endpoint - `POST /orders/order-number/{orderNumber}/actions/check-return-eligibility`.</p>
- [Get order exchange eligibility by order ID](https://developer.fabric.inc/v3/api-reference/orders/returns/get-order-exchange-eligibility-by-order-id): Customers may want exchange an item because of size, color, or style preferences. Before processing exchange, it's crucial to verify whether the item is eligible for exchange as per your policy. <p> This endpoint gets the eligibility of exchange request by order number. You can additionally specify `lineItemId` to get eligibility of a specific item.</p> <p> **Note**: If you do not have the order ID, but have the order number, use the order number-based endpoint - `POST /orders/order-number/{orderNumber}/actions/check-exchange-eligibility`.</p>
- [Get order exchange eligibility by order number](https://developer.fabric.inc/v3/api-reference/orders/returns/get-order-exchange-eligibility-by-order-number): Customers may want exchange an item because of size, fit, color, or style preferences. Before processing exchange, it's crucial to verify whether the item is eligible for exchange as per your policy. <p> This endpoint gets the exchange eligibility by order number. You can additionally specify `lineItemId` to get eligibility for a specific item.</p> <p> **Note**: If you do not have the order number, but have the order ID, use the order ID-based endpoint - `POST /orders/{orderId}/actions/check-exchange-eligibility`. </p>
- [Get return eligibility by order number](https://developer.fabric.inc/v3/api-reference/orders/returns/get-return-eligibility-by-order-number): Customers may want to return one or more items because they do not meet the expectations or customer has changed their mind. Before processing return, it's crucial to verify whether the items are eligible for return as per your policy <p> This endpoint gets the eligibility of return by order number. You can additionally specify `lineItemId` to get the eligibility of a single line item.</p> <p> **Note**: If you do not have the order number, use the corresponding order ID-based endpoint - `POST /orders/{orderId}/actions/check-return-eligibility`.</p>
- [Order return by order ID](https://developer.fabric.inc/v3/api-reference/orders/returns/order-return-by-order-id): When customer's return request is found to be eligible, this endpoint submits the return request by order ID. <p> **Note**: If you do not have order ID, use the corresponding order number-based endpoint- `POST /orders/order-number/{orderNumber}/actions/submit-return-request`.</p>
- [Order return by order number](https://developer.fabric.inc/v3/api-reference/orders/returns/order-return-by-order-number): When the customer's return request is determined to be eligible, this endpoint is used to process the return request. <p> **Note**: If you do not have the order number, but have order ID, use Return order by order ID endpoint - `POST /orders/{orderId}/actions/submit-return-request`.</p>
- [Getting Started with Returns](https://developer.fabric.inc/v3/api-reference/orders/returns/overview)
- [Acknowledge shipment](https://developer.fabric.inc/v3/api-reference/orders/shipments/acknowledge-shipment): For users of fabric Webhook Service, Shipment related events can trigger HTTP callbacks to notify web clients through a merchant-defined URL/URI, typically an API Gateway for a middleware. While the response to fabric Webhook service HTTP call-back may occur, a secondary call-back can use this Acknowledge Shipment endpoint to indicate that a secondary external system has acknowledged this shipment event. Middleware receives the event, transforms it in a suitable format, and sends a success response back to fabric, confirming it received the event. It also sends the transformed event to an external merchant system (typically in XML or JSON).<p>With this endpoint, middleware immediately sends an asynchronous acknowledgement to fabric, based on shipping ID, to indicate whether the call was successful. This acknowledgement is used for learning, auditing, and taking any necessary action.</p>
- [Create new shipment](https://developer.fabric.inc/v3/api-reference/orders/shipments/create-new-shipment): To use this endpoint an “allocation” must exist for the order that's being shipped. When an order is placed, fabric sends allocation details to external merchant system to create order fulfillment requirement details in an external system. With reference to the allocation that's being shipped, users of this POST API can create  shipment details for allocations. <p> **Note**: Shipment ID generated as part of the response is required for subsequent calls such as Acknowledge shipment (`POST /shipments/{shipmentId}/acknowledge`) and Get shipment (`GET /shipments/{shipmentId}`).</p>
- [Create re-shipment](https://developer.fabric.inc/v3/api-reference/orders/shipments/create-re-shipment): Orders may go missing before they're delivered to customers for reasons such as incorrect address, theft, labelling issues, or other reasons. This endpoint triggers reshipment in such cases for the existing location. <p> **Note**: Shipment ID generated as part of the response is required for subsequent calls such as Acknowledge shipment (POST /shipments/{shipmentId}/acknowledge) and Get shipment (GET /shipments/{shipmentId}).</p>
- [Find shipments](https://developer.fabric.inc/v3/api-reference/orders/shipments/find-shipments): As merchants, you may want to view shipments of specific statuses, monitor progress of deliveries, and proactively manage situations to ensure timely deliveries. <p> This endpoint enables you to easily search for shipments based on the specified criteria in the request body. You can refine your search by specifying `limit` and `offset`. When they're not specified, by default you will get up to 10 records. In addition, you can `sort` results.</p>
- [Get shipment by ID](https://developer.fabric.inc/v3/api-reference/orders/shipments/get-shipment-by-id): As merchants, you may want to resolve customer queries related to shipment or track a specific shipment to manage customer expectations with timely communication. <p> This endpoint gets details of a single shipment by ID. You will get `shipmentId` by using the search endpoint, or by referencing a `shipmentId` on a file such as the Invoice.</p>
- [Getting Started with Shipments](https://developer.fabric.inc/v3/api-reference/orders/shipments/overview)
- [Update gift card activation status](https://developer.fabric.inc/v3/api-reference/orders/shipments/update-gift-card-activation-status): This endpoint is used to activate gift cards before they're delivered to the customer. Typically used by “adapters” or external web services integrated with gift card applications, so that gift cards can be activated as part of the fabric fulfillment workflow.
- [Update shipment tracking](https://developer.fabric.inc/v3/api-reference/orders/shipments/update-shipment-tracking): The update tracking endpoint creates a new tracking log that can be used to update the order status. The most common application of this endpoint is to connect to external web services or 'adapters' that have been integrated with carrier tracking applications. With this endpoint, fabric Shipment service gets information from carrier tracking applications, and in turn, updates customers about their shipment status.
- [Add items to shipping method](https://developer.fabric.inc/v3/api-reference/orders/shipping-method-items/add-items-to-shipping-method): You may want to offer different shipping options for items based on their weight and dimensions, or you may want to offer promotional shipping rates based on order value, customer loyalty, etc. <p> This endpoint lets you add items to an existing shipping method so that shoppers can see the options. </p>
- [Delete items from shipping method](https://developer.fabric.inc/v3/api-reference/orders/shipping-method-items/delete-items-from-shipping-method): Certain items may need to be removed from a shipping method when they're discontinued, new shipping restrictions are imposed on hazardous items, or when they're not eligible for current promotions.<p> Using this endpoint, you can delete one or more items from the given shipping method. </p>
- [Get item IDs for given shipping method](https://developer.fabric.inc/v3/api-reference/orders/shipping-method-items/get-item-ids-for-given-shipping-method): You may want to determine what items are in a specific shipping method, to calculate shipping costs, verify the eligibility of items for specific shipping methods, or display the list of items to shoppers during the checkout process.<p>This endpoint is used to get item IDs for a given shipping method. </p>
- [Get shipping methods](https://developer.fabric.inc/v3/api-reference/orders/shipping-method-items/get-shipping-methods): You may need to periodically review shipping methods associated with an item, either to answer related queries or to verify they're up to date. <p> This endpoint gets shipping methods for the given item ID.</p>
- [Create shipping method](https://developer.fabric.inc/v3/api-reference/orders/shipping-methods/create-shipping-method): On your storefront, shipping methods determine how products are delivered to your customers. Some of the common shipping methods are domestic, international, free shipping, and express delivery. <p> This endpoint is used to create a new shipping method. In the response, you will also get a shipping method ID, which will be required for subsequent calls to get, update, and delete this shipping method.</p>
- [Delete shipping method](https://developer.fabric.inc/v3/api-reference/orders/shipping-methods/delete-shipping-method): When a particular shipping service is discontinued or certain shipping methods have become redundant or non-compliant with existing regulations, you may want to remove them so they're not shown to shoppers. <p> This endpoint deletes a shipping method by ID. </p>
- [Find shipping methods](https://developer.fabric.inc/v3/api-reference/orders/shipping-methods/find-shipping-methods): At checkout, customers choose their preferred shipping method based on delivery timelines and costs. Moreover, it may be necessary for you to review available shipping methods to ensure they're current and accurate. To support these scenarios, you must get the latest shipping methods. <p> This endpoint gets shipping methods based on given filter conditions.</p>
- [Get shipping method](https://developer.fabric.inc/v3/api-reference/orders/shipping-methods/get-shipping-method): When an order is placed, the selected shipping method is stored as part of order details. You may need to review them for order related queries. <p> This endpoint gets details of a single shipping method by ID. </p>
- [Update shipping method](https://developer.fabric.inc/v3/api-reference/orders/shipping-methods/update-shipping-method): To comply with legal regulations and for other purposes, it may be necessary to update shipping rates or delivery timelines. <p> With this endpoint, you can update shipping details by ID. This completely replaced existing information. </p>
- [Add or update items in a shopping list](https://developer.fabric.inc/v3/api-reference/orders/shopping-list-items/add-or-update-items-in-a-shopping-list): Once a shopping list is created, shoppers can add new item to it or update existing ones. This endpoint is used to add and update items in a list. <p> - If the specified `sku` is not in the list, a new item is added to the list with the given `quantity`. <br/> - If the specified `sku` is already in the list, its current quantity is updated based on the given `incQuantity`.</p> <p> **Note**: At least one item must be in the request body.</p>
- [Delete items from shopping list](https://developer.fabric.inc/v3/api-reference/orders/shopping-list-items/delete-items-from-shopping-list): Over time, shoppers' preferences may change, or they might have added an item to their shopping list by mistake. <p> This endpoint lets your shopper remove one or more products from the specified shopping list.</p>
- [Get shopping list and its items](https://developer.fabric.inc/v3/api-reference/orders/shopping-list-items/get-shopping-list-and-its-items): By specifying list ID, you can get shopping list details along with its items.
- [Get shopping list items by list ID](https://developer.fabric.inc/v3/api-reference/orders/shopping-list-items/get-shopping-list-items-by-list-id): Shoppers may periodically review their shopping list to check for discounts or when they are ready to make a purchase. <p> This endpoint gets a paginated list of items by list ID. You can refine the results by specifying `offset` and `limit`. When they are not specified, you will get up to 10 records. </p>
- [Get shopping lists of a user along with associated items](https://developer.fabric.inc/v3/api-reference/orders/shopping-list-items/get-shopping-lists-of-a-user-along-with-associated-items): Shoppers may periodically review their shopping lists and their associated items. <p> This endpoint gets shopping lists and associated items. For each list, you can view list ID, list name, user ID, list type, notes, custom attributes, items count, times of list creation and list update, as well as item details.</p>
- [Create shopping list](https://developer.fabric.inc/v3/api-reference/orders/shopping-lists/create-shopping-list): Shoppers often choose to save their desired products in shopping lists to purchase later when they are ready or to take advantage of discounts when they are available. <p> This endpoint creates a new shopping list. The response includes a list ID, which is required for subsequent calls to get, update, or delete this shopping list.</p> <p> **Note**: Items can't be added when the shopping list is initially created. To add items, use the *Add items to list* endpoint - `POST /lists/{listId}/actions/add-or-update-list-items`.</p>
- [Delete a shopping list by ID](https://developer.fabric.inc/v3/api-reference/orders/shopping-lists/delete-a-shopping-list-by-id): Shoppers need to remove unwanted or irrelevant shopping lists. With this endpoint, they can delete a list by list ID.
- [Get a shopping list by ID](https://developer.fabric.inc/v3/api-reference/orders/shopping-lists/get-a-shopping-list-by-id): Get details of a shopping list by ID, along with the number of items in it.
- [Get shopping lists of a user](https://developer.fabric.inc/v3/api-reference/orders/shopping-lists/get-shopping-lists-of-a-user): Shoppers may want to periodically review their shopping lists and ensure they are up to date. <p> This endpoint gets a paginated response of shopping lists by user ID. For each list, you can view user ID, list ID, list name, type, notes, custom attributes (if any), as well as time of list creation and update.</p> <p> **Note**: <br/> 1. You can refine the results by specifying `offset` and `limit`. When they are not specified, you will get up to 10 records. <br/> 2. To view items in a list, refer to *Get lists with items* endpoint - `GET /lists/users/{userId}/actions/get-list-details-with-items`.</p>
- [Getting Started with Lists](https://developer.fabric.inc/v3/api-reference/orders/shopping-lists/overview)
- [Update a shopping list by ID](https://developer.fabric.inc/v3/api-reference/orders/shopping-lists/update-a-shopping-list-by-id): Shoppers like to update their shopping lists and keep them relevant. <p> By specifying list ID, this endpoint lets your shoppers update their shopping list details such as list name, list type, notes, and custom attributes.</p>
- [Get acknowledgement for package tracking by order number](https://developer.fabric.inc/v3/api-reference/orders/tracking/get-acknowledgement-for-package-tracking-by-order-number): This endpoint gets acknowledgement of package tracking by order number. <p> **Note**: If you do not have order number, use the corresponding order ID-based endpoint - `PUT /orders/{orderId}/actions/package-tracking-acknowledge`.</p>
- [Get package tracking acknowledgement by order ID](https://developer.fabric.inc/v3/api-reference/orders/tracking/get-package-tracking-acknowledgement-by-order-id): This endpoint gets acknowledgement of package tracking by order ID. <p> **Note**: If you do not have order ID, use the corresponding order number-based endpoint - `PUT /orders/order-number/{orderNumber}/actions/package-tracking-acknowledge`.</p>
- [Getting Started with Tracking](https://developer.fabric.inc/v3/api-reference/orders/tracking/overview)
- [Create product attribute group](https://developer.fabric.inc/v3/api-reference/product-catalog/attribute-groups/create-product-attribute-group): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/attribute-groups/delete-attribute-group): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/attribute-groups/find-attribute-groups): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/attribute-groups/get-all-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](https://developer.fabric.inc/v3/api-reference/product-catalog/attribute-groups/get-single-attribute-group): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/attribute-groups/overview)
- [Update attribute group](https://developer.fabric.inc/v3/api-reference/product-catalog/attribute-groups/update-attribute-group): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/attributes-mapping/get-attributes-mapping): Before adding an item (with or without variants) to fabric **Product Catalog**, you must map merchant-specific attributes to fabric-specific attributes. <br /> Once mapping is created, this endpoint is used to get the mapping details.
- [Attributes Mapping](https://developer.fabric.inc/v3/api-reference/product-catalog/attributes-mapping/overview)
- [Update attributes mapping](https://developer.fabric.inc/v3/api-reference/product-catalog/attributes-mapping/update-attributes-mapping): This endpoint updates mapping of merchant-defined attributes to fabric-defined standard attributes. This will help ensure consistency.
- [Create attribute](https://developer.fabric.inc/v3/api-reference/product-catalog/attributes/create-attribute): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/attributes/delete-single-attribute): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/attributes/find-attributes): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/attributes/get-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](https://developer.fabric.inc/v3/api-reference/product-catalog/attributes/get-single-attribute): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/attributes/overview)
- [Update single attribute](https://developer.fabric.inc/v3/api-reference/product-catalog/attributes/update-single-attribute): This endpoint updates attribute details such as name, description, type and subtype, target, validation criteria, and more, for the specified ID.
- [Create multiple categories](https://developer.fabric.inc/v3/api-reference/product-catalog/bulk-action-for-categories-and-collections/create-multiple-categories): 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. <br /> 2. This endpoint doesn't support adding of parent and its children categories at the same time. <br /> 3. You can add up to 25 categories.
- [Create multiple collections](https://developer.fabric.inc/v3/api-reference/product-catalog/bulk-action-for-categories-and-collections/create-multiple-collections): Collection is an alternative way to organize products compared to the original Category system; they're created based on merchant's requirements. This endpoint is used to create a new collection **Note**: You can create up to 25 collections in a single call.
- [Update collections up to 25](https://developer.fabric.inc/v3/api-reference/product-catalog/bulk-action-for-categories-and-collections/update-collections-up-to-25): With this endpoint, you can update up to 25 collections. You can also update collection details, such as add sub-collections, exclude sub-collections, add validation rules for attributes, or reorder collections. **Note**:<br />1. This endpoint replaces the existing details.<br />2. To avoid losing all details, for minor updates, use the `partially update collection` endpoint - `PATCH /collections/{id}`
- [Update multiple categories](https://developer.fabric.inc/v3/api-reference/product-catalog/bulk-action-for-categories-and-collections/update-multiple-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](https://developer.fabric.inc/v3/api-reference/product-catalog/categories/create-category): 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. <br /> 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](https://developer.fabric.inc/v3/api-reference/product-catalog/categories/delete-category): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/categories/find-categories): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/categories/get-a-single-category): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/categories/get-attribute-groups-of-a-category): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/categories/get-navigation-path-for-categories): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/categories/get-products-by-category): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/categories/overview)
- [Partially update category](https://developer.fabric.inc/v3/api-reference/product-catalog/categories/partially-update-category): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/categories/update-category): 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.
- [Copy Category to Collections](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/copy-category-to-collections): This endpoint is used to replicate category tree hierarchy to collections.
- [Create collection](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/create-collection): Collection is an alternative way to organize products compared to the Category system, which is the original organization of items. Because the Category system isn't granular enough to meet all the requirements of Storefronts, collections are used to organize products as per the merchant's requirements. This endpoint is used to create a new collection within the alternative organization so that it can be adapted to support various use-cases of Storefronts.
- [Delete collection](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/delete-collection): If there is a change in product offerings, one or more collections may become unnecessary. This endpoint is used to delete a collection by ID.
- [Find collections](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/find-collections): This endpoint enables you to find collections by the search criteria you specify in the request body. You can also  `sort` the results.
- [Get a single collection](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/get-a-single-collection): Collections are used to organize and categorize products on your e-commerce platform (website and app), making it easier for shoppers to browse and find products. This endpoint gets category details such as basic info (ID, name, localized name, status, etc.), attributes details, categories included, categories excluded, associated child categories, and more.
- [Get navigation path for collections](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/get-navigation-path-for-collections): On the Storefront, products are organized in hierarchical tree structure of parent and children collections. This endpoint gets the navigation path starting from the root (level 0) until the given collections.
- [Get products under collection](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/get-products-under-collection): To ensure the right set of products are organized within a collection, it's important to review products in each collection. This endpoint gets a paginated list of products in a collection.  **Note**: You can refine your search by specifying `offset` and `limit`. When they're not specified, you'll get up to 10 products by default.
- [Collections](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/overview)
- [Partially update collection](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/partially-update-collection): In contrast to the Update Collection endpoint - `PUT /collections/{id}`, which fully overwrites the collection details, this endpoint allows for selective modification of specific details such as fixing any typos present in the collection name as well as facilitating addition or removal of attributes
- [Update children of collection](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/update-children-of-collection): This endpoint is primarily used to change display order of children collection.
- [Update collection](https://developer.fabric.inc/v3/api-reference/product-catalog/collections/update-collection): With this endpoint, you can update details of a single collection, such as add or remove sub-collections, add validation rules for attributes, reorder collections, and more. **Note**: <br /> 1. This endpoint replaces the existing details. <br /> 2. To avoid impacting the entire data, for minor updates, use the Partially update collection endpoint instead - `PATCH /collections/{id}`.
- [Data Ingestion Best Practices](https://developer.fabric.inc/v3/api-reference/product-catalog/data-ingestion-best-practices)
- [Configuring Product Catalog](https://developer.fabric.inc/v3/api-reference/product-catalog/developer-guide/configuring-product-catalog)
- [Examples](https://developer.fabric.inc/v3/api-reference/product-catalog/developer-guide/examples)
- [Introduction](https://developer.fabric.inc/v3/api-reference/product-catalog/developer-guide/introduction)
- [Postman Collections](https://developer.fabric.inc/v3/api-reference/product-catalog/developer-guide/postman-collections)
- [Create file object and get file upload location](https://developer.fabric.inc/v3/api-reference/product-catalog/files/create-file-object-and-get-file-upload-location): This endpoint creates a file object by specifying the import file's `type`, `name`, and `locale` in the request body. The response will include the URL location to upload the file.
- [Download a file by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/files/download-a-file-by-id): Use this endpoint to get a download link for imported file, which you can use to review or update the file . **Note**: The link is valid only for five minutes.
- [Generate the import template](https://developer.fabric.inc/v3/api-reference/product-catalog/files/generate-the-import-template): Bulk import must be in a standardized format. Using this endpoint, you can generate the template required to bulk import attribute, category, collection, item, and/or bundle.
- [Get files available for a merchant](https://developer.fabric.inc/v3/api-reference/product-catalog/files/get-files-available-for-a-merchant): Get files available for a merchant. This endpoint can be used to search for files using file names or file IDs. **Note**: Query parameter `ids` can't be combined with any other query parameters and pagination isn't supported when `ids` query is used.
- [Add products](https://developer.fabric.inc/v3/api-reference/product-catalog/general-product-operations/add-products): 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**:<br /> 1. If product type is Variant, they can be added using either SKU or ID.<br />2. When product type is Item, either `parentCategoryId` or `parentCategorySKU` must be specified.<br />3. When product `type` is Bundle, items in a bundle can be added using either SKU or ID. <br />4. In the response you can see the products that are added successfully and the ones that couldn't be added.
- [Bulk reassign products to a different category using filter conditions](https://developer.fabric.inc/v3/api-reference/product-catalog/general-product-operations/bulk-reassign-products-to-a-different-category-using-filter-conditions): To enhance product visibility or improve product organization, you may want to reassign products to a different category. With this endpoint, you can asynchronously reassign products to a different category. Instead of waiting for results through the API response, you'll gets notified via email whether the products were successfully reassigned.
- [Delete products](https://developer.fabric.inc/v3/api-reference/product-catalog/general-product-operations/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**: <br />1. Unless all products are deleted, this endpoint fails. <br /> 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](https://developer.fabric.inc/v3/api-reference/product-catalog/general-product-operations/find-products): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/general-product-operations/get-products-list): 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.
- [Reassign products to a different category, synchronously.](https://developer.fabric.inc/v3/api-reference/product-catalog/general-product-operations/reassign-products-to-a-different-category-synchronously): To enhance product visibility or improve product organization, you may want to reassign products to a different category. With this endpoint, you can synchronously reassign up to 25 products to a different category. The response will show a list of successful and unsuccessful reassignments
- [Update products](https://developer.fabric.inc/v3/api-reference/product-catalog/general-product-operations/update-products): With this endpoint, you can update details of multiple products, which could be items, variants, and bundles. **Note**: <br />1. When product type is `Variant`, it can be added either via SKU or ID. <br />2.  When product type is `Item`, either the `parentCategoryId` or `parentCategorySKU` must be specified. <br />3. When product type is `Bundle`, the associated items or variants can be added either via SKU or via ID. <br />4. At least one product must be specified.
- [Cancel background jobs using job IDs](https://developer.fabric.inc/v3/api-reference/product-catalog/jobs/cancel-background-jobs): Cancel any in progress or scheduled background job by providing the job ID. Currently only supports item and variant import jobs.
- [Get jobs related to products](https://developer.fabric.inc/v3/api-reference/product-catalog/jobs/get-jobs-related-to-products): Get a paginated list of jobs related to products by specifying the query parameters such as job `ids`, `type`. You can refine the results by specifying `offset` and `limit`. **Note**: <br /> 1. Query parameter `ids` can't be combined with the rest of the query parameters and when it's specified, pagination isn't supported. <br /> 2. Query parameter `inputFileIds` supports up to 15 comma-separated file IDs and it can be combined only with the query parameter `lastJobOnly`. Pagination isn't supported when this parameter is used.
- [Initiate job to export items and variants](https://developer.fabric.inc/v3/api-reference/product-catalog/jobs/initiate-job-to-export-items-and-variants): Use this endpoint to trigger a job to export items and variants, by ids.
- [Initiate job to export items and variants](https://developer.fabric.inc/v3/api-reference/product-catalog/jobs/initiate-job-to-export-items-and-variants-1): Use this endpoint to trigger a job to export items and variants based on the specified filter conditions.
- [Search jobs](https://developer.fabric.inc/v3/api-reference/product-catalog/jobs/search-background-jobs): Get a paginated list of jobs related to products and collections by specifying the request body. You need to specify the criteria for the search such as job `id`, `type`, `status`, `collectionId`, `inputFileId`.
- [Add product](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/add-product): At fabric, the term products refers to items, variants, and/or bundles.
- [Add products to bundle by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/add-products-to-bundle-by-id): Creating a bundle of two or more complementary products, sold as a single package, is a widely adopted sales and marketing strategy. For example, a laptop is bundled with a carrying case and wireless mouse. This makes it convenient for shoppers to purchase them together. With this endpoint, you can add up to 25 products in a bundle that can be sold together. **Note**: <br />1. At least one product must be added. <br />2. If you don't have product ID, use the corresponding SKU-based endpoint - `POST /products/sku/{sku}/bundles/actions/attach`.
- [Add variants to products by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/add-variants-to-products-by-id): 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**: <br /> 1. At least one variant must be specified. <br /> 2. If you don't have product ID, use the corresponding SKU-based endpoint - `POST /products/sku/{sku}/variants/actions/attach`.
- [Change product category](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/change-product-category): This endpoint lets you change a product from one category to another. When managing a large number of products, this endpoint gives you the flexibility to organize products easily.
- [Delete product by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/delete-product-by-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](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/get-product-by-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](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/get-product-variants-by-id): 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**: <br /> 1. At least one variant must be specified. <br /> 2. If you don't have product ID, use the corresponding SKU-based endpoint - `GET /products/sku/{sku}/variants`.<br /> 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.
- [Get products in a bundle by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/get-products-in-a-bundle-by-id): Bundle is a collection of products that are sold together as a single package. For example, a laptop is bundled with a carrying case and a wireless mouse to be sold as a package. This endpoint gets a paginated list of products by ID.  **Note**: <br />1. You can refine the results by specifying `offset` and `limit` values. When they're not specified, by default, you'll get up to 10 products. <br /> 2. If you don't have product ID, use the corresponding SKU-based endpoint - `GET /products/sku/{sku}/bundles`. <br /> 3. The `status` parameter is applicable to the `id` passed in path parameter and not for bundles. That is, bundles returned as part of the response are either the bundles attached to the Live or Draft version of the product based on the `status` parameter.
- [Partially update product attributes by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/partially-update-product-attributes-by-id): 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**: <br /> 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. <br /> 2. If you don't have product ID, use the corresponding SKU-based endpoint - `PATCH /products/sku/{sku}/attributes`.
- [Product Catalog API](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/products-api)
- [Publish product by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/publish-product-by-id): A newly added product can be in `Published` or `Draft` status. With this endpoint, you can publish the Draft version of a product.
- [Remove products from a bundle by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/remove-products-from-a-bundle-by-id): When one or more products in a bundle are discontinued or no longer required, you don't want them to appear in the bundle. With this endpoint, you can remove up to 25 products by ID. **Note** <br /> 1. Products are only detached from the given product, not deleted. They can be added to the same or another product, at a later point. <br />2. At least one product must be specified. <br /> 3. If you don't have product ID, use the corresponding SKU-based endpoint - `POST /products/sku/{sku}/bundles/actions/detach`.
- [Remove variants by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/remove-variants-by-id): 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**: <br /> 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. <br />2. At least one variant must be specified. <br /> 3. If you don't have product ID, use the corresponding SKU-based endpoint - `POST /products/sku/{sku}/variants/actions/detach`.
- [Unpublish product by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/unpublish-product-by-id): Due to changes in market, you may have to remove a product from being live. With this endpoint, you can unpublish product.
- [Update product](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/update-product): With this endpoint, you can update details of a single product, which could be an items, variant, or a bundles. **Note**: <br />1. When product type is `Variant`, it can be added either using SKU or ID. <br />2. When product type is `Item`, either `parentCategoryId` or `parentCategorySKU` must be specified. <br />3. When product type is Bundle, associated items or variants can also be added either using SKU or via ID. <br />4. At least one product must be specified.
- [Update product attributes by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/update-product-attributes-by-id): 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**: <br /> 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. <br /> 2. If you don't have product ID, use the corresponding SKU-based endpoint - `PUT /products/sku/{sku}/attributes`.
- [Add products to bundle by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/add-products-to-bundle-by-sku): Creating a bundle of two or more complementary products, sold as a single package, is a widely adopted sales and marketing strategy. For example, a laptop is bundled with a carrying case and wireless mouse. This makes it convenient for shoppers to purchase them together. With this endpoint, you can add up to 25 products in a bundle that can be sold together. **Note**: <br />1. At least one product must be added. <br />2. If you don't have product `sku`, use the corresponding ID-based endpoint - `POST /products/{id}/bundles/actions/attach`.
- [Add variants to products by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/add-variants-to-products-by-sku): 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**: <br /> 1. At least one variant must be specified. <br /> 2. If you don't have product ID, use the corresponding ID-based endpoint - `POST /products/{id}/variants/actions/attach`.
- [Delete product by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/delete-product-by-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](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/get-product-by-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 product variants by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/get-product-variants-by-sku): 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**: <br /> 1. At least one variant must be specified. <br /> 2. If you don't have product ID, use the corresponding  ID-based endpoint - `/products/{id}/variants`. <br /> 3. The `status` parameter is applicable to the `id` passed in path parameter and not for variants. That is, the variants returned as part of the response are the variants attached to either the Live or Draft version of the product based on the `status` parameter.
- [Get products by SKUs](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/get-products-by-skus): 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**: <br />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. <br /> 2. If you don't have product SKU, use the corresponding ID-based endpoint - `GET /products/{id}`.
- [Get products in a bundle by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/get-products-in-a-bundle-by-sku): Bundle is a collection of products that are sold together as a single package. For example, a laptop is bundled with a carrying case and a wireless mouse to be sold as a package. This endpoint gets a paginated list of products by ID.  **Note**: <br />1. You can refine the results by specifying `offset` and `limit` values. When they're not specified, by default, you'll get up to 10 products. <br /> 2. If you don't have product SKU, use the corresponding ID-based endpoint - `GET /products/{id}/bundles`.<br /> 3. The `status` parameter is applicable to the `id` passed as path parameter and not for bundles. That is, the bundles returned in the response are the bundles attached to either the Live or Draft version of the product based on the `status` parameter.
- [Partially update product by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/partially-update-product-by-sku): 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**: <br /> 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. <br />2. If you don't have product SKU, use the corresponding ID-based endpoint - `PATCH /products/{id}/attributes`.
- [Publish product by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/publish-product-by-sku): A newly added product can be in `Published` or `Draft` status. With this endpoint, by specifying `sku`, you can publish a product in Draft status.
- [Remove product variants by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/remove-product-variants-by-sku): 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**: <br /> 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. <br />2. At least one variant must be specified. <br /> 3. If you don't have product SKU, use the corresponding ID-based endpoint - `POST /products/{id}/variants/actions/detach`.
- [Remove products from a bundle by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/remove-products-from-a-bundle-by-sku): When one or more products in a bundle are discontinued or no longer required, you don't want them to appear in the bundle. With this endpoint, you can remove up to 25 products by SKU. **Note** <br /> 1. Products are only detached from the given product, not deleted. They can be added to the same or another product, at a later point. <br />2. At least one product must be specified. <br /> 3. If you don't have product ID, use the corresponding SKU-based endpoint - `POST /products/{id}/bundles/actions/detach`.
- [Unpublish product by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/unpublish-product-by-sku): Due to changes in market, you may have to remove a product from being live. With this endpoint, you can unpublish a product by specifying `sku`.
- [Update product attributes by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/update-product-attributes-by-sku): 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**: <br /> 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. <br /> 2. If you don't have product SKU, use the corresponding ID-based endpoint - `PUT /products/{id}/attributes`.
- [Update product SKUs](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/update-product-skus): 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](https://developer.fabric.inc/v3/api-reference/product-catalog/products---attributes-api)
- [Product Catalog - Files and Jobs API](https://developer.fabric.inc/v3/api-reference/product-catalog/products---files-and-jobs-api)
- [Product Catalog - Published Product Catalog API](https://developer.fabric.inc/v3/api-reference/product-catalog/products---published-products-api)
- [Product Catalog API - Overview](https://developer.fabric.inc/v3/api-reference/product-catalog/products-api---overview)
- [Get collections by product ID](https://developer.fabric.inc/v3/api-reference/product-catalog/published-products-by-id/get-collections-by-product-id): On your Storefront products are organized or grouped in logical groups called Collections. The main purpose of Collection is distribution management by displaying products on your website based on separate browsing structures required to achieve specific merchandising objectives, such as organizational requirements, multi-regional assortments, multi-channel assortments, and collections. This endpoint gets the collection details of a published product by ID. You can refine your search results by specifying query parameters - `collectionIds` and `collectionRootName` **Note**: <br />1. You can narrow down the results by specifying `offset` and `limit`. When they're not specified, by default, you'll get up to 10 products. <br /> 2. If you don't have product ID, use the corresponding item ID-based or SKU-based endpoints.
- [Get products by IDs](https://developer.fabric.inc/v3/api-reference/product-catalog/published-products-by-id/get-products-by-ids): Shoppers may want to view the products they've already identified or bookmarked, or you may want to promote a particular set of products as part of promotions. This endpoint get details of published products with or without variants, categories, bundle products, and collections. You can specify multiple comma-separated product `ids`. Using this endpoint, you can show up to 25 products on your Storefront.  **Note**: If you don't have product ID, use the corresponding item ID-based or SKU-based endpoints.
- [Get products in a bundle by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/published-products-by-id/get-products-in-a-bundle-by-id): A bundle is a collection of products that are sold together as a single package. For example, a laptop is bundled with a carrying case and a wireless mouse to be sold as a package. This endpoint gets a paginated list of published products in a bundle by bundle ID. You can refine your search results by specifying query parameters - `excludeBundleProducts`, `excludeCollections`, `excludeCategories` and `excludeVariants` **Note**: <br />1. You can refine the results by specifying `offset` and `limit`. When they're not specified, by default, you'll get up to 10 products. <br /> 2. If you don't have product ID, use the corresponding item ID-based or SKU-based endpoints.
- [Get published product by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/published-products-by-id/get-published-product-by-id): Your Storefront must displays all the relevant information for shoppers to make an informed purchase decision. This endpoint gets details of a published product (item, bundle, or variant) by ID, which can be used to display product details on your Storefront.  **Note**: If you don't have product ID, use the corresponding SKU-based or item ID-based endpoints.
- [Get variants of published product by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/published-products-by-id/get-variants-of-published-product-by-id): Variants are the different versions of a product with different sizes, colors, or materials. For example, there are 12 variants of 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 shoppers more options. This endpoint gets a paginated list of variants of a published product by ID.  **Note**:<br /> 1. You can narrow down the search results by specifying `offset` and `limit`. When they're not specified, by default you'll get up to 10 records. <br /> 2. If you don't have product ID, use the corresponding SKU-based or item ID-based endpoints.
- [Get bundle products by bundle SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/published-products-by-sku/get-bundle-products-by-bundle-sku): A bundle is a collection of products that are sold together as a single package. For example, a laptop is bundled with a carrying case and a wireless mouse to be sold as a package. This endpoint gets a paginated list of published products in a bundle by bundle SKU.  **Note**: <br />1. You can refine the results by specifying `offset` and `limit`. When they're not specified, by default, you'll get up to 10 products. <br /> 2. If you don't have product SKU, use the corresponding item ID-based or product ID-based endpoints.
- [Get collections by product SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/published-products-by-sku/get-collections-by-product-sku): On your Storefront products are organized or grouped in logical groups called Collections. The main purpose of collection is distribution management by displaying products on your website based on separate browsing structures required to achieve specific merchandising objectives, such as organizational requirements, multi-regional assortments, multi-channel assortments, and collections. This endpoint gets the collection details of a published product by ID. You can refine your search results by specifying query parameters - `collectionIds` and `collectionRootName`.  **Note**: If you don't have SKU, use the corresponding item ID-based or product ID-based endpoints.
- [Get published product by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/published-products-by-sku/get-published-product-by-sku): Your Storefront must displays all the relevant information for shoppers to help them make an informed purchase decision. This endpoint gets details of a published product (item, bundle, or variant) by SKU, which can be used to display product details on your Storefront.  **Note**: If you don't have product SKU, use the corresponding item ID-based or product ID-based endpoints.
- [Get published products by SKUs](https://developer.fabric.inc/v3/api-reference/product-catalog/published-products-by-sku/get-published-products-by-skus): Shoppers may want to view the products they've already identified or bookmarked, or you want to promote a particular set of products as part of promotions. This endpoint gets multiple published products based on `skus` (comma-separated values) and is useful to show product list (up to 25 products) on your Storefront.  **Note**: <br />1. Using the examples you can see separate response for items, variants, and bundles. <br /> 2. If you don't have product SKU, use the corresponding item ID-based or product ID-based endpoints.
- [Get variants of published products by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/published-products-by-sku/get-variants-of-published-products-by-sku): Variants are different versions of a product with different sizes, colors, or materials. For example, there are 12 variants of 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 shoppers more options. This endpoint gets a paginated response of variants of a published product by SKU.  **Note**:<br /> 1. You can refine results by specifying `offset` and `limit`. When they're not specified, by default you'll get up to 10 records. <br /> 2. If you don't have product SKU, use the corresponding item ID-based or product ID-based endpoints.
- [Bundles Overview](https://developer.fabric.inc/v3/guides/catalog-connector/bundles-overview)
- [Importing Bundles](https://developer.fabric.inc/v3/guides/catalog-connector/importing-bundles)
- [Importing Items](https://developer.fabric.inc/v3/guides/catalog-connector/importing-items)
- [Items Overview](https://developer.fabric.inc/v3/guides/catalog-connector/items-overview)
- [Catalog Connector Overview](https://developer.fabric.inc/v3/guides/catalog-connector/overview)
- [Searching, Filtering, and Sorting Bundles](https://developer.fabric.inc/v3/guides/catalog-connector/searching-filtering-sorting-bundles)
- [Searching, Filtering, and Sorting Items](https://developer.fabric.inc/v3/guides/catalog-connector/searching-filtering-sorting-items)
- [Viewing Bundle Details](https://developer.fabric.inc/v3/guides/catalog-connector/viewing-bundle-attributes-variants-channels)
- [Viewing Bundle Import History](https://developer.fabric.inc/v3/guides/catalog-connector/viewing-bundle-import-history)
- [Viewing Item Details](https://developer.fabric.inc/v3/guides/catalog-connector/viewing-item-attributes-variants-channels)
- [Viewing Item Import History](https://developer.fabric.inc/v3/guides/catalog-connector/viewing-item-import-history)
- [Contracts](https://developer.fabric.inc/v3/guides/customers/contracts): Manage business-to-business pricing agreements
- [Customers](https://developer.fabric.inc/v3/guides/customers/customers): Manage business-to-consumer (B2C) customers
- [Organizations](https://developer.fabric.inc/v3/guides/customers/organizations): Manage business-to-business (B2B) customers
- [Overview](https://developer.fabric.inc/v3/guides/customers/overview)
- [BigCommerce Integration](https://developer.fabric.inc/v3/guides/dropship-retailers/bigcommerce-integration-1)
- [Publishing Products to BigCommerce](https://developer.fabric.inc/v3/guides/dropship-retailers/bigcommerce-publish-products)
- [fabric Integration](https://developer.fabric.inc/v3/guides/dropship-retailers/fabric-integration)
- [Import Products & Attributes](https://developer.fabric.inc/v3/guides/dropship-retailers/import-products---attributes)
- [Submit and Manage Import Requests](https://developer.fabric.inc/v3/guides/dropship-retailers/import-requests)
- [Inventory](https://developer.fabric.inc/v3/guides/dropship-retailers/inventory): View and export inventory reports on both the item and supplier levels.
- [Inviting Suppliers](https://developer.fabric.inc/v3/guides/dropship-retailers/inviting-suppliers)
- [Invoices](https://developer.fabric.inc/v3/guides/dropship-retailers/invoices): View, export, and manage invoices for all dropship orders.
- [Loop Integration](https://developer.fabric.inc/v3/guides/dropship-retailers/loop-integration)
- [Create Purchase Order](https://developer.fabric.inc/v3/guides/dropship-retailers/orders/create-purchase-order): Generate a custom purchase order manually.
- [Managing cancels & backorders](https://developer.fabric.inc/v3/guides/dropship-retailers/orders/managing-cancels---backorders): Manage orders canceled or flagged as backordered by a supplier.
- [Order Detail](https://developer.fabric.inc/v3/guides/dropship-retailers/orders/order-detail): Search for and view detailed information on each order.
- [Orders](https://developer.fabric.inc/v3/guides/dropship-retailers/orders/orders): Visualize the information needed to manage all aspects of your dropship orders across all connected suppliers.
- [Returns and Credit Memos](https://developer.fabric.inc/v3/guides/dropship-retailers/orders/returns-and-credit-memos): Create returns on orders and manage the credit memos associated with those returns.
- [Shipping & Tracking](https://developer.fabric.inc/v3/guides/dropship-retailers/orders/shipping---tracking)
- [Overview](https://developer.fabric.inc/v3/guides/dropship-retailers/overview): Rapidly launch, operate, and scale a curated assortment of products from an unlimited number of dropship suppliers.
- [Proposals](https://developer.fabric.inc/v3/guides/dropship-retailers/proposals): Review and approve proposals online.
- [Compliance Scorecard](https://developer.fabric.inc/v3/guides/dropship-retailers/reports/compliance-scorecard)
- [Reports](https://developer.fabric.inc/v3/guides/dropship-retailers/reports/reports)
- [Sales Performance Reporting](https://developer.fabric.inc/v3/guides/dropship-retailers/reports/sales-performance-reporting)
- [Attribute Value Transformers](https://developer.fabric.inc/v3/guides/dropship-retailers/settings/attribute-value-transformers): Transform the value of attributes automatically and accurately.
- [Categories & Commission Profiles](https://developer.fabric.inc/v3/guides/dropship-retailers/settings/categories---commission-profiles)
- [Proposal Departments](https://developer.fabric.inc/v3/guides/dropship-retailers/settings/proposal-departments): Standardize product data rules for all suppliers across various categories.
- [Rulesets](https://developer.fabric.inc/v3/guides/dropship-retailers/settings/rulesets): Set the conditions and validations used by the Proposal Department.
- [Settings](https://developer.fabric.inc/v3/guides/dropship-retailers/settings/settings): Add users and configure notifications in Dropship.
- [Templates](https://developer.fabric.inc/v3/guides/dropship-retailers/settings/templates): Keep data consistent between internal and external systems
- [Shopify Integration](https://developer.fabric.inc/v3/guides/dropship-retailers/shopify-integration): Integrate your fabric Dropship account with your Shopify account
- [Publishing Products to Shopify](https://developer.fabric.inc/v3/guides/dropship-retailers/shopify-publish-products)
- [Supplier Information](https://developer.fabric.inc/v3/guides/dropship-retailers/supplier-information)
- [Supplier Payment](https://developer.fabric.inc/v3/guides/dropship-retailers/supplier-payment): Track supplier invoices and payments
- [Support](https://developer.fabric.inc/v3/guides/dropship-retailers/support)
- [BigCommerce Integration](https://developer.fabric.inc/v3/guides/dropship-suppliers/bigcommerce-integration)
- [Adding Fulfillment Locations](https://developer.fabric.inc/v3/guides/dropship-suppliers/fulfillment/adding-fulfillment-locations)
- [Bulk Actions for Orders](https://developer.fabric.inc/v3/guides/dropship-suppliers/fulfillment/bulk-actions-for-orders)
- [Fulfillment](https://developer.fabric.inc/v3/guides/dropship-suppliers/fulfillment/fulfillment): Process and ship orders from all connected retail partners.
- [Invoices](https://developer.fabric.inc/v3/guides/dropship-suppliers/fulfillment/invoices): Invoice orders directly within Dropship individually or in bulk via file upload.
- [Shipments & Tracking](https://developer.fabric.inc/v3/guides/dropship-suppliers/fulfillment/shipments---tracking): Update orders with tracking information on a single order or in bulk via file upload and generate shipping labels.
- [Inventory](https://developer.fabric.inc/v3/guides/dropship-suppliers/inventory): Maintain inventory positions for your items in Dropship via file upload.
- [Overview](https://developer.fabric.inc/v3/guides/dropship-suppliers/overview): fabric Dropship provides suppliers a platform to discover, connect with, and grow successful partnerships with retailers to expand their reach and distribution
- [Import Products from Shopify](https://developer.fabric.inc/v3/guides/dropship-suppliers/product-management/import-products-from-shopify)
- [Product Management](https://developer.fabric.inc/v3/guides/dropship-suppliers/product-management/product-management): Upload all your product offerings and submit them to your connected retailer partners.
- [Reporting](https://developer.fabric.inc/v3/guides/dropship-suppliers/reporting)
- [Retailer Information](https://developer.fabric.inc/v3/guides/dropship-suppliers/retailer-information)
- [Returns](https://developer.fabric.inc/v3/guides/dropship-suppliers/returns): Approve and reject returns, then issue credit memos in Dropship.
- [Settings](https://developer.fabric.inc/v3/guides/dropship-suppliers/settings): Manage information about your business and its operations.
- [ShipStation Integration](https://developer.fabric.inc/v3/guides/dropship-suppliers/shipstation-integration)
- [Shopify Integration](https://developer.fabric.inc/v3/guides/dropship-suppliers/shopify-integration)
- [Supplier Onboarding Guide](https://developer.fabric.inc/v3/guides/dropship-suppliers/supplier-onboarding-guide)
- [Support](https://developer.fabric.inc/v3/guides/dropship-suppliers/support)
- [WooCommerce Integration](https://developer.fabric.inc/v3/guides/dropship-suppliers/woocommerce-integration)
- [Adding Team Members](https://developer.fabric.inc/v3/guides/get-started/adding-team-members)
- [Copilot Overview](https://developer.fabric.inc/v3/guides/get-started/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.
- [Feature Descriptions](https://developer.fabric.inc/v3/guides/get-started/feature-descriptions)
- [Glossary](https://developer.fabric.inc/v3/guides/get-started/glossary)
- [Terms and Conventions](https://developer.fabric.inc/v3/guides/get-started/terms-and-conventions)
- [Overview](https://developer.fabric.inc/v3/guides/home/alerts/alerts-overview)
- [Alerts Page](https://developer.fabric.inc/v3/guides/home/alerts/alerts-page)
- [Creating Alerts](https://developer.fabric.inc/v3/guides/home/alerts/creating-alerts)
- [Managing Alerts](https://developer.fabric.inc/v3/guides/home/alerts/managing-alerts)
- [Algolia connector](https://developer.fabric.inc/v3/guides/integrations/algolia-connector)
- [Avalara connector](https://developer.fabric.inc/v3/guides/integrations/avalara-connector)
- [Constructor.io connector](https://developer.fabric.inc/v3/guides/integrations/constructor-io-connector)
- [Overview](https://developer.fabric.inc/v3/guides/integrations/overview)
- [Stripe connector](https://developer.fabric.inc/v3/guides/integrations/stripe-connector)
- [Inventory](https://developer.fabric.inc/v3/guides/inventory/inventory): See the stock of goods across locations all in one spot
- [Locations](https://developer.fabric.inc/v3/guides/inventory/locations): Define location details and manage how they fulfill orders
- [Networks](https://developer.fabric.inc/v3/guides/inventory/networks): Create rules to define inventory availability
- [Overview](https://developer.fabric.inc/v3/guides/inventory/overview)
- [Configuring Scheduled Closures](https://developer.fabric.inc/v3/guides/inventory/scheduledclosures)
- [Coupons](https://developer.fabric.inc/v3/guides/offers/coupons): Create codes that customers can enter at checkout to receive a discount
- [Overview](https://developer.fabric.inc/v3/guides/offers/overview): Offers is fabric's pricing and promotions engine with tools to manage your pricing, promotions, and coupons in one place.
- [Pricing](https://developer.fabric.inc/v3/guides/offers/pricing): Set and track the price of your products
- [null](https://developer.fabric.inc/v3/guides/offers/promotions/creating-a-buy-get-promotion)
- [null](https://developer.fabric.inc/v3/guides/offers/promotions/creating-a-sku-promotion)
- [null](https://developer.fabric.inc/v3/guides/offers/promotions/creating-a-sku-quantity-promotion)
- [Overview](https://developer.fabric.inc/v3/guides/offers/promotions/overview)
- [Settings](https://developer.fabric.inc/v3/guides/offers/settings)
- [Activity Log](https://developer.fabric.inc/v3/guides/orders/activity-log)
- [Creating a Rule Set](https://developer.fabric.inc/v3/guides/orders/order-fulfillment-logic/create-a-new-rule-set-ui)
- [Updating a Rule Set](https://developer.fabric.inc/v3/guides/orders/order-fulfillment-logic/manage-rule-sets)
- [Order Fulfillment Logic Overview](https://developer.fabric.inc/v3/guides/orders/order-fulfillment-logic/order-fulfillment-logic)
- [Adding Products to an Existing Order](https://developer.fabric.inc/v3/guides/orders/order-management/adding-products-to-existing-order)
- [Creating Appeasement Refunds](https://developer.fabric.inc/v3/guides/orders/order-management/appeasements)
- [Canceling Items in an Order](https://developer.fabric.inc/v3/guides/orders/order-management/cancel-skus)
- [Creating an Order](https://developer.fabric.inc/v3/guides/orders/order-management/creating-an-order)
- [Processing Exchanges](https://developer.fabric.inc/v3/guides/orders/order-management/exchange-orders)
- [Exporting Orders](https://developer.fabric.inc/v3/guides/orders/order-management/exporting-orders)
- [Filtering Orders](https://developer.fabric.inc/v3/guides/orders/order-management/filtering-orders)
- [Overview](https://developer.fabric.inc/v3/guides/orders/order-management/overview)
- [Processing returns](https://developer.fabric.inc/v3/guides/orders/order-management/returning-orders)
- [Updating a Shipping Address](https://developer.fabric.inc/v3/guides/orders/order-management/updating-shipping-address)
- [Viewing Allocations](https://developer.fabric.inc/v3/guides/orders/order-management/viewing-allocations)
- [Viewing Allocation Details](https://developer.fabric.inc/v3/guides/orders/order-management/viewing-details-of-an-order/allocation-details)
- [Viewing Order Basic Details](https://developer.fabric.inc/v3/guides/orders/order-management/viewing-details-of-an-order/basic-details)
- [Viewing Invoice Details](https://developer.fabric.inc/v3/guides/orders/order-management/viewing-details-of-an-order/invoice-details)
- [Viewing Shipment Details](https://developer.fabric.inc/v3/guides/orders/order-management/viewing-details-of-an-order/shipment-details)
- [Viewing an Orders Activity Log](https://developer.fabric.inc/v3/guides/orders/order-management/viewing-details-of-an-order/viewing-activity-log)
- [Viewing Invoices](https://developer.fabric.inc/v3/guides/orders/order-management/viewing-invoices)
- [Viewing Orders](https://developer.fabric.inc/v3/guides/orders/order-management/viewing-orders)
- [Viewing Shipments](https://developer.fabric.inc/v3/guides/orders/order-management/viewing-shipments)
- [Overview](https://developer.fabric.inc/v3/guides/orders/overview): Build a centralized source of order, inventory, and warehouse information with fabric Orders.
- [Backorder & Preorder Settings](https://developer.fabric.inc/v3/guides/orders/settings/backorder-preorder)
- [Order Alerts](https://developer.fabric.inc/v3/guides/orders/settings/order-alerts)
- [Order Attributes](https://developer.fabric.inc/v3/guides/orders/settings/order-attributes)
- [Overview](https://developer.fabric.inc/v3/guides/orders/settings/overview): Use the Order Settings menu to manage order attributes, shipping methods, policies, alerts, backorders, and preorders.
- [Order Policies](https://developer.fabric.inc/v3/guides/orders/settings/policies)
- [Shipping Methods](https://developer.fabric.inc/v3/guides/orders/settings/shipping-methods)
- [Adding a Boolean Attribute](https://developer.fabric.inc/v3/guides/product-catalog/attributes/adding-a-boolean-attribute)
- [Adding a Boolean Attribute](https://developer.fabric.inc/v3/guides/product-catalog/attributes/adding-a-boolean-attribute2)
- [Adding a Date Attribute](https://developer.fabric.inc/v3/guides/product-catalog/attributes/adding-a-date-attribute)
- [Adding a Date Attribute](https://developer.fabric.inc/v3/guides/product-catalog/attributes/adding-a-date-attribute2)
- [Adding a List of Values Attribute](https://developer.fabric.inc/v3/guides/product-catalog/attributes/adding-a-list-of-values-attribute)
- [Adding a Number Only Attribute](https://developer.fabric.inc/v3/guides/product-catalog/attributes/adding-a-number-only-attribute)
- [Adding a Number Only Attribute](https://developer.fabric.inc/v3/guides/product-catalog/attributes/adding-a-number-only-attribute2)
- [Adding a Serial Attribute](https://developer.fabric.inc/v3/guides/product-catalog/attributes/adding-a-serial-attribute)
- [Adding a Text Attribute](https://developer.fabric.inc/v3/guides/product-catalog/attributes/adding-a-text-attribute)
- [Adding a Text Attribute](https://developer.fabric.inc/v3/guides/product-catalog/attributes/adding-a-text-attribute2)
- [Category Attributes Overview](https://developer.fabric.inc/v3/guides/product-catalog/attributes/category-attributes-overview)
- [Importing Product Attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/importing-product-attributes)
- [Managing Category Attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/managing-category-attributes)
- [Managing Product Attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/managing-product-attributes)
- [Product Attributes Overview](https://developer.fabric.inc/v3/guides/product-catalog/attributes/product-attributes-overview)
- [Searching and Sorting Category Attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/searching-and-sorting-category-attributes)
- [Searching and Sorting Product Attributes](https://developer.fabric.inc/v3/guides/product-catalog/attributes/searching-and-sorting-product-attributes)
- [Background Jobs](https://developer.fabric.inc/v3/guides/product-catalog/background-jobs/background-jobs)
- [Managing Background Jobs](https://developer.fabric.inc/v3/guides/product-catalog/background-jobs/managing-background-jobs)
- [Viewing Background Jobs History](https://developer.fabric.inc/v3/guides/product-catalog/background-jobs/viewing-background-jobs-history)
- [Adding a Category](https://developer.fabric.inc/v3/guides/product-catalog/categories/adding-a-category)
- [Categories](https://developer.fabric.inc/v3/guides/product-catalog/categories/categories)
- [Categories Overview](https://developer.fabric.inc/v3/guides/product-catalog/categories/categories-overview)
- [Importing Categories](https://developer.fabric.inc/v3/guides/product-catalog/categories/importing-categories)
- [Managing Categories](https://developer.fabric.inc/v3/guides/product-catalog/categories/managing-categories)
- [Adding Category Attributes to a Collection](https://developer.fabric.inc/v3/guides/product-catalog/collections/adding-category-attributes)
- [Collections](https://developer.fabric.inc/v3/guides/product-catalog/collections/collections)
- [Creating a Collection](https://developer.fabric.inc/v3/guides/product-catalog/collections/creating-a-collection)
- [Importing Collections](https://developer.fabric.inc/v3/guides/product-catalog/collections/importing-collections)
- [Managing Collections](https://developer.fabric.inc/v3/guides/product-catalog/collections/managing-collections)
- [Data Ingestion Best Practices](https://developer.fabric.inc/v3/guides/product-catalog/data-ingestion-best-practices)
- [Adding a Bundle](https://developer.fabric.inc/v3/guides/product-catalog/list/bundles/adding-a-bundle)
- [Bundles Overview](https://developer.fabric.inc/v3/guides/product-catalog/list/bundles/bundles)
- [Editing a Bundle](https://developer.fabric.inc/v3/guides/product-catalog/list/bundles/editing-a-bundle)
- [Importing Bundles](https://developer.fabric.inc/v3/guides/product-catalog/list/bundles/importing-bundles)
- [Searching, Filtering, and Sorting Bundles](https://developer.fabric.inc/v3/guides/product-catalog/list/bundles/searching-filtering-sorting-bundles)
- [Adding an Item](https://developer.fabric.inc/v3/guides/product-catalog/list/items/adding-an-item)
- [Adding Item Variants](https://developer.fabric.inc/v3/guides/product-catalog/list/items/adding-item-variants)
- [Bulk Operations for Items](https://developer.fabric.inc/v3/guides/product-catalog/list/items/bulk-operations-items)
- [Editing an Item](https://developer.fabric.inc/v3/guides/product-catalog/list/items/editing-an-item)
- [Importing Items](https://developer.fabric.inc/v3/guides/product-catalog/list/items/importing-items)
- [Items Overview](https://developer.fabric.inc/v3/guides/product-catalog/list/items/items)
- [Searching, Filtering, and Sorting Items](https://developer.fabric.inc/v3/guides/product-catalog/list/items/searching-filtering-sorting-items)
- [Overview](https://developer.fabric.inc/v3/guides/product-catalog/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.
- [Attribute Groups Overview](https://developer.fabric.inc/v3/guides/product-catalog/settings/attribute-groups-overview)
- [Attribute Mapping Overview](https://developer.fabric.inc/v3/guides/product-catalog/settings/attribute-mapping-overview)
- [Creating Attribute Groups](https://developer.fabric.inc/v3/guides/product-catalog/settings/creating-attribute-groups)
- [Mapping Attributes](https://developer.fabric.inc/v3/guides/product-catalog/settings/how-to-map-attributes)
- [Settings](https://developer.fabric.inc/v3/guides/product-catalog/settings/settings)
- [Account Details](https://developer.fabric.inc/v3/guides/settings/account-details/account-details)
- [Getting the Account ID](https://developer.fabric.inc/v3/guides/settings/account-details/getting-the-account-id)
- [Requesting a New Account](https://developer.fabric.inc/v3/guides/settings/account-details/requesting-a-new-account)
- [API Apps](https://developer.fabric.inc/v3/guides/settings/api-apps/api-apps)
- [Creating a System App](https://developer.fabric.inc/v3/guides/settings/api-apps/creating-system-app)
- [Creating a User App](https://developer.fabric.inc/v3/guides/settings/api-apps/creating-user-app)
- [Getting System App Credentials](https://developer.fabric.inc/v3/guides/settings/api-apps/getting-system-app-credentials)
- [Managing API Apps](https://developer.fabric.inc/v3/guides/settings/api-apps/managing-api-apps)
- [Currencies](https://developer.fabric.inc/v3/guides/settings/internationalization/currencies)
- [Internationalization](https://developer.fabric.inc/v3/guides/settings/internationalization/internationalization)
- [Languages](https://developer.fabric.inc/v3/guides/settings/internationalization/languages)
- [Role-Based Access Control (RBAC)](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control)
- [Customers Roles](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-customers-roles)
- [Offers Roles](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-offers-roles)
- [Orders and Inventory Roles](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-orders-roles)
- [Product Catalog Roles](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control-products-roles)
- [Inviting Users](https://developer.fabric.inc/v3/guides/settings/user-management/inviting-users)
- [Managing Users](https://developer.fabric.inc/v3/guides/settings/user-management/managing-users)
- [User Management](https://developer.fabric.inc/v3/guides/settings/user-management/user-management)
- [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook)
- [Deleting a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/deleting-a-webhook)
- [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)
- [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)
- [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)
- [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)
- [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)
- [Managing Events and Logs](https://developer.fabric.inc/v3/guides/settings/webhooks/managing-events-and-logs)
- [Webhooks](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)
- [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook)
- [Batch Processing](https://developer.fabric.inc/v3/guides/store-fulfillment/mobile-app/batch-processing)
- [Fulfillments Main Screen](https://developer.fabric.inc/v3/guides/store-fulfillment/mobile-app/fulfillments-main-screen)
- [Mobile App](https://developer.fabric.inc/v3/guides/store-fulfillment/mobile-app/mobile-app)
- [Packing Orders](https://developer.fabric.inc/v3/guides/store-fulfillment/mobile-app/packing-orders)
- [Picking Orders](https://developer.fabric.inc/v3/guides/store-fulfillment/mobile-app/picking-orders)
- [Pickups Main Screen](https://developer.fabric.inc/v3/guides/store-fulfillment/mobile-app/pickups-main-screen)
- [Shipping Orders](https://developer.fabric.inc/v3/guides/store-fulfillment/mobile-app/shipping-orders)
- [Batch Processing](https://developer.fabric.inc/v3/guides/store-fulfillment/web-app/batch-processing)
- [Fulfillments Main Screen](https://developer.fabric.inc/v3/guides/store-fulfillment/web-app/fulfillments-main-screen)
- [Packing Orders](https://developer.fabric.inc/v3/guides/store-fulfillment/web-app/packing-orders)
- [Picking Orders](https://developer.fabric.inc/v3/guides/store-fulfillment/web-app/picking-orders)
- [Pickups Main Screen](https://developer.fabric.inc/v3/guides/store-fulfillment/web-app/pickups-main-screen)
- [Shipping Orders](https://developer.fabric.inc/v3/guides/store-fulfillment/web-app/shipping-orders)
- [Web App](https://developer.fabric.inc/v3/guides/store-fulfillment/web-app/web-app)
- [Feedback and Contact](https://developer.fabric.inc/v3/release-notes/feedback-contact)
- [Commerce Platform](https://developer.fabric.inc/v3/release-notes/july2024/commerce-platform)
- [Dropship](https://developer.fabric.inc/v3/release-notes/july2024/dropship)
- [Fulfillment](https://developer.fabric.inc/v3/release-notes/july2024/fulfillment)
- [Offers](https://developer.fabric.inc/v3/release-notes/july2024/offers)
- [Orders](https://developer.fabric.inc/v3/release-notes/july2024/orders)
- [Product Catalog](https://developer.fabric.inc/v3/release-notes/july2024/product-catalog)
- [Release Summary](https://developer.fabric.inc/v3/release-notes/july2024/release-summary)
- [Dropship](https://developer.fabric.inc/v3/release-notes/oct2024/dropship)
- [Fulfillment](https://developer.fabric.inc/v3/release-notes/oct2024/fulfillment)
- [Offers](https://developer.fabric.inc/v3/release-notes/oct2024/offers)
- [Orders](https://developer.fabric.inc/v3/release-notes/oct2024/orders)
- [Product Catalog](https://developer.fabric.inc/v3/release-notes/oct2024/product-catalog)
- [Release Summary](https://developer.fabric.inc/v3/release-notes/oct2024/release-summary)
- [November 2023](https://developer.fabric.inc/v3/release-notes/sample)


## Optional

- [Support](https://support.fabric.inc/hc/en-us/requests/new)
- [Product Releases](https://fabric.inc/type/product-releases)
- [Blog](https://fabric.inc/blog)


# 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.

<CardGroup cols={2}>
  <Card title="Product Catalog" icon="boxes-stacked" href="/v3/guides/product-catalog">
    Centralized source for all products.
  </Card>

  <Card title="Orders" icon="bags-shopping" href="/v3/guides/orders">
    Centralized source of order, inventory, and warehouse information.
  </Card>

  <Card title="Inventory" icon="warehouse" href="/v3/guides/inventory">
    Receive and track inventory across networks and locations.
  </Card>

  <Card title="Fulfillment" icon="cart-flatbed-boxes" href="/v3/guides/orders/order-fulfillment-logic">
    Build fulfillment rules sets to direct orders to different fulfillment locations.
  </Card>

  <Card title="Dropship Retailers" icon="shop" href="/v3/guides/dropship-retailers/settings/settings">
    Launch, operate, and scale a curated assortment of products with unlimited dropship suppliers.
  </Card>

  <Card title="Dropship Suppliers" icon="truck-fast" href="/v3/guides/dropship-suppliers/settings">
    Launch, operate, and scale your product assortment across channels with your retailer partners.
  </Card>
</CardGroup>


# 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.


# 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** <br />- **Inventory** <br />- **Product Catalog**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **Service:**   | The service is the specific feature within the fabric application selected in the **App** field.                | - Orders: **Order**, **Invoice**, and **Allocation** <br />- Inventory: **Inventory\_imports** <br />- 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: <br />- **createdAt:** The time the service was created. <br />- **updatedAt:** The time the service was updated. <br />- **statusCode:** The service’s status code.                                                                                                                                                                                                                                                                                                                                                                                                               |
| **Operator**   | The **Operator** field describes the relationship between the **Attribute** field and the **Add Values** field. | - **IN:** Includes <br />- **NIN:** Doesn't include <br />- **EQ:** Is equal to <br />- **NEQ:** Not equal to <br />- **GT:** Is greater than <br />- **LT:** Is less than <br />- **GTE:** Is greater than or equal to <br />- **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: <br />- **NOW() - PT2H:** The time of the attribute is within the last two hours. <br />- **NOW() - PT6H:** The time of the attribute is within the last six hours. <br />- **NOW() - P2D:** The time of the attribute is within the last two days. <br /><br />Status-based values include options such as: <br />- **ALLOCATED:** Indicates a status of allocated for the selected attribute. <br />- **PROCESSING:** Indicates a status of processing for the selected attribute. <br />- **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** <br />- **Inventory** <br />- **Product Catalog**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| **Service:**   | The service is the specific feature within the fabric application selected in the **App** field.                | - Orders: **Order**, **Invoice**, and **Allocation** <br />- Inventory: **Inventory\_imports** <br />- 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: <br />- **createdAt:** The time the service was created. <br />- **updatedAt:** The time the service was updated. <br />- **statusCode:** The service’s status code.                                                                                                                                                                                                                                                                                                                                                                                                               |
| **Operator**   | The **Operator** field describes the relationship between the **Attribute** field and the **Add Values** field. | - **IN:** Includes <br />- **NIN:** Doesn't include <br />- **EQ:** Is equal to <br />- **NEQ:** Not equal to <br />- **GT:** Is greater than <br />- **LT:** Is less than <br />- **GTE:** Is greater than or equal to <br />- **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: <br />- **NOW() - PT2H:** The time of the attribute is within the last two hours. <br />- **NOW() - PT6H:** The time of the attribute is within the last six hours. <br />- **NOW() - P2D:** The time of the attribute is within the last two days. <br /><br />Status-based values include options such as: <br />- **ALLOCATED:** Indicates a status of allocated for the selected attribute. <br />- **PROCESSING:** Indicates a status of processing for the selected attribute. <br />- **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**. <br />
    The Alerts page is displayed.
2.  Click **Configured alerts**. <br />
    The **Configured alerts** tab is displayed.
3.  Click on an alert’s title. <br />
    The alert details page is displayed.
4.  Edit the alert’s details as required. <br />
    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**. <br />
    The **Alerts** page is displayed.
2.  Click **Configured Alerts**. <br />
    The **Configured Alerts** tab is displayed.
3.  Click on the title of an alert. <br />
    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)


# Inventory

See the stock of goods across locations all in one spot

## Introduction

The Inventory page shows a list of all the items in your inventory across all locations, with numbers that provide a quick look at the total quantity of each item that's Available to Purchase, Available to Backorder, and Available to Preorder. Click on the column headers to sort the information the inventory page displays.

## Importing Inventory

The **Import** button at the top of the page allows you to upload inventory information in a CSV file. Clicking the button opens the Import CSV file modal. It's highly recommended that you download one of the template files to use as a guide. Click on a template button to begin the download process.

*   **Template: Overlay** overrides inventory levels by “counter” in the fabric Orders inventory database.
*   **Template: Inventory Update** upgrades “root” values in the Inventory Record including Preorder date, Backorder date, Low stock level, and Safety stock level.

**Step 1: Choose upload type to import**

Select the type of file you’re uploading. The option you choose should match the type of template you downloaded, either **Overlay** or **Inventory Update**.

**Step 2: Click the button to add your file or simply drag and drop it**

Click the button to open the file selector or drag the file from your computer and drop it in the uploader.

Any CSV file you upload must match the following headers and corresponding data formats with no blank spaces, returns, line breaks, or other characters. Not following the parameters in the templates will result in errors when uploading.

*   SKU - Unique identifier for the product or item.
*   Total Quantity - The total amount of product.
*   Reserved Quantity - For first upload, this must be zero "0." For subsequent updates, use the reserved number from the inventory item details page.
*   Location ID - Warehouse ID.
*   Type - This can be either "Stock" or “Transit” if the inventory is in transit.
*   Channel ID - The channel ID must be either "12" (USA Web) or "13" (Canada Web).
*   Transit Ref - The transit reference number.
*   Transit Order Date - The transit order date in UTC Format (yyyy-mm-ddThh:mm:ss.sssZ). This date must be prior to the Transit Stock Date.
*   Transit Stock Date - The transit stock date in UTC Format (yyyy-mm-ddThh:mm:ss.sssZ).

**Notes**:

*   Inventory can't be updated at the individual level in Copilot at this time. Inventory must be added through .CSV file import.
*   Some of the fields supported in the template, attributes and counters, are configurable by tenant, so the bulk upload will accept columns for attributes and counters depending on the tenant configuration.

### Inventory Detail

Click on an item in your inventory to visit the Inventory Detail page, where you can see how that item’s stock is allocated across your locations.

The **Location** and **Channel** dropdowns allow you to see the number of that item you have onHand, allocated, and shipped.

Click on the **Other Attributes** tab to edit details about the item, including the Inventory Type, Lead Time, and more.

After you make your changes, click the **Save** button at the top-right of the page.


# Networks

Create rules to define inventory availability

## Introduction

A network is a group of locations that share inventory. By defining a network code, storefronts can use network codes to get inventory.

The Network page shows a list of all networks you have created previously with an Add Network button at the top-right. You can edit a previously created network by hovering over its name in the list and clicking the pencil icon at the right.

### Types of Networks

There are two types of networks: a **Single Network** or **Multiple Networks**.

**Single Network** is used to define inventory availability rules that apply to items and locations.

**Multiple Networks** is used to group Single Networks together. A possible use case for Multiple Networks could be to set up different types of locations within your retail system, such as stores, warehouses, outlets, etc. In order to set up the Multiple Networks option, you must have created at least two Single Networks previously.

## Creating a Network

Click the **Create Network** button at the top-right to create a new network.

**Step 1: Add Basic Information**

Fill out the Network Name and add a Description (optional).

Use the **Select Type of Network** field to choose whether you would like to create a Single Network or Multiple Networks.

Follow the steps below that correspond to the type of network you’re creating to complete the process.

#### Single Network

**Step 2: Set Up Your Rules**

Use the **Attribute Type** drop-down to select whether the rule applies to a **Product** or a **Location**.

The options in the **Attribute Name** drop-down menu depend on whether you selected Product or Location in the Attribute Type drop-down menu. If you selected **Product**, you can choose between the default option “isActive” or any custom attribute you may have created in [OMS Settings](/v3/guides/orders/settings). If you select **Location**, you can choose between the two default options, `isActive` and `isBopis`, or any custom attributes you may have created in OMS Settings.

Use the **Contains** drop-down menu to choose whether the rule applies to items that contain, don't contain, or are equal to the value you enter in the Add Value field.

Enter a value into the **Add Value** field. The field accepts any alphanumeric character.

Once you have set up the rule, click the **Add Rule Group** button. You can create multiple rule groups that apply to the same Attribute Type or Attribute Name.

**Step 3: Add inventory availability**

Enter a number of units in the **Safety stock quantity** field. The number set in this field will be subtracted from the available to promise quantity. The network safety stock also aggregates the safety stock for every location in the network. Therefore the actual safety stock will be this number plus the location aggregated safety stock.

Enter a number of units in the **Define low stock level** field.

Click the **Create** button at the top-right of the page to save your network, or click **Cancel** to exit without saving changes.

#### Multiple Networks

**Step 2: Set Up Your Multiple Networks**

Use the **Single Network** dropdown to select one of the Single Networks you have created previously to be a part of this Multiple Networks group and then click **Add**.

After you have added a Single Network, it will appear below the Single Network dropdown, along with its Safety Stock and Low Stock numbers, as well as the date it was Last Updated. Hover over a Single Network you have added and click on the trash can icon that appears at the right to remove it.

You must add at least two Single Networks to create a Multiple Networks group.

Click the **Create** button at the top-right of the page to save your network, or click **Cancel** to exit without saving changes.


# 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/inventory) - your dashboard for managing and tracking inventory
*   [Networks](/v3/guides/inventory/networks) - create rules to define inventory availability
*   [Locations](/v3/guides/inventory/locations) - 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).


# 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.

<Note> 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.</Note>

## 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.


# Pricing

Set and track the price of your products

## Introduction

Offers works in conjunction with the products you have uploaded into your fabric Product Catalog account. Offers automatically connects to Product Catalog and displays all of the products you have uploaded.

Pricing is the default menu in Offers. Selecting **Offers** from the left-hand navigation directs you to the Pricing menu.

### Add Bulk Price

The **Add Bulk Price** button at the top-right allows you to upload a .CSV file with information including the cost, price, and clearance price. Clicking the button opens the Import .CSV file modal. It's highly recommended that you **download the template** as a guide. Not following the parameters in the guide will result in errors.

Any .CSV file you upload must match the following headers and format:

*   SKU ID - the SKU ID of the item in Product Catalog
*   Cost - the cost of the item from the distributor
*   Price - the regular amount you charge customers to purchase the item
*   Clearance Price - the lowest amount you charge customers to purchase the item
*   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, 2022 at noon would be 2022-06-01T12:00:00.000Z.
*   Price List Name - the name you assign to the price list

You can check the status of your upload by clicking Import history. If there is an error in the file, Offers will flag the row with the error. When the upload is complete, you can download the .CSV file with the errors, correct them, and re-upload the file. Common errors you may encounter after you upload your version of the .CSV file include:

*   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: There is a character in the cost column 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: There are dates that don’t match the correct format.
*   No price data found: There are no prices listed in the price columns.
*   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: All data in these columns must be greater than 0.
*   Cost can't be greater than its corresponding Price: The price (defined as the amount the merchant charges customers for the product) must be greater than the cost (the amount the merchant paid the supplier for the product).
*   Clearance price can't be greater than or equal to its corresponding price: The amount listed in the price column must be greater than the amount listed in the clearance price column.
*   The header for an additional attributes column isn't correctly formatted: Column names for additional attributes should follow this format: **additionalAttributes.exampleAttribute**. For example, an additional attributes column header could be additionalAttributes.customSkuTitle or additionalAttributes.customCategories.

### Manual Price Editing

To set up the cost, price, or clearance price of an individual item, first select the price list it's on by clicking on the **Price List** dropdown. Then find and click on the individual item to set the following pricing details:

*   Cost - optional
*   Price - the regular amount you charge customers to purchase the item
*   Clearance Price - optional
*   Start date and time - the date the cost/price/clearance price begins. Dates must follow the YYYY-MM-DDTHH:MM:00.000Z format. For example, if a price began on June 1, 2022 at noon, you would enter 2022-06-01T12:00:00.000Z.
*   End date and time - same logic as Start date and time; defaults to December 31, 2099.

Please note that Offers supports up to five decimal places for price, cost, and clearance price values.

When finished, click **Add Price**.

To bulk edit the cost and price attributes for all the different variations of a product (for example, all colors, prints, sizes, etc.) edit the parent product. To change only the cost and price attributes for a single product (for example, only the green jacket), find and edit the individual variant.

### View Modes

Use the **List View** and **Tile View** buttons at the top-right of the page to change how the Pricing home page displays items. Tile View includes images but has less information, while List View has more information but no images.


# 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. <br />
    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. <br />
    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. <br />
    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. <br />
    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. <br />
    For more information on price types, see [Price lists](/v3/guides/offers/promotions/overview#price-lists).
11. Click **Next**. <br />
    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. <br />
    For more information, see [Product eligibility definitions for promotions](/v3/guides/offers/promotions/overview#product-eligibility-definitions-for-promotions).
14. Click the **Browse** button. <br />
    The **Browse SKUs customers must buy** window is displayed.
15. Select the SKUs that are eligible for the promotion and click **Add**. <br />
    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. <br />
    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. <br />
19. (Optional) To add another discount, select **Add Another Discount** and set up the discount as required.
20. Click **Next**. <br />
    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.<br />
    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**. <br />
    The **Review & create** menu is displayed.
27. Verify that all promotion details are correct. <br />
    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. <br />
    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. <br />
    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. <br />
    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. <br />
    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. <br />
    For more information on price types, see [Price lists](/v3/guides/offers/promotions/overview#price-lists).
11. Click **Next**. <br />
    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. <br />
    For more information, see [Product eligibility definitions for promotions](/v3/guides/offers/promotions/overview#product-eligibility-definitions-for-promotions).
13. Click the **Browse** button. <br />
    The **Browse SKUs customers must buy** window is displayed.
14. Select the SKUs that are eligible for the promotion and click **Add**. <br />
    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. <br />
    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. <br />
18. (Optional) To add another discount, select **Add Another Discount** and set up the discount as required.
19. Click **Next**. <br />
    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.<br />
    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**. <br />
    The **Review & create** menu is displayed.
26. Verify that all promotion details are correct. <br />
    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. <br />
    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. <br />
    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. <br />
    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. <br />
    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. <br />
    For more information on price types, see [Price lists](/v3/guides/offers/promotions/overview#price-lists).
11. Click **Next**. <br />
    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. <br />
    For more information, see [Product eligibility definitions for promotions](/v3/guides/offers/promotions/overview#product-eligibility-definitions-for-promotions).
13. Click the **Browse** button. <br />
    The **Browse SKUs customers must buy** window is displayed.
14. Select the SKUs that are eligible for the promotion and click **Add**. <br />
    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. <br />
    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. <br />
19. (Optional) To add another discount, select **Add Another Discount** and set up the discount as required.
20. Click **Next**. <br />
    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.<br />
    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**. <br />
    The **Review & create** menu is displayed.
27. Verify that all promotion details are correct. <br />
    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. You will need to first segment your customers through one of the following options:

*   Use of a third-party segmentation tool: There are many third-party tools available that will group your customers by their traits and behaviors. Once grouped, they will be given a group identifier that can be stored with the customer’s profile.
*   Customization of your online store: You can use information from the browser to do simple segmentation by the customer's device type and location.
*   Customer tagging: You can store custom traits to customer profiles that can then be added to our segmentation configurations.

Once customers are in a segment, a customer on your online store will need to have their segment identified and submitted when checking for eligible promotions from Offers. Their segment can be identified using a third-party segmentation tool plugin, the browser, or by checking the customer's profile if they're logged in. Their segment ID will need to be added to the user Profile section of the promotion evaluate request.

**Creating a Customer Segment**

To set up Customer segments, select **Customer segments** from the Settings menu and click the **Create Segment** button.

*   Segment name - Enter a name for your segment type.
*   Segment values - You can create multiple options within a segment type. Enter a value and press enter to save it.

**Linking a Customer Segment to a Promotion**

Once you have created a customer segment in Offers Settings, take the steps in the [Offers Promotions document](/v3/guides/offers/promotions) to link the customer segment to a promotion.

### 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  <br /><br />   • Doesn't equal  <br /><br />   • Contains  <br /> <br />  • Doesn't contain  <br /> <br />  • Less Than  <br /> <br />  • Less Than or Equal To <br /> <br />  • Greater Than  <br /> <br />  • 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:   <br /> - **WEB** : Orders that shoppers create on storefronts.   <br /> - **Borderfree**: International orders. These are orders that will be shipped outside of the merchant's country.   <br /> - **Mobile**: Orders that shoppers create on mobile apps, not web pages.   <br /> - **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. <br /> **Allocated**: The order is allocated for fulfillment. <br /> **Scratched**: The order is cancelled during allocation due to unavailable inventory. <br /> **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. <br /> <br /> 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 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 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)


# 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.

    <Warning>Don't select this option if this policy doesn't apply to different regions/countries.</Warning>

8.  In the **Channels** field, select the channels you want the policy to apply to.

    <Note>This field is disabled if you selected the **Apply to all channels** field.</Note>

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.

    <Note> Cancellations don't support **Refund Fees**. </Note>

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)


# 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: <br /> <br />   - **Product Update**: Collection Evaluation: When a product is updated, all collections are evaluated to identify which collection the product will be a part of. <br /> <br />   - **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. <br /> <br />   - **Collection Update**: Product Evaluation: When a collection is updated or created, this job evaluates all the rules against products and indexes all the products. <br /> <br />   - **Product Update**: Category Assignment: Users can assign products to a different category in bulk. This job tracks those bulk category reassignments on products. <br /> <br />   - **Product Denormalization**: fabric’s downstream domains, such as Orders, Offers, and Cart and Checkout, use denormalized data.  <br /> <br />   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: <br /> <br />   - **Completed successfully**: The job is complete with no errors. <br /> <br />   - **Partially completed with errors**: The job is partially complete and contains errors. <br /> <br />   - **File contains errors**: The job is complete and contains errors. <br /> <br />   - **Failed with Errors**: The job couldn't be completed because of major errors.   <br /> <br />  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: <br /> <br />  - **Scheduled (grey)**: Job is scheduled to begin. <br /> <br />   - **In progress (green)**: Job is currently running. <br /> <br />   - **Completed (green)**: Job is complete with no errors. <br /> <br />   - **Completed (orange)**: Job is complete but some errors were identified. <br /> <br />   - **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

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 like "tables" and "chairs," and the leaves represent individual products. In this example, a leaf could be an oak dining table that seats 4. 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)


# 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



### 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 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.
*   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.

#### 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:

*   **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.
        Note that if no action is specified for a row, upsert is considered the default.
    *   **Delete** removes an existing category.
*   **Node ID**: Represents the Category ID.
    *   When creating a category, this field must be left blank; otherwise, you will receive an error.
    *   When updating, upserting, or deleting a category, enter the Node ID or Node Name.
*   **Parent Category**: Unless you are creating a primary or root category, specify the parent for the new category you want to create or update.
*   **Node Name**: Name of the root, branch, or leaf categories that you are creating or updating.
*   **Order**: The order in which a given category must appear among sibling categories. If multiple categories are assigned the same order, the newly added categories appear in alphabetical order.
*   **Product Attributes**: Attributes of products associated with a category.
*   **Category Attributes**: Attributes of a category.

#### 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 **Import**.
    The **Import CSV file** window is displayed. This window provides a link to download an example template for the CSV file.
3.  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**.
    *   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. You can add as many attributes as needed.
    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.
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.  Click the attributes you would like to add.
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.  On the desired category click on the vertical ellipses (**⋮**) at the right.
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.  On the desired category click on the vertical ellipses (**⋮**) at the right.
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.  On the desired category click on the vertical ellipses (**⋮**) at the right.
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)


# 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.
        <Note> You can't have an empty rule. If a rule is empty, the **Apply** button is disabled.</Note>
    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 Collection | 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**.<br />
    The Bundles page is displayed.
2.  Type a search term into the search bar.<br />
    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**.<br />
    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 the Categories page.
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.
    *   In the **Edit Attributes** window, enter the required details.
        *   (Optional) For instructions on manually overwriting an attribute's settings, see [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), or [Adding a Date Attribute](/v3/guides/product-catalog/attributes/adding-a-date-attribute).
    *   Click **Save**.\
        If you want to use more than one attribute group, repeat the above steps for all of those attribute groups.
6.  (Optional) If [internationalization](/v3/guides/settings/internationalization/internationalization#internationalization) is enabled, from the language dropdown menu, select the desired language variant for the item.
7.  (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**.<br />
    The Items page is displayed.
2.  Type a search term into the search bar.<br />
    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**.<br />
    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.

<Note> You can use the filters at the top of the table to adjust the webhook information you see. </Note>


# 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. <br /> - **Success** is displayed when the file is processed successfully. <br /> - **Created with error** is displayed when the file is processed partially but some items had one or more errors. <br /> - **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.

<Note> 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. </Note>

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.

<Note> Clicking on the tracking number in the shipment detail popup will re-direct you to the carrier site for additional tracking details. </Note>

**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. |

<Note>  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. </Note>


# 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.

<Note>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. </Note>

### 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**.

<Note> Only the specific SKUs are canceled when an order contains multiple order lines with different SKUs. </Note>

### Video: Dropship manual fulfillment

<iframe width="700" height="394" src="https://www.loom.com/embed/800888be79124f75b63c139738e84f50?sid=51bdcfbd-6d17-492a-9947-5c1b38c8a89e" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />


# 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.

<Note> Orders must have a shipment associated with them before they're eligible for invoicing. </Note>

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.

<Note> Adjustments must be allowed by the retailer. </Note>

**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.

<Note> If you need to add multiple invoices for a particular order, you will need to repeat the process until all items have been invoiced. </Note>

## 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.

<Note> You can view the file import status within the same pop-up screen by clicking **Check Import Status**. </Note>

### Video: Dropship manual invoicing

<iframe width="700" height="394" src="https://www.loom.com/embed/bf02af131b684f81a2996eea32c03fbe?sid=a96bded3-f4be-4d27-b9e4-2f0465b04875" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />


# 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

<iframe width="700" height="394" src="https://www.loom.com/embed/65fbddb378cc49388a15f64e251d6c5a?sid=f94c209a-600e-4734-a932-d8986bf81248" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />


# 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**.

<Note> 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.</Note>


# 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.

<Note> You must set a business address before you can start dropshipping with fabric Dropship. </Note>

## 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.

<Note> The ideal logo is a 360 x 120 pixel PNG. </Note>

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**.

<Note> You can only access the client secret once </Note>

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.

<Note> The Push Orders to Shopify feature affects all of your retail partners; it can't be configured to each individual partner. </Note>

### 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.

<Note> 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. </Note>

### 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.

<Note> 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). </Note>

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

<iframe width="700" height="394" src="https://www.loom.com/embed/c96b8db3c00648fc902c0c028d197e23?sid=289a9915-2bd4-43c6-97b3-61c077e008b9" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />

### 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

<iframe width="700" height="394" src="https://www.loom.com/embed/582d5acff25442ceb6cdb19df14734ac?sid=32b56dbd-2499-4845-8d67-ebc114618bea" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen />

### 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 |


# Locations

Define location details and manage how they fulfill orders

## Introduction

The Locations page shows a list of all locations you have created previously with a **Create Location** button at the top-right. The table allows you to sort locations by Location Number, Location Name, Location Address, Status, and Last Updated.

## Creating a Location

Click **Add Location** at the top of the page to create a location, or hover over an already existing location in the table and click on the pencil icon at the right to edit it.

### Basic Information

In the Basic Information section, give the location a name and assign it a number.

Use the optional Coordinate 1 and Coordinate 2 fields for precise geolocation.

Set its status, whether Active or Inactive. **Active** locations are a part of your inventory network, **Inactive** locations aren't.

### Location Setup

In the Location setup section, use the **Location type** dropdown to select the location's type.

Set the **Capacity limit** toggle to **Disabled** or **Enabled**.

Disabling the capacity limit allows the location to be assigned unlimited allocations for fulfillment, up until inventory is unavailable.

If capacity limits are enabled, the Capacity limit amount field is displayed. Enter the number of allocations this location can receive at a time.

### Contact & Address

In the Contact & Address section, fill out the information for a contact at the location, as well as the location’s physical address.

### Operating Hours

The Operating Hours section lets you input a location’s hours with the option to create separate hours for store operation and curbside pickup.

To enable Operating Hours, check the **Enable specific operating hours (optional)** box.

Use the Select working days dropdown to choose which days you would like to configure. The days you choose and several additional dropdowns and other controls will appear below.

Use the first two dropdowns to set the day’s operating hours. Use the Operating Location dropdown to choose whether the hours apply to the location’s **Store only**, **Curbside pickup only**, or **Store and Curbside pickup** hours.

The controls to the right allow you to add, clone, and delete the row.

Cloning a row is especially useful if a single location has separate operating hours for store only and curbside pickup only on the same day.

## Importing Locations

You can bulk import a list of multiple locations using the **Import** CSV file feature.

### CSV Template

fabric provides a CSV template file to assist with bulk import for both **Locations** and **Scheduled Location Closures**. The following tables outline each column in the **Locations** and **Location\_Outages** CSV files.

#### Location CSV Template File

| Column                                                          | Description                                                                                                                                                                                                                                                                                       |
| --------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **locationNum** (Required)                                      | Specifies the unique location number.                                                                                                                                                                                                                                                             |
| **name** (Required)                                             | Specifies the required location name.                                                                                                                                                                                                                                                             |
| **isActive**                                                    | Determines if the location is active for order fulfillment operations or inactive. 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 Template File

| Column                                    | Description                                                                                                                                                                                                     |
| ----------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| **disabledFulfillmentMethods** (Required) | Indicates what fulfillment method you wish to disable for a location. For example, `["PICKUP"]`.                                                                                                                |
| **locationNumber** (Required)             | Specifies the unique location number.                                                                                                                                                                           |
| **schedule.endDate**                      | Specifies when the location outage will end in UTC format. For example, `2025-12-20T09:30:31.198Z`.                                                                                                             |
| **schedule.isIndefinite** (Required)      | Determines if the location outage will remain in effect indefinitely. Set to `FALSE` if you provided a start and end data for the outage. Set to `TRUE` if you want to outage to remain in effect indefinitely. |
| **schedule.startDate**                    | Specifies when the location outage will begin in UTC format. For example, `2025-12-20T09:30:31.198Z`.                                                                                                           |
| **outageNumber**                          | Indicates the reason for the outage.                                                                                                                                                                            |

### Procedure

**NOTE**: To update scheduled location closures, you must create and provide a location number.

1.  In the left menu, click **Inventory**.

The **Inventory** tab is displayed on the **Manage inventory** page.

1.  Click **Locations**.

2.  To import a list of locations or scheduled location closures, click **Import**.

    The **Import CSV file** window is displayed.

3.  Select one of the following options:

    *   **Locations**: Select this if you want to import locations and download the location CSV file.
    *   **Scheduled Location Closures**: Select this if you want to import locations outages and download the locations outages CSV file.

4.  Drag the filled CSV template into the drag and drop field or click **Select a File** and open the filled CSV template.

5.  Click **Submit**.

The locations are imported and the **Locations** table is updated.

If you updated **Location Scheduled Closures**, click a **Locations Number** from the locations table to view a locations details. In the **Location status** section, click the **Scheduled Closures** tab to view your imported closures for that location.


# 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.


# 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)


# 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)
*   [Creating a System App](/v3/guides/settings/api-apps/creating-system-app)
*   [Managing API Apps](/v3/guides/settings/api-apps/managing-api-apps)
*   [Concepts Page](/v3/api-reference/authentication-v3/concepts)


# Getting System App Credentials



System App generates an access token to establish its identity by using a [client ID](#client%5Fid) and [client secret](#client%5Fsecret). Unlike regular user applications, 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. This topic provides step-by-step instructions to get the setting required for a system app to complete the authentication.

## Prerequisite

Ensure that a [system app is created](/v3/guides/settings/api-apps/creating-system-app) for your account. You must have [admin rights](/v3/guides/settings/rbac/role-based-access-control) 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.

## 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 the **system app** that's already created for your account.\
    The details of the system app is displayed.
5.  Make a note of the following settings:
    *   **Authorization URL**: A unique URL for each fabric merchant and is 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 fabric APIs. For more information about these settings, see the [API Apps](/v3/guides/settings/api-apps/api-apps) page.

## Related Topics

*   [API Apps](/v3/guides/settings/api-apps/api-apps)
*   [Creating a System App](/v3/guides/settings/api-apps/creating-system-app)
*   [Creating a User App](/v3/guides/settings/api-apps/creating-user-app)
*   [Concepts Page](/v3/api-reference/authentication-v3/concepts)
*   [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)


# Managing API Apps



### Overview

fabric users with Admin or Restricted Admin privileges can edit or delete API apps.

### Prerequisites

Ensure you have [admin or restricted admin privileges](/v3/guides/settings/rbac/role-based-access-control) to edit or delete API apps.

### Editing API Apps

1.  In the left menu, click **Settings > Developer Tools**.
2.  Click **API Apps**.\
    The **API Apps** page is displayed.
3.  To edit an API app, find the API app you want to change and hover over the name of the API app.
4.  Click the **pencil** icon at the right.\
    The **App Details** page is displayed.
5.  Make the required changes.
6.  Click **Save**.

The API app is updated.

### Deleting API Apps

1.  In the left menu, click **Settings > Developer Tools**.
2.  Click **API Apps**. The API Apps page is displayed.
3.  To delete an API app, find the API app you would like to delete and hover over it.
4.  Click the **trash** icon that appears at the right.

The API app is deleted.

### Related Topics

*   [API Apps](/v3/guides/settings/api-apps/api-apps)
*   [Creating a System App](/v3/guides/settings/api-apps/creating-system-app)
*   [Creating a User App](/v3/guides/settings/api-apps/creating-user-app)
*   [Concepts Page](/v3/api-reference/authentication-v3/concepts)


# 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)


# Managing Users



fabric users with administrator privileges can edit or delete other users associated with their organization’s fabric account.

## Prerequisites

Ensure you have administrator privileges to edit or delete other users.

## Editing Users

You can edit users individually or select multiple users for a bulk update.

*   [Updating individual users](#updating-individual-users)
*   [Updating multiple users](#updating-multiple-users)

### Updating individual users

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.  In the **User** column, mouse over the user you want to edit and click the **Edit Roles** icon.

    The **Edit Roles** window is displayed.

4.  In the **Roles** field, select the roles you want enabled for the user.

    Multiple roles can be selected.

5.  Click **Save**.

The user's roles are updated in the **User Management** table.

### Updating multiple users

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.  In the **User** column, select users.

    Selecting users displays a banner with the **Clear selection**, **Assign Role**, and **Delete Users** options.

4.  Click **Assign Role**.

    The **Assign Roles** window is displayed with a list of all the users you selected. To remove a user from the list, click the **X** next to the users name.

5.  In the **Roles** field, select the roles you want to assign.

    Multiple roles can be selected.

6.  Do one of the following:

    *   Click **Add Roles** if you don't want to override the existing roles of the selected users.
    *   Click **Add and Replace Existing Roles** to override any existing roles and replace them with the newly selected roles.

7.  Click **Add Roles**.

The users' roles are updated in the **User Management** table.

For more information about Role-Based Access Control, see the [Role-Based Access Control (RBAC) documentation](/v3/guides/settings/user-management/role-based-access-control).

## Deleting Users

You can delete users individually or select multiple users for bulk delete.

*   [Deleting individual users](#deleting-individual-users)
*   [Deleting multiple users](#deleting-multiple-users)

### Deleting Individual Users

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.  In the User column, hover over the user name you want to delete, and then click the **De-activate** trash icon.

    The remove user window is displayed.

4.  Click **Yes, I'm sure**.

The permissions and roles of the selected user are removed.

### Deleting Multiple Users

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.  In the **User** column, select users.

    Selecting users displays the **Clear selection**, **Assign Role**, and **Delete Users** options.

4.  Click **Delete Users**.

    The delete users window is displayed with a list of all the selected users.

5.  Click **Yes, delete**.

The selected users' permissions and roles are removed.

## Related Topics

*   [Inviting Users](/v3/guides/settings/user-management/inviting-users)
*   [Role-Based Access Control (RBAC)](/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)


# Batch Processing



## Introduction

Batch Order Processing allows for items from multiple orders to be picked at the same time.

To begin batch processing, start on the Fulfillments main screen and apply a filter. Once the filter is applied, switch to the **Items** tab.

The Items tab will show all items that meet the filter criteria, regardless of which order they’re a part of. The ratio indicates how many of an item is required to fulfill all orders that meet the search criteria.

Press the **Scan** button to begin scanning the items. When finished scanning all items in the orders, press **Done**. You will be returned to the Items tab and see a “No Items Found” message to let you know that you have successfully picked all items in the orders that match the filters you have applied.


# Fulfillments Main Screen



## Overview

The Fulfillments main screen shows all existing orders.

### User Settings

Click on the user’s initials at the top-left of the page to visit the settings section, where you can make changes to various in-app settings, like the user’s location.

### Filtering Orders

Click the Filter Orders icon at the top-right of the Fulfillments page to open the Filters menu. You can filter by the date the order ships, the order’s status, and special handling instructions. After you’ve set up the filter settings, click **Save** to view results.

To remove filters, click the Filter Orders button again, select **Clear**, and then click **Save**.

### Searching

To search for an order, type key words into the search bar and hit enter to display any matching results.

### Orders and Items Toggle

The Orders and Items toggle allows you to switch between the Orders and Items views.

The Orders view shows all orders divided into two categories:

*   **Pickup Orders:** Orders that the customer will pickup from the store or warehouse
*   **Shipping Orders:** Orders that need to be placed with a shipping courier for fulfillment

Select **Items** to switch to the Items view, which displays the items in an order.

### Orders View

Each individual order is displayed as a tile with a quick look at some information about the order and the customer. Moving from left-to-right, an order tile shows the:

*   Order number
*   Number of items in the order
*   Special instructions tag for value-added service (VAS) options such as installation or giftwrapping
*   Date the order must be fulfilled
*   Customer’s name
*   Shipping instructions

### Fulfillments, Pickups, and Notifications

The Navigator at the bottom of the screen features controls to switch between the Fulfillments, Pickups, and Notifications views.


# Mobile App



## Overview

The fabric Orders Store Fulfillment app is a mobile and web solution for retailers to manage store inventory, ship from store, and in-store/curbside pickups. With the Store Fulfillment app, store associates can view and prioritize incoming orders, batch pick and pack items for on-time fulfillment, and handle customer pickups at the store.

## Prerequisites

The Store Fulfillment app, which is available from the Apple store.

It can be used with or without a scanner.

## Navigation

Documentation is organized into six pages:

*   [Fulfillments Main Screen](/v3/guides/store-fulfillment/mobile-app/fulfillments-main-screen)
*   [Picking Orders](/v3/guides/store-fulfillment/mobile-app/picking-orders)
*   [Packing Orders](/v3/guides/store-fulfillment/mobile-app/packing-orders)
*   [Shipping Orders](/v3/guides/store-fulfillment/mobile-app/shipping-orders)
*   [Batch Processing](/v3/guides/store-fulfillment/mobile-app/batch-processing)
*   [Pickups Main Screen](/v3/guides/store-fulfillment/mobile-app/pickups-main-screen)


# Packing Orders



## Introduction

Packing items is the second step in the fulfillment process. It involves taking the items that have been picked for a customer’s order and packing them for either shipment or pickup.

It can be done with or without a scanner.

## Packing Items (with scanner)

After pressing the **Pack Fulfillment** button to end the Pick stage, the process advances to the Pack stage and the Parcel Size menu opens. Choose a parcel size and press **Select** to continue.

The scan window will open automatically. Center the scanning window around the an item's barcode and press the **Capture** button. The ratio at the top of the screen that shows the number of items picked versus the total number of items in the parcel will update automatically.

Use the back button at the top left to cancel scanning and return to the previous screen.

If you scan too many quantities of a SKU than are included in the order, an error message reading “This item is already complete, scan next item” will appear below the scanning window.

After all items in the parcel have been scanned, the color of the ratio at the top of the screen will change to green.

Press the **Done** button at the bottom of the screen to exit scanner mode.

To re-access the scan window, either press the parcel listing, or press on its ellipses icon to open the Parcel Options menu and select **Scan into parcel**.

Press the **Ship** button at the bottom of the screen to continue to the next phase of the process.

## Packing Items (without scanner)

After pressing the **Pack Fulfillment** button to end the Pick stage, the process advances to the Pack stage and the Parcel Size menu opens. Choose a parcel size and press **Select** to continue.

The scan window will open automatically. To close the scan window and manually packing the items in the order, press the back button at the top-left to return to the main screen. From there, find the parcel you would like to pack and press its corresponding ellipses icon. In the Parcel Options menu that appears, select **Manually add items**.

A list of all items Picked for the order will appear. Enter the SKU for an item and use the plus and minus buttons to adjust the quantity of the item to add. Press **Done** when finished.

### Order Options Menu

To open the Order Options menu, click on the ellipses at the top-right of the Pack main screen.

*   **Print pick list:** Print the list of items as a PDF
*   **Add parcel:** Opens the Parcel Size menu so that you can add another parcel to the order
*   **Start over:** Starts the Pack process over from the beginning by removing all packed items from any parcels and removing any parcels from the order
*   **Reject order:** Select Reject Order and the **Reject Fulfillment** popup will open. To reject the order, use the field at the top to confirm the order number and then use the Reason dropdown to select a reason. Click **Reject Order** to proceed or **Cancel** to exit.

### Parcel Options Menu

To open the Parcel Options menu, find a parcel that's already added to the order and press its corresponding ellipses icon.

*   **Scan into parcel:** Opens the scanner window to scan items into the parcel.
*   **Manually add items:** Opens the Manually add items menu.
*   **Clear parcel content:** Empties the parcel of all packed items.
*   **Change parcel type/size:** Re-opens the Parcel Size menu to choose a different parcel. Any items you have scanned in to the parcel prior to changing the size will be retained into the new parcel.
*   **Remove parcel:** Removes the parcel from the order and clears any items from the order that have been packed into it.

Press the **Ship** button at the bottom of the screen to continue to the next phase of the process.


# Picking Orders



## Introduction

Picking items is the first step in the fulfillment process. It involves selecting the items in a customer’s order to prepare them to be packed.

It can be done with or without a scanner.

## Picking Items (with scanner)

Press the **Scan** button at the bottom of the screen to begin fulfilling the order by picking and scanning in the items the customer has purchased.

Center the scanning window around an item's barcode and press the **Capture** button to scan it. The ratio at the top of the screen that shows the number of items picked versus the total number of items in the order will update automatically and turn green when all items have been picked.

Use the back button at the top left to cancel scanning and return to the previous screen.

If you scan too many quantities of a SKU than are included in the order, an error message reading “This item is already complete, scan next item” will appear below the scanning window.

After all items in the order have been scanned, the color of the ratio at the top of the screen will change to green.

Press the **Done** button at the bottom of the screen to exit scanner mode.

Press the **Pack Fulfillment** button at the bottom of the screen to continue to the next phase of the process.

## Picking Items (without scanner)

Select an order from the fulfillments main screen to open the Pick Stage.

Use the back button at the top left to cancel scanning and return to the previous screen.

Click the ellipses at the top right to open the Order Options menu. **Note:** The options in this menu stay the same throughout the Pick, Pack, and Ship process, but depending on the step in the process, some options are disabled.

*   **Print pick list:** Print the list of items as a PDF
*   **Reject order:** Select Reject Order and the **Reject Fulfillment** popup will open. To reject the order, use the field at the top to confirm the order number and then use the Reason dropdown to select a reason. Click **Reject Order** to proceed or **Cancel** to exit.

The progress bar below the Back and ellipses buttons shows the current stage in the Pick, Pack, and Ship process.

The main view shows a list of all items required for fulfillment of the order. Each item is displayed along with its image, SKU, color, and size, and whether or not value-added services (VAS) were ordered along with the item.

Press on an item to open the Item Options menu. From here, you have the following choices:

**Manually pick:** Advances the popup to the Manual Pick screen. In the Manual Input dialog that appears, enter the item’s SKU number and adjust the plus and minus buttons for quick entry of multiple items with the same SKU. Select **Done** to continue. The Items section will be updated to reflect the items you picked.

**Product info:** Displays details about the product.

**Value added services:** Displays any special instructions for the item (installation, gift wrapping, etc.).

**Scratch item:** Allows you to mark the item in the order as unavailable because it's either Damaged, Out of stock, Not found, or On hold. Adjust the applicable quantities and click **Done** to save.

**Unpick item:** Only available for items that have already been picked. Selecting Unpick asks **Are you sure you want to unpick this item?** Select **Yes** to confirm.


# Pickups Main Screen



## Introduction

In fabric Orders, the term “pickup” can refer to orders that will be picked up by the customer, or orders that will be shipped.

To visit the Pickups screen, select **Pickups** from the navigation at the bottom.

### User Settings

Click on the user’s initials at the top-left of the page to visit the settings section, where you can make changes to various in-app settings.

### Filtering Orders

Click the Filter Orders button at the top-right of the Pickups page to open the Filters menu. You can filter orders by their status, including Arrived, Delayed, and Canceled. After you’ve set up the filter settings, click **Save** to view results.

To remove filters, click the Filter Orders button again, select **Clear**, and then click **Save**.

### Customer and Carrier Toggle

The Customer and Carrier toggle allows you to switch between the Customer and Carrier views.

The Customer view shows orders that will be picked up at the store by the customer, with the tag Pickup for buy-online pickup in-store orders, or Curbside for curbside orders. Information including the pickup date, customer name, and number of parcels also accompanies each order.

The Carrier view shows orders that need to be shipped to the customer, with the ship by date and the recipient’s name.

## Processing Pickups

To process a pickup, select an order from the Pickups main screen. You will be directed to the pickup details screen with the pickup person’s contact information and a summary of the items and parcels in the order.

To make updates on the status of the order, use the back button to return to the Pickups main screen and press the ellipses button to access. From the dropdown that appears, you can set the order to:

*   **Customer left** marks the status of the order as delayed.
*   **Mark as completed** updates the status of the order to complete.
*   **Unpack/return to shelf** cancels the order.

Press the **Scan Parcel Labels** button at the bottom of the screen to process the pickup.

From the scanner view, use the back button at the top left to return to the order summary page and press the ellipses at the top right to manually enter a parcel’s bar code number.

Use the capture button at the bottom to scan the barcode of each parcel in the order.

Once all parcels have been scanned, press the **Get Signature** button to get the customer’s signature.

Press **Done** after they’ve signed, and then press **Complete** to finish the pickup process.


# Shipping Orders



## Introduction

Shipping is the third step in the fulfillment process. In fabric Orders, shipping can refer to traditional shipment via a carrier or pickup by the customer.

## Shipping

Once all items have been picked and packed, the **Ship** button appears at the bottom of the screen.

Pressing the Ship button opens a popup with a prompt to review the order’s value-added services (installation, gift wrapping, etc.).

To proceed, click **View items** and the popup advances to a list of all items in the order that have VAS instructions. Press on an item to view its specific instructions and click **Done** when finished. When you’re finished with all VAS instructions, press **Proceed to ship**.

The Shipping Method menu will open with a list of all shipping methods. Choose a shipping method and then press **Select shipping method** to proceed to the ship stage.

### Ship Stage

The Ship Stage is a summary of the order so far. The progress bar at the top of the screen shows that the Pick and Pack Stages have been completed and that the Ship Stage is in process. Below the progress bar, there is a list of all Items and Parcels in the order along with the shipping method that’s been selected.

Press the **Generate labels** button to generate the shipping and packing labels.

After the labels are generated, the Print Labels menu opens at the bottom of the screen. Press the print icon next to **Print shipping labels** or **Print packing slips** to open the Print Options screen where you can see PDFs of the labels and choose a printer, number of copies, layout, and more.

To re-access the labels, press the ellipses button at the top right and select **Reprint shipping labels**.

Once the labels have been printed, a **Done** button appears at the bottom screen. Press it to complete the order and return to the Fulfillments main screen.


# Batch Processing



## Introduction

Batch Order Processing allows for multiple orders to be picked at the same time.

It can be done with or without a scanner.

## Batch Order Processing (with scanner)

To batch process an order with a scanner, click **Scan in Items** on the **Items** tab from the Fulfillments menu.

The scan to pick items popup opens with a list of items that are required for the order to be fulfilled.

As you pick items, the quantities are updated in the popup.

Once all items have been picked, click the **Done** button to save your changes.

## Batch Order Processing (without scanner)

To batch process an order without a scanner, begin on the Pending Orders menu and apply a filter. Once you have applied a filter, visit the **Items** tab. Click **Scan in Items** to begin batch order fulfillment.

Click the **Done** button at the bottom of the popup when you’re finished scanning.

The quantities will be updated on the Items tab. Click the View Orders button to return to the Orders tab.


# Fulfillments Main Screen



## Orders

The Fulfillments main screen shows all existing orders, divided into in four categories accessible from the left navigation:

*   **Pending Orders:** Orders that are newly created, orders for which host processing has not yet begun, or orders that are in the processing stage.
*   **Rejected Orders:** Rejected or canceled orders.
*   **Completed Orders:** Orders that have been completed.
*   **All Orders**

Selecting a category loads the orders in that category into the list view at the right. Information about each order is organized into columns.

*   **Order #:** The order’s identifying number
*   **Order size:** The number of items in the order
*   **Tags:** Indicate orders with special instructions (value-added service options like installation or giftwrapping)
*   **Customer:** The customer’s name
*   **Shipping Type:** Will display one of the following:
    *   The name of the shipping courier for traditional ship-to orders
    *   **Curbside** for curbside pickup
    *   **Pickup** for buy online pickup in-store (BOPIS)
*   **Ship By:** The date the order must be fulfilled

### Search, filter, and refresh

Find a specific order in the list view by using the search, filter, and refresh features.

To search for an order, type key words into the search bar and hit enter. The list view will display any matching results.

The filter icon is to the right of the search bar. Click it to open the Filter dropdown menu. You can filter by the date the order ships, the order’s status, and special handling instructions. After you’ve set up the filter settings, click **Apply Filters** to view results.

Click the refresh icon at the far right to reload the list view with any changes to orders that may have occurred since the list was last loaded.

## Items

The Items tab serves as a batch picking mechanism to pick outstanding items to fulfill multiple pending orders. The Items tab displays all items in a store that are required to fulfill the store’s pending orders. Information about each outstanding item is organized into the following columns:

*   **Item Name:** The name of the item
*   **Quantity:** The number of items pending fulfillment, displayed in fraction form. The numerator represents the number of items that have been scanned and picked, and the denominator represents the total number of items to be scanned and packed.
*   **SKU:** The item’s SKU number
*   **Color:** The item color
*   **Size:** The item size

### Filter and refresh

The Filter button can be used to sort the outstanding items to be fulfilled. You can filter by the date the order must be shipped, the order’s status (in progress, overdue, and assigned to me), and special handling instructions. After you’ve selected your filters, click **Apply Filters** to view results. For example, if you’re looking to pick all the items for orders that have been assigned to you, you can select and apply the “Assigned to Me” status and batch pick all items at once.

Click the refresh icon at the far right to reload the list view with any changes to orders that may have occurred since the list was last loaded.

### Scan in Items

Select **Scan in Items** to begin batch picking items. Once items are scanned for picking, the quantity tags in each order’s tile will update, displaying the number of picked items over the number of total items for an order.

When all items in a filter have already been scanned for picking, clicking the Scan in Items button will indicate that there are no items available to pick.


# Packing Orders



## Introduction

Packing items is the second step in the fulfillment process. It involves taking the items that have been picked for a customer’s order and packing them for either shipment or pickup.

It can be done with or without a scanner.

## Packing Items (with scanner)

Select a parcel to begin packing items, and a **Scan to pack items** popup will appear.

Scan each item in the order.

Once all the items are scanned, their quantity tags turn green. Click the **Done** button at the bottom of the popup to save the changes and add them to the parcel.

## Packing Items (without scanner)

After all items in the order have been picked, the **Pack** button at the bottom of the page becomes enabled. Click it to begin packing the order.

The **Parcel Size** popup opens with a list of available parcels along with their dimensions. Choose a parcel and click **Select** to continue or **Cancel** to exit.

Upon clicking Select, a notification appears at the top of the page letting you know the parcel has been added. In addition, the Parcel Size popup closes and the **Scan to pack items** popup opens.

In the packing stage, two new options are added to the dropdown that’s accessed by clicking on the ellipses button at the top-right: **Add Parcel** and **Start over**. **Note:** The options in this dropdown stay the same throughout the Pick, Pack, and Ship process, but depending on the step in the process, some options are disabled.

**Print pick list:** Print the list of items as a PDF

Click **Add parcel** and the **Parcel Size popup** reopens. Choose a parcel and click **Select** to continue or **Cancel** to exit.

Click **Start over** and the **Do you want to start over?** popup appears. Click **Yes, delete all & start over** to unpack all items and clear selections for any parcels. Click **Cancel** to exit the popup.

### Parcels Menu

The Parcels section contains all of the parcels you have added to an order.

Click the ellipses at the top-right of a parcel to open the parcel options.

*   **Scan into parcel** opens the same **Scan to pack items** popup that's accessible by simply clicking on the parcel.
*   **Manually add items** opens a popup with all items picked for the order with corresponding counters that allowing for manual adding and subtracting from the parcel. Click **Done** to save or **Cancel** to exit.

Select **Clear parcel content** to remove all items added to the parcel. The **Do you want to proceed?** popup appears. Click **Yes, clear contents** to continue or **Cancel** to exit.

Select **Change parcel type/size** to reopen the **Parcel Size popup**. Choose a parcel and then click **Select** to continue or **Cancel** to exit.

Choose **Remove parcel** to delete the parcel and all of the items added to it. The **Do you want to proceed?** popup will appear. Click **Yes, remove parcel** to continue or **Cancel** to exit.

Click on the **Click to scan items into parcel** link within a parcel and the **Scan to pack items** popup will appear.


# Picking Orders



## Introduction

Picking items is the first step in the fulfillment process. It involves selecting the items in a customer’s order to prepare them to be packed.

It can be done with or without a scanner.

## Picking Items (with scanner)

Select **Scan in Items** on the Items tab from the fulfillments menu to begin picking and scanning the items the customer has purchased.

Scanning an item’s barcode will bring up a notification that the item has been picked. Its quantity will be updated in the items section.

Once all the items are scanned, a button appears at the bottom of the screen to **Pack** the order.

## Picking Items (without scanner)

Select an order type from the fulfillments main screen and the Order Details panel will open at the right, displaying customer details at the top including their name, phone number, email address, and address.

The Items list below the customer details is a list of all the items that are required for fulfillment of the order. Each item is displayed in its own accordion. Clicking on the accordion shows the item’s images, SKU, weight, size, and color.

Click the **Begin** button at the bottom of the Order Details panel to initiate the pick process.

### Pick Screen

The Pick screen is the first step in the Pick process. The progress bar at the top of the page shows the current step in the Pick, Pack, and Ship process.

At the top-left, there’s a back button to return to the Order Details.

Click the ellipses at the top-right to open the order options dropdown. **Note:** The options in this dropdown stay the same throughout the Pick, Pack, and Ship process, but depending on the step in the process, some options are disabled.

**Print pick list:** Print the list of items as a PDF

**Reject order:** Select Reject Order and the **Reject Fulfillment** popup will open. To reject the order, use the field at the top to confirm the order number and then use the Reason dropdown to select a reason. Click **Reject Order** to proceed or **Cancel** to exit.

There are two sections below the progress bar: **Items** and **Parcels**.

In the Pick stage, the Items section shows the number of items required to fulfill the order, and the Parcels section is blank.

The Items section has a **Use Barcode Scanner to Pick Items** button so that you can switch to scanner mode.

To continue picking items manually, click on an item to open the Item Options popup, which has several options:

*   **Manually Pick:** Advances the popup to the Manual Pick screen, which features information about the item and a counter to set the number of items to be picked manually. Choose the number of items to pick and select **Done** to continue. The Items section will be updated to reflect the items you picked. A notification will appear at the top of the page letting you know that the quantity has been updated.
*   **Product Info:** Displays details about the product.
*   **Scratch Item:** Allows you to mark the item in the order as unavailable because it's either Damaged, Out of stock, Not found, or On hold. Adjust the applicable quantities and click **Done** to save or **Cancel** to exit.
*   **Value Added Services:** Displays any special instructions for the item (installation, gift wrapping, etc.).
*   **Unpick item:** Only available for items that have already been picked. Selecting Unpick item opens the **Are you sure you want to unpick this item?** popup. Click **Yes** to confirm or **Cancel** to exit.


# Pickups Main Screen



## Introduction

In fabric Orders, the term “pickup” can refer to orders that will be picked up by the customer, or orders that will be shipped.

To visit the Pickups screen, select **Pickups** from the navigation at the left.

From the Pickups menu, click the **Customer** tab at the top right to see all orders ready for curbside pickup or buy online pick up in-store (BOPIS).

The Customer tab is organized into columns that display information about each order.

*   **Order #:** The order’s identifying number
*   **Order size:** The number of parcels in the order
*   **Tags:** Indicate orders with special instructions (value-added service options like installation or giftwrapping)
*   **Customer:** The customer’s name
*   **Shipping Type:** **Curbside** for curbside pickup or **pickup** for buy online pickup in-store (BOPIS)
*   **Pickup at:** The date the customer is scheduled to pick up the order

Click the **Carrier** tab at the top right to see all orders ready to be shipped.

The Carrier tab is organized into columns that display information about each order.

*   **Order #:** The order’s identifying number
*   **Carrier:** The logo of the shipping carrier
*   **Status:** The order’s status: Created, Provider at Pickup, Package Accepted, or Driver Dispatched.
*   **Customer:** The customer’s name
*   **Shipping type:** The order delivery method, whether the carrier (for delivery orders), Pickup, or Curbside.
*   **Est Delivery:** The estimated delivery date, either Today, Overdue, or Delivered (represented by an empty date format “--/--/----”).

### Search, filter, and refresh

Find a specific order in the list view by using the search, filter, and refresh features.

To search for an order, type key words into the search bar and hit enter. The list view will display any matching results.

The filter icon is to the right of the search bar. Click it to open the Filter dropdown menu. You can filter by the date the order ships, the order’s status, and special handling instructions. After you’ve set up the filter settings, click Apply Filters to view results.

Click the refresh icon at the right to reload the list view with any changes to orders that may have occurred since the list was last loaded.

## Processing Pickups (with scanner)

To process the order with a scanner, click the **Scan parcel labels** button and the **Scan in Parcels** popup will appear.

After scanning the parcel, a green check appears next to the parcel in the popup. When all parcels have been scanned, click the **Done** button to complete the order or **Cancel** to exit the popup.

## Processing Pickups (without scanner)

To process the order without a scanner, click on the order to process and the **Order Details** sidebar will open at the right.

To update the order, click on the ellipses at the top-right, and a dropdown menu appears.

*   **Customer left** marks the status of the order as delayed
*   **Mark as completed** updates the status of the order to complete
*   **Unpack/return to shelf** cancels the order

Below the actions menu is a summary of the order, including the customer’s details, a list of items in the order, and a list of the parcels.


# Shipping Orders



## Introduction

Shipping is the third step in the fulfillment process. In fabric Orders, shipping can refer to traditional shipment via a carrier or pickup by the customer.

## Shipping

Once all items in the customer’s order have been added to a parcel, the **Ship** button at the bottom of the screen is enabled. Click it to begin shipping the order.

The **Do you want to proceed?** popup appears containing a prompt to review the order’s value-added services (installation, gift wrapping, etc.). To proceed, click **View items** and the popup advances to **Value Added Services**. From there, click on items to see their VAS options. When finished, click **Proceed to ship**.

The popup advances to **Pick shipping method**, where all of the shipping methods are displayed. Choose a method and click **Select Shipping Method** to continue.

### Ship Stage

The ship stage screen has an overview of the order to this point:

*   **Order Details** shows the customer’s Name, Phone number, Email address, and Location.
*   **Parcels** shows the number of parcels and the items included in each.
*   **Shipping Carrier** displays the selected shipping method.

Click the **Generate Labels** button at the bottom of the page to continue.

The Print Labels popup will appear, which gives you options to **Print shipping labels** and **Print packing slips**. Clicking the print icon will open the corresponding file as a PDF.

Click **Cancel** to close the Print Labels popup.

**Print pick list** and **Reprint shipping labels** can be accessed again by clicking on the ellipses at the top-right of the page.

Click the **Done** button at the bottom of the page to complete the fulfillment.


# Web App



## Overview

The fabric Orders Store Fulfillment app is a mobile and web solution for retailers to manage store inventory, ship from store, and in-store/curbside pickups. With the Store Fulfillment app, store associates can view and prioritize incoming orders, batch pick and pack items for on-time fulfillment, and handle customer pickups at the store.

## Prerequisites

The Store Fulfillment app, which is available from the Apple store and the Google Play store.

It can be used with or without a scanner.

## Navigation

Documentation is organized into six pages:

*   [Fulfillments Main Screen](/v3/guides/store-fulfillment/web-app/fulfillments-main-screen)
*   [Picking Orders](/v3/guides/store-fulfillment/web-app/picking-orders)
*   [Packing Orders](/v3/guides/store-fulfillment/web-app/packing-orders)
*   [Shipping Orders](/v3/guides/store-fulfillment/web-app/shipping-orders)
*   [Batch Processing](/v3/guides/store-fulfillment/web-app/batch-processing)
*   [Pickups Main Screen](/v3/guides/store-fulfillment/web-app/pickups-main-screen)


# 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). <br /> **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.<br/><b><span style={{color: 'red'}}>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.</span></b> 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.

<Note> 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. </Note>


# 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 <base64(${client-id}:${client-secret})>' \ --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.

<Note> 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. </Note>


# 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=<sha256(${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 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: <base64(${client-id}:${client-secret})>
  -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 `<Tenant-Id>` with your fabric tenant ID.
    *   `Authorization`: Replace `<Generated-access-token>` 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: <Tenant-Id>' \  
   --header 'Authorization: <Generated-access-token>' \  
   --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.

<Note>We recommend avoiding `itemId` in V3 API implementations. However, `itemId` is still supported and used in V2.</Note>

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 <token>' \
   --header 'x-fabric-tenant-id: <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 \<token>** 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 **\<tenant-id>** 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. <br /> 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. <br /> 2. This endpoint doesn't support adding of parent and its children categories at the same time. <br /> 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. <br /> 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**:<br /> 1. If product type is Variant, they can be added using either SKU or ID.<br />2. When product type is Item, either `parentCategoryId` or `parentCategorySKU` must be specified.<br />3. When product `type` is Bundle, items in a bundle can be added using either SKU or ID. <br />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**: <br />1. Unless all products are deleted, this endpoint fails. <br /> 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**: <br />1. When product type is `Variant`, it can be added either via SKU or ID. <br />2.  When product type is `Item`, either the `parentCategoryId` or `parentCategorySKU` must be specified. <br />3. When product type is `Bundle`, the associated items or variants can be added either via SKU or via ID. <br />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 products to bundle by ID

product.openapi post /products/{id}/bundles/actions/attach
Creating a bundle of two or more complementary products, sold as a single package, is a widely adopted sales and marketing strategy. For example, a laptop is bundled with a carrying case and wireless mouse. This makes it convenient for shoppers to purchase them together. With this endpoint, you can add up to 25 products in a bundle that can be sold together. **Note**: <br />1. At least one product must be added. <br />2. If you don't have product ID, use the corresponding SKU-based endpoint - `POST /products/sku/{sku}/bundles/actions/attach`.



# 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**: <br /> 1. At least one variant must be specified. <br /> 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**: <br /> 1. At least one variant must be specified. <br /> 2. If you don't have product ID, use the corresponding SKU-based endpoint - `GET /products/sku/{sku}/variants`.<br /> 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.



# Get products in a bundle by ID

product.openapi get /products/{id}/bundles
Bundle is a collection of products that are sold together as a single package. For example, a laptop is bundled with a carrying case and a wireless mouse to be sold as a package. This endpoint gets a paginated list of products by ID.  **Note**: <br />1. You can refine the results by specifying `offset` and `limit` values. When they're not specified, by default, you'll get up to 10 products. <br /> 2. If you don't have product ID, use the corresponding SKU-based endpoint - `GET /products/sku/{sku}/bundles`. <br /> 3. The `status` parameter is applicable to the `id` passed in path parameter and not for bundles. That is, bundles returned as part of the response are either the bundles 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**: <br /> 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. <br /> 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 products from a bundle by ID

product.openapi post /products/{id}/bundles/actions/detach
When one or more products in a bundle are discontinued or no longer required, you don't want them to appear in the bundle. With this endpoint, you can remove up to 25 products by ID. **Note** <br /> 1. Products are only detached from the given product, not deleted. They can be added to the same or another product, at a later point. <br />2. At least one product must be specified. <br /> 3. If you don't have product ID, use the corresponding SKU-based endpoint - `POST /products/sku/{sku}/bundles/actions/detach`.



# 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**: <br /> 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. <br />2. At least one variant must be specified. <br /> 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**: <br />1. When product type is `Variant`, it can be added either using SKU or ID. <br />2. When product type is `Item`, either `parentCategoryId` or `parentCategorySKU` must be specified. <br />3. When product type is Bundle, associated items or variants can also be added either using SKU or via ID. <br />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**: <br /> 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. <br /> 2. If you don't have product ID, use the corresponding SKU-based endpoint - `PUT /products/sku/{sku}/attributes`.



# Add products to bundle by SKU

product.openapi post /products/sku/{sku}/bundles/actions/attach
Creating a bundle of two or more complementary products, sold as a single package, is a widely adopted sales and marketing strategy. For example, a laptop is bundled with a carrying case and wireless mouse. This makes it convenient for shoppers to purchase them together. With this endpoint, you can add up to 25 products in a bundle that can be sold together. **Note**: <br />1. At least one product must be added. <br />2. If you don't have product `sku`, use the corresponding ID-based endpoint - `POST /products/{id}/bundles/actions/attach`.



# 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**: <br /> 1. At least one variant must be specified. <br /> 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 product variants by SKU

product.openapi get /products/sku/{sku}/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**: <br /> 1. At least one variant must be specified. <br /> 2. If you don't have product ID, use the corresponding  ID-based endpoint - `/products/{id}/variants`. <br /> 3. The `status` parameter is applicable to the `id` passed in path parameter and not for variants. That is, the variants returned as part of the response are the variants attached to either the Live or Draft version of the product based on the `status` parameter.



# 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**: <br />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. <br /> 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**: <br /> 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. <br />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**: <br /> 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. <br />2. At least one variant must be specified. <br /> 3. If you don't have product SKU, use the corresponding ID-based endpoint - `POST /products/{id}/variants/actions/detach`.



# Remove products from a bundle by SKU

product.openapi post /products/sku/{sku}/bundles/actions/detach
When one or more products in a bundle are discontinued or no longer required, you don't want them to appear in the bundle. With this endpoint, you can remove up to 25 products by SKU. **Note** <br /> 1. Products are only detached from the given product, not deleted. They can be added to the same or another product, at a later point. <br />2. At least one product must be specified. <br /> 3. If you don't have product ID, use the corresponding SKU-based endpoint - `POST /products/{id}/bundles/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**: <br /> 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. <br /> 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.


# Role-Based Access Control (RBAC)



## Overview

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. Each user can be assigned multiple roles,  such as products editor and orders and inventory editor. By assigning roles, you can prevent unintended changes or data entry errors through the Copilot accounts.

fabric offers the following roles to enhance security and data integrity:

*   **Admin:** Invites other users and assigns them roles, as well as reassigns roles to existing users. The admin can also revoke user access from the account.
*   **Developer Admin**: View and manage integration configurations.
*   **Developer Viewer**: View integration configurations.
*   **Restricted Admin:** Assigns and modifies the roles of other users. Restricted admin can also view the content in fabric applications, but can't modify them.
*   **Editor:** Creates and manages content in all fabric applications available to their Copilot account.
*   **Experiences Editor:** Creates and manages content within the Experiences application. However, this user group can't publish content to the Storefront.
*   **Offers Editor:** Creates and manages content within the Offers application.
*   **Orders & Inventory Editor:** Creates and manages content within the Orders and Inventory applications.
*   **Products Editor:** Creates and manages content within the Products application.
*   **Experiences Publisher:** Manages Experiences content and publishes it to the storefront.
*   **Viewer:** Views content across all fabric applications, but can't create or manage any content.

For more information about role-based access control within fabric’s individual products, see the following sections:

*   [Products 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)


# Customers Roles



User roles have predefined permissions in fabric. This page covers the roles as they relate to the Customers application and their unique capabilities within each Customers menu:

*   **Admin:** Creates and manages customer information, addresses, organizations, groups and organization users.
*   **Editor:** Creates and manages customer information, addresses, organizations, groups and organization users.
*   **Viewer:** Browses customer information in Customers. Viewers can't make changes to customer information.

## Related Topics

*   [Role-Based Access Control Overview](/v3/guides/settings/rbac/role-based-access-control)
*   [Products 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)


# Offers Roles



User roles have predefined permissions in fabric. This page covers the roles as they relate to the Offers application and their unique capabilities within each Offers menu:

*   **Admin:** Creates and manages price lists, promotions, and coupons.
*   **Editor:** Creates and manages price lists, promotions, and coupons.
*   **Viewer:** Views content in Offers. Viewers can't make changes to content or manage other users.

## Pricing

**Admins** and **Editors** can add bulk prices or add/edit individual prices. **Viewers** can browse and search pricing.

## Promotions

**Admins** and **Editors** can add new or update existing promotions. **Viewers** can view promotions.

## Coupons

**Admins** and **Editors** can add new or update existing coupons. **Viewers** can view coupons.

## Settings

**Admins** and **Editors** can set price lists, manage exclusion lists, and manage customer segments. **Viewers** can view settings.

## Related Topics

For more information about role-based access control within fabric’s individual products, see the following sections:

*   [Role-Based Access Control Overview](/v3/guides/settings/rbac/role-based-access-control)
*   [Products Roles](/v3/guides/settings/rbac/role-based-access-control-products-roles)
*   [Experiences Roles](/v3/guides/settings/rbac/role-based-access-control-experiences-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)


# Orders and Inventory Roles



User roles have predefined permissions in fabric. This page covers the roles as they relate to the Orders and Inventory applications and their unique capabilities within each application’s menu:

*   **Admin:** Creates and manages content in Orders and Inventory.
*   **Editor:** Creates and manages content in Orders and Inventory.
*   **Viewer:** Views content in Orders and Inventory. Viewers can't make changes to content or manage other users.

## Orders

Admins and editors\*\* can create new orders, refund orders, cancel orders, and update orders. Viewers can only view order details.

## Networks

Admins and editors can create new networks and edit existing ones. Viewers can view network details.

## Locations

Admins and editors can create new locations and edit existing ones. Viewers can view location details.

## Settings

### Attributes

Admins and editors can create new SKU attributes. Viewers can only view SKU attributes.

### Shipment Methods

Admins and editors can create new shipping and carrier information. Viewers can view shipment method details.

## Inventory

Admins and editors can import inventory. Viewers can view shipment method details.

## Related Topics

For more information about role-based access control within fabric’s individual products, see the following sections:

*   [Role-Based Access Control Overview](/v3/guides/settings/rbac/role-based-access-control)
*   [Products 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)
*   [Customers Roles](/v3/guides/settings/rbac/role-based-access-control-customers-roles)


# Product Catalog Roles



User roles have predefined permissions in fabric. This page covers the roles as they relate to the products application and their unique capabilities within each products menu:

*   **Admin:** Manages product settings including attribute mapping and attribute groups. With this role, you can publish or unpublish an item or bundle, and delete items, bundles, and categories.
*   **Editor:** Creates and updates content and sends changes for review.
*   **Viewer:** Views content but can't create, update, or delete content. Viewers can't manage product settings.

## List and Details

The List menu is where products are imported, reviewed, and revised.

*   **Admin:** Views and manages item lists and item details, including creating, publishing, and deleting items individually or in bulk. An admin can also upload items in bulk via CSV import, download older imported files, and export all items.
*   **Editor:** Views, creates, and manages item lists and item details, but can't publish or delete items. Editors can also upload items in bulk via CSV import, download older imported files, and export all items from a catalog.
*   **Viewer:** Views item lists and item details but can't edit, publish, or delete items. Viewers can download pervious imports and export existing data from Products. Viewers can't create or update items or bulk imports via CSV.

## Categories and Collections

The products are grouped together for better discovery and catalog management in the Categories and Collections menus.

*   **Admin:** Creates and manages both categories and collections. Admins can add attributes and define attribute values for each node. They also have the capability to delete an entire collection, delete a single node of a category, and publish a collection.
*   **Editor:** Creates and manages both types of hierarchies. Editors can also modify an existing collection, category, or any of its nodes and category attribute values. Editors can't publish or delete a category.
*   **Viewer:** Views both types of categories and the details of each node. Viewers can't create a new category and can't make any changes to any existing categories.

## Product and Category Attributes

The Attributes menu is where product characteristics are defined.

*   **Admin:** Creates and manages product attributes and has permission to import attributes, perform bulk uploads, and delete any existing attributes as permitted by the system. Admins can also export existing attributes and review import history of attributes.
*   **Editor:** Creates and manages product attributes and has permission to import attributes, perform bulk uploads. They can't delete any attributes.
*   **Viewer:** Views existing attributes and their details. They can also export existing attributes and review old import attributes.

## Settings

The Settings menu allows attributes to be grouped together to manage large volumes of product information.

*   **Admin:** Creates and manages Attribute Mappings. Admins can also create new attribute groups and modify existing attribute groups.
*   **Editor:** Creates new attribute groups and modifies existing groups. Editors can't make any changes to Attribute Mappings.
*   **Viewer:** Views existing attribute groups and attribute mapping. Viewers aren't permitted to make any changes.

## Related Topics

For more information about role-based access control within fabric’s individual products, see the following sections:

*   [Role-Based Access Control Overview](/v3/guides/settings/rbac/role-based-access-control)
*   [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)


# Adding a Webhook



## Overview

Webhooks are real-time notifications that enable communication between different software systems and trigger automated processes. For example, for your online store, you can set up a webhook to alert you whenever a new product is added.

Using fabric Copilot's webhook functionality, you can create event subscriptions to monitor operations between fabric apps and external systems, such as a Customer Relationship Management (CRM) or Content Management Systems (CMS).

You can create webhooks for the following applications in fabric:

*   [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)

*   [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)

*   [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)

*   [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)

## Prerequisites

Before creating a webhook, ensure that:

*   You have **Developer Admin** privileges to create a new webhook. For more information on privileges, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control) topic.
*   You have set up the destination server or subscriber endpoint for successful implementation.

## Procedure

1.  In the left menu, click **Settings > Developer Tools**.
2.  Click **Webhooks**.\
    The Webhooks page is displayed.
3.  Click **Add Webhook**.\
    The **Add webhook** page is displayed.
4.  Enter a name for the webhook.
5.  In the **Webhook endpoint** field, enter the subscriber URL for the webhook’s endpoint to listen to the event.
6.  (Optional) In the **Webhook description** field, enter a description for the webhook.\
    Use this field for internal notes about the webhook's purpose.
7.  In the **API key header** field, leave the request header set to *x-api-key*.
8.  In the **API key credentials** field, enter your API key value.
    *   This value comes from the system you are sending the webhook data to.
9.  To create a webhook for a fabric application, in the **Events** section, do one or more of the following as required:
    *   To create a webhook for the Product Catalog application, click the **Product Catalog** tab and do one of the following:
        *   To subscribe to all events in Product Catalog, check the **Select all events in Product Catalog** checkbox.
        *   To subscribe to all events in a specific Product Catalog service, check the checkbox next to the service name.
        *   To subscribe to specific events within a Product Catalog service, expand each service menu and check the checkbox next to individual events, as required.\
            For a complete list of events available to Product Catalog, see the [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events) topic.
    *   To create a webhook for the Offers application, click the **Offers** tab and do one of the following:
        *   To subscribe to all events in Offers, check the **Select all events in Offers** checkbox.
        *   To subscribe to all events in a specific Offers service, check the checkbox next to the service name.
        *   To subscribe to specific events within an Offers service, expand each service menu and check the checkbox next to individual events, as required.\
            For a complete list of events available to Offers, see the [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events) topic.
    *   To create a webhook for the Orders application, click the **Orders** tab and do one of the following:
        *   To subscribe to all events in Orders, check the **Select all events in Orders** checkbox.
        *   To subscribe to all events in a specific Orders service, check the checkbox next to the service name.
        *   To subscribe to specific events within an Orders service, expand each service menu and check the checkbox next to individual events, as required.\
            For a complete list of events available to Orders, see the [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events) topic.
    *   To create a webhook for the Inventory application, click the **Inventory** tab and do one of the following:
        *   To subscribe to all events in Inventory, check the **Select all events in Inventory** checkbox.
        *   To subscribe to all events in a specific Inventory service, check the checkbox next to the service name.
        *   To subscribe to specific events within an Inventory service, expand each service menu and check the checkbox next to individual events, as required.\
            For a complete list of events available to Inventory, see the [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events) topic.
    *   To create a webhook for the Cart & Checkout application, click the **Cart & Checkout** tab and do one of the following:
        *   To subscribe to all events in Cart & Checkout, check the **Select all events in Cart & Checkout** checkbox.
        *   To subscribe to all events in a specific Cart & Checkout service, check the checkbox next to the service name.
        *   To subscribe to specific events within a Cart & Checkout service, expand each service menu and check the checkbox next to individual events, as required.
10. At the top of the page, click **Save**.

The webhook is saved and the **Test webhook** button is displayed.

We recommend testing the webhook to ensure it's successful. To learn more, see [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook).

## Related Topics

*   [Webhooks Overview](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)

*   [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook)

*   [Managing Events and Logs](https://developer.fabric.inc/v3/guides/settings/webhooks/managing-events-and-logs)

*   [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)

*   [Deleting a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/deleting-a-webhook)

*   [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)

*   [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)

*   [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)

*   [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)


# Deleting a Webhook



## Prerequisites

Before deleting a webhook, ensure that you have **Developer Admin** privileges. See [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control) for more information.

## Procedure

1.  In the left menu, click **Settings > Developer Tools**.
2.  Click **Webhooks**.\
    The Webhooks page is displayed.
3.  Hover over the name of the webhook that you want to delete.
4.  On the far right of the row, click the **Delete** icon.\
    A message to confirm the action is prompted. Note that after deleting a webhook, you can no longer receive events to that endpoint.
5.  Click **Yes, delete**.\
    You can no longer receive events to this point.

Alternatively, you can also click the name of the webhook that you want to delete, and then click the Delete Webhook icon at the top right to delete the webhook.

## Related Topics

*   [Webhooks Overview](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)

*   [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook)

*   [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook)

*   [Managing Events and Logs](https://developer.fabric.inc/v3/guides/settings/webhooks/managing-events-and-logs)

*   [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)

*   [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)

*   [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)

*   [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)

*   [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)


# Editing a Webhook



## Prerequisites

Before editing a webhook, ensure that you have **Developer Admin** privileges. See [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control) for more information.

## Procedure

1.  In the left menu, click **Settings > Developer Tools**.
2.  Click **Webhooks**.\
    The Webhooks page is displayed.
3.  To edit the setting of a webhook, click the name of the webhook.\
    A page with the details of the webhook is displayed.
4.  Update the details as required.\
    For more information about the different options, see the [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook) section.
5.  Click **Save**.

## Related Topics

*   [Webhooks Overview](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)

*   [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook)

*   [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook)

*   [Managing Events and Logs](https://developer.fabric.inc/v3/guides/settings/webhooks/managing-events-and-logs)

*   [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)

*   [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)

*   [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)

*   [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)

*   [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)


# List of Inventory Events



The following tables list all the available events for fabric Inventory.

<Note> If a failure to deliver an event occurs, fabric automatically retries up to 3 times to deliver the failed event. </Note>

## Export

| Event Type                             | Description                                                                                                                                                 |
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| EXPORT\_AGGREGATED\_NETWORK\_COMPLETED | Event triggered once the export process is completed, and the aggregated network exported file is ready to be downloaded.                                   |
| EXPORT\_AGGREGATED\_NETWORK\_ERROR     | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_AGGREGATED\_NETWORK\_INITIATED | Event triggered once the export request is received by the fabric export service to export aggregated network based on various filters.                     |
| EXPORT\_INVENTORY\_COMPLETED           | Event triggered once the export process is completed, and the inventory exported file is ready to be downloaded.                                            |
| EXPORT\_INVENTORY\_ERROR               | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_INVENTORY\_INITIATED           | Event triggered once the export request is received by the fabric export service to export inventory based on various filters.                              |
| EXPORT\_LOCATION\_COMPLETED            | Event triggered once the export process is completed, and the location exported file is ready to be downloaded.                                             |
| EXPORT\_LOCATION\_ERROR                | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_LOCATION\_INITIATED            | Event triggered once the export request is received by the fabric export service to export location based on various filters.                               |
| EXPORT\_NETWORK\_COMPLETED             | Event triggered once the export process is completed, and the network exported file is ready to be downloaded.                                              |
| EXPORT\_NETWORK\_ERROR                 | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_NETWORK\_INITIATED             | Event triggered once the export request is received by the fabric export service to export inventory based on various filters.                              |

## Inventory

| Event Type                      | Description                                                  |
| :------------------------------ | :----------------------------------------------------------- |
| INVENTORY\_BULK                 | Event triggered when an inventory file is imported.          |
| INVENTORY\_CREATE               | Event triggered when an inventory is created.                |
| INVENTORY\_NETWORK\_AGGREGATION | Event triggered when a network aggregation job is completed. |
| INVENTORY\_NETWORK\_UPDATED     | Event triggered when the inventory network is updated.       |
| INVENTORY\_UPDATE               | Event triggered when a inventory is updated.                 |

## Transfer

| Event Type                      | Description                                                                                                          |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| TRANSER\_CREATED                | Event triggered when a transfer is created.                                                                          |
| TRANSFER\_DELIVERED             | Event triggered when a transfer is delivered.                                                                        |
| TRANSFER\_DRAFT                 | Event triggered when a transfer is in draft state.                                                                   |
| TRANSFER\_ERROR                 | Event triggered when a transfer has an error.                                                                        |
| TRANSFER\_HOLD\_CSR             | Event triggered when a transfer is in hold CSR state, such as an invalid SKU.                                        |
| TRANSER\_HOLD\_REVALIDATION     | Event triggered when there is a server error from Product Catalog.                                                   |
| TRANSFER\_PACKED                | Event triggered when a transfer is packed; for example, when items are loaded in cartons.                            |
| TRANSFER\_PARTIALLY\_PACKED     | Event triggered when a transfer is partially packed.                                                                 |
| TRANSFER\_PARTIALLY\_PICKED\_UP | Event triggered when a transfer is partially picked up.                                                              |
| TRANSFER\_PARITALLY\_REJECTED   | Event triggered when a transfer is partially rejected.                                                               |
| TRANSFER\_PARTIALLY\_STOCKCED   | Event triggered when a transfer is partially stocked; for example, when it's ready to sell at the destination store. |
| TRANSFER\_PICKCED\_UP           | Event triggered when a transfer is picked up.                                                                        |
| TRANSFER\_RECEIVED              | Event triggered when a transfer is received.                                                                         |
| TRANSFER\_REJECTED              | Event triggered when a transfer is rejected.                                                                         |
| TRANSFER\_SHIPPED               | Event triggered when a transfer is shipped.                                                                          |
| TRANSFER\_STOCKED               | Event triggered when a transfer is stocked and ready to sell at the destination store.                               |
| TRANSFER\_SUBMITTED             | Event triggered when a transfer is submitted from `DRAFT` or `CREATED`.                                              |

## Shipment

| Event Type                    | Description                                                                    |
| ----------------------------- | ------------------------------------------------------------------------------ |
| TRANSFER\_SHIPMENT\_CANCELLED | Event triggered when a transfer shipment is cancelled.                         |
| TRANSFER\_SHIPMENT\_CREATED   | Event triggered when a transfer shipment is created.                           |
| TRANSFER\_SHIPMENT\_DELIVERED | Event triggered when a transfer shipment is delivered.                         |
| TRANSFER\_SHIPMENT\_DRAFT     | Event triggered when a transfer shipment is in draft state.                    |
| TRANSFER\_SHIPMENT\_ERROR     | Event triggered when a transfer shipment has errors.                           |
| TRANSFER\_SHIPMENT\_PACKED    | Event triggered when a transfer shipment is packed.                            |
| TRANSFER\_SHIPMENT\_RECEIVED  | Event triggered when a transfer shipment is received at the destination store. |
| TRANSFER\_SHIPMENT\_STOCKED   | Event triggered when a transfer shipment is stocked.                           |

## Related Topics

*   [Webhooks Overview](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)

*   [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook)

*   [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook)

*   [Managing Events and Logs](https://developer.fabric.inc/v3/guides/settings/webhooks/managing-events-and-logs)

*   [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)

*   [Deleting a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/deleting-a-webhook)

*   [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)

*   [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)

*   [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)


# List of Offers Events



The following tables list all the available events for fabric Offers.

<Note> If a failure to deliver an event occurs, fabric automatically retries up to 3 times to deliver the failed event. </Note>

## Jobs

| Event Type                  | Description                                       |
| --------------------------- | ------------------------------------------------- |
| offers:bulkUpload:completed | Event triggered when bulk upload job is complete. |

## Coupons

| Event Type                       | Description                                             |
| -------------------------------- | ------------------------------------------------------- |
| offers:coupon:activated          | Event triggered when a scheduled coupon is activated.   |
| offers:coupon:created            | Event triggered when a coupon is created.               |
| offers:coupon:deactivated        | Event triggered when a scheduled coupon is deactivated. |
| offers:coupon:deleted            | Event triggered when a coupon is deleted.               |
| offers:coupon:disabled           | Event triggered when a coupon is disabled.              |
| offers:coupon:enabled            | Event triggered when a coupon is enabled.               |
| offers:coupon:updated            | Event triggered when a coupon is updated.               |
| offers:couponCode:created        | Event triggered when a coupon code is created.          |
| offers:couponCode:updated        | Event triggered when a coupon code is updated.          |
| offers:redemption:coupon:created | Event triggered when a coupon redeem is created.        |
| offers:redemption:coupon:deleted | Event triggered when a coupon redeem is deleted.        |
| offers:redemption:coupon:updated | Event triggered when a coupon redeem is updated.        |

## Global Exclusions

| Event Type                     | Description                                              |
| ------------------------------ | -------------------------------------------------------- |
| offers:globalExclusion:created | Event triggered when a global exclusion list is created. |
| offers:globalExclusion:deleted | Event triggered when a global exclusion list is deleted. |
| offers:globalExclusion:updated | Event triggered when a global exclusion list is updated. |

## Prices

| Event Type               | Description                                  |
| ------------------------ | -------------------------------------------- |
| offers:price:activated   | Event triggered when a price becomes active. |
| offers:price:created     | Event triggered when a price is created.     |
| offers:price:deactivated | Event triggered when a price is deactivated. |
| offers:price:deleted     | Event triggered when a price is deleted.     |

## Price Lists

| Event Type               | Description                                   |
| ------------------------ | --------------------------------------------- |
| offers:priceList:created | Event triggered when a price list is created. |
| offers:priceList:deleted | Event triggered when a price list is deleted. |
| offers:priceList:updated | Event triggered when a price list is updated. |

## Promotions

| Event Type                      | Description                                                |
| ------------------------------- | ---------------------------------------------------------- |
| offers:promo:activated          | Event triggered when a scheduled promotion is activated.   |
| offers:promo:created            | Event triggered when a promotion is created.               |
| offers:promo:deactivated        | Event triggered when a scheduled promotion is deactivated. |
| offers:promo:deleted            | Event triggered when a promotion is deleted.               |
| offers:promo:updated            | Event triggered when a promotion is updated.               |
| offers:redemption:promo:created | Event triggered when a promotion redeem is created.        |
| offers:redemption:promo:deleted | Event triggered when a promotion redeem is deleted.        |
| offers:redemption:promo:updated | Event triggered when a promotion redeem is updated.        |

## Related Topics

*   [Webhooks Overview](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)

*   [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook)

*   [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook)

*   [Managing Events and Logs](https://developer.fabric.inc/v3/guides/settings/webhooks/managing-events-and-logs)

*   [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)

*   [Deleting a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/deleting-a-webhook)

*   [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)

*   [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)

*   [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)


# List of Orders Events



The following tables list all the available events for fabric Orders.

<Note> If a failure to deliver an event occurs, fabric automatically retries up to 3 times to deliver the failed event. </Note>

## Allocation

| Event Type                   | Description                                                                                             |
| ---------------------------- | ------------------------------------------------------------------------------------------------------- |
| ALLOCATION\_CREATE\_BOPIS    | Event triggered when an allocation document is created for a Buy online pickup in store (BOPIS) item.   |
| ALLOCATION\_CREATE\_GIFTCARD | Event triggered when an allocation document is created for a gift card.                                 |
| ALLOCATION\_CREATE\_SDD      | Event triggered when an allocation document is created for a same-day delivery item.                    |
| ALLOCATION\_CREATE\_SHIP     | Event triggered when an allocation document is created for a web ship item.                             |
| ALLOCATION\_DC               | Event triggered when an allocation document is created for a DC item.                                   |
| ALLOCATION\_RETURN\_LPN      | Event triggered when an allocation document is created for a returned item with return type `RECEIVED`. |

## Notification

| Event Type                                              | Description                                                                                                                                                            |
| ------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| APPEASEMENT\_NOTIFICATION\_EMAIL                        | Event triggered when an appeasement is applied to the order.                                                                                                           |
| BACKORDER\_30\_DAYS\_CONSENT\_TO\_DELAY\_EMAIL          | Event triggered when an order is created on the first day of the month, but backorder items aren't in `ALLOCATED` state on the 30th day to get the customer's consent. |
| BACKORDER\_53\_DAYS\_CONSENT\_TO\_DELAY\_EMAIL          | Event triggered when an order is created on the first day of the month, but backorder items aren't in `ALLOCATED` state on the 53rd day to get the customer's consent. |
| BACKORDER\_AUTH\_DECLINE\_EMAIL                         | Event triggered when an order's backorder authorization was declined by the customer.                                                                                  |
| BACKORDER\_CANCEL\_EMAIL                                | Event triggered when an order is cancelled because its items are backordered.                                                                                          |
| BACKORDER\_NOTIFICATION\_EMAIL                          | Event triggered when an order is backordered.                                                                                                                          |
| BOPIS\_ORDER\_COMPLETED                                 | Event triggered when an order is created and picked up by the customer.                                                                                                |
| BOPIS\_ORDER\_CONFIRMATION\_EMAIL                       | Event triggered when a pickup order is created that contains multiple items.                                                                                           |
| BOPIS\_ORDER\_READY\_FOR\_PICKUP                        | Event triggered when a pickup order is fulfilled.                                                                                                                      |
| BOPIS\_REMINDER\_EMAIL                                  | Event triggered when a pickup order is created and fulfilled, but the customer has not picked it up.                                                                   |
| EXCHANGE\_NOTIFICATION\_EMAIL                           | Event triggered when an exchange for an order is updated.                                                                                                              |
| MULTI\_ITEM\_ORDER\_CONFIRMATION\_EMAIL                 | Event triggered when a web ship order is created that contains multiple items.                                                                                         |
| ORDER\_CANCELLATION\_EMAIL\_LOCATE\_ORDER\_ITEM\_CANCEL | Event triggered when an order is cancelled because an item in the order couldn't be located.                                                                           |
| ORDER\_CANCELLATION\_EMAIL\_WEBCSC\_ORDER\_CANCEL       | Event triggered when an order is fully canceled.                                                                                                                       |
| ORDER\_CANCELLATION\_EMAIL\_WEBCSC\_ORDER\_ITEM\_CANCEL | Event triggered when an order is partially canceled.                                                                                                                   |
| REFUND\_NOTIFICATION\_EMAIL                             | Event triggered when an order is refunded.                                                                                                                             |
| RETURN\_NOTIFICATION\_EMAIL                             | Event triggered when an order is fully returned with return type `RECEIVED` and the refund is successful.                                                              |
| SHIPPING\_CONFIRMATION\_EMAIL                           | Event triggered when a web ship order is created and its shipment is also created.                                                                                     |
| SINGLE\_ITEM\_ORDER\_CONFIRMATION\_EMAIL                | Event triggered when a web ship order is created that contains a single item.                                                                                          |

## Cross Border

| Event Type                | Description                                                                                      |
| ------------------------- | ------------------------------------------------------------------------------------------------ |
| CROSS\_BORDER\_VALIDATION | Event triggered when the cross border service completes validation for the order.                |
| ORDER\_HOLD\_CROSSBORDER  | Event triggered when an order is placed on hold while cross border service processes validation. |

## Exchange

| Event Type             | Description                                                                                                                      |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| EXCHANGE\_PENDING      | Event triggered when an item is exchanged with return type `PENDING` and exchange flag `TRUE`.                                   |
| EXCHANGE\_TO\_SHIPMENT | Event triggered when an item is exchanged with return type `RECEIVED`, exchange flag `TRUE`, and initiate re-shipment is `TRUE`. |

## Export

| Event Type                             | Description                                                                                                                                                 |
| -------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------- |
| EXPORT\_AGGREGATED\_NETWORK\_COMPLETED | Event triggered once the export process is completed, and the aggregated network exported file is ready to be downloaded.                                   |
| EXPORT\_AGGREGATED\_NETWORK\_ERROR     | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_AGGREGATED\_NETWORK\_INITIATED | Event triggered once the export request is received by the fabric export service to export aggregated network based on various filters.                     |
| EXPORT\_ALLOCATION\_COMPLETED          | Event triggered once the export process is completed, and the allocation exported file is ready to be downloaded.                                           |
| EXPORT\_ALLOCATION\_ERROR              | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_ALLOCATION\_INITIATED          | Event triggered once the export request is received by the fabric export service to export allocation based on various filters.                             |
| EXPORT\_INVENTORY\_COMPLETED           | Event triggered once the export process is completed, and the inventory exported file is ready to be downloaded.                                            |
| EXPORT\_INVENTORY\_ERROR               | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_INVENTORY\_INITIATED           | Event triggered once the export request is received by the fabric export service to export inventory based on various filters.                              |
| EXPORT\_INVOICE\_COMPLETED             | Event triggered once the export process is completed, and the invoice exported file is ready to be downloaded.                                              |
| EXPORT\_INVOICE\_ERROR                 | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_INVOICE\_INITIATED             | Event triggered once the export request is received by the fabric export service to export invoice based on various filters.                                |
| EXPORT\_LOCATION\_COMPLETED            | Event triggered once the export process is completed, and the location exported file is ready to be downloaded.                                             |
| EXPORT\_LOCATION\_ERROR                | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_LOCATION\_INITIATED            | Event triggered once the export request is received by the fabric export service to export location based on various filters.                               |
| EXPORT\_NETWORK\_COMPLETED             | Event triggered once the export process is completed, and the network exported file is ready to be downloaded.                                              |
| EXPORT\_NETWORK\_ERROR                 | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_NETWORK\_INITIATED             | Event triggered once the export request is received by the fabric export service to export inventory based on various filters.                              |
| EXPORT\_ORDER\_COMPLETED               | Event triggered once the export process is completed, and the orders exported file is ready to be downloaded.                                               |
| EXPORT\_ORDER\_ERROR                   | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_ORDER\_INITIATED               | Event triggered once the export request is received by the fabric export service to export orders based on various filters.                                 |
| EXPORT\_SHIPMENT\_COMPLETED            | Event triggered once the export process is completed, and the shipment exported file is ready to be downloaded.                                             |
| EXPORT\_SHIPMENT\_ERROR                | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_SHIPMENT\_INITIATED            | Event triggered once the export request is received by the fabric export service to export orders based on various filters.                                 |
| EXPORT\_SHIPPING\_METHODS\_COMPLETED   | Event triggered once the export process is completed, and the shipping methods exported file is ready to be downloaded.                                     |
| EXPORT\_SHIPPING\_METHODS\_ERROR       | Event triggered in case of export failures. This might happen due to an internal error, and must be reported to the fabric support team to solve the issue. |
| EXPORT\_SHIPPING\_METHODS\_INITIATED   | Event triggered once the export request is received by the fabric export service to export shipping methods based on various filters.                       |

## Fraud

| Event Type             | Description                                                                                |
| ---------------------- | ------------------------------------------------------------------------------------------ |
| FRAUD\_CANCEL          | Event triggered when an order has been canceled due to failed fraud checks.                |
| FRAUD\_RELEASE         | Event triggered when an order has been passed fraud checks and is released for processing. |
| FRAUD\_STATUS\_PENDING | Event triggered when fraud status is pending.                                              |

## Shipment

| Event Type                    | Description                                                                                        |
| ----------------------------- | -------------------------------------------------------------------------------------------------- |
| GIFTCARD\_ACTIVATE            | Event triggered when a shipment document is created for a gift card and is activated.              |
| PICKUP\_COMPLETED             | Event triggered when a buy online pickup in store (BOPIS) item is picked up by the customer.       |
| PICKUP\_CREATED               | Event triggered when a shipment document is created for a buy online pickup in store (BOPIS) item. |
| SHIPMENT\_CANCELLED           | Event triggered when a shipment document is canceled for an item.                                  |
| SHIPMENT\_CREATED             | Event triggered when a shipment document is created for an item.                                   |
| SHIPMENT\_UPDATE              | Event triggered when a shipment document is updated for an item.                                   |
| TRANSFER\_SHIPMENT\_CANCELLED | Event triggered when a transfer shipment is cancelled.                                             |
| TRANSFER\_SHIPMENT\_CREATED   | Event triggered when a transfer shipment is created.                                               |
| TRANSFER\_SHIPMENT\_DELIVERED | Event triggered when a transfer shipment is delivered.                                             |
| TRANSFER\_SHIPMENT\_DRAFT     | Event triggered when a transfer shipment is in draft state.                                        |
| TRANSFER\_SHIPMENT\_ERROR     | Event triggered when a transfer shipment has errors.                                               |
| TRANSFER\_SHIPMENT\_PACKED    | Event triggered when a transfer shipment is packed.                                                |
| TRANSFER\_SHIPMENT\_RECEIVED  | Event triggered when a transfer shipment is received at the destination store.                     |
| TRANSFER\_SHIPMENT\_STOCKED   | Event triggered when a transfer shipment is stocked.                                               |

## Alerts

| Event Type                         | Description                                                |
| ---------------------------------- | ---------------------------------------------------------- |
| HIGH\_ALERT\_NOTIFICATION\_EMAIL   | Event triggered when a high severity alert is triggered.   |
| LOW\_ALERT\_NOTIFICATION\_EMAIL    | Event triggered when a low severity alert is triggered.    |
| MEDIUM\_ALERT\_NOTIFICATION\_EMAIL | Event triggered when a medium severity alert is triggered. |

## Inventory

| Event Type                      | Description                                                  |
| :------------------------------ | :----------------------------------------------------------- |
| INVENTORY\_BULK                 | Event triggered when an inventory file is imported.          |
| INVENTORY\_CREATE               | Event triggered when an inventory is created.                |
| INVENTORY\_NETWORK\_AGGREGATION | Event triggered when a network aggregation job is completed. |
| INVENTORY\_NETWORK\_UPDATED     | Event triggered when the inventory network is updated.       |
| INVENTORY\_UPDATE               | Event triggered when a inventory is updated.                 |

## Invoice

| Event Type       | Description                                                    |
| ---------------- | -------------------------------------------------------------- |
| INVOICE\_POSTING | Event triggered when an Invoice is created for a shipped item. |

## Order

| Event Type                            | Description                                                          |
| ------------------------------------- | -------------------------------------------------------------------- |
| ORDER\_ALLOCATED                      | Event triggered when an order is allocated.                          |
| ORDER\_CANCELLATION\_COUPON\_REVERSAL | Event triggered when an order is cancelled and a coupon is reversed. |
| ORDER\_CANCELLED                      | Event triggered when an order is cancelled.                          |
| ORDER\_CONFIRMED                      | Event triggered when order enrichment is successful.                 |
| ORDER\_CREATE                         | Event triggered when an order is created.                            |
| ORDER\_DELIVERED                      | Event triggered when an order is delivered.                          |
| ORDER\_ERROR                          | Event triggered when an order update has an error.                   |
| ORDER\_HOLD                           | Event triggered when an order is on hold.                            |
| ORDER\_HOLD\_CSR                      | Event triggered when an order has invalid data.                      |
| ORDER\_HOLD\_FRAUD                    | Event triggered when an order's fraud verification fails.            |
| ORDER\_HOLD\_REVALIDATION             | Event triggered when an order is on hold and revalidated.            |
| ORDER\_PARTIALLY\_CANCELLED           | Event triggered when an order is partially cancelled.                |
| ORDER\_PARTIALLY\_DELIVERED           | Event triggered when an order is partially delivered.                |
| ORDER\_PARTIALLY\_SHIPPED             | Event triggered when an order is partially shipped.                  |
| ORDER\_SHIPPED                        | Event triggered when an order is shipped.                            |

## Package

| Event Type                   | Description                                            |
| ---------------------------- | ------------------------------------------------------ |
| ORDER\_CANCELLED\_IN\_PTS    | Event triggered when an order is cancelled in Orders.  |
| ORDER\_CREATE\_IN\_PTS       | Event triggered when an order is created in Orders.    |
| SHIPMENT\_CANCELLED\_IN\_PTS | Event triggered when a shipment is canceled in Orders. |
| SHIPMENT\_CREATE\_IN\_PTS    | Event triggered when a shipment is created in Orders.  |

## Returns

| Event Type                 | Description                                                                      |
| -------------------------- | -------------------------------------------------------------------------------- |
| ORDER\_PARTIALLY\_RETURNED | Event triggered when an order is partially returned with return type `RECEIVED`. |
| ORDER\_RETURNED            | Event triggered when an order is fully returned with return type `RECEIVED`.     |
| RETURN\_PENDING            | Event triggered when an order is returned with return type `PENDING`.            |
| RETURN\_PROCESSING         | Event triggered when an order is returned with return type `PROCESSING`.         |
| RETURN\_REJECTED           | Event triggered when an order is returned with return type `REJECTED`.           |

## Transfer

| Event Type                      | Description                                                                                                          |
| ------------------------------- | -------------------------------------------------------------------------------------------------------------------- |
| TRANSER\_CREATED                | Event triggered when a transfer is created.                                                                          |
| TRANSER\_HOLD\_REVALIDATION     | Event triggered when there is a server error from Product Catalog.                                                   |
| TRANSFER\_DELIVERED             | Event triggered when a transfer is delivered.                                                                        |
| TRANSFER\_DRAFT                 | Event triggered when a transfer is in draft state.                                                                   |
| TRANSFER\_ERROR                 | Event triggered when a transfer has an error.                                                                        |
| TRANSFER\_HOLD\_CSR             | Event triggered when a transfer is in hold CSR state, such as an invalid SKU.                                        |
| TRANSFER\_PACKED                | Event triggered when a transfer is packed; for example, when items are loaded in cartons.                            |
| TRANSFER\_PARITALLY\_REJECTED   | Event triggered when a transfer is partially rejected.                                                               |
| TRANSFER\_PARTIALLY\_PACKED     | Event triggered when a transfer is partially packed.                                                                 |
| TRANSFER\_PARTIALLY\_PICKED\_UP | Event triggered when a transfer is partially picked up.                                                              |
| TRANSFER\_PARTIALLY\_STOCKCED   | Event triggered when a transfer is partially stocked; for example, when it's ready to sell at the destination store. |
| TRANSFER\_PICKCED\_UP           | Event triggered when a transfer is picked up.                                                                        |
| TRANSFER\_RECEIVED              | Event triggered when a transfer is received.                                                                         |
| TRANSFER\_REJECTED              | Event triggered when a transfer is rejected.                                                                         |
| TRANSFER\_SHIPPED               | Event triggered when a transfer is shipped.                                                                          |
| TRANSFER\_STOCKED               | Event triggered when a transfer is stocked and ready to sell at the destination store.                               |
| TRANSFER\_SUBMITTED             | Event triggered when a transfer is submitted from `DRAFT` or `CREATED`.                                              |

## Related Topics

*   [Webhooks Overview](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)

*   [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook)

*   [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook)

*   [Managing Events and Logs](https://developer.fabric.inc/v3/guides/settings/webhooks/managing-events-and-logs)

*   [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)

*   [Deleting a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/deleting-a-webhook)

*   [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)

*   [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)

*   [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)


# List of Product Catalog Events



The following tables list all the available events for Product Catalog.

<Note> If a failure to deliver an event occurs, fabric automatically retries up to 3 times to deliver the failed event. </Note>

## Attribute Events

| Event Type            | Description                                   |
| --------------------- | --------------------------------------------- |
| pim:attribute:created | Event triggered when an attribute is created. |
| pim:attribute:deleted | Event triggered when an attribute is deleted. |
| pim:attribute:updated | Event triggered when an attribute is updated. |

## Category Events

| Event Type                                  | Description                                                                |
| ------------------------------------------- | -------------------------------------------------------------------------- |
| pim:node.category:category-attribute:add    | Event triggered when a category attribute is added to a category node.     |
| pim:node.category:category-attribute:delete | Event triggered when a category attribute is removed from a category node. |
| pim:node.category:created                   | Event triggered when a category is created.                                |
| pim:node.category:deleted                   | Event triggered when a category is deleted.                                |
| pim:node.category:item-attribute:add        | Event triggered when an item attribute is added to a category node.        |
| pim:node.category:item-attribute:delete     | Event triggered when an item attribute is removed from a category node.    |
| pim:node.category:updated                   | Event triggered when a category is updated.                                |

## Collection Events

| Event Type                  | Description                                        |
| --------------------------- | -------------------------------------------------- |
| pim:node.collection:created | Event triggered when a collection node is created. |
| pim:node.collection:deleted | Event triggered when a collection node is deleted. |
| pim:node.collection:updated | Event triggered when a collection node is updated. |

## Jobs Events

| Event Type                                            | Description                                                                                                                                                                                    |
| ----------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| pim:attribute.export:created                          | Event triggered when a user requests attribute export.                                                                                                                                         |
| pim:bundle.export:created                             | Event triggered when a bundle export is initiated.                                                                                                                                             |
| pim:product.export:created                            | Event triggered when a product export is initiated.                                                                                                                                            |
| pim:jobs.collectionUpdate.productEvaluation:completed | Event triggered when a collection update job is completed successfully. This job evaluates all collection rules and indexes products against it.                                               |
| pim:jobs.productUpdate.collectionEvaluation:completed | Event triggered when a product update job is completed successfully. When a product is updated, this job evaluates all collections to identify which collection the product should be part of. |
| pim:jobs.productUpdate.collectionEvaluation:failed    | Event triggered when a product update job fails. When a product is updated, this job evaluates all collections to identify which collection the product should be part of.                     |

## Product Events

| Event Type                  | Description                                                         |
| --------------------------- | ------------------------------------------------------------------- |
| pim:product.bundle:created  | Event triggered when a product bundle is created.                   |
| pim:product.bundle:deleted  | Event triggered when a product bundle is deleted.                   |
| pim:product.bundle:updated  | Event triggered when a product bundle is updated.                   |
| pim:product.item:created    | Event triggered when an item is created.                            |
| pim:product.item:deleted    | Event triggered when an item is deleted.                            |
| pim:product.item:updated    | Event triggered when an item is updated.                            |
| pim:product.variant:created | Event triggered when a product variant is created for a live item.  |
| pim:product.variant:deleted | Event triggered when a product variant is deleted from a live item. |
| pim:product.variant:updated | Event triggered when a product variant is updated for a live item.  |

## Related Topics

*   [Webhooks Overview](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)

*   [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook)

*   [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook)

*   [Managing Events and Logs](https://developer.fabric.inc/v3/guides/settings/webhooks/managing-events-and-logs)

*   [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)

*   [Deleting a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/deleting-a-webhook)

*   [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)

*   [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)

*   [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)


# Managing Events and Logs



## Overview

The logs provide you with a comprehensive overview of events with the details, such as event date, type, subscriptions name, log type, status, and endpoint.

The detailed view of an event log provides more information, such as the status code of the event, its name, the name of the subscription it's linked to, the endpoint URL, the number of attempts made, the version of the event and when it got triggered, the time it was delivered, the details of the request, and the response details. You can use these information to track and troubleshoot issues during event operations over the last seven days.

You can search for a specific event and filter events based on date, event type, status code, or subscription name. You can  also sort the logs by clicking a specific field in the top menu or selecting a particular option within that field.

## Prerequisites

Ensure that you have **Developer Admin** or **Developer Viewer** privileges. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control) topic.

## Viewing Logs

1.  In the left menu, click **Settings** > **Developer Tools**.
2.  Click **Webhooks**.\
    The **Webhooks** page is displayed.
3.  Click the **All logs** tab.\
    The logs of all event are displayed.
4.  To view the log details of an event, hover over the row of the event.
5.  On the far right of the row, click the **Event Details** icon.\
    The **Event information** page displays the following information:
    *   **Status Code**
    *   \*\*Name of the event \*\*
    *   **Subscription name**
    *   **URL endpoint**
    *   **Attempts**
    *   **Event version**
    *   **Triggered at**
    *   **Delivered at**
    *   **Request Details**
    *   **Response details**\
        If you want to resend the event, you can click the **Resend** button.
6.  To close the detailed view, click **Close**.

## Replaying Events

You can use the replay feature to resend all events for a specific subscription within a designated date range to diagnose any event failures during that period. For example, if you want to investigate the delivery failure of one or more events from a specific period, you can replay all events recorded during that time frame. Note that, you can only replay events recorded during the last seven days.

### Procedure

1.  In the left menu, click **Settings** > **Developer Tools**.

2.  Click **Webhooks**.\
    The **Webhooks** page is displayed.

3.  Click the **All logs** tab.\
    The logs of all event are displayed.

4.  To replay the events of a subscription, click the **Replay events** button at the top right.\
    The **Replay events** tab is displayed.

5.  In the **Subscription name** field, select the name of the subscription.

6.  In the **Select dates** field, select the date range.

7.  In the **Select time** field, select the time range.

8.  Click **Replay events**.\
    Note that this action replays all of the events for the selected subscription.

9.  Refresh the page and check the log to see the status.

## Resending Events

If a failure to deliver an event occurs, fabric automatically retries up to 3 times to deliver the failed event.

1.  In the left menu, click **Settings** > **Developer Tools**.
2.  Click **Webhooks**.\
    The **Webhooks** page is displayed.
3.  Click the **All logs** tab.\
    The logs of all event are displayed.
4.  Do one of the following:
    *   To resend an event, select the check box next to the name of the event, and then click **Resend events**.
    *   To resend more than one event, select the check box next to the name of the events, and then click **Resend Events**.
    *   To resend all events, select the checkbox in the top menu, next to the **Status code** field, and then click **Resend events**.\
        A message to confirm the action is prompted. Note that resending events can impact your data and downstream processes.
5.  Click **Yes, Resend Event**.\
    The selected events are queued to resend and a message to refresh the page to view the status is displayed.
6.  Click **Refresh**.\
    The all logs page is refreshed and the status is updated.

## Related Topics

*   [Webhooks Overview](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)

*   [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook)

*   [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook)

*   [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)

*   [Deleting a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/deleting-a-webhook)

*   [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)

*   [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)

*   [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)

*   [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)


# Webhooks



## Overview

Webhooks are real-time notifications that enable communication between different software systems and trigger automated processes. For example, for your online store, you can set up a webhook to alert you whenever a new product is added. Using fabric Copilot's webhook functionality, you can create event subscriptions to monitor operations between fabric apps and external systems, such as a Customer Relationship Management (CRM) or Content Management Systems (CMS).

These real-time notifications can be configured for specific events, such as product updates, order creation, or abandoned carts, and directed to a designated HTTP endpoint.

<Note> Webhooks aren't enabled by default. To enable webhooks, contact [fabric support](https://support.fabric.inc/hc/en-us/requests/new). </Note>

Most webhooks actions require **Developer Admin** privileges. Users with **Developer Viewer** privileges can view webhooks. For more information, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control) topic.

## Related Topics

*   [Webhooks Overview](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)

*   [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook)

*   [Testing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/testing-a-webhook)

*   [Managing Events and Logs](https://developer.fabric.inc/v3/guides/settings/webhooks/managing-events-and-logs)

*   [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)

*   [Deleting a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/deleting-a-webhook)

*   [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)

*   [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)

*   [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)

*   [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)


# Testing a Webhook



## Overview

We recommend testing your webhook after creating them to ensure the proper functioning and integration of your subscriptions. This topic provides instruction to test the webhook URL with example data.

## Prerequisites

Before creating a webhook, ensure that you have **Developer Admin** privileges to test webhooks. For more information on privileges, see the [Role-Based Access Control](https://developer.fabric.inc/v3/guides/settings/rbac/role-based-access-control) topic.

## Procedure

1.  In the left menu, click **Settings > Developer Tools**.
2.  Click **Webhooks**.\
    The **Webhooks** page is displayed.
3.  Click the name of the webhook.\
    The webhook details page is displayed.
4.  Click **Test webhook**.\
    The **Test** page is displayed.
5.  In the **Event to test** dropdown, select an event to test.\
    If no dropdown is available, skip to the next step.
6.  Click **Run Test**.

Depending on the webhook configuration, one of the following response with the result of the test is returned, indicating whether the test was successful or not:

*   **200 Ok**
*   **400 Bad request**
*   **401 Unauthorized**
*   **404 Subscription/Event type not found**
*   **500 Internal Server Error**

The following provides a list of possible reasons webhooks can fail.

| Troubleshooting step      | Verification                                                                                                                                                                                                                                                                                  |
| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Reception confirmation    | Confirm whether the webhook is successfully received at your endpoint, for example, by inspecting the request object.                                                                                                                                                                         |
| Source validation         | Confirm that the incoming request originates from the expected source.                                                                                                                                                                                                                        |
| Payload content check     | Make sure that the webhook contains the expected alerts.                                                                                                                                                                                                                                      |
| Data type validation      | Validate the data types of the received information. In some instances, data may be formatted differently from what your server expects. For example, a boolean value sent as a string could lead to unintended issues. If necessary, transform the data to match your server's expectations. |
| Event verification        | Ensure that the webhook corresponds to the anticipated event and the endpoint isn't associated with the wrong event type.                                                                                                                                                                     |
| Response evaluation       | Assess how your API responds to the webhook. Make sure that the webhook is processed correctly, and that the appropriate status codes are returned as required by your application.                                                                                                           |
| Authentication validation | Webhooks might fail if you don't fulfill their authentication criteria. Ensure that you adhere to the authentication protocols as set up in the **Authorization** field of the **Add Webhook** page in Copilot.                                                                               |

## Related Topics

*   [Webhooks Overview](https://developer.fabric.inc/v3/guides/settings/webhooks/overview)

*   [Adding a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/adding-a-webhook)

*   [Managing Events and Logs](https://developer.fabric.inc/v3/guides/settings/webhooks/managing-events-and-logs)

*   [Editing a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/editing-a-webhook)

*   [Deleting a Webhook](https://developer.fabric.inc/v3/guides/settings/webhooks/deleting-a-webhook)

*   [List of Product Catalog Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-products-events)

*   [List of Offers Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-offers-events)

*   [List of Orders Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-orders-events)

*   [List of Inventory Events](https://developer.fabric.inc/v3/guides/settings/webhooks/list-of-inventory-events)


# Inventory Setup



This document is intended for merchants and their SI (System Integrator) partners who want to set up inventory. It describes the rules and procedures to set up inventory as per the business need.

To set up inventory:

1.  [Create Location](#create-location)
2.  [Update Product Information](#update-product-information-optional)
3.  [Create a Network](#create-a-network)
4.  [Create or Update Inventory](#create-or-update-inventory)

Refer to the following sections for additional information:

*   [Search Inventory](#query-inventory)
*   [Rules for Updating Counter Quantity](#rules-for-updating-counter-quantity)

**General Rules:**

*   If you are using a third-party product information management system other than fabric’s Product Catalog, you must provide product details to fabric in a `.csv` file. For details, see the [Update Product Information](#updateproductinfo) section. If you are already using fabric’s Product Catalog to maintain product information, ignore this step.
*   To create or update inventory, you must provide `sku`, `itemId`, `location`, `channelId`, and `counters`. You can provide other details to configure the inventory based on your requirements. For details, see the [Create Inventory](#create-or-update-inventory) section.
    *   If you are using only the *Inventory service* of fabric (not the entire OMS service), you must mention allocated and shipped counter quantities to update inventory. If you are using fabric’s OMS to manage inventory and order fulfillment, allocated and shipped counter quantities will be taken care of automatically.
*   Use the `onHand` counter to represent the inventory quantity that's currently in stock for selling. Per the `onHand` counter value passed in the request body, `availableToPurchase` (the virtual counter) quantity is calculated, based on the formula `onHand - allocated - shipped - safetyStock`. `safetyStock` is also subtracted if you include `safetyStock` value while creating inventory.
*   Subscribe to any of the inventory webhook events to get a notification for inventory updates. For sample curl and other details, see [List of Webhook Events](/v3/api-reference/orders/developer-guide/list-of-webhook-events).

### Create location

**API Mapping:** POST/v3/locations

Using the `POST/v3/locations` endpoint, you can create records for your stores, with details including postal code, hours of operation, BOPIS enabled, and other custom attributes that are applicable to your business.

**Request Sample:**

```JSON
{
  "locationNumber": 23,
  "name": "Seattle Store",
  "isActive": true,
  "address": {
    "addressLine1": "123 Main St.",
    "addressLine2": "Suite 100",
    "addressLine3": "Seventh floor",
    "addressLine4": "Attention: Pat E. Kake",
    "city": "Seattle",
    "region": "WA",
    "postalCode": "98121",
    "countryCode": "US",
    "type": "Home",
    "contacts": [
      {
        "type": "OFFICE",
        "email": "[[email protected]](/cdn-cgi/l/email-protection)",
        "phone": [
          {
            "number": "0281923712",
            "type": "MOBILE"
          }
        ],
        "name": {
          "firstName": "Pat",
          "middleName": "E",
          "lastName": "Kake"
        }
      }
    ]
  },
  "type": "DC",
  "services": {
    "brand": "WHBM",
    "channel": "Frontline"
  },
  "operatingHours": [
    {
      "day": "SUNDAY",
      "hours": [
        {
          "open": "10",
          "close": "20",
          "type": "PICK_UP"
        }
      ]
    }
  ],
  "coordinates": {
    "type": "Point",
    "coordinates": [
      -122.3493,
      47.6205
    ]
  },
  "attributes": {
    "isReturns": "true"
  }
}
```

**Response Sample:**

```JSON
{
  "locationId": "9372919a8219e8",
  "locationNumber": 23,
  "name": "Seattle Store",
  "isActive": true,
  "address": {
    "addressLine1": "123 Main St.",
    "addressLine2": "Suite 100",
    "addressLine3": "Seventh floor",
    "addressLine4": "Attention: Pat E. Kake",
    "city": "Seattle",
    "region": "WA",
    "postalCode": "98121",
    "countryCode": "US",
    "type": "Home",
    "contacts": [
      {
        "type": "OFFICE",
        "email": "[[email protected]](/cdn-cgi/l/email-protection)",
        "phone": [
          {
            "number": "0281923712",
            "type": "MOBILE"
          }
        ],
        "name": {
          "firstName": "Pat",
          "middleName": "E",
          "lastName": "Kake"
        }
      }
    ]
  },
  "type": "DC",
  "createdAt": "2022-05-25T07:58:30.996Z",
  "updatedAt": "2022-05-25T07:58:30.996Z",
  "operatingHours": [
    {
      "day": "SUNDAY",
      "hours": [
        {
          "open": "10",
          "close": "20",
          "type": "PICK_UP"
        }
      ]
    }
  ],
  "coordinates": {
    "type": "Point",
    "coordinates": [
      -122.3493,
      47.6205
    ]
  }
}
```

### Update Product Information (Optional)

**Note:** This step is required if you are using product management software other than fabric's Product Catalog. If you are using fabric's Product Catalog to maintain your product data, this step isn't required as product data will automatically be imported to the Catalog Connector.

**API Mapping:**

*   Use the `PUT/products/{id}` endpoint for updating a single product by ID.
*   Use the `PUT/products` endpoint for updating multiple products.

**Sample request to update a single product:**

```JSON
{
  "sku": "XP-123345",
  "categoryId": "QWE1234CCVFDDERW21",
  "type": "ITEM",
  "attributes": [
    {
      "id": "6d7329dfd5288b0011332311",
      "value": "blue"
    }
  ],
  "parentProduct": {
    "id": "AASSBCC12334FCD12334V"
  },
  "bundleProducts": [
    {
      "sku": "XP-123345",
      "quantity": 2
    }
  ],
  "variants": [
    {
      "id": "AASSBCC12334FCD12334V"
    }
  ],
  "localizedProperties": {
    "en-US": {
      "attributes": [
        {
          "id": "W123333RRTT555y1",
          "value": "blue"
        }
      ]
    },
    "en-IN": {
      "attributes": [
        {
          "id": "W123333RRTT555AA",
          "value": "blue"
        }
      ]
    }
  }
}
```

**Sample response for updating a single product:**

```JSON
{
  "id": "5g7329dfd5288b00113323p7",
  "sku": "QWERTTY56DDFFVVV",
  "type": "ITEM",
  "isActive": true,
  "hasDraft": true,
  "hasLive": true,
  "status": "LIVE",
  "attributes": [
    {
      "id": "227329dfd5288b0011332315",
      "name": "Color",
      "type": "string",
      "isDeleted": false,
      "value": "blue",
      "isInherited": true
    }
  ],
  "localizedProperties": {
    "en-US": {
      "attributes": [
        {
          "id": "637329dfd5288b0011332354",
          "name": "Color",
          "type": "string",
          "isDeleted": false,
          "value": "blue",
          "isInherited": true
        }
      ]
    },
    "en-IN": {
      "attributes": [
        {
          "id": "8f7329dfd5288b0011332334",
          "name": "Colour",
          "type": "string",
          "isDeleted": false,
          "value": "blue",
          "isInherited": true
        }
      ]
    }
  },
  "variants": [
    {
      "id": "967329dfd5288b0011332356"
    }
  ],
  "categoryId": "7f7329dfd5288b0011332378",
  "createdAt": "2021-09-14T22:10:30.618Z",
  "updatedAt": "2021-09-14T22:10:30.618Z"
}
```

### Create a network

**API Mapping:** POST/v3/inventory-networks

*   Network refers to a group of locations with a group of SKUs in each location.
*   You can create a network to map inventories for the created networks. A network code is generated for the created network. You can mention the network code while creating or updating inventories for a specific network.
*   You can configure safety stock quantities for a network while creating a network. Additionally, you can configure safety stock and low stock quantities while creating or updating inventories for a specific network.

**Request Sample:**

```JSON
{
  "code": "DC",
  "name": "Distribution Center",
  "safetyStock": 10,
  "description": "network-mar6th",
  "lowStock": 10,
  "rule": {
    "locationData.type": "Store",
    "locationData.attributes.safetyStock": 10,
    "locationData.isActive": true,
    "productData.attributes.brand": "ABC",
    "productData.attributes.isSoldOnline": true
  }
}
```

**Response Sample:**

```{
  "code": "DC",
  "name": "Distribution Center",
  "safetyStock": 10,
  "description": "network-mar6th",
  "lowStock": 10,
  "rule": {
    "locationData.type": "Store",
    "locationData.attributes.safetyStock": 10,
    "locationData.isActive": true,
    "productData.attributes.brand": "ABC",
    "productData.attributes.isSoldOnline": true
  },
  "createdAt": "2022-08-01T18:03:28.483971941Z",
  "updatedAt": "2022-08-01T18:03:28.483971941Z"
}
```

### Create or update inventory

**API Mapping:**

*   *POST/v3/inventories:* Create inventory
*   *Post/v3/inventories/action/find-and-update:* Update inventory either by replacing existing property value or by adding a new value to an existing property.

1.  Set the `infiniteInventory` parameter to `true` to configure unlimited quantities of inventory.
2.  Use `customAttributes` to define any custom attribute that suit your business use case. For example, you can set BOPIS (Buy Online Pickup In Store) to `true` if you are willing to allow shoppers to buy online and pick up an item from the store (based on location number).
3.  If you provide values for `backOrderLimit` and `preOrderLimit` while creating inventory, `availableBackorder` and `availablePreorder` virtual-counters are displayed in the response object with the same values as provided in the request body.
4.  Configure values for `safetyStock` and `lowStock` fields while creating or updating inventory for better inventory management.

**Rules for updating counter quantity:**

*   Use the `onHand` counter to represent the inventory quantity that's currently in stock for selling. Based on the `onHand` counter value as passed in the request body, `availableToPurchase` quantity is calculated based on the formula `onHand - allocated - shipped` and displayed in the response object.
*   (Not required if you are using the Order module of fabric OMS) Use the “allocated” counter to represent inventory that's sent to warehouses for fulfillment (only the warehouse can cancel the order at this point).
*   (Not required if you are using the Order module of fabric OMS) Use the “shipped” counter to represent inventory that's marked as shipped by the warehouse (at this stage in the life-cycle the order can only be returned).
*   Use “backorderReserve” and “preOrderReserve” counters (under counter object) to represent inventory quantity that's permitted for backorder (reserve for restock) or pre-order (inventory quantity on launch date).

**Sample request to create or update inventory:**

```JSON
{
  "sku": "SKU123",
  "itemId": 12345,
  "locationNum": 999,
  "channelId": "channel1",
  "vendorId": "vendor1",
 "counters": {
    "onHand": 100,
    "allocated": 20,
    "shipped": 10
  },
  "infiniteInventory": true,
  "backOrderDate": "2022-10-21T14:28:06.968Z",
  "preOrderDate": "2022-10-21T14:28:06.968Z",
  "backOrderLimit": 50,
  "preOrderLimit": 40,
  "safetyStock": 10,
  "lowStock": 0,
  "networkCode": "ShipToHome",(get inventory by network)
  "customAttributes": {
    "isRetrun": true,
    "isBopis": true
  },
  "networkCounters": {
    "softReserve": 10
  },
}
```

**Response sample for creating or updating inventory:**

```JSON
{
  "sku": "SKU123",
  "itemId": 12345,
  "locationNum": 999,
  "channelId": "channel1",
  "vendorId": "vendor1",
 "counters": {
    "onHand": 100,
    "allocated": 20,
    "shipped": 10
  },
  "infiniteInventory": true,
  "backOrderDate": "2022-10-21T14:28:06.968Z",
  "preOrderDate": "2022-10-21T14:28:06.968Z",
  "backOrderLimit": 50,
  "preOrderLimit": 40,
  "safetyStock": 10,
  "lowStock": 0,
  "networkCode": "ShipToHome",(get inventory by network)
  "customAttributes": {
    "isRetrun": true,
    "isBopis": true
  },
  "networkCounters": {
    "softReserve": 10
  },
"virtualCounters": {
    "availableToPurchase": 60,
    "availableBackorder": 50,
    "availablePreorder": 40
  }
}
```

### Query inventory

After you successfully create an inventory, you can query for inventory information either using the Copilot user interface or using the `POST/v3/inventories/actions/find` endpoint.

*   While searching for inventory information, you must include SKU and network code (if you have created a network) as query parameters to get the “Available to Purchase” information.
*   While searching for an inventory of type BOPIS (Buy Online Pickup In Store), you must include SKU, `locationNum`, and `channelId` to get information for BOPIS.

**Sample request:**

```JSON
{
  "skus": [
    "SKU1"
  ],
  "itemIds": [
    127122871
  ],
  "locationNumbers": [
    12
  ],
  "locationTypes": [
    "DC"
  ],
  "segments": [
    "B2B_Special"
  ],
  "region": "North America",
  "networkCodes": [
    "4"
  ]
}
```

**Sample response:**

```JSON
{
  "pagination": {
    "limit": 10,
    "offset": 1,
    "count": 1000
  },
  "data": [
    {
      "inventoryId": "723910d81723",
      "sku": "SKU1",
      "itemId": 12345,
      "locationNumber": 12345,
      "region": "North America",
      "channelId": "channel_xyz",
      "vendorId": "vendor1",
      "createdAt": "2022-08-01T18:03:28.483971941Z",
      "updatedAt": "2022-08-01T20:03:28.483971941Z",
      "leadTime": "5 days",
      "type": "primary",
      "hasInfiniteInventory": false,
      "backorderShipmentAt": "2022-08-01T20:03:28.483971941Z",
      "preorderShipmentAt": "2022-08-01T20:03:28.483971941Z",
      "backorderLimit": 50,
      "preorderLimit": 40,
      "safetyStock": 10,
      "lowStock": 10,
      "networkCode": "ShipToHome",
      "counters": {
        "onHand": 100,
        "allocated": 10,
        "shipped": 20
      },
      "customAttributes": {
        "isBopis": true
      },
      "networkCounters": {
        "softReserve": 10
      },
      "virtualCounters": {
        "availableToPurchase": 60
      }
    }
  ]
}
```

### Rules for updating counter quantity

*   **In stock:** Use the `onHand` counter in the request body to represent inventory that's currently available in the location to sell.
*   **In Stock for BOPIS (Buy Online Pickup In Store) for an SKU in a specified radius of zip code or postal code:**
    *   Use the `onHand` counter to represent in-stock inventory.
    *   Define BOPIS using the `customAttribute` field while creating or updating inventory.
    *   Zip code or postal code is identified based on the location number. A location number is generated for a location for which you provide all details such as name, address, type, zip or postal code, and more information while creating the location using the `create location` endpoint.
*   **In Stock for BOPIS in a specified store:**
    *   Use the `onHand` counter to represent in-stock inventory.
    *   Define BOPIS using the `customAttribute` field while creating or updating inventory. A specific store is identified by the location number.
*   **Adjust inventory records by increasing or decreasing counter quantity:**
    *   Use the `onHand` counter to represent in-stock inventory.
    *   Use the `POST/v3/inventories/actions/find-and-adjust-inventory-counters` endpoint to adjust counter quantity. You can provide the SKU, location, and counter quantity in the request payload to adjust the `onHand` counter quantity. Counter quantity accepts both positive and negative values. Based on the value you specify in the request payload for the counter quantity, the original counter quantity is either decreased or increased. For example, if the original counter quantity is 100, and you specify the counter quantity as "-10" in the request payload, then the updated `onHand` counter becomes 90.
*   **Displaying Backorder, Preorder, Safety Stock, and Low Stock on Website:**
    *   If the `availableToPurchase` value is greater than zero, then calculate if the `availabletoPurchase` quantity is greater than the `safetyStock` value.
        *   If `availableToPurchase` quantity is greater than 0, then display the item as **in-stock**.
        *   If `availableToPurchase` quantity is equal to 0 and `availableBackorder` is greater than 0, then display the item as **in-stock-for-backorder**.
        *   If *Available* and *Backorder* are both out of stock, and `availableToPreorder` is greater than 0, then display the item as **in-stock-for-preorder**, else display the item as **out-of-stock**.
        *   If the item is a `Backorder` or `Preorder` item, then display the expected restock date (backorderDate) or expected product launch date (preOrderDate)


# List of Webhook Events



## Overview

Webhooks are a mechanism for an application to send automated, real-time notifications without the need to call REST API endpoints. fabric's Order Management System (OMS) provides a list of webhook events using which you can create event subscriptions for Create, Read, Update, and Delete (CRUD) operations that take place in fabric OMS (also called fabric Orders). As a merchant, you can configure specific webhook events, such as inventory creation, order creation, order cancellation, and more to receive event-specific information.

## List of Webhook Events

The following are the different services of fabric Orders along with the various webhook events provided by each service:

*   [Inventory Service](#inventory-service)
*   [Order Service](#order-service)
*   [Notification Service](#notification-service)
*   [Allocation Service](#allocation-service)
*   [Shipment Service](#shipment-service)
*   [Package Tracking Service](#package-tracking-service)
*   [Fraud Service](#fraud-service)
*   [Invoice Posting Service](#invoice-posting-service)
*   [Crossborder Service](#crossborder-service)
*   [Export Service](#export-service)

### Inventory Service

**Source Name:** `INVENTORY_SERVICE`

**Event Types:**

1.  `INVENTORY_CREATE`
2.  `INVENTORY_UPDATE`
3.  `INVENTORY_BULK`
4.  `INVENTORY_NETWORK_UPDATED`

**curl example:**

```CURL
curl --location --request POST 'https://api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "INVENTORY_SERVICE", // This will change based on service to be subscribed
    "format": "application/json",
    "requestType": "POST",
    "events": [
        "INVENTORY_CREATE",
        "INVENTORY_UPDATE" // List of events to subscribe
    ]
}'
```

### Order Service

**Source name:** `ORDER_SERVICE`

**Event Types:**

1.  `ORDER_CREATE`
2.  `ORDER_HOLD_CROSSBORDER`
3.  `ORDER_HOLD_FRAUD`
4.  `ORDER_HOLD_CSR`
5.  `ORDER_CONFIRMED`
6.  `ORDER_CANCELLED` (only for full-order-canceled)
7.  `ORDER_PARTIALLY_RETURNED`
8.  `ORDER_RETURNED` (only for full Order returned)
9.  `ORDER_SHIPPED` (once all items are shipped)
10. `EXCHANGE_PENDING`
11. `EXCHANGE_TO_SHIPMENT`
12. `ORDER_CANCELLATION_COUPON_REVERSAL`

**curl example:**

Following is a *curl* example to subscribe to `ORDER_CREATE`. Change the event name, or add an array of events to subscribe to different order events, as mentioned under *event types* under order service.

```CURL
curl --location --request POST 'api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "ORDER_SERVICE", // This will change based on service to be subscribed
    "format": "application/json",
    "requestType": "POST",
    "events": [
        "ORDER_CREATE" // List of events to subscribe
    ]
}'
```

### Notification Service

**Source Name:** `NOTIFICATION_SERVICE`

**Event Types:**

1.  `SINGLE_ITEM_ORDER_CONFIRMATION_EMAIL`
2.  `MULTI_ITEM_ORDER_CONFIRMATION_EMAIL`
3.  `BOPIS_ORDER_CONFIRMATION_EMAIL`
4.  `SHIPPING_CONFIRMATION_EMAIL`
5.  `BOPIS_ORDER_READY_FOR_PICKUP`
6.  `BOPIS_ORDER_COMPLETED`
7.  `BOPIS_REMINDER_EMAIL`
8.  `BACKORDER_NOTIFICATION_EMAIL`
9.  `BACKORDER_30_DAYS_CONSENT_TO_DELAY_EMAIL`
10. `BACKORDER_53_DAYS_CONSENT_TO_DELAY_EMAIL`
11. `BACKORDER_CANCEL_EMAIL`
12. `BACKORDER_AUTH_DECLINE_EMAIL`
13. `ORDER_CANCELLATION_EMAIL_WEBCSC_ORDER_ITEM_CANCEL`
14. `ORDER_CANCELLATION_EMAIL_WEBCSC_ORDER_CANCEL`
15. `ORDER_CANCELLATION_EMAIL_LOCATE_ORDER_ITEM_CANCEL`
16. `RETURN_NOTIFICATION_EMAIL`
17. `REFUND_NOTIFICATION_EMAIL`
18. `APPEASEMENT_NOTIFICATION_EMAIL`

**curl example**

```shell
curl --location --request POST 'https://api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "NOTIFICATION_SERVICE", // This will change based on service to be subscribed
    "format": "application/json",
    "requestType": "POST",
    "events": [
        "SINGLE_ITEM_ORDER_CONFIRMATION_EMAIL"
        "MULTI_ITEM_ORDER_CONFIRMATION_EMAIL" // List of events to subscribe
    ]
}'
```

### Allocation Service

**Source name:** `PPS_SERVICE`

**Event Types:**

1.  `ALLOCATION_RETURN`
2.  `ALLOCATION_CREATE_SDD`
3.  `ALLOCATION_CREATE_BOPIS`
4.  `ALLOCATION_CREATE_SHIP`
5.  `ALLOCATION_CREATE_GIFTCARD`

**curl example**

```shell
curl --location --request POST 'https://api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "PPS_SERVICE", // This will change based on service to be subscribed
    "format": "application/json",
    "requestType": "POST",
    "events": [
        "ALLOCATION_CREATE_SHIP" // List of events to subscribe
    ]
}'
```

### Shipment Service

**Source Name:** `SHIPMENT_SERVICE`

**Event Types:**

1.  `SHIPMENT_CREATED`
2.  `SHIPMENT_CANCELLED`
3.  `GIFTCARD_ACTIVATE`
4.  `PICKUP_CREATED`
5.  `PICKUP_COMPLETED`
6.  `SHIPMENT_UPDATE`

**curl example**

```shell
curl --location --request POST 'https://api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "SHIPMENT_SERVICE", // This will change based on service to be subscribed
    "format": "application/json",
    "requestType": "POST",
    "events": [
       "SHIPMENT_CREATED" // List of events to subscribe
    ]
}'
```

### Package Tracking Service

**Source Name:** `PACKAGE_TRACKING_SERVICE`

**Event Types:**

1.  `ORDER_CREATE_IN_PTS`
2.  `ORDER_CANCELLED_IN_PTS`
3.  `SHIPMENT_CREATE_IN_PTS`
4.  `SHIPMENT_CANCELLED_IN_PTS`

**curl example**

```shell
curl --location --request POST 'https://api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "PACKAGE_TRACKING_SERVICE", // This will change based on service to be subscribed
    "format": "application/json",
    "requestType": "POST",
    "events": [
       "ORDER_CREATE_IN_PTS" // List of events to subscribe. PTS refers to Package Tracking Service.
    ]
}'
```

### Fraud Service

**Source Name:** `FRAUD_SERVICE`

**Event Types:**

1.  `FRAUD_CANCEL`
2.  `FRAUD_RELEASE`

**curl example**

```shell
curl --location --request POST 'https://api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "FRAUD_SERVICE", // This will change based on service to be subscribed
    "format": "application/json",
    "requestType": "POST",
    "events": [
       "FRAUD_RELEASE" // List of events to subscribe.
    ]
}'
```

### Invoice Posting Service

**Source Name:** `INVOICE_POSTING_SERVICE`

**Event Types:**

1.  `INVOICE_POSTING`

**curl example**

```shell
curl --location --request POST 'https://api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "INVOICE_POSTING_SERVICE", // This will change based on service to be subscribed
    "format": "application/json",
    "requestType": "POST",
    "events": [
       "INVOICE_POSTING" // List of events to subscribe.
    ]
}'
```

### Crossborder Service

**Source Name:** `CROSSBORDER_SERVICE`

**Event Types:**

1.  `CROSS_BORDER_VALIDATION`

**curl example**

```shell
curl --location --request POST 'https://api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "CROSSBORDER_SERVICE", // This will change based on service to be subscribed
    "format": "application/json",
    "requestType": "POST",
    "events": [
       "CROSS_BORDER_VALIDATION" // List of events to subscribe.
    ]
}'
```

### Export Service

**Source Name:** `EXPORT_SERVICE`

**Event Types:**

1.  `EXPORT_ORDER_INITIATED`
2.  `EXPORT_ORDER_COMPLETED`
3.  `EXPORT_ORDER_ERROR`
4.  `EXPORT_ALLOCATION_INITIATED`
5.  `EXPORT_ALLOCATION_COMPLETED`
6.  `EXPORT_ALLOCATION_ERROR`
7.  `EXPORT_SHIPMENT_INITIATED`
8.  `EXPORT_SHIPMENT_COMPLETED`
9.  `EXPORT_SHIPMENT_ERROR`
10. `EXPORT_INVOICE_INITIATED`
11. `EXPORT_INVOICE_COMPLETED`
12. `EXPORT_INVOICE_ERROR`
13. `EXPORT_LOCATION_INITIATED`
14. `EXPORT_LOCATION_COMPLETED`
15. `EXPORT_LOCATION_ERROR`
16. `EXPORT_INVENTORY_INITIATED`
17. `EXPORT_INVENTORY_COMPLETED`
18. `EXPORT_INVENTORY_ERROR`
19. `EXPORT_NETWORK_INITIATED`
20. `EXPORT_NETWORK_COMPLETED`
21. `EXPORT_NETWORK_ERROR`
22. `EXPORT_SHIPPING_METHODS_INITIATED`
23. `EXPORT_SHIPPING_METHODS_COMPLETED`
24. `EXPORT_SHIPPING_METHODS_ERROR`
25. `EXPORT_AGGREGATED_NETWORK_INITIATED`
26. `EXPORT_AGGREGATED_NETWORK_COMPLETED`
27. `EXPORT_AGGREGATED_NETWORK_ERROR`

**curl example:**

```shell
curl --location --request POST 'https://api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "EXPORT_SERVICE", // This will change based on service to be subscribed
    "format": "application/json",
    "requestType": "POST",
    "events": [
       "EXPORT_ORDER_INITIATED"
       "EXPORT_ORDER_COMPLETED" // List of events to subscribe.
    ]
}'
```


# Importing order and inventory data



This document is intended for merchants and System Integrator (SI) partners who want to migrate or import inventory and order data.

## 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.
*   Ensure that you have a valid [Authorization Token](https://developer.fabric.inc/v3/api-reference/getting-started/getting-started-with-fabric-apis) to provide in the header. When generating an authorization token, ensure that the API System App that you are using to generate the token has the correct role assigned. If a token doesn't have the correct role, the following error is returned:

```json
{
not a valid key=value pair (missing equal-sign) in Authorization header: {token}
}
```

*   If you have fabric **Products Catalog** enabled for your organization, ensure that you [create and update the product catalog](https://developer.fabric.inc/v3/api-reference/product-catalog/developer-guide#import-product-data-through-bulk-import) before importing inventory. If you are using product management software other than fabric’s Product Catalog, you must import your product data using the [Products endpoint](https://developer.fabric.inc/v3/api-reference/product-catalog/general-product-operations/add-products).
*   Ensure that you have at least one [fulfillment location](https://developer.fabric.inc/v3/api-reference/orders/developer-guide/inventory-setup#create-location), such as a Distribution Center (DC).

## Process

To import inventory, you must create an inventory CSV file. Once you have filled in the CSV file, you can upload it to the `inventory-imports` endpoint. With the file uploaded, fabric process's the CSV file and populates your inventory. With your baseline inventory populated, you're ready to update the counters onHand, allocated, and shipped for each location. This populates your total available to purchase amount for each product and populates the inventory for each location.

*   [Import Inventory](#importing-inventory)

To import orders, you must create an orders JSON file. Once you have completed the JSON file, you can upload it to the `oms-imports` endpoint. With the file uploaded, fabric process's the JSON file and populates your orders.

*   [Import Orders](#importing-orders)

## Importing Inventory

Before using the `inventory-imports` endpoint, you must download and update the **Update** CSV file template. This file is uploaded in a subsequent API call.

### Step 1: Download the CSV template file

1.  Log in to fabric Copilot.

2.  In the left menu, click **Inventory**.

    The **Manage inventory** tab is displayed.

3.  Click **Import**.

    The **Import CSV file to add or edit your inventory** window is displayed. Two templates are provided.

4.  Click **Template: Update**.

The **inventory\_update.csv** file is downloaded.

### Step 2: Update the CSV template file

The **inventory\_update.csv** file contains a number of columns with optional fields, such as preorder and backorder dates. These fields are set to **Null** by the system if left blank. The following values are required:

| Field               | Description                                                                                                                      |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------- |
| **SKU**             | The stock keeping unit.                                                                                                          |
| **Item ID**         | The fabric item ID generated after a successful import of a product. This is required only if you use fabric Product Catalog.    |
| **Location Number** | A unique value used to identify the location such as a DC. Products can have multiple locations associated with their inventory. |
| **Channel ID**      | The sales channel ID.                                                                                                            |

### Step 3: Create the `importId`

The `inventory-imports` endpoint is used to create the `importId` and returns a `uploadFileUrl`. The `uploadFileUrl` is used to upload the CSV file from [step 2](#step-2-update-the-template-csv-file) that populates your inventory levels.

**POST Request**:

```Bash
curl --location --request POST 'https://api.fabric.inc/api/v3/inventory-imports/' \
--header 'x-fabric-tenant-id: {tenantId}' \
--header 'x-fabric-channel-id: 12' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: {authToken} \
--data '{
    "fileName": "C:/Users/Fabric/Downloads/Inventory_Import.csv",
    "type": "INVENTORY"
}'
```

**Response**:

```Bash
{
    "importId": "1716414052775_CUsersFabricDownloadsInventory_Import",
    "uploadFileUrl": "{AWS S3 upload URL}"
}
```

### Step 4: Upload the template file

Use the `uploadFileUrl` value, which is returned in [step 3](#step-3-create-the-importid), and send a **PUT** request with the template file.

Note: No authorization token is required for this step. If you use Postman, click the URL to automatically open the request in a new tab. Remember to change the request from GET to PUT and in the body of the request click the binary option followed by providing your inventory CSV file.

```Bash
curl --location --request PUT '{AWS S3 upload URL}' \
--header 'Content-Type: text/csv' \
--data '@/C:/Users/Fabric/Downloads/Inventory_Import.csv'
```

A successful response returns a 200 status.

### Step 5: Check the upload status

Ensure that you have the `importId` value from the response in [Step 3](#step-3-create-the-importid).

You can check your inventory upload status by making a **GET** request to the `inventory-imports/{importId}` endpoint.

**GET Request**:

```Bash
curl --location --request GET 'https://api.fabric.inc/api/v3/inventory-imports/1716408181352_Inventory_Import' \
--header 'x-fabric-tenant-id: {tenantId}' \
--header 'x-fabric-channel-id: 12' \
--header 'Accept: application/json' \
--header 'Authorization: {authToken}'
```

**Response**:

```Bash
{
    "importId": "1716414052775_CUsersFabricDownloadsInventory_Import",
    "type": "bulk",
    "statusCode": "COMPLETED",
    "attributes": {
        "isTrueUp": false
    },
    "createdAt": "2024-05-22T20:03:01Z",
    "updatedAt": "2024-05-22T20:03:02Z",
    "originalFileUrl": "{AWS S3 upload URL}",
    "importCount": {
        "uploaded": 1,
        "processed": 1,
        "error": 0
    }
}
```

On the **Manage inventory** page mentioned in [step 1](#step-1-download-the-template-csv-file), the **Available To Purchase** column for each SKU is updated. Note that you may need to refresh your browser to see the update.

### Step 6: Update inventory counters

After importing your inventory, update the default counters for **onHand**, **allocated**, and **shipped** for each product. Custom counters are supported and can be created using the [Counters API](https://developer.fabric.inc/v3/api-reference/inventory/counters/create-counter) endpoint.

**PUT Request**:

```Bash
curl --location --request PUT 'https://api.fabric.inc/v3/inventories/actions/find-and-adjust-inventory-counters' \
--header 'Authorization: Bearer {authorizationToken}' \
--header 'Content-Type: application/json' \
--header 'x-fabric-channel-id: 12' \
--header 'x-fabric-tenant-id: {tenantId}' \
--data '{
  "inventoryId": "664fabec0f0853fe68e2bea8",
  "sku": "123456",
  "itemId": 12332,
  "locationNumber": 90012,
  "counters": {
    "allocated": 50,
    "onHand": 200,
    "shipped": 20
  }
}'
```

**Response**:

With the inventory counters updated, the fabric virtual counter also updates the SKU's **Available To Purchase** value. In the following example, the value is updated to 130:

```JSON
{
    "inventoryId": "664e51c60f0853fe681fc3e6",
    "sku": "123456",
    "itemId": 12332,
    "locationNumber": 90012,
    "channelId": "12",
    "createdAt": "2024-05-22T20:12:54.082+00:00",
    "updatedAt": "2024-05-24T22:03:51.903+00:00",
    "backorderLimit": 0,
    "preorderLimit": 0,
    "safetyStock": 0,
    "lowStock": 0,
    "counters": {
        "allocated": 50,
        "onHand": 200,
        "shipped": 20
    },
    "customAttributes": {},
    "networkCounters": {}
}
```

## Importing orders

Before using the `oms-imports` endpoint, you must create a JSON file containing all your order information in a specific format.

The JSON file is used to provide a centralized source for order, inventory, and warehouse information, enabling you to receive, track, and fulfill customer orders.

### Step 1: Create the JSON file containing your orders

Note that each line in the JSON file represents one order. If you want to import 1000 orders , the file should have exactly 1000 lines with each line representing an order object. If you save the JSON file with an extension that makes it more readable or expands the object to more than one line, the upload fails.

<Accordion title="JSON order example">
  This section provides a JSON example that shows a single order object formatted to be readable. The following sample code includes examples of potential custom attributes and is designed to illustrate the best-case scenario, offering a comprehensive order view:

  ```JSON Example Order
  {
    "orderId": "o11213873041",
    "orderNumber": "132279859",
    "orderDate": "2023-07-02T07:13:26",
    "cancellationDate": "",
    "channelId": "12",
    "cartId": null,
    "type": "WEB",
    "subType": "Domestic",
    "employeeId": "",
    "retail": {
        "locationNum": "90012"
    },
    "orderSubTotal": 197.88,
    "originalSubTotal": 197.88,
    "orderDiscount": 52.64,
    "originalDiscounts": 52.64,
    "adjustmentTotal": 0.00,
    "originalAdjustmentTotal": 0.00,
    "feeTotal": 0.00,
    "originalFeeTotal": 0.00,
    "taxTotal": 7.99,
    "appeasementTotal": 0.00,
    "originalTaxTotal": 7.99,
    "returnTotal": 0.00,
    "cancelTotal": 0.00,
    "invoiceTotal": 153.23,
    "orderTotal": 153.23,
    "originalOrderTotal": 153.23,
    "currency": "USD",
    "statusCode": "ORDER_SHIPPED",
    "statusDescription": "ORDER_SHIPPED",
    "attributes": {
        "createdDate": "2023-03-24T07:22:24",
        "tracking-hash": "",
        "isMigrated": true
    },
    "fees": [],
    "appeasements": [],
    "discounts": [
        {
            "quantity": 1,
            "amount": 30.00,
            "unit": null,
            "value": 0.00,
            "promoId": "promo30359324",
            "promoCode": null,
            "promoTitle": "Loyalty Offer",
            "type": "Order Discount",
            "invoiceQuantity": 1,
            "returnQuantity": 0,
            "cancelQuantity": 0
        },
        {
            "quantity": 1,
            "amount": 7.64,
            "unit": null,
            "value": 5.00,
            "promoId": "PASSPORT",
            "promoCode": null,
            "promoTitle": "Passport",
            "type": "Order Discount - Percent Off",
            "invoiceQuantity": 1,
            "returnQuantity": 0,
            "cancelQuantity": 0
        },
        {
            "quantity": 1,
            "amount": 15.00,
            "unit": null,
            "value": 0.00,
            "promoId": "promo31919319",
            "promoCode": null,
            "promoTitle": "BIRTHDAY ONLY",
            "type": "Order Discount",
            "invoiceQuantity": 1,
            "returnQuantity": 0,
            "cancelQuantity": 0
        }
    ],
    "customer": {
        "name": {
            "first": "Joe",
            "middle": null,
            "last": "Madison"
        },
        "email": "Joe.madison@gmail.com",
        "phone": {
            "number": "2075224290",
            "type": "MOBILE"
        },
        "userId": "C1108401952",
        "accountId": "1108401952",
        "employeeId": "",
        "company": null
    },
    "payments": [
        {
            "paymentCounter": 1,
            "paymentDate": "2023-07-02T07:13:26",
            "billToId": "pg12906396079",
            "paymentIdentifier": {
                "cardIdentifier": "4284",
                "expirationYear": "2025",
                "expirationMonth": "11",
                "paymentId": "pg12906396079",
                "fabricPaymentReference": "pg12906396079"
            },
            "paymentProvider": "CNP",
            "paymentToken": {
                "token": "5243662388273181",
                "paymentType": null
            },
            "paymentMethod": "applePay",
            "authAmount": 153.23,
            "chargedAmount": 153.23,
            "refundAmount": 0.00,
            "currency": "USD",
            "conversion": 1,
            "paymentStatus": "AUTHORIZED",
            "billToAddress": {
                "name": {
                    "first": "Joe",
                    "middle": null,
                    "last": "Madison"
                },
                "email": "Joe.madison@gmail.com",
                "phone": {
                    "number": "2075224290",
                    "type": "MOBILE"
                },
                "address1": "11 Beryl Loop",
                "address2": null,
                "address3": null,
                "address4": null,
                "city": "Topsham",
                "state": "ME",
                "country": "USA",
                "postalCode": "04086",
                "type": null,
                "latitude": null,
                "longitude": null
            },
            "attributes": {
                "requestedDate": "2023-07-02T11:13:27",
                "expirationMonth": "11",
                "expirationYear": "2025",
                "cardIdentifier": "4284",
                "lastFour": "4284",
                "referenceId": "8825362745964734",
                "authCode": null,
                "authExpirationDate": null,
                "softDecline": null,
                "payerId": null,
                "paypalToken": null,
                "_comment": "Fields related to amazon pay",
                "authorizedAmount": null,
                "captureAmount": null,
                "captureCurrencyCode": null,
                "captureReferenceId": null,
                "amazonAuthorizationId": null,
                "amazonOrderReferenceId": null,
                "authorizationCurrencyCode": null,
                "authorizationReferenceId": null,
                "captureNow": null,
                "sellerAuthorizationNote": null,
                "softDescriptor": null,
                "sellerCaptureNote": null,
                "transactionTimeout": null,
                "amazonCaptureId": null,
                "refundAmount": null,
                "refundCurrencyCode": null,
                "refundReferenceId": null,
                "sellerRefundNote": null,
                "_comment1": "Fields related to credit card",
                "cnpTxnId": "ps1159357855",
                "accountNumber": null,
                "cardType": "MasterCard",
                "checkoutId": null,
                "expirationDate": "11-2025",
                "omniToken": "5243662388273181",
                "orderSource": "applePay",
                "payPageRegId": null,
                "_comment2": "Fields related to gift card",
                "paymentRequests": [
                    {
                        "transactionId": null,
                        "paymentId": null,
                        "customProperties": null,
                        "gatewaySettings": null,
                        "cardDetails": {
                            "giftCardNumber": null,
                            "giftCardPin": null
                        },
                        "amount": 153.23,
                        "transactionTimestamp": "2023-07-02T11:13:27",
                        "paymentMethod": null,
                        "gatewayId": null
                    }
                ],
                "_comment3": "Fields related to AfterPay",
                "token": null,
                "afterPayOrderNumber": null,
                "tenderTypeId": "51",
                "invoiceNumber": null
            },
            "partialCapture": false,
            "finalCapture": true
        }
    ],
    "returns": [],
    "items": [
        {
            "lineItemId": "ci100596348648",
            "lineItemNumber": "4",
            "itemId": "12332",
            "sku": "123456",
            "channelId": "12",
            "title": "Test Product OMS",
            "type": "ShipToHome",
            "isBackorder": false,
            "isPreorder": false,
            "orderedQuantity": "1",
            "backOrderedQuantity": 0,
            "pendingShippedQuantity": 0,
            "pendingShippedBackOrderQuantity": null,
            "shippedQuantity": 1,
            "deliveredQuantity": 0,
            "invoiceQuantity": 1,
            "cancelledQuantity": 0,
            "pendingReturnQuantity": 0,
            "processingReturnQuantity": 0,
            "rejectedReturnQuantity": 0,
            "returnedQuantity": 0,
            "reshippedQuantity": 0,
            "quantityInStatus": {
                "created": 0,
                "pendingShipped": 0,
                "shipped": 1,
                "returned": 0,
                "cancelled": 0,
                "hold": 0,
                "delivered": 0
            },
            "shipToId": "sg12601324493",
            "itemUnitPrice": 74.25,
            "itemSubTotal": 74.25,
            "originalItemSubTotal": 74.25,
            "itemFeeTotal": null,
            "originalFeeTotal": 0.00,
            "itemShippingTotal": null,
            "originalShippingTotal": null,
            "appeasementTotal": null,
            "itemDiscountsTotal": 19.79,
            "originalDiscounts": 19.79,
            "itemAdjustmentTotal": 0.00,
            "originalItemAdjustmentTotal": 0.00,
            "itemTaxTotal": 2.99,
            "originalTaxTotal": 2.99,
            "itemTotal": 57.45,
            "originalItemTotal": 57.45,
            "outstandingItemTotal": null,
            "originalOutstandingItemTotal": null,
            "invoiceTotal": 57.45,
            "currency": "USD",
            "associateId": "",
            "fees": [],
            "appeasements": null,
            "returns": [],
            "taxCode": "200231531",
            "taxDetail": [
                {
                    "type": "CITY",
                    "value": 0.00
                },
                {
                    "type": "COUNTY",
                    "value": 0.00
                },
                {
                    "type": "STATE",
                    "value": 2.99
                },
                {
                    "type": "COUNTRY",
                    "value": 0.00
                },
                {
                    "type": "DISTRICT",
                    "value": 0.00
                },
                {
                    "type": "OTHER",
                    "value": 0.00
                }
            ],
            "discounts": [
                {
                    "quantity": 1,
                    "amount": 11.27,
                    "unit": null,
                    "value": 0.00,
                    "promoId": "promo30359324",
                    "promoCode": null,
                    "promoTitle": "Loyalty Offer",
                    "type": "Order",
                    "invoiceQuantity": 1,
                    "returnQuantity": 0,
                    "cancelQuantity": 0
                },
                {
                    "quantity": 1,
                    "amount": 2.88,
                    "unit": null,
                    "value": 5.00,
                    "promoId": "PASSPORT",
                    "promoCode": null,
                    "promoTitle": "Passport",
                    "type": "Order",
                    "invoiceQuantity": 1,
                    "returnQuantity": 0,
                    "cancelQuantity": 0
                },
                {
                    "quantity": 1,
                    "amount": 5.64,
                    "unit": null,
                    "value": 0.00,
                    "promoId": "promo31919319",
                    "promoCode": null,
                    "promoTitle": "BIRTHDAY ONLY",
                    "type": "Order",
                    "invoiceQuantity": 1,
                    "returnQuantity": 0,
                    "cancelQuantity": 0
                }
            ],
            "adjustments": [],
            "attributes": {
                "style": "570348729",
                "colorCode": "001",
                "colorDescription": "Black",
                "image": "https://www.fabric-demo.com/Product_Images/570348729_001.jpg?imgPolicy=domSmall",
                "title": "Knit Woven Mix Maxi Tank Dress",
                "productUrl": "https://www.fabric-demo.com/store/product/Knit-Woven-Mix-Maxi-Tank-Dress/570348729?color=001",
                "size": "2 (12/14-L)",
                "giftMessage": [
                    {
                        "giftTo": "",
                        "giftFrom": "",
                        "giftMessage": "",
                        "giftBox": "false",
                        "giftWrap": "false",
                        "giftBoxPrice": 0.00
                    }
                ],
                "isDonation": false,
                "isGiftCard": false,
                "isFinalSale": false,
                "effectiveTaxRate": 0.0550
            },
            "exchangeQuantity": 0,
            "refundAmount": -2.99,
            "cancelledAmount": 0.00,
            "lineOrderStatus": "SHIPPED",
            "gifting": false,
            "donation": false
        }
    ],
    "shipInfo": [
        {
            "shipToId": "sg12596229905",
            "taxCode": "200231531",
            "locationNum": "",
            "pickup": [],
            "shipToAddress": {
                "name": {
                    "first": "Debbie",
                    "middle": null,
                    "last": "Dionne"
                },
                "email": "Joe.madison@gmail.com",
                "phone": {
                    "number": "2075224290",
                    "type": "MOBILE"
                },
                "address1": "11 BERYL LOOP",
                "address2": "",
                "address3": "",
                "address4": null,
                "city": "TOPSHAM",
                "state": "ME",
                "country": "USA",
                "postalCode": "04086-3603",
                "type": null,
                "latitude": null,
                "longitude": null
            },
            "taxDetail": [
                {
                    "type": "CITY",
                    "value": 0.00
                },
                {
                    "type": "COUNTY",
                    "value": 0.00
                },
                {
                    "type": "STATE",
                    "value": 0.00
                },
                {
                    "type": "COUNTRY",
                    "value": 0.00
                },
                {
                    "type": "DISTRICT",
                    "value": 0.00
                },
                {
                    "type": "OTHER",
                    "value": 0.00
                }
            ],
            "discounts": [],
            "shipMethod": "Parcel Post Delivery",
            "shipToType": "SHIP_TO_ADDRESS",
            "shipToPrice": 0.00,
            "shipToDiscount": 0,
            "shipToTaxTotal": 0.00,
            "shipmentInstructions": null,
            "attributes": {
                "giftMessage": []
            },
            "isInvoiced": true
        },
        {
            "shipToId": "sg12593859245",
            "taxCode": "200231531",
            "locationNum": "",
            "pickup": [],
            "shipToAddress": {
                "name": {
                    "first": "Debbie",
                    "middle": null,
                    "last": "Dionne"
                },
                "email": "Joe.madison@gmail.com",
                "phone": {
                    "number": "2075224290",
                    "type": "MOBILE"
                },
                "address1": "11 BERYL LOOP",
                "address2": "",
                "address3": "",
                "address4": null,
                "city": "TOPSHAM",
                "state": "ME",
                "country": "USA",
                "postalCode": "04086-3603",
                "type": null,
                "latitude": null,
                "longitude": null
            },
            "taxDetail": [
                {
                    "type": "CITY",
                    "value": 0.00
                },
                {
                    "type": "COUNTY",
                    "value": 0.00
                },
                {
                    "type": "STATE",
                    "value": 0.00
                },
                {
                    "type": "COUNTRY",
                    "value": 0.00
                },
                {
                    "type": "DISTRICT",
                    "value": 0.00
                },
                {
                    "type": "OTHER",
                    "value": 0.00
                }
            ],
            "discounts": [],
            "shipMethod": "Parcel Post Delivery",
            "shipToType": "SHIP_TO_ADDRESS",
            "shipToPrice": 0.00,
            "shipToDiscount": 7.95,
            "shipToTaxTotal": 0.00,
            "shipmentInstructions": null,
            "attributes": {
                "giftMessage": []
            },
            "isInvoiced": true
        },
        {
            "shipToId": "sg12601324493",
            "taxCode": "200231531",
            "locationNum": "",
            "pickup": [],
            "shipToAddress": {
                "name": {
                    "first": "Joe",
                    "middle": null,
                    "last": "Madison"
                },
                "email": "Joe.madison@gmail.com",
                "phone": {
                    "number": "2075224290",
                    "type": "MOBILE"
                },
                "address1": "11 BERYL LOOP",
                "address2": "",
                "address3": "",
                "address4": null,
                "city": "TOPSHAM",
                "state": "ME",
                "country": "USA",
                "postalCode": "04086-3603",
                "type": null,
                "latitude": null,
                "longitude": null
            },
            "taxDetail": [
                {
                    "type": "CITY",
                    "value": 0.00
                },
                {
                    "type": "COUNTY",
                    "value": 0.00
                },
                {
                    "type": "STATE",
                    "value": 0.00
                },
                {
                    "type": "COUNTRY",
                    "value": 0.00
                },
                {
                    "type": "DISTRICT",
                    "value": 0.00
                },
                {
                    "type": "OTHER",
                    "value": 0.00
                }
            ],
            "discounts": [],
            "shipMethod": "Parcel Post Delivery",
            "shipToType": "SHIP_TO_ADDRESS",
            "shipToPrice": 0.00,
            "shipToDiscount": 0,
            "shipToTaxTotal": 0.00,
            "shipmentInstructions": null,
            "attributes": {
                "giftMessage": []
            },
            "isInvoiced": true
        }
    ],
    "auditLogs": [],
    "notes": [],
    "createdAt": "2023-03-24T07:22:24",
    "updatedAt": "2023-07-05T03:31:53"
  }
  ```
</Accordion>

### Step 2: Retrieve the `importId` and upload URL

The `oms-imports` endpoint is used to create the `importId` and returns a `uploadFileUrl`. The `uploadFileUrl` is used to upload the JSON file from [step 1](#step-1-create-the-json-file-containing-your-orders).

```Bash
curl --location --request GET 'https://api.fabric.inc/api/v3/oms-imports' \
--header 'X-Fabric-Tenant-Id: {tenantId}' \
--header 'X-Fabric-Channel-Id: 12' \
--header 'Content-Type: application/json' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {authorizationToken}' \
--data '{
    "fileName": "C:/Users/Fabric/Downloads/example_order.json",
    "module": "ORDER",
    "type": "BULK"
}'
```

**Response**:

```Bash
{
    "importId": "6650def0104f907ac98275de",
    "uploadFileUrl": "{AWS S3 Upload URL}",
    "fileName": "example_order.json",
    "module": "ORDER",
    "type": "BULK",
    "statusCode": "INITIATED",
    "createdAt": "2024-05-24T18:39:44Z",
    "updatedAt": "2024-05-24T18:39:44Z"
}
```

### Step 3: Upload the JSON file

Use the `uploadFileUrl` value, which is returned in [step 2](#step-2-retrieve-the-importid-and-upload-url), and send a **PUT** request with the template file.

Note: No authorization token is required for this step. If you use Postman, click the URL to automatically open the request in a new tab. Remember to change the request from GET to PUT and in the body of the request click the binary option followed by providing your inventory CSV file.

```Bash
curl --location --request PUT '{AWS S3 upload URL}' \
--header 'Content-Type: application/json' \
--data '@/C:/Users/Fabric/Downloads/example_order.json'
```

A successful response returns a 200 status.

### Step 4: Check the status of the import

Ensure that you have the `importId` value from the response in [Step 2](#step-2-retrieve-the-importid-and-upload-url).

You can check your order upload status by making a GET request to the `oms-imports/{importId}` endpoint.

**GET Request**:

```Bash
curl --location --request GET 'https://api.fabric.inc/api/v3/oms-imports/{importId}' \
--header 'x-fabric-tenant-id: {tenantId}' \
--header 'x-fabric-channel-id: 12' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {authorizationToken}'
```

**Response**:

Depending on the number of orders being imported, this process can take up to 20 minutes to complete. Batches of up to 1 million imports are supported at a time. The `statusCode` value is set to **INITIATED** until the process completes.

```JSON
{
    "importId": "6670898e85d8c162c403f4d3",
    "fileName": "example_order_2.json",
    "module": "ORDER",
    "type": "BULK",
    "statusCode": "COMPLETED",
    "createdAt": "2024-06-17T19:07:58Z",
    "updatedAt": "2024-06-17T19:11:30Z",
    "originalFileUrl": "{AWS S3 Upload URL}"
}
```

### Step 5: Use the order number to retrieve an order

To verify the orders are imported, make a GET request to the `orders/order-number/{orderNumber}` endpoint using one of the imported order numbers.

**Request**:

```BASH
curl --location --request GET 'https://api.fabric.inc/api/v3/orders/order-number/{orderNumber}' \
--header 'x-fabric-tenant-id: {tenantId}' \
--header 'x-fabric-channel-id: 12' \
--header 'Accept: application/json' \
--header 'Authorization: Bearer {authorizationToken}'
```

A successful response returns a 200 status with an order object in the payload.

## Related Resources

*   [Developer Guide Overview](https://developer.fabric.inc/v3/api-reference/orders/developer-guide/overview)
*   [Inventory Setup Guide](https://developer.fabric.inc/v3/api-reference/orders/developer-guide/inventory-setup)
*   [Product Catalog Developer Guide](https://developer.fabric.inc/v3/api-reference/product-catalog/developer-guide)
*   [Counters API Endpoint](https://developer.fabric.inc/v3/api-reference/inventory/counters/overview)
*   [Locations API Endpoint](https://developer.fabric.inc/v3/api-reference/inventory/locations/overview)
*   [Inventory API Endpoint](https://developer.fabric.inc/v3/api-reference/inventory/inventory/overview)


# Order Exchange



Using the exchange functionality of fabric's Orders service, the Customer Service Representatives (CSR) can exchange an order item. Exchange is essentially `a return + a new item shipment`, and this phase integrates the *returns service* with the *exchange service*.

**General Rules:**

*   Exchange functionality doesn't have a separate endpoint, and uses the return service for performing order exchanges.
*   Exchange for an item is identified by the `exchange` `boolean` field on the return payload.
*   For an exchange, if the item can't be shipped due to being out of stock, but the item returned for the exchange is processed, then the amount for the returned line items must be refunded.
*   Refunding and payment due to the price difference between the original and replacement items aren't handled by the returns or exchange service. This information must be sent by the requester during the pending return flow.

**Workflow:**

The exchange functionality has two flows:

*   [Exchange items are shipped when the return is received](#exchange-items-are-shipped-when-the-return-is-received)
*   [Exchange items are shipped irrespective of the item being received](#exchange-items-are-shipped-irrespective-of-the-item-being-received)

### Exchange items are shipped when the return is received

*   The `returnType` parameter is set to ` Received`
*   The `exchange` parameter is set to `true`
*   The `initiateReshipment` parameter is set to `true` for items
*   The returns service gets a “PENDING” return request flagged as an exchange.
*   The returns service notifies the exchange service about the exchange.
*   The exchange service broadcasts that the exchange is pending.
*   The returns service gets a “RECEIVED” return request.
*   The exchange service updates the order document by changing the status of the replacement item to be shipped.
*   The exchange service broadcasts that the exchange is sent to the Shipment service.
*   Allocation service handles inventory updates and shipping.
*   If the client POSTs the return received, then:
    *   ship the new item
    *   disable refunding for the original item
*   If the client initiates an exchange for a *pending return*, then the network inventory is reserved at the time the exchange is created. From there, fabric OMS awaits until the item `returnType` “RECEIVED” is posted by the client. If the client receives the item to be returned then,
    *   ship the new item
    *   disable refunding for the original item

**sample curl:**

```JSON
curl --location --request POST 'https://api.fabric.inc/v3/orders/orderId/actions/submit-return-request' \
--header 'tenant-key: YOUR_ACCOUNT_ID_HERE' \
--header 'x-site-context: {"stage":"sandbox","account":"YOUR_ACCOUNT_ID_HERE","date":"2022-11-24T10:36:54.603Z","channel":"12"}' \
--header 'Authorization: Bearer YOUR_AUTH_TOKEN_HERE' \
--header 'Content-Type: application/json' \
--data-raw '{
    {
  "returnedAt": "2022-07-11T15:03:14.642Z",
  "isExchange": true
  "credits": [
    {
      "type": "GIFT_CARD",
      "source": "CSR",
      "amount": 21.5,
      "currency": "USD",
      "paymentCounter": 1,
      "attributes": {
        "giftCardNumber": "XlQZTmFDFtPFGMxJP6oiAqN3vo+qKZ"
      },
      "reasonCode": "EC",
      "subReasonCode": "ACC",
      "employeeId": "12312232",
      "note": "Credit request initiated",
      "policyCode": "RC1"
    }
  ],
  "employeeId": "62272e917b12209e68751d94",
  "source": "CSR",
  "totalRefundAmount": 21.5,
  "refunds": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "reasonCode": "Incorrect item",
  "fees": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "items": [
    {
      "returnType": "RECEIVED",
      "orderLineItemId": "1",
      "shipmentId": "62b37697c67b204dd18a7465",
      "shipmentLineId": "12",
      "quantity": 1,
      "scannedAt": "2022-07-11T15:03:14.642Z",
      "reasonCode": "Incorrect order",
      "subReasonCode": "Incorrect specification",
      "refundAmount": 21.5,
      "refunds": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "fees": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "exchange": {
        "refund": {
          "amount": 34.56,
          "currency": "USD",
          "conversion": 1
        },
        "items": [
          {
            "itemId": 1234,
            "sku": "P1234",
            "quantity": 10,
            "itemUnitPrice": 10,
            "initiateReshipment": true
          }
        ],
        "isRefundingDisabled": true
      },
      "isPolicyOverride": true
    }
  ],
  "attributes": {
    "fraudStatus": "FRAUD_PASS",
    "fraudCheckSessionId": "59f1d2b88de74aef96d3ec900ad548e0"
  }
}
```

### Exchange items are shipped irrespective of the item being received

*   Exchange for an item is identified by the `exchange` boolean field on the return payload.
*   The requester sets `initiateReshipment` to `true` at the first moment of the exchange, indicating the immediate shipping of the replacement item regardless of the return status (received or pending). In this case, the allocation service will be triggered at the end of the pending return flow.
*   The administrator ships the new item without the distribution center receiving the item and disables refunding for the original item.

**sample curl:**

```JSON
curl --location --request POST 'https://api.fabric.inc/v3/orders/orderId/actions/submit-return-request' \
--header 'tenant-key: YOUR_ACCOUNT_ID_HERE' \
--header 'x-site-context: {"stage":"sandbox","account":"YOUR_ACCOUNT_ID_HERE","date":"2022-11-24T10:36:54.603Z","channel":"12"}' \
--header 'Authorization: Bearer YOUR_AUTH_TOKEN_HERE' \
--header 'Content-Type: application/json' \
--data-raw '{
    {
  "returnedAt": "2022-07-11T15:03:14.642Z",
  "isExchange": true
  "credits": [
    {
      "type": "GIFT_CARD",
      "source": "CSR",
      "amount": 21.5,
      "currency": "USD",
      "paymentCounter": 1,
      "attributes": {
        "giftCardNumber": "XlQZTmFDFtPFGMxJP6oiAqN3vo+qKZ"
      },
      "reasonCode": "EC",
      "subReasonCode": "ACC",
      "employeeId": "12312232",
      "note": "Credit request initiated",
      "policyCode": "RC1"
    }
  ],
  "employeeId": "62272e917b12209e68751d94",
  "source": "CSR",
  "totalRefundAmount": 21.5,
  "refunds": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "reasonCode": "Incorrect item",
  "fees": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "items": [
    {
      "returnType": "RECEIVED",
      "orderLineItemId": "1",
      "shipmentId": "62b37697c67b204dd18a7465",
      "shipmentLineId": "12",
      "quantity": 1,
      "scannedAt": "2022-07-11T15:03:14.642Z",
      "reasonCode": "Incorrect order",
      "subReasonCode": "Incorrect specification",
      "refundAmount": 21.5,
      "refunds": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "fees": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "exchange": {
        "refund": {
          "amount": 34.56,
          "currency": "USD",
          "conversion": 1
        },
        "items": [
          {
            "itemId": 1234,
            "sku": "P1234",
            "quantity": 10,
            "itemUnitPrice": 10,
            "initiateReshipment": true
          }
        ],
        "isRefundingDisabled": true
      },
      "isPolicyOverride": true
    }
  ],
  "attributes": {
    "fraudStatus": "FRAUD_PASS",
    "fraudCheckSessionId": "59f1d2b88de74aef96d3ec900ad548e0"
  }
}
```


# Order Fulfillment



fabric’s Orders service simplifies complex order management and fulfillment processes after an order is created either by using any checkout service or at the Point of Sale (POS).

With fabric's Orders service, merchants can:

*   Create a unified commerce experience by importing all orders in real time to a single application.
*   Cancel, return, and exchange orders.
*   Handle tasks such as invoicing, shipment tracking, backorders, and other use cases.
*   Use the endpoints to create orders, initiate post-order process workflows, and manage order-related data, such as setting the estimated delivery date and ship-by date. Additionally, merchants can set fulfillment location information to view what facility orders were allocated for the fulfillment.

### Workflow

The following provides a basic workflow of fabric's Orders service for the orders created using a checkout service:

1.  Merchants create an Order and upload details to fabric's Orders service after shoppers complete the payment process at the checkout stage.
2.  fabric Orders sends a notification for different order updates, using the Notification APIs, to shoppers and merchants.
3.  fabric Orders allocates the order, using allocation APIs, to the shopper's nearest warehouse or facility for inventory confirmation, and shipping of the product.
4.  Order is then picked, packed, and shipped.
5.  Merchant and shopper are notified of the delivery being shipped.
6.  The order is completed when it reaches the shopper’s delivery address.

### Set up Order Tracking for an Order Created Using a Checkout Service

After an order is created, for the order to drop to the warehouse, merchants must set up webhook subscriptions to fabric's Orders events for better order management.

*   [Workflow](#workflow)
*   [Set up Order Tracking for an Order Created Using a Checkout Service](#set-up-order-tracking-for-an-order-created-using-a-checkout-service)
    *   [Step 1: Set up a webhook subscription to OMS events](#step-1-set-up-a-webhook-subscription-to-oms-events)
    *   [Step 2: Create an Order and Upload it to fabric OMS](#step-2-create-an-order-and-upload-it-to-fabric-oms)
    *   [Step 3: Integrate OMS with Warehouse Management System (WMS)](#step-3-integrate-oms-with-warehouse-management-system-wms)
    *   [Step 4: Integrate OMS with Fraud Service](#step-4-integrate-oms-with-fraud-service)
    *   [Step 5: Create Shipment for the Allocations](#step-5-create-shipment-for-the-allocations)
    *   [Optional Steps:](#optional-steps)

#### Step 1: Set up a webhook subscription to OMS events

1.  Use webhook endpoint (`POST/v3/oms-webhooks`) to set up webhook subscriptions to [various order events](/v3/api-reference/orders/developer-guide/list-of-webhook-events#order-service) so that when an order is created or updated, fabric OMS automatically starts the post-order processes, and sends notifications for the subscribed events.
2.  Once an order is allocated to a warehouse, the webhook that you have configured, sends a notification mentioning an allocation ID.

Following is a **curl example** for subscribing to allocation events:

```shell
curl --location --request POST 'https://api.fabric.inc/v3/oms-webhooks' \
--header 'Authorization: Bearer {token}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '{
    "target": "https://webhook.site/83834d4c-9736-4cba-b32b-e6b6d75a6683",
    "protocol": "HTTP",
    "source": "ORDER_SERVICE", // This will change based on service to be subscribed
    "apiVersion": "1.0.0",
    "format": "application/json",
    "requestType": "POST",
    "events": [
        "ORDER_CREATE"
        "ORDER_SHIPPED" // List of events to subscribe
    ]
}'
```

To subscribe to any other events of fabric Orders, mention the respective source name and events that you want to subscribe for. For details, see [List of Webhook Events](/v3/api-reference/orders/developer-guide/list-of-webhook-events#order-service).

#### Step 2: Create an Order and Upload it to fabric OMS

Use the `POST/v3/orders` endpoint to create an order through any integrated checkout service that you are using.

*   The `orderNumber` field that's passed during order creation is a string.
*   For Cash On Delivery (COD) orders, provide `paymentMethod` as ‘CASH\_ON\_DELIVERY’, and `chargedAmount` as ‘0’ under the payment object while creating an order.

**Request Sample**

```json
{
  "orderNumber": "309019176",
  "orderedAt": "2022-05-12T09:30:31.198Z",
  "adjustmentTotal": 123.45,
  "adjustments": [
    {
      "adjustmentCounter": 1,
      "amount": 2.4,
      "attributes": {
        "number": "XlQZTmFDFtPFGMxJP6oiAqN3vo+qKZ"
      },
      "cancelQuantity": 2,
      "invoiceQuantity": 10,
      "notes": "Any additional info",
      "quantity": 2,
      "reasonCode": "RFC",
      "returnQuantity": 1,
      "subReasonCode": "Late shipping"
    }
  ],
  "cartId": "b03b72dc-78d8-4ea4-90fc-2fe6a1fe6569",
  "type": "WEB",
  "subtype": "INTERNATIONAL",
  "employeeId": "62272e917b12209e68751d94",
  "retail": {
    "locationNumber": 334,
    "cashierId": "C-123",
    "registerId": "113",
    "transactionId": "328942333412"
  },
  "orderSubtotal": 123.45,
  "orderDiscount": 1.23,
  "feeTotal": 12.34,
  "taxTotal": 12.34,
  "orderTotal": 146.9,
  "currency": "USD",
  "statusCode": "ORDER_CREATED",
  "statusDescription": "Order Created",
  "attributes": {
    "fraudStatus": "FRAUD_PASS",
    "fraudCheckStatus": "UPDATED"
  },
  "fees": [
    {
      "name": "STATE",
      "taxCode": "FR01",
      "rateType": "PERCENTAGE",
      "rate": 10,
      "amount": 34.56,
      "currency": "USD",
      "attributes": {
        "additionalProp1": {},
        "additionalProp2": {},
        "additionalProp3": {}
      },
      "invoicedAmount": 34.56
    }
  ],
  "discounts": [
    {
      "quantity": 2,
      "amount": 2.4,
      "unit": "AMOUNT_OFF",
      "value": 2,
      "promotionId": "HNY2022",
      "promotionCode": "HNY2022",
      "promotionName": "New Year",
      "type": "promotion"
    }
  ],
  "customer": {
    "name": {
      "firstName": "Alex",
      "middleName": "E",
      "lastName": "Doe"
    },
    "email": "[[email protected]](/cdn-cgi/l/email-protection)",
    "phone": {
      "number": "123-456-7890",
      "type": "MOBILE"
    },
    "userId": "62272e917b12209e68751d94",
    "accountId": "62272e917b12209e68751d94",
    "employeeId": "62272e917b12209e68751d94",
    "company": "Demo Inc",
    "address": {
      "name": {
        "firstName": "Alex",
        "middleName": "E",
        "lastName": "Doe"
      },
      "email": "[[email protected]](/cdn-cgi/l/email-protection)",
      "phone": {
        "number": "123-456-7890",
        "type": "MOBILE"
      },
      "addressLine1": "123 Main St.",
      "addressLine2": "Suite 100",
      "addressLine3": "Seventh floor",
      "addressLine4": "Attention: Pat E. Kake",
      "city": "Seattle",
      "region": "WA",
      "postalCode": "98121",
      "countryCode": "US",
      "type": "Home",
      "latitude": 47.6205,
      "longitude": -122.3493
    }
  },
  "payments": [
    {
      "paymentCounter": 1,
      "paidAt": "2022-01-27T16:15:58-05:00",
      "paymentIdentifier": {
        "cardIdentifier": "3456",
        "expirationYear": "2029",
        "expirationMonth": "12",
        "paymentId": "62272e917b12209e68751d94",
        "fabricPaymentReference": "f886c96c-5f65-11ed-9b6a-0242ac120002"
      },
      "paymentProvider": "stripe",
      "paymentToken": {
        "token": "pi_34tr6787rt",
        "paymentType": "VISA"
      },
      "paymentMethod": "CREDIT_CARD",
      "authorizedAmount": 123.2,
      "chargedAmount": 60,
      "currency": "USD",
      "paymentStatus": "Paid",
      "authorizationExpirationDate": "2022-01-27T16:15:58-05:00",
      "billToAddress": {
        "name": {
          "firstName": "Alex",
          "middleName": "E",
          "lastName": "Doe"
        },
        "email": "[[email protected]](/cdn-cgi/l/email-protection)",
        "phone": {
          "number": "123-456-7890",
          "type": "MOBILE"
        },
        "addressLine1": "123 Main St.",
        "addressLine2": "Suite 100",
        "addressLine3": "Seventh floor",
        "addressLine4": "Attention: Pat E. Kake",
        "city": "Seattle",
        "region": "WA",
        "postalCode": "98121",
        "countryCode": "US",
        "type": "Home",
        "latitude": 47.6205,
        "longitude": -122.3493
      },
      "attributes": {
        "referenceId": "4DY41894J2904533S",
        "payerId": "M7AWTK3YK3B46",
        "captureCurrencyCode": "USD"
      }
    }
  ],
  "items": [
    {
      "lineItemId": "b03b72dc-78d8-4ea4-90fc-2fe6a1fe6569",
      "lineItemNumber": 1,
      "itemId": 1234,
      "sku": "P1234",
      "segment": "P1234",
      "vendorId": "P1234",
      "itemName": "Item",
      "type": "WEB_SHIP",
      "itemSubtype": "Borderfree",
      "orderedQuantity": 60,
      "uom": "EA",
      "shipToId": "b03b72dc-78d8-4ea4-90fc-2fe6a1fe6569",
      "itemUnitPrice": 10,
      "itemSubtotal": 600,
      "itemFeeTotal": 10,
      "itemDiscountsTotal": 10,
      "itemTaxTotal": 10,
      "itemTotal": 10,
      "currency": "USD",
      "employeeId": "62272e917b12209e68751d94",
      "fees": [
        {
          "name": "STATE",
          "taxCode": "FR01",
          "rateType": "PERCENTAGE",
          "rate": 10,
          "amount": 34.56,
          "currency": "USD",
          "attributes": {
            "additionalProp1": {},
            "additionalProp2": {},
            "additionalProp3": {}
          }
        }
      ],
      "taxCode": "FR01",
      "taxDetails": [
        {
          "name": "STATE",
          "taxCode": "FR01",
          "rateType": "PERCENTAGE",
          "rate": 10,
          "amount": 34.56,
          "currency": "USD",
          "attributes": {
            "additionalProp1": {},
            "additionalProp2": {},
            "additionalProp3": {}
          }
        }
      ],
      "discounts": [
        {
          "quantity": 2,
          "amount": 2.4,
          "unit": "AMOUNT_OFF",
          "value": 2,
          "promotionId": "HNY2022",
          "promotionCode": "HNY2022",
          "promotionName": "New Year",
          "type": "promotion"
        }
      ],
      "attributes": {
        "style": "570223020",
        "colorCode": "001",
        "isDonation": "false"
      },
      "isBackorder": true,
      "isPreorder": true,
      "isDonation": true
    }
  ],
  "shipInfo": [
    {
      "shipToId": "b03b72dc-78d8-4ea4-90fc-2fe6a1fe6569",
      "taxCode": "FR01",
      "locationNumber": "123",
      "pickups": [
        {
          "name": {
            "firstName": "Alex",
            "middleName": "E",
            "lastName": "Doe"
          },
          "email": "[[email protected]](/cdn-cgi/l/email-protection)",
          "phone": {
            "number": "123-456-7890",
            "type": "MOBILE"
          },
          "pickupType": "PRIMARY"
        }
      ],
      "shipToAddress": {
        "name": {
          "firstName": "Alex",
          "middleName": "E",
          "lastName": "Doe"
        },
        "email": "[[email protected]](/cdn-cgi/l/email-protection)",
        "phone": {
          "number": "123-456-7890",
          "type": "MOBILE"
        },
        "addressLine1": "123 Main St.",
        "addressLine2": "Suite 100",
        "addressLine3": "Seventh floor",
        "addressLine4": "Attention: Pat E. Kake",
        "city": "Seattle",
        "region": "WA",
        "postalCode": "98121",
        "countryCode": "US",
        "type": "Home",
        "latitude": 47.6205,
        "longitude": -122.3493
      },
      "taxDetails": [
        {
          "name": "STATE",
          "taxCode": "FR01",
          "rateType": "PERCENTAGE",
          "rate": 10,
          "amount": 34.56,
          "currency": "USD",
          "attributes": {
            "additionalProp1": {},
            "additionalProp2": {},
            "additionalProp3": {}
          }
        }
      ],
      "shipMethod": "Parcel post delivery",
      "shipToType": "SHIP_TO_ADDRESS",
      "estimatedShipDate": "2022-05-12T09:30:31.198Z",
      "estimatedDeliveryDate": "2022-05-12T09:30:31.198Z",
      "shipToPrice": 20,
      "shipToDiscount": 12.6,
      "discounts": [
        {
          "quantity": 1,
          "amount": 2.99,
          "unit": "AMOUNT_OFF",
          "value": 10,
          "promotionId": "SHIPFREE",
          "promotionCode": "SHIPFREE",
          "promotionName": "Free Shipping"
        }
      ],
      "shipToTaxTotal": 12.6,
      "shipmentInstructions": "Handle with care",
      "isInvoiced": true,
      "attributes": {
        "giftMessage": "[]"
      }
    }
  ]
}
```

#### Step 3: Integrate fabric OMS with Warehouse Management System (WMS)

Integrate fabric OMS with the WMS that you use to check the movement of inventory to fulfill orders. By integrating OMS with WMS, you allow the WMS to listen to allocation events that you created in the first step. Based on the shopper's location, fabric OMS allocates orders to the nearest warehouse. To integrate OMS with the WMS you use, either:

1.  You (retailers) develop the integration software to communicate with fabric OMS, and maintain the integration layer on your own.
2.  Or, you (retailers) use a third-party integration software that's developed to communicate with fabric OMS. For example, Bascom develops integration software for fabric OMS.

#### Step 4: Integrate OMS with Fraud Service

Use fraud endpoints to integrate OMS with Fraud service

#### Step 5: Create Shipment for the Allocations

Configure integration service with fabric OMS in such a way that integration service uses the create shipment endpoint (POST/v3/allocations/search) to ship the order to the shopper's address after a warehouse is allocated with order details.

#### Optional Steps:

Search [orders](/v3/api-reference/orders/orders/find-orders) or [allocation](/v3/api-reference/orders/allocations/search-for-allocations-by-query) for additional information.

**Get Allocations by orderId**

You can get allocations by orderId using the [POST/v3/allocations/search](/v3/api-reference/orders/allocations/search-for-allocations-by-query) endpoint.

**curl example:**

```JSON
curl --location --request POST 'https://api.fabric.inc/v3/allocations/search?offset=0&limit=10' \
--header 'Authorization: {{accessToken}}' \
--header 'x-site-context: {"account":"63310842f37ee100111e9fe3"}' \
--header 'Content-Type: application/json' \
--data-raw '
    {
  "sort": "-allocation.createdAt",
  "filters": [
    {
      "field": "allocation.items.orderId",
      "value": "Order_*",
      "condition": "EQ"
    },
    {
      "field": "allocation.items.itemId",
      "value": [
        "Item_1122",
        "Item_2233"
      ],
      "condition": "IN"
    }
  ]
}'
```

**Search Order allocation by allocationId**

Use the [`GET/allocations/{allocationId}`](/v3/api-reference/orders/allocations/get-allocation-by-id) endpoint to get order allocation details by `allocationId`.


# Order Return



An order or portion of an order is eligible for return if:

*   It's fulfilled.
*   The items to be returned aren't previously returned.
*   The item’s `eligible` property is set to `false` in [check order return eligibility](/v3/api-reference/orders/returns/order-return-by-order-number) API response.
*   The item aligns with fabric's return policy.

**General Rules:**

*   Return for an item is identified by the `exchange` boolean (`exchange` is set to `false`) field on the [return payload](/v3/api-reference/orders/returns/order-return-by-order-number).
*   Return for an order is validated for eligibility based on the orderId and lineItemId.
*   Charged amount in the [payments object](/v3/api-reference/orders/orders/create-new-order) of the order document shouldn't be null to process the refund.
*   Use the [`POST/v3/orders/{orderId}/actions/submit-return-request`](/v3/api-reference/orders/returns/order-return-by-order-id) endpoint to initiate order return by order ID.
*   You can also use the [`POST/v3/orders/order-number/{orderNumber}/actions/submit-return-request`](/v3/api-reference/orders/returns/order-return-by-order-number) endpoint to initiate order return by order number.
*   Order status should be one of: `ORDER_DELIVERED`, `ORDER_SHIPPED`, `ORDER_PARTIALLY_SHIPPED`, `ORDER_PARTIALLY_DELIVERED`, `ORDER_PARTIALLY_RETURNED`,\
    `ORDER_PARTIALLY_CANCELLED`, `PICKUP_COMPLETE`.
*   The `lineOrderStatus` should be one of: `PENDING_EXCHANGE`, `RETURN_PROCESSING`, `PARTIALLY_CANCELLED`, `PARTIALLY_REFUNDED`,`PARTIALLY_CANCELLED_REFUNDED`,`VALID`, `PENDING_RETURN`, `ORDER_LINE_VALID`, `SHIPPED`, `PARTIALLY_SHIPPED`, `PARTIALLY_ALLOCATED`, `DELIVERED`, `PARTIALLY_DELIVERED`, `PARTIAL_RETURN`.
*   [Initiate a return when an item is pending to be received at the distribution center](#initiate-a-return-request-when-an-item-is-pending-to-be-received-at-the-distribution-center)
    *   [Item reaches the distribution center and is processed for return](#item-reaches-the-distribution-center-and-is-processed-for-return-or-reject)
*   [Create a return when the item is received at the distribution center for return](#create-a-return-when-an-item-is-received-or-accepted-for-return)

### Initiate a return request when an item is pending to be received at the distribution center

When a shopper or a customer service agent creates a return request, but the item isn't received at the distribution center:

1.  Set `returnType` to `PENDING` in the request payload while using the `POST/v3/orders/{orderId}/actions/submit-return-request` endpoint to create a return.

*   `lineOrderStatus` will be updated to `RETURN_PENDING` for the line item of an order ID. Merchants can get the order details, along with the order status, by calling the `GET/v3/orders/{orderId}` endpoint.
*   `RETURN_PENDING` webhook event is triggered if the merchant has subscribed to the event. The target URL of the subscription payload is notified.

**sample curl**

```json
curl --location --request POST 'https://api.fabric.inc/v3/orders/orderId/actions/submit-return-request' \
--header 'tenant-key: MERCHANT_ACCOUNT_ID' \
--header 'x-site-context: {"stage":"sandbox","account":"MERCHANT_ACCOUNT_ID","date":"2022-11-24T10:36:54.603Z","channel":"12"}' \
--header 'Authorization: Bearer YOUR_AUTH_TOKEN_HERE' \
--header 'Content-Type: application/json' \
--data-raw '{
  "returnedAt": "2022-07-11T15:03:14.642Z",
   "isExchange": false
  "credits": [
    {
      "type": "GIFT_CARD",
      "source": "CSR",
      "amount": 21.5,
      "currency": "USD",
      "paymentCounter": 1,
      "attributes": {
        "giftCardNumber": "XlQZTmFDFtPFGMxJP6oiAqN3vo+qKZ"
      },
      "reasonCode": "EC",
      "subReasonCode": "ACC",
      "employeeId": "12312232",
      "note": "Credit request initiated",
      "policyCode": "RC1"
    }
  ],
  "employeeId": "62272e917b12209e68751d94",
  "source": "CSR",
  "totalRefundAmount": 21.5,
  "refunds": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "reasonCode": "Incorrect item",
  "fees": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "items": [
    {
      "returnType": "PENDING",
      "orderLineItemId": "1",
      "shipmentId": "62b37697c67b204dd18a7465",
      "shipmentLineId": "12",
      "quantity": 1,
      "scannedAt": "2022-07-11T15:03:14.642Z",
      "reasonCode": "Incorrect order",
      "subReasonCode": "Incorrect specification",
      "refundAmount": 21.5,
      "refunds": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "fees": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "isPolicyOverride": true
    }
  ],
  "attributes": {
    "fraudStatus": "FRAUD_PASS",
    "fraudCheckSessionId": "59f1d2b88de74aef96d3ec900ad548e0"
  }
}
```

#### Item reaches the distribution center and is processed for return or reject

*   When an item reaches the distribution center, use the `POST/v3/orders/{orderId}/actions/submit-return-request` endpoint to set `returnType` to `PROCESSING` in the request payload.
*   `lineOrderStatus` will be updated to `RETURN_PROCESSING` for the line item of the order ID. You can get the order details, along with the order status, by calling the `GET/v3/orders/{orderId}` endpoint.
*   At this stage, the customer service agent at the warehouse or the distribution center does the quality checks such as, if the item is in good condition to return if the item matches the original order, etc. After a thorough inspection, the CSR can accept or reject the return request.
*   `RETURN_PROCESSING` webhook event is triggered if the merchant has subscribed to the event. The target URL of the subscription payload is notified about the event.

**sample curl:**

```json
curl --location --request POST 'https://api.fabric.inc/v3/orders/orderId/actions/submit-return-request' \
--header 'tenant-key: MERCHANT_ACCOUNT_ID' \
--header 'x-site-context: {"stage":"sandbox","account":"MERCHANT_ACCOUNT_ID","date":"2022-11-24T10:36:54.603Z","channel":"12"}' \
--header 'Authorization: Bearer YOUR_AUTH_TOKEN_HERE' \
--header 'Content-Type: application/json' \
--data-raw '{
  "returnedAt": "2022-07-11T15:03:14.642Z",
   "isExchange": false
  "credits": [
    {
      "type": "GIFT_CARD",
      "source": "CSR",
      "amount": 21.5,
      "currency": "USD",
      "paymentCounter": 1,
      "attributes": {
        "giftCardNumber": "XlQZTmFDFtPFGMxJP6oiAqN3vo+qKZ"
      },
      "reasonCode": "EC",
      "subReasonCode": "ACC",
      "employeeId": "12312232",
      "note": "Credit request initiated",
      "policyCode": "RC1"
    }
  ],
  "employeeId": "62272e917b12209e68751d94",
  "source": "CSR",
  "totalRefundAmount": 21.5,
  "refunds": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "reasonCode": "Incorrect item",
  "fees": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "items": [
    {
      "returnType": "RECEIVED",
      "orderLineItemId": "1",
      "shipmentId": "62b37697c67b204dd18a7465",
      "shipmentLineId": "12",
      "quantity": 1,
      "scannedAt": "2022-07-11T15:03:14.642Z",
      "reasonCode": "Incorrect order",
      "subReasonCode": "Incorrect specification",
      "refundAmount": 21.5,
      "refunds": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "fees": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "isPolicyOverride": true
    }
  ],
  "attributes": {
    "fraudStatus": "FRAUD_PASS",
    "fraudCheckSessionId": "59f1d2b88de74aef96d3ec900ad548e0"
  }
}
```

*   If customer service agent rejects the return request for any reason, they must use the `POST/v3/orders/{orderId}/actions/submit-return-request` endpoint to set `returnType` to `REJECTED`.
*   Provide proper reason and sub-reasons for rejecting the return request.
*   `lineOrderStatus` is updated to `RETURN_REJECTED` for the line item of the order ID. You can get the order details, along with the order status, by calling the `GET/v3/orders/{orderId}` endpoint.
*   `RETURN_REJECTED` webhook event is triggered if the merchant has subscribed to the event. The target URL will be notified of the event.

**sample curl:**

```json
curl --location --request POST 'https://api.fabric.inc/v3/orders/orderId/actions/submit-return-request' \
--header 'tenant-key: MERCHANT_ACCOUNT_ID' \
--header 'x-site-context: {"stage":"sandbox","account":"MERCHANT_ACCOUNT_ID","date":"2022-11-24T10:36:54.603Z","channel":"12"}' \
--header 'Authorization: Bearer YOUR_AUTH_TOKEN_HERE' \
--header 'Content-Type: application/json' \
--data-raw '{
  "returnedAt": "2022-07-11T15:03:14.642Z",
   "isExchange": false
  "credits": [
    {
      "type": "GIFT_CARD",
      "source": "CSR",
      "amount": 21.5,
      "currency": "USD",
      "paymentCounter": 1,
      "attributes": {
        "giftCardNumber": "XlQZTmFDFtPFGMxJP6oiAqN3vo+qKZ"
      },
      "reasonCode": "EC",
      "subReasonCode": "ACC",
      "employeeId": "12312232",
      "note": "Credit request initiated",
      "policyCode": "RC1"
    }
  ],
  "employeeId": "62272e917b12209e68751d94",
  "source": "CSR",
  "totalRefundAmount": 21.5,
  "refunds": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "reasonCode": "Incorrect item",
  "fees": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "items": [
    {
      "returnType": "REJECTED",
      "orderLineItemId": "1",
      "shipmentId": "62b37697c67b204dd18a7465",
      "shipmentLineId": "12",
      "quantity": 1,
      "scannedAt": "2022-07-11T15:03:14.642Z",
      "reasonCode": "Incorrect order",
      "subReasonCode": "Incorrect specification",
      "refundAmount": 21.5,
      "refunds": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "fees": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "isPolicyOverride": true
    }
  ],
  "attributes": {
    "fraudStatus": "FRAUD_PASS",
    "fraudCheckSessionId": "59f1d2b88de74aef96d3ec900ad548e0"
  }
}
```

### Create a return when an item is received or accepted for return

*   Use `POST/v3/orders/{orderId}/actions/submit-return-request` endpoint, and set `returnType` to `received`.
*   The amount received for return will be validated based on the invoiced amount for the item. If validation fails for any reason, an error message will be returned.
*   If a refund for returned item is successful, the response for the order return endpoint (POST/api/v2/order/return) will display `refundStatus` as `SUCCESSFUL`.
*   If all the quantity of line items are returned:
    *   `lineOrderStatus` (return status at item level) will be updated to `RETURNED`.
    *   `statusCode` (return status at order level) will be updated to `ORDER_RETURNED`.
*   If some of the quantities of line items are returned:
    *   `lineOrderStatus` (return status at item level) will be updated to `PARTIALLY_RETURNED`.
    *   `statusCode` (return status at order level) will be updated to `ORDER_PARTIALLY_RETURNED`.
*   If the refund failed for any reason, the response for the order return endpoint (POST/api/v2/order/return) will display `refundStatus` as `REFUND_FAILED`.
*   `RETURN_NOTIFICATION_EMAIL` and `REFUND_NOTIFICATION_EMAIL` webhook events are triggered if the merchant has subscribed to the events, and details are sent to the merchant.

**sample curl:**

```json
curl --location --request POST 'https://api.fabric.inc/v3/orders/orderId/actions/submit-return-request' \
--header 'tenant-key: MERCHANT_ACCOUNT_ID' \
--header 'x-site-context: {"stage":"sandbox","account":"MERCHANT_ACCOUNT_ID","date":"2022-11-24T10:36:54.603Z","channel":"12"}' \
--header 'Authorization: Bearer YOUR_AUTH_TOKEN_HERE' \
--header 'Content-Type: application/json' \
--data-raw '{
  "returnedAt": "2022-07-11T15:03:14.642Z",
   "isExchange": false
  "credits": [
    {
      "type": "GIFT_CARD",
      "source": "CSR",
      "amount": 21.5,
      "currency": "USD",
      "paymentCounter": 1,
      "attributes": {
        "giftCardNumber": "XlQZTmFDFtPFGMxJP6oiAqN3vo+qKZ"
      },
      "reasonCode": "EC",
      "subReasonCode": "ACC",
      "employeeId": "12312232",
      "note": "Credit request initiated",
      "policyCode": "RC1"
    }
  ],
  "employeeId": "62272e917b12209e68751d94",
  "source": "CSR",
  "totalRefundAmount": 21.5,
  "refunds": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "reasonCode": "Incorrect item",
  "fees": [
    {
      "type": "FEE",
      "name": "RETURN_FEE",
      "reason": "Return fee",
      "amount": 34.56
    }
  ],
  "items": [
    {
      "returnType": "RECEIVED",
      "orderLineItemId": "1",
      "shipmentId": "62b37697c67b204dd18a7465",
      "shipmentLineId": "12",
      "quantity": 1,
      "scannedAt": "2022-07-11T15:03:14.642Z",
      "reasonCode": "Incorrect order",
      "subReasonCode": "Incorrect specification",
      "refundAmount": 21.5,
      "refunds": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "fees": [
        {
          "type": "FEE",
          "name": "RETURN_FEE",
          "reason": "Return fee",
          "amount": 34.56
        }
      ],
      "isPolicyOverride": true
    }
  ],
  "attributes": {
    "fraudStatus": "FRAUD_PASS",
    "fraudCheckSessionId": "59f1d2b88de74aef96d3ec900ad548e0"
  }
}
```


# Overview



fabric's Order Management System (OMS), also referred to 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. As retailers, not only can you receive, track, and fulfill customer orders across sales channels, you can allow customers to track their orders, route orders through warehouses based on the customer’s location, and more.

This document provides details related to inventory creation, management, rules to configure inventory that suits your business needs, order orchestration, order exchange logic, and more information about fabric's Orders service.

**Note:** In this document, the terms 'fabric Orders' and 'fabric OMS' are used interchangeably.

*   [Getting Started](#getting-started)
*   [Core Concepts](#core-concepts)
    *   [Location](#location)
    *   [Inventory](#inventory)
    *   [Network](#network)
    *   [Counter](#counter)
    *   [Virtual Counter](#virtual-counter)
*   [Inventory Features](#inventory-features)
*   [Order Features](#order-features)
*   [Using fabric OMS](#using-fabric-oms)
    *   [Prerequisites](#prerequisites)
    *   [Generate Authorization Token](#generate-authorization-token)

### Workflow

The following workflow diagram illustrates how fabric's Order Management System (also called fabric Orders) works:

![OMS Workflow Diagram](https://mintlify.s3-us-west-1.amazonaws.com/fabric-demo/images/oms-workflow-diagram.jpg)

### Getting Started

fabric's Orders service supports modern distributed commerce models, including buy-online-pickup-in-store (BOPIS), ship-to-store (for store pick up or replenishment), and store fulfillment (as mini distribution centers) models. It not only offers network aggregation for enterprise-level inventory visibility but also enables retailers to modify order fulfillment logic without the need for coding, thereby reducing the burden on developer resources.

### Core Concepts

fabric OMS consists of two independent data orchestration modules: **Inventory** and **Orders**. The following are some of the other core concepts that are used while creating or updating inventory:

#### Location

Create a location, using [location APIs](/v3/api-reference/inventory/locations/overview), for which you want to create an inventory or update inventory. You must provide a unique location number while creating a location. Use this location number to manage inventory.

You can also create custom location attributes for a location by location number while creating or updating inventories. The following are two examples of location attributes:

*   BOPIS- to enable buy online and pick up in-store policy for a specific location.
*   Return- to enable inventory return policy for a warehouse in a specific location.

#### Inventory

Inventory refers to the goods and products for sale. Inventory endpoints let you:

*   Bulk import inventory from other sources to fabric OMS using the bulk import feature in Copilot or using the bulk import endpoint.
*   Create or update inventory records, set up inventory availability rules, and set inventory quantities (using the counter object) to display an accurate available-to-purchase quantity using the Copilot UI or by using API. See Create Inventory section for more information.
*   You can query the inventory of a specific item (by itemId), and in a specific region by SKU and postal code.

For details, refer to the [Inventory](/v3/api-reference/inventory/inventory/overview) endpoints.

#### Network

A Network is a group of locations that share inventory. Using [network APIs](/v3/api-reference/inventory/networks/get-network-by-code), you can create custom networks (for example, ‘shipToHome’) to manage inventory within a specified set of locations. Use network endpoints to aggregate the quantity of the SKU in the “On Hand” and “Reserved” counter for a specified set of locations (warehouses or stores). You can specify “Safety Stock” inventory values for a network.

#### Counter

Counter refers to the position of the inventory, such as on-hand, allocated, shipped, etc. Using counter APIs, you can create any custom counter to suit your business needs. As per the on-hand counter quantity you pass in the request body while creating or updating inventory, `availableToPurchase` virtual-counter quantity is calculated based on the formula `onHand - allocated - shipped`. If you create a custom counter and mention it while creating or updating inventory, those custom counter quantities are also subtracted to calculate the `availableToPurchase` virtual counter quantity.

From the left-side navigation pane, refer to *Orders > Developer Guide > Inventory Setup > Rules for Updating Counter Quantity* for more information on how to use counters while creating or updating inventory.

#### Virtual Counter

Virtual Counter refers to the inventory quantity that's available to sell by calculating the difference between available inventory and reserved for-purchase inventory. It helps prevent over-promising of inventory by subtracting the reserved-for-purchase inventory count from the in-warehouse inventory count.

Use the “availableToPurchase” virtual counter with the formula `On Hand - Reserved - Backordered - Ordered - Acknowledged - Safety Stock` so that the virtual counter returns your physical inventory minus the reserved quantity.

### Inventory Features

The inventory module of fabric OMS lets merchants:

*   Bulk imports inventory from all external sources of truth such as Warehouse Management System (WMS), Inventory Management System (IMS), or any other Point of Sale (POS).
*   Get the real-time quantity that's readily available to sell.
*   Create a network (group of locations) to aggregate inventory at different locations for a group of SKUs.
*   Create location attributes, such as `isReturn` (indicates if the location supports the return of sold items) or BOPIS (indicates if shoppers can buy the item online and pick it up in-store). These attributes represent inventory availability at a location level for omnichannel use cases.
*   Create safety stock to prevent overselling.
*   Flag stock levels of the item on the Product Description Page (PDP).
*   Set a backorder date that indicates the expected date of restocking.
*   Set a pre-order date that indicates the expected product launch date.

### Order Features

Using fabric's Orders service, merchants can:

*   Integrate the order creation with any external 3rd party checkout service or POS.
*   Validate the order using integrated product and fraud services. Uses fraud endpoints to validate orders.
*   Automatically reserve products for the created order, and decrements inventory as orders are updated.
*   Allocate orders to locations (warehouses) that are nearest to the customer location.
*   Allocate orders to facilities in the order of the assigned facility rank.
*   Check if the order is a gift card or donation type, based on how merchants configure orders during the order creation.
*   Create shipment using POST `/api/v3/shipments` endpoint to write split allocations into distributed records for each parcel fulfilling the order.
*   Create invoices related to shipments capturing the payment at the time of order shipment and recording the transaction details.
*   Cancel orders to release the payment intent authorization for order lines in eligible statuses.
*   Return the order and refund the payment capture for order lines that are returned, excluding fees and shipment.
*   Create order appeasements, by manually refunding an arbitrary amount less than the captured amount per order line.
*   Exchange orders, by creating a zero-dollar order for a sku variant related to the return of an order line.
*   Audit Trails, by recording all actions (updates) on each of the 4 records- order, allocation, shipment, and invoice.
*   Set up webhooks, by subscribing to event types for third-party workflow triggering.
*   Create notifications, by triggering 18 different customer notification event types from order events.
*   Track packages, by posting updates from shipment tracking services to fabric OMS.

### Using fabric OMS

*   [Prerequisites](#prerequisites)
*   [Generate Authorization Token](#generate-authorization-token)

#### Prerequisites

1.  **Authorization token:** You must provide an access token while making an API request. fabric OMS supports both Identity v1 and Identity v2 approaches to getting access tokens. See the [Generate Authorization Token](#generateauthtoken) section to generate an authorization token using Copilot.
2.  **Product data(optional):** You must provide product details if you are using a 3rd party product management system other than fabric’s Product Catalog, also referred to as fabric Product Catalog. fabric OMS needs product details such as name, description, image, and other related details for which you want to create inventory.
3.  **Inventory data:** You must provide sku, itemId, location, channelId, and counters indicating factual quantities of products across all locations. Location includes physical stores, warehouses, in transit, and any third-party suppliers.

#### Generate Authorization Token

To generate an authorization token:

1.  Log in to Copilot with your fabric credentials.
2.  Navigate to Orders.
3.  Right-click, and then click **Inspect**.
4.  Navigate to the **Application** tab.
5.  Under **Session Storage**, click the Copilot URL and find a value for `accessToken`.
6.  This `accessToken` value is the authorization token you must use while calling fabric Offers APIs.

**curl example:**

```
curl --location --request POST 'https://api.fabric.inc/v3/locations' \
--header 'x-site-context: {"date":"2021-11-11T21:48:47.769Z","channel":12,"account":"5f689caa4216e7000750d1ef","stage":"stg02"}' \
--header 'Authorization: eyJraWQiOiItOWxOcTZVcmR3bl9tNFJ2bDd1a2RMN0NUOUNndXIya3VJXzNjUnhnaG…' \
--data-raw ‘’

```

**Note:** In the above example, `account` refers to the Copilot account ID.


# Export data by query

exports.openapi post /oms-exports
Initiate data export by the given filter criteria.



# Get export job by exportId

exports.openapi get /oms-exports/{exportId}
Get details of a specific export job by specified `exportId`.



# Get export jobs by query

exports.openapi post /oms-exports/search
Get a paginated list of all the export jobs based on the filter criteria specified in the request body.



# Get file headers by module

exports.openapi get /oms-exports/module-headers/{module}
Get the list of file headers for a given module.<p>**Note:** File headers are basically the column headers or titles of the exported document.</p>



# Getting Started with Exports



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Exports** API supports exporting data of different modules such as Orders, Locations, Allocations, Inventory, Invoices, Networks, Shipping\_Methods, and Aggregated\_Networks. fabric's Exports API lets you export module-specific data (saved in JSON format in the database) to a zip file. These zip files contain different CSV files where:

*   Each field of a single JSON schema is a file header (also called column title) in the CSV file
*   Each item of the JSON schema is a row in the CSV file

The data, in the database, are arranged as nested objects and arrays which are complex to use. fabric's Exports API simplifies the data of a single object by segregating them into multiple CSV files (by specific identifiers) for ease of use.

The following are the module (fabric service) names and its generated CSV files:

1\. Orders: order (exported by item), discount, logs, notes, payments, shipInfo\
2\. Allocations: allocation, logs\
3\. Shipments: shipment\
4\. Shipping\_Methods: shipping\_methods\
5\. Locations: location\
6\. Invoices: invoice, appeasements, discounts, payments\
7\. Inventory: inventory.

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/ordersExports.json)


# Cancel fraud order by order ID

orders.openapi post /orders/{orderId}/actions/fraud-cancel
If an order is suspected to be fraudulent, it is immediately placed on hold for verification. After verification, if it is confirmed as fraudulent, this endpoint is used to cancel the order. <p> **Note**: If you do not have order ID, use the corresponding order number-based endpoint - `POST - /orders/order-number/{orderNumber}/actions/fraud-cancel` </p>



# Cancel fraud order by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/fraud-cancel
If an order is suspected to be fraudulent, it is immediately placed on hold for verification. After verification, if it's confirmed as fraudulent, this endpoint is used to cancel the order by order number. <p> **Note**: If you don't have order number, use the corresponding order ID-based endpoint - `POST /orders/{orderId}/actions/fraud-cancel`.</p>



# Getting Started with Frauds



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Frauds** API endpoints deal with potential fraud orders.


# Release fraud order

orders.openapi post /orders/order-number/{orderNumber}/actions/fraud-release
If an order is suspected to be fraudulent, it is immediately placed on hold for verification. After verification, if it is confirmed as non-fraudulent, this endpoint is used to release the order from hold, by order number so that it can be processed. <p> **Note**: When you don't have order number, use the corresponding order ID-based endpoint - `POST /orders/{orderId}/actions/fraud-release`.</p>



# Release fraud order by order ID

orders.openapi post /orders/{orderId}/actions/fraud-release
If an order is suspected to be fraudulent, it is immediately placed on hold for verification. After verification, if it is confirmed as non-fraudulent, this endpoint is used to release the order from hold, by order ID, so that it can be processed. <p> **Note**: When you don't have order ID, use the corresponding order number-based endpoint - `POST /orders/order-number/{orderNumber}/actions/fraud-release`.</p>



# Get uploaded file status and details

imports.openapi get /oms-imports/{importId}
Get uploaded file status and details by specifying `importId`.



# Get uploaded files that match specified criteria

imports.openapi post /oms-imports/search
Get uploaded files that match specified criteria. Returned as paginated records.



# Getting Started with Imports



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL:
`<https://www.fabric.inc>` | License:
[fabric API License](https://fabric.inc/api-license)

fabric **Imports** API supports importing data of different modules such as
Orders, Invoices, and Shipments.

fabric's **Imports** API lets you import module-specific bulk JSON in text file
format in order to save these documents in fabric's databases. Each row in an
uploaded text file represents a single JSON schema.

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/ordersImports.json)


# Upload bulk file to import data

imports.openapi post /oms-imports
Upload bulk file by specifying file name. Successfully uploading the file triggers the import process, which is an event-driven extraction of the file's data to update the respective resource's system.



# Getting Started with Notifications



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Notifications** API enables you (Storefronts) to resend notifications to customers for specific order-related events, such as confirmation, status updates, cancellations, and more. it's also used to get notification acknowledgements from external services.

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/ordersNotifications.json)


# Orders (3.0.0)



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

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.

## 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)


# Orders FAQ



#### How can I insert fees, discounts, and taxes at the order level and item level?

*   To insert fees, discounts, and taxes at item level, include the details in the `_items_ array` while creating an order.
*   To insert fees, discounts, and taxes at order level, include the details outside the *items* array while creating an order. For details, see the request payload of [Order Create](/v3/api-reference/orders/orders/create-new-order).

#### How does the fabric Orders module manage customer data security and privacy?

fabric’s REST APIs are protected with OpenID Connect (OIDC) along with the identity introspector mechanism. In OIDC, identity information is communicated using JSON Web Tokens (JWTs). The data in fabric is stored in both MongoDB and S3. The MongoDB data is isolated per tenant in fabric Orders (also called OMS).

You must create an [AWS configuration rule](https://aws.amazon.com/blogs/security/how-to-use-aws-config-to-monitor-for-and-respond-to-amazon-s3-buckets-allowing-public-access/) to ensure that the AWS S3 Bucket doesn't have public access. For example, one shouldn't be able to run:

```shell
curl https://inventory-oms-refresher-prod01.s3.amazonaws.com/chicosprod/export/store/FabricStoreInventorySync%5FCHO%5F2023-06-15T08-31-00-827090592Z.csv
```

Whenever data is requested, fabric will generate a S3 presigned URL to ensure secure access.

#### What's the primary use case of the fabric Orders service?

The fabric Order service is designed to streamline and simplify order management and fulfillment processes during and after an order is created either by using a checkout service or at the Point of Sale (POS). It contains features to simplify advanced configurations in addition to the standard post order operations and fulfillment workflow rules engine capabilities common to the functionalities and jobs supported by most Enterprise Order Management and Distributed Order Management Systems.

#### What are the key features of the fabric Orders module?

Backorder and Preorder, simplified configuration interfaces for setting post order validation and customer service policies, Customer Service and Returns Management operational interfaces, Digital Security and Role based access, Dropship integration and fulfillment, Incident Management, Fulfillment Rule Setting.

#### How can I get started with the fabric Orders module?

If you are using fabric Orders with fabric Store Fulfillment and fabric Inventory, you can start creating orders using the [order create endpoint](/v3/api-reference/orders/orders/create-new-order) after inventory is set up. Alternatively, you can disable inventory reservation for order fulfillment by contacting [fabric support](https://support.fabric.inc/hc/en-us/requests/new).

#### How does fabric Orders (also called OMS) handle the order fulfillment process?

Once order is created using fabric Orders service, it sends request to fabric’s Allocation module for order allocation, then Allocation calls Order Fulfillment Logic (OFL), OFL rules get the location number where the inventory is available, and responds back to Allocation, and Allocation calls inventory to reserved items for the location number received from OFL.

Order fulfillment process is set up by integrating your existing fulfillment systems, such as the Warehouse Management System (WMS), with the Allocation APIs of the fabric Orders module. This integration enables allocation-related events to start fulfillments in external systems, and it allows external systems to make callbacks to the fabric Allocation APIs.

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.

You can establish the configuration for transactional email updates regarding orders by integrating your preferred email service with the Notification APIs of the fabric Orders module. This integration enables fabric Orders to start real-time email notifications for specific order update events.

To establish fraud prevention of orders, you can integrate your preferred fraud service with the Fraud APIs of fabric’s Order module. These APIs primarily allow for hold and release actions on the order, providing an effective means of preventing fraudulent activities.

You can set up shipment tracking updates for orders by integrating your carrier tracking service with the Shipment Tracking APIs of fabric’s Orders module. These APIs enable the external carrier tracking service, such as ParcelLab, to post shipment events.

#### Can fabric Orders handle orders from multiple channels?

Yes, the order create API can be integrated with systems such as web storefront, POS, and other sales channels. This integration enables the posting of orders to a centralized application database, ensuring a single source of truth for all orders.

When dealing with multi-brand orders that require separation of customer service and operational workflows, the `channel` field in the `order.channel` and `order.items.channel` JSON objects allows creating orders with separate groupings.

#### How does fabric’s Orders service manage returns and exchanges?

When processing returns using fabric’s Orders module, the result can be either a pending return for tracking purposes or an immediate completion of the return process for the order.

An order or items of an order are eligible for return if:

1.  It has been fulfilled
2.  The items to be returned haven't been previously returned
3.  The item's eligible property isn't set to false in the check order return eligibility API response, which is configured using the Return Policies interface.

Return requests can be initiated using either the order ID or the order number as identification. The response object specifies refund amount, return fees to subtract from the refund, and reason codes for the return. If a refund for a returned item is successful, the response for the order return endpoint will display `refundStatus` as SUCCESSFUL. If the refund fails for any reason, the response for the order return endpoint will display `refundStatus` as REFUND\_FAILED. Order details can be accessed by calling the [return endpoints](/v3/api-reference/orders/returns/overview).

Exchange requests within fabric are initiated using the same [return endpoints](/v3/api-reference/orders/returns/overview) provided that the `isExchange` flag must be set to `true`.

#### How does fabric’s Orders module handle payment processing?

fabric Orders module can either be used to orchestrate payment operations, or payments can be disabled for the system. This is currently only configured by fabric Support during the onboarding process.

#### How does fabric’s Orders module manage tax calculations for different regions?

fabric Orders doesn't manage tax calculation. Taxes must be calculated by the client by using tax calculation services external to fabric, during update operations to the order.

#### Can I customize the interface and workflows within fabric’s Orders module to fit my business needs?

Yes, fabric provides the flexibility to customize the interface and workflows to support your business needs. An use case is creation of an order after shoppers complete the checkout process involves minimal data validation.

*   You can configure data validation settings in the [attributes interface](/v3/guides/orders/settings/order-attributes), so that orders with invalid attributes or values can be flagged immediately after order placement.
*   You can also configure the validation process for post-order updates, such as returns, exchanges, cancellations, appeasements, and pickups, using Policies in Copilot. This enables you to obtain eligibility information for these operations on a per-order basis and customize the workflow associated with these operations.\
    **Note:** To know about the process of returning and canceling orders, refer to the guide that explains [canceling SKUs](/v3/guides/orders/order-management/cancel-skus) and the Orders [Cancellation API](/v3/api-reference/orders/cancellations/overview).
*   You can manage backorder fulfillment settings such as the consent to delay workflow using the [backorder settings API](/v3/api-reference/orders/backorders=preorders/overview).
*   Setting up integrations using the webhooks and integration-related APIs enables the notification of various order updates to shoppers, efficient allocation of orders to the most suitable warehouse or facility for inventory confirmation and product shipping, as well as the provision of shipment tracking updates.

#### How does fabric’s Orders module support my customer service team?

fabric’s customer service operations can be used either in the Copilot interface or within your existing customer service and relationship management application. fabric Orders doesn't currently offer native support for case management. However, retailers using a customer service application can choose to use fabric Copilot alongside their existing customer service application, or embed fabric Orders APIs for handling cancellations, returns, exchanges, appeasements, and other supported order updates directly within their CSR application.

#### Does fabric’s Orders module help generate sales and performance reports?

Yes, you can perform export operations using the export API, which can be utilized through integration for business intelligence and storing the data in external data warehouses. The exports service flattens the JSON structure into columns such that an external columnar database such as an SQL database can ingest the data. Exports can also be generated using Copilot for ad-hoc analysis.

#### How does fabric’s Orders module handle international orders and shipping?

fabric Orders module includes the Crossborder API with basic hold and release functions for your external applications to manage the crossborder fulfillment process. The fabric databases also support all UTF-8 languages and support ISO 4217 currency codes during order create and update operations. These currencies and languages will reflect in any read operation through API or Copilot. There are no additional international order functions than these.

#### How's customer information stored and managed in the fabric Orders module?

Customer information is stored within the order JSON, and any bulk updates to customer data must be performed using the standard order update functions. The fabric Orders module doesn't maintain customer data in a separate collection. Additionally, a customer [edit API](/v3/api-reference/customers/customer-self/overview) is available for client web applications, simplifying the process of updating customer data within orders.

#### Does fabric’s Orders module support order migration from my existing platform?

Yes, fabric Orders provides a set of [import APIs](/v3/api-reference/developer-guide/order-and-inventory-import) to manage the order import process, primarily to support post-order operations on orders that may be required after transition from your current order services to fabric Orders.

#### How does fabric’s Orders module manage backorders and preorders?

During the order creation process within fabric Orders, 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 the 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 the merchant's configuration, and updates regarding consent to delay are managed through the consent to delay endpoint.

#### How does the fabric Orders module integrate with fabric Inventory?

By default, fabric Orders is designed to seamlessly integrate with fabric Inventory module for new users. Users of both modules get the advantage of real time updates ensuring that inventory availability is automatically updated as orders are fulfilled.

fabric provides the flexibility to its customers to disable fabric Orders and use fabric Inventory as a standalone module, as well as disable fabric Inventory and use fabric Orders as a standalone module. To disable or re-enable a module, please contact [fabric Support](https://support.fabric.inc/hc/en-us/requests/new).

The benefits of using modules independently are primarily for the purpose of implementing the strangler pattern, where the transition process occurs gradually on a service-by-service basis.


# Check appeasement eligibility by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/check-appeasement-eligibility
This endpoint checks for the appeasement eligibility of an order by order number.



# Check appeasement eligibility by order ID

orders.openapi post /orders/{orderId}/actions/check-appeasement-eligibility
This endpoint checks for the appeasement eligibility of an order by orderId.



# Check credits eligibility by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/check-credits-eligibility
When processing refunds, credits such as a gift card may be offered to customers for various reasons such as damaged products, later deliveries, or other qualifying factors as per your policy. <p> This endpoint checks the credits eligibility by order number, allowing you to manage credits effectively and provide appropriate compensation to eligible customers. </p>



# Get order exchange eligibility by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/check-exchange-eligibility
Customers may want exchange an item because of size, fit, color, or style preferences. Before processing exchange, it's crucial to verify whether the item is eligible for exchange as per your policy. <p> This endpoint gets the exchange eligibility by order number. You can additionally specify `lineItemId` to get eligibility for a specific item.</p> <p> **Note**: If you do not have the order number, but have the order ID, use the order ID-based endpoint - `POST /orders/{orderId}/actions/check-exchange-eligibility`. </p>



# Create new order

orders.openapi post /orders
This endpoint creates a new order in the fabric Orders (OMS) system, regardless of whether it originates from fabric CnC service or an external system. The response includes an order ID, which is required for subsequent calls such as updating pickup information, getting order details, verifying eligibility for order cancellations, returns, exchanges, as well as creating appeasements, and processing order returns, cancellations, and exchanges.



# Find orders

orders.openapi post /orders/search
Customers may want to review their past orders or, as merchants, you may have to answer queries related to past orders, and analyze sales. <p> To support the previously mentioned use cases, this endpoint searches for orders based on filter conditions specified in the request body. By using `offset` and `limit` you can refine the search results. When they are not specified, you will get up to 10 results. </p>



# Get order by order ID

orders.openapi get /orders/{orderId}
As a merchant, you may need to review or monitor an order to answer customer inquiries, resolve a complaint, or for analytics and reporting. With this endpoint, you can get order details by order ID. <p> **Note**: If you do not have the order ID, use the corresponding order number-based endpoint - `GET /orders/order-number/{orderNumber}`.</p>



# Get order by order number

orders.openapi get /orders/order-number/{orderNumber}
As a merchant, you may need to review or monitor an order to answer customer inquiries, resolve a complaint or for analytics and reporting. With this endpoint, you can get order details by order number. <p> **Note**: If you do not have the order number, use the corresponding order ID-based endpoint - `GET /orders/{orderId}`. </p>



# Getting Started with Orders



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Orders** API is a scalable multi-tenant service designed to streamline your order management process. Orders API is a REST and JSON driven interface enabling retailers to create orders directly from online Storefronts and Point-of-Sale systems, and serve as records of purchase transactions to permit retailers to operate against a standard schema with varied purchase channels.

fabric Orders API creates orders real time in the orders database, unifying the order data for users to streamline order lifecycle orchestration and customer service operations. It offers a range of features including the ability to create orders, get orders, update pickup details, and track orders, as well as search for existing orders. Also, the Orders API makes it easy to check eligibility of return, cancel, and exchange requests as well process them, if eligible. In addition, you can flag fraudulent orders based on due diligence, and either release them from hold or cancel them altogether. The appeasement feature helps you resolve any issues that may arise with an order and keep your customers happy.


# Update Shipping information for an existing order by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/update-attributes
The following endpoint is used to update attributes by order number.



# Update Order Attributes

orders.openapi post /orders/{orderId}/actions/update-attributes
The update attributes endpoint is used to update order attributes using the order ID. Attributes can be updated in the integration layer to modify external system related information.



# Update customer details for given order IDs

orders.openapi post /orders/actions/update-customer
In many scenarios, customer details may change over time. For example, a customer might change their email, phone, or company affiliation. <p> By providing the order IDs and the updated customer details, this endpoint facilitates updating customer info for the given order IDs. This ensures order-related communication reaches the customer and they get timely customer service. </p>



# Updates order pick-up details

orders.openapi put /orders/{orderId}/ship-info/{shipToId}/pickup
Customers can choose to either have their order delivered to them or opt to pick up from a store or warehouse. In a Buy Online Pickup in Store (BOPIS) scenario, there may be situations when the primary pickup person has changed. <p> This endpoint allows for the updating pickup person details in BOPIS, ensuring that the most up-to-date information is available.</p>



# Add items to shipping method

shipping-methods.openapi post /shipping-methods/{shippingMethodId}/actions/add-items
You may want to offer different shipping options for items based on their weight and dimensions, or you may want to offer promotional shipping rates based on order value, customer loyalty, etc. <p> This endpoint lets you add items to an existing shipping method so that shoppers can see the options. </p>



# Delete items from shipping method

shipping-methods.openapi post /shipping-methods/{shippingMethodId}/actions/delete-items
Certain items may need to be removed from a shipping method when they're discontinued, new shipping restrictions are imposed on hazardous items, or when they're not eligible for current promotions.<p> Using this endpoint, you can delete one or more items from the given shipping method. </p>



# Get item IDs for given shipping method

shipping-methods.openapi get /shipping-methods/{shippingMethodId}/items
You may want to determine what items are in a specific shipping method, to calculate shipping costs, verify the eligibility of items for specific shipping methods, or display the list of items to shoppers during the checkout process.<p>This endpoint is used to get item IDs for a given shipping method. </p>



# Get shipping methods

shipping-methods.openapi post /shipping-methods/actions/filter-by-item-id
You may need to periodically review shipping methods associated with an item, either to answer related queries or to verify they're up to date. <p> This endpoint gets shipping methods for the given item ID.</p>



# Create shipping method

shipping-methods.openapi post /shipping-methods
On your storefront, shipping methods determine how products are delivered to your customers. Some of the common shipping methods are domestic, international, free shipping, and express delivery. <p> This endpoint is used to create a new shipping method. In the response, you will also get a shipping method ID, which will be required for subsequent calls to get, update, and delete this shipping method.</p>



# Delete shipping method

shipping-methods.openapi delete /shipping-methods/{shippingMethodId}
When a particular shipping service is discontinued or certain shipping methods have become redundant or non-compliant with existing regulations, you may want to remove them so they're not shown to shoppers. <p> This endpoint deletes a shipping method by ID. </p>



# Find shipping methods

shipping-methods.openapi post /shipping-methods/search
At checkout, customers choose their preferred shipping method based on delivery timelines and costs. Moreover, it may be necessary for you to review available shipping methods to ensure they're current and accurate. To support these scenarios, you must get the latest shipping methods. <p> This endpoint gets shipping methods based on given filter conditions.</p>



# Get shipping method

shipping-methods.openapi get /shipping-methods/{shippingMethodId}
When an order is placed, the selected shipping method is stored as part of order details. You may need to review them for order related queries. <p> This endpoint gets details of a single shipping method by ID. </p>



# Update shipping method

shipping-methods.openapi put /shipping-methods/{shippingMethodId}
To comply with legal regulations and for other purposes, it may be necessary to update shipping rates or delivery timelines. <p> With this endpoint, you can update shipping details by ID. This completely replaced existing information. </p>



# Add or update items in a shopping list

lists.openapi post /lists/{listId}/actions/add-or-update-list-items
Once a shopping list is created, shoppers can add new item to it or update existing ones. This endpoint is used to add and update items in a list. <p> - If the specified `sku` is not in the list, a new item is added to the list with the given `quantity`. <br/> - If the specified `sku` is already in the list, its current quantity is updated based on the given `incQuantity`.</p> <p> **Note**: At least one item must be in the request body.</p>



# Delete items from shopping list

lists.openapi  post /lists/{listId}/actions/delete-list-items
Over time, shoppers' preferences may change, or they might have added an item to their shopping list by mistake. <p> This endpoint lets your shopper remove one or more products from the specified shopping list.</p>



# Get shopping list and its items

lists.openapi get /lists/{listId}/actions/get-list-details
By specifying list ID, you can get shopping list details along with its items.



# Get shopping list items by list ID

lists.openapi get /lists/{listId}/list-items
Shoppers may periodically review their shopping list to check for discounts or when they are ready to make a purchase. <p> This endpoint gets a paginated list of items by list ID. You can refine the results by specifying `offset` and `limit`. When they are not specified, you will get up to 10 records. </p>



# Get shopping lists of a user along with associated items

lists.openapi get /lists/users/{userId}/actions/get-list-details-with-items
Shoppers may periodically review their shopping lists and their associated items. <p> This endpoint gets shopping lists and associated items. For each list, you can view list ID, list name, user ID, list type, notes, custom attributes, items count, times of list creation and list update, as well as item details.</p>



# Create shopping list

lists.openapi post /lists
Shoppers often choose to save their desired products in shopping lists to purchase later when they are ready or to take advantage of discounts when they are available. <p> This endpoint creates a new shopping list. The response includes a list ID, which is required for subsequent calls to get, update, or delete this shopping list.</p> <p> **Note**: Items can't be added when the shopping list is initially created. To add items, use the *Add items to list* endpoint - `POST /lists/{listId}/actions/add-or-update-list-items`.</p>



# Delete a shopping list by ID

lists.openapi delete /lists/{listId}
Shoppers need to remove unwanted or irrelevant shopping lists. With this endpoint, they can delete a list by list ID.



# Get a shopping list by ID

lists.openapi get /lists/{listId}
Get details of a shopping list by ID, along with the number of items in it.



# Get shopping lists of a user

lists.openapi get /lists/users/{userId}
Shoppers may want to periodically review their shopping lists and ensure they are up to date. <p> This endpoint gets a paginated response of shopping lists by user ID. For each list, you can view user ID, list ID, list name, type, notes, custom attributes (if any), as well as time of list creation and update.</p> <p> **Note**: <br/> 1. You can refine the results by specifying `offset` and `limit`. When they are not specified, you will get up to 10 records. <br/> 2. To view items in a list, refer to *Get lists with items* endpoint - `GET /lists/users/{userId}/actions/get-list-details-with-items`.</p>



# Getting Started with Lists



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Shopping Lists** API is a multi-tenant service that allows your shoppers to manage their shopping lists for future purchases. Shoppers can create lists, add items to lists, update lists and list items, as well as delete unwanted lists and items. Shopping lists are a popular e-commerce feature allowing shoppers to save desired products for future purchase. It not only helps to minimize shopping cart abandonment but also provides valuable insights into product popularity. In addition, shoppers who maintain shopping lists can be engaged in targeted marketing campaigns, enhancing customer engagement and satisfaction.

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/ordersLists.json)


# Update a shopping list by ID

lists.openapi put /lists/{listId}
Shoppers like to update their shopping lists and keep them relevant. <p> By specifying list ID, this endpoint lets your shoppers update their shopping list details such as list name, list type, notes, and custom attributes.</p>



# Create multiple collections

category.openapi post /collections/batch
Collection is an alternative way to organize products compared to the original Category system; they're created based on merchant's requirements. This endpoint is used to create a new collection **Note**: You can create up to 25 collections in a single call.



# Update collections up to 25

category.openapi put /collections
With this endpoint, you can update up to 25 collections. You can also update collection details, such as add sub-collections, exclude sub-collections, add validation rules for attributes, or reorder collections. **Note**:<br />1. This endpoint replaces the existing details.<br />2. To avoid losing all details, for minor updates, use the `partially update collection` endpoint - `PATCH /collections/{id}`



# Copy Category to Collections

category.openapi post /collections/actions/copy-category
This endpoint is used to replicate category tree hierarchy to collections.



# Create collection

category.openapi post /collections
Collection is an alternative way to organize products compared to the Category system, which is the original organization of items. Because the Category system isn't granular enough to meet all the requirements of Storefronts, collections are used to organize products as per the merchant's requirements. This endpoint is used to create a new collection within the alternative organization so that it can be adapted to support various use-cases of Storefronts.



# Delete collection

category.openapi delete /collections/{id}
If there is a change in product offerings, one or more collections may become unnecessary. This endpoint is used to delete a collection by ID.



# Find collections

category.openapi post /collections/search
This endpoint enables you to find collections by the search criteria you specify in the request body. You can also  `sort` the results.



# Get a single collection

category.openapi get /collections/{id}
Collections are used to organize and categorize products on your e-commerce platform (website and app), making it easier for shoppers to browse and find products. This endpoint gets category details such as basic info (ID, name, localized name, status, etc.), attributes details, categories included, categories excluded, associated child categories, and more.



# Get navigation path for collections

category.openapi get /collections-path
On the Storefront, products are organized in hierarchical tree structure of parent and children collections. This endpoint gets the navigation path starting from the root (level 0) until the given collections.



# Get products under collection

category.openapi get /collections/{id}/products
To ensure the right set of products are organized within a collection, it's important to review products in each collection. This endpoint gets a paginated list of products in a collection.  **Note**: You can refine your search by specifying `offset` and `limit`. When they're not specified, you'll get up to 10 products by default.



# Collections



As the **Categories** system may not be sufficiently granular to accommodate all Storefront use cases, **Collections** provides an alternative means of organizing products on the storefront. Collections create a representational categorization of products, and are primarily used by merchants for short-term marketing campaigns. For instance, a collection could be created for a New Year sale that highlights discounted furniture products.


# Partially update collection

category.openapi patch /collections/{id}
In contrast to the Update Collection endpoint - `PUT /collections/{id}`, which fully overwrites the collection details, this endpoint allows for selective modification of specific details such as fixing any typos present in the collection name as well as facilitating addition or removal of attributes



# Update children of collection

category.openapi put /collections/{id}/children
This endpoint is primarily used to change display order of children collection.



# Update collection

category.openapi put /collections/{id}
With this endpoint, you can update details of a single collection, such as add or remove sub-collections, add validation rules for attributes, reorder collections, and more. **Note**: <br /> 1. This endpoint replaces the existing details. <br /> 2. To avoid impacting the entire data, for minor updates, use the Partially update collection endpoint instead - `PATCH /collections/{id}`.



# Create file object and get file upload location

files-jobs.openapi post /product-files
This endpoint creates a file object by specifying the import file's `type`, `name`, and `locale` in the request body. The response will include the URL location to upload the file.



# Download a file by ID

files-jobs.openapi get /product-files/actions/download
Use this endpoint to get a download link for imported file, which you can use to review or update the file . **Note**: The link is valid only for five minutes.



# Generate the import template

files-jobs.openapi post /product-templates/actions/generate
Bulk import must be in a standardized format. Using this endpoint, you can generate the template required to bulk import attribute, category, collection, item, and/or bundle.



# Get files available for a merchant

files-jobs.openapi get /product-files
Get files available for a merchant. This endpoint can be used to search for files using file names or file IDs. **Note**: Query parameter `ids` can't be combined with any other query parameters and pagination isn't supported when `ids` query is used.



# Bulk reassign products to a different category using filter conditions

product.openapi post /products/actions/filter-change-category
To enhance product visibility or improve product organization, you may want to reassign products to a different category. With this endpoint, you can asynchronously reassign products to a different category. Instead of waiting for results through the API response, you'll gets notified via email whether the products were successfully reassigned.



# Reassign products to a different category, synchronously.

product.openapi post /products/actions/change-category
To enhance product visibility or improve product organization, you may want to reassign products to a different category. With this endpoint, you can synchronously reassign up to 25 products to a different category. The response will show a list of successful and unsuccessful reassignments



# Cancel background jobs using job IDs

files-jobs.openapi post /product-jobs/{id}/actions/cancel
Cancel any in progress or scheduled background job by providing the job ID. Currently only supports item and variant import jobs.



# Get jobs related to products

files-jobs.openapi get /product-jobs
Get a paginated list of jobs related to products by specifying the query parameters such as job `ids`, `type`. You can refine the results by specifying `offset` and `limit`. **Note**: <br /> 1. Query parameter `ids` can't be combined with the rest of the query parameters and when it's specified, pagination isn't supported. <br /> 2. Query parameter `inputFileIds` supports up to 15 comma-separated file IDs and it can be combined only with the query parameter `lastJobOnly`. Pagination isn't supported when this parameter is used.



# Initiate job to export items and variants

files-jobs.openapi post /product-jobs/actions/export
Use this endpoint to trigger a job to export items and variants, by ids.



# Initiate job to export items and variants

files-jobs.openapi post /product-jobs/actions/filter-export
Use this endpoint to trigger a job to export items and variants based on the specified filter conditions.



# Search jobs

files-jobs.openapi post /product-jobs/search
Get a paginated list of jobs related to products and collections by specifying the request body. You need to specify the criteria for the search such as job `id`, `type`, `status`, `collectionId`, `inputFileId`.



# Change product category

product.openapi post /products/{id}/actions/change-category
This endpoint lets you change a product from one category to another. When managing a large number of products, this endpoint gives you the flexibility to organize products easily.



# Publish product by ID

product.openapi post /products/{id}/actions/publish
A newly added product can be in `Published` or `Draft` status. With this endpoint, you can publish the Draft version of a product.



# Unpublish product by ID

product.openapi post /products/{id}/actions/unpublish
Due to changes in market, you may have to remove a product from being live. With this endpoint, you can unpublish product.



# Get products in a bundle by SKU

product.openapi get /products/sku/{sku}/bundles
Bundle is a collection of products that are sold together as a single package. For example, a laptop is bundled with a carrying case and a wireless mouse to be sold as a package. This endpoint gets a paginated list of products by ID.  **Note**: <br />1. You can refine the results by specifying `offset` and `limit` values. When they're not specified, by default, you'll get up to 10 products. <br /> 2. If you don't have product SKU, use the corresponding ID-based endpoint - `GET /products/{id}/bundles`.<br /> 3. The `status` parameter is applicable to the `id` passed as path parameter and not for bundles. That is, the bundles returned in the response are the bundles attached to either the Live or Draft version of the product based on the `status` parameter.



# Publish product by SKU

product.openapi post /products/sku/{sku}/actions/publish
A newly added product can be in `Published` or `Draft` status. With this endpoint, by specifying `sku`, you can publish a product in Draft status.



# Unpublish product by SKU

product.openapi post /products/sku/{sku}/actions/unpublish
Due to changes in market, you may have to remove a product from being live. With this endpoint, you can unpublish a product by specifying `sku`.



# Product Catalog - Files and Jobs API



Product team: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | License: [fabric API License](https://fabric.inc/api-license)

fabric's **Files and Jobs** API supports bulk import and export of items, attributes, and bundles.

Generally, the first step is to download the appropriate template for import. There are separate endpoints to get templates for items (`POST /item-import-templates`), attributes (`POST /attribute-import-templates`), and bundles (`POST /bundle-import-templates`).

Once the import details are filled out in the template, you need to provide the file name and type in the request body of the `POST /files/product` endpoint. In the endpoint response, you will get the URL to upload the file to be imported. Using job exports endpoints, you can export the uploaded products and attributes based on specified criteria.

For information on the optimal methods to import data into fabric, see [Data Ingestion Best Practices](v3/api-reference/product-catalog/data-ingestion-best-practices).

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsFileAndJobs.json)


# Product Catalog - Published 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)

fabric Published Product Catalog API enables displaying products (items, variants, and bundles) and their details on your e-commerce platform (website or mobile app). Published products are products that are ready to be sold. These endpoints support getting one or more product details by product ID or SKUs also support search and filter functions, making it easier for shoppers to view product details such as descriptions, specification, images, and more. This will help them make informed purchases and enjoy a better shopping experience.

[Find out more about Product](https://developer.fabric.inc/v3/guides/product-catalog/overview)

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/productsPublishedProducts.json)


# Get collections by product ID

published-product.openapi get /published-products/{id}/collections
On your Storefront products are organized or grouped in logical groups called Collections. The main purpose of Collection is distribution management by displaying products on your website based on separate browsing structures required to achieve specific merchandising objectives, such as organizational requirements, multi-regional assortments, multi-channel assortments, and collections. This endpoint gets the collection details of a published product by ID. You can refine your search results by specifying query parameters - `collectionIds` and `collectionRootName` **Note**: <br />1. You can narrow down the results by specifying `offset` and `limit`. When they're not specified, by default, you'll get up to 10 products. <br /> 2. If you don't have product ID, use the corresponding item ID-based or SKU-based endpoints.



# Get products by IDs

published-product.openapi get /published-products/ids
Shoppers may want to view the products they've already identified or bookmarked, or you may want to promote a particular set of products as part of promotions. This endpoint get details of published products with or without variants, categories, bundle products, and collections. You can specify multiple comma-separated product `ids`. Using this endpoint, you can show up to 25 products on your Storefront.  **Note**: If you don't have product ID, use the corresponding item ID-based or SKU-based endpoints.



# Get products in a bundle by ID

published-product.openapi get /published-products/{id}/bundle-products
A bundle is a collection of products that are sold together as a single package. For example, a laptop is bundled with a carrying case and a wireless mouse to be sold as a package. This endpoint gets a paginated list of published products in a bundle by bundle ID. You can refine your search results by specifying query parameters - `excludeBundleProducts`, `excludeCollections`, `excludeCategories` and `excludeVariants` **Note**: <br />1. You can refine the results by specifying `offset` and `limit`. When they're not specified, by default, you'll get up to 10 products. <br /> 2. If you don't have product ID, use the corresponding item ID-based or SKU-based endpoints.



# Get published product by ID

published-product.openapi get /published-products/{id}
Your Storefront must displays all the relevant information for shoppers to make an informed purchase decision. This endpoint gets details of a published product (item, bundle, or variant) by ID, which can be used to display product details on your Storefront.  **Note**: If you don't have product ID, use the corresponding SKU-based or item ID-based endpoints.



# Get variants of published product by ID

published-product.openapi get /published-products/{id}/variants
Variants are the different versions of a product with different sizes, colors, or materials. For example, there are 12 variants of 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 shoppers more options. This endpoint gets a paginated list of variants of a published product by ID.  **Note**:<br /> 1. You can narrow down the search results by specifying `offset` and `limit`. When they're not specified, by default you'll get up to 10 records. <br /> 2. If you don't have product ID, use the corresponding SKU-based or item ID-based endpoints.



# Get bundle products by bundle SKU

published-product.openapi get /published-products/skus/{sku}/bundle-products
A bundle is a collection of products that are sold together as a single package. For example, a laptop is bundled with a carrying case and a wireless mouse to be sold as a package. This endpoint gets a paginated list of published products in a bundle by bundle SKU.  **Note**: <br />1. You can refine the results by specifying `offset` and `limit`. When they're not specified, by default, you'll get up to 10 products. <br /> 2. If you don't have product SKU, use the corresponding item ID-based or product ID-based endpoints.



# Get collections by product SKU

published-product.openapi get /published-products/skus/{sku}/collections
On your Storefront products are organized or grouped in logical groups called Collections. The main purpose of collection is distribution management by displaying products on your website based on separate browsing structures required to achieve specific merchandising objectives, such as organizational requirements, multi-regional assortments, multi-channel assortments, and collections. This endpoint gets the collection details of a published product by ID. You can refine your search results by specifying query parameters - `collectionIds` and `collectionRootName`.  **Note**: If you don't have SKU, use the corresponding item ID-based or product ID-based endpoints.



# Get published product by SKU

published-product.openapi get /published-products/skus/{sku}
Your Storefront must displays all the relevant information for shoppers to help them make an informed purchase decision. This endpoint gets details of a published product (item, bundle, or variant) by SKU, which can be used to display product details on your Storefront.  **Note**: If you don't have product SKU, use the corresponding item ID-based or product ID-based endpoints.



# Get published products by SKUs

published-product.openapi get /published-products/skus
Shoppers may want to view the products they've already identified or bookmarked, or you want to promote a particular set of products as part of promotions. This endpoint gets multiple published products based on `skus` (comma-separated values) and is useful to show product list (up to 25 products) on your Storefront.  **Note**: <br />1. Using the examples you can see separate response for items, variants, and bundles. <br /> 2. If you don't have product SKU, use the corresponding item ID-based or product ID-based endpoints.



# Get variants of published products by SKU

published-product.openapi get /published-products/skus/{sku}/variants
Variants are different versions of a product with different sizes, colors, or materials. For example, there are 12 variants of 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 shoppers more options. This endpoint gets a paginated response of variants of a published product by SKU.  **Note**:<br /> 1. You can refine results by specifying `offset` and `limit`. When they're not specified, by default you'll get up to 10 records. <br /> 2. If you don't have product SKU, use the corresponding item ID-based or product ID-based endpoints.



# Create counter

inventory.openapi post /inventory-counters
Create counter (also known as inventory position) for better tracking of inventories.



# Get all counters

inventory.openapi get /inventory-counters
Get all configured counters.



# Get counter by code

inventory.openapi get /inventory-counters/{counterCode}
Get details of a specific counter by specified counter code.



# Getting Started with Counters



Inventory Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Counters** API refers to inventory positions such as, available, in-transit, on-hand, or other custom positions. These endpoints let you read, update, and create custom counters that suit your business use case.


# Update counter by code

inventory.openapi put /inventory-counters/{counterCode}
Update a specific counter based on specified counter code.



# Create an inventory import file configuration

inventory.openapi post /inventory-import-configs
Create inventory import file configuration containing rules for queried file prefix



# Delete inventory import file config

inventory.openapi delete /inventory-import-configs/{id}
Delete inventory import file config containing rules for queried file prefix



# Force import halt

inventory.openapi post /inventory-imports/{importId}/actions/force-trigger
Force import halted due to zeroed out Inventories more than threshold



# Get uploaded file status and details

inventory.openapi get /inventory-imports/{importId}
Get uploaded file status and details by specifying `importId`.



# Get inventory import upload file configuration

inventory.openapi get /inventory-import-configs/{id}
Get inventory import file configurations containing rules for queried file prefix



# Get all file configurations

inventory.openapi get /inventory-import-configs
Get all file configurations for matching filter criteria



# Get uploaded files that match specified criteria

inventory.openapi post /inventory-imports/search
Get uploaded files that match specified criteria. Returned as paginated records.



# Import inventory data

inventory.openapi post /inventory-imports
Import inventory data by specifying file name. Successfully uploading the file triggers the import process, which is an event-driven extraction of the file's data to update the respective resource's system.



# Update inventory import file configuration

inventory.openapi put /inventory-import-configs/{id}
Update inventory import file configuration



# Inventory (3.0.0)



Inventory Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/inventory.json)


# Inventory FAQ



#### How can I upload inventory if I have more than one POS, WMS, or other sources of truth for inventory?

1.  Prepare a `.csv` file with the inventory details.
2.  Create a URL by using the bulk operation endpoint `POST/api/v2/inventory/aws/upload-url`.
3.  Upload the `.csv` file to the URL.

#### What are counters and how can I update them?

Counters are inventory positions, such as on-hand, allocated, shipped, and other customized positions. The types of counters are:

1.  **Base Counter:** Base counters refer to `onHand`, `Allocated`, `Shipped`, and any other custom counters that are created using the counter endpoint. Allocated counters are automatically calculated during the order workflow. Merchants can update all base counters, except `Allocated`, by using the following endpoints:
    *   Adjustment endpoint (`POST/v3/inventories/actions/find-and-adjust-inventory-counters`): Adjusts the counter quantity. Using this endpoint, you can only adjust the counter quantity, not other inventory details. You can increase or decrease the counter quantity by specifying the required quantity in the payload. For example, if the original counter quantity is 100 and you want to increase the quantity to 110, set the counter quantity as '+10' in the payload. The counter quantity is now updated to 110.
    *   Update inventory endpoint(`POST/v3/inventories/action/find-and-update`): Updates counter quantity and other inventory details.
2.  **Virtual Counter:**. Virtual counters refer to the counters available to purchase, `availableToPurchase`, which are calculated or updated during the order workflow. When an order is placed, the Order Management System (OMS) automatically allocates the order for shipping. After the order is allocated and shipped, the counters available to purchase is calculated based on the formula `onHand - allocated - shipped`.

#### How's data security or privacy managed for fabric’s Inventory module?

fabric’s REST APIs are protected with OpenID Connect (OIDC) and the identity introspector mechanism. In OIDC, identity information is communicated using JSON Web Tokens (JWTs). The data in fabric is stored in both MongoDB and S3. The MongoDB data is isolated per tenant in fabric Orders (also called OMS). You must create an [AWS configuration rule](https://aws.amazon.com/blogs/security/how-to-use-aws-config-to-monitor-for-and-respond-to-amazon-s3-buckets-allowing-public-access/) to ensure that the AWS S3 Bucket doesn't have public access. For example, one shouldn't be able to run the following command:

`curl <https://inventory-oms-refresher-prod01.s3.amazonaws.com/chicosprod/export/store/FabricStoreInventorySync_CHO_2023-06-15T08-31-00-827090592Z.csv>
`

Whenever data is requested, fabric will generate a S3 presigned URL to ensure secure access.

#### What's the primary use case for fabric’s Inventory module?

The primary use case for fabric Inventory is to prevent *overselling* during transactions by providing real-time inventory data via REST API and event-driven integrations, for the storefront and other downstream applications to accurately display available products for sale.

#### What's the primary interface for user operations?

fabric Copilot is the Graphical User Interface where users may log in to manage their data via interactive web pages. Copilot provides an easy way for users to manage recurring operational workflows such as updating data where the solution architecture requires manual intervention. Copilot is also an easy way for implementation specialists to manage test data creation, updates, and configurations.

#### What's the primary interface for setting up integrations with Storefront and other applications?

fabric’s Inventory service provides over 30 OpenAPI 3.0 compliant REST API endpoints, documented under the API Reference at [https://developer.fabric.inc/v3/reference/about-inventory](/v3/api-reference/inventory/inventory/overview), for users to manage data. These APIs are the same ones used in Copilot and can be integrated into the retailer's enterprise systems such as the storefront, inventory management systems, search, marketing platforms, and more. Not all APIs are available in Copilot, and some are required to use fabric Inventory for getting inventory in real-time from the storefront for use cases such as Ship-to-home, Omnichannel, and 'Buy Online Pickup In-Store' order placement.

#### How can I begin using fabric's Inventory module?

fabric’s Inventory module is typically packaged with fabric Orders (also called OMS). It provides enterprise-level inventory visibility with network aggregation and enables updating of order fulfillment logic without coding.

To get started using fabric’s Inventory module, follow these steps:

1.  Sign up or log in to your fabric account.
2.  Get an access token from fabric Copilot or using the [fetch access token](/reference/getaccesstoken) endpoint.
3.  Familiarize yourself with the core concepts such as [Location](/docs/orders-locations), [Inventory](/docs/orders-inventory), [Network](/docs/orders-networks), Counter, Virtual Counter, and other available features and options as described in the guide.
4.  [Import](/docs/orders-inventory#importing-inventory) or add your initial inventory data.
5.  Set up any additional configurations or preferences specific to your needs.

#### What are the differences between counters and virtual counters in fabric?

**Counters**, also called base counters, refer to inventory positions such as `onHand`, `Allocated`, `Shipped`, and any other counters that are configured using the counter endpoint. These values can be updated through the **Inventory detail** page in fabric Copilot or using the adjustment endpoint- POST/v3/inventories/actions/find-and-adjust-inventory-counters. This lets you increase or decrease the counter quantity, but it doesn't allow you to change other inventory details. Alternatively, you can use the update inventory endpoint- POST/v3/inventories/action/find-and-update, which allows you to update both the counter quantity and other inventory details.

**Virtual counters** refer to the aggregation of real-time inventory availability. The inventory virtual counters are viewable on the inventory landing page in fabric Copilot. Their calculation from counters is configured in the virtual counter calculation. Basically, these are computed from counters at runtime. For example, `availableToPurchase = onHand - allocated - shipped`.

#### What's the significance of inventory-imports in fabric’s Inventory module?

For most retailers with a warehouse, point of sale, or other inventory source of truth system, the first step to begin using fabric Inventory (after generating your access token) is importing your inventory. As a user of fabric Inventory, you should integrate your one or many inventory systems of record, such as WMS, ERP, or POS, with fabric Inventory. This allows fabric Inventory to manage a SSOT ('Single Source of Truth') for reference of inventory in your commerce applications including storefronts, search functionalities, and other areas within your ecommerce solution architecture.

#### How can retailers integrate existing inventory systems with fabric Inventory?

**Single Inventory Management System**

If retailers have a single system of record for inventory, the inventory-import process doesn't require any configuration for multiple file groups. If retailers don't have a need to manage inventory aggregation, order fulfillment, or location data in fabric OMS (also called Orders), they can start importing inventory against the default location using the Import API. To import your inventory data to fabric, you must upload a CSV file with all inventory details. You can download sample CSVs from Copilot within the inventory import modal, for your reference.

**Multiple Inventory Management Systems**

If retailers have multiple systems of record for inventory, they can use the "file groups" feature to configure their inventory feeds in fabric. This feature ensures that inventory updates are limited to the specific group of locations corresponding to the inventory system performing the upload

**Inventory updates in real-time with event-driven data streaming**

If retailers want a more real time approach than relying solely on CSV-driven bulk imports, we recommend to directly update inventory levels on a single-inventory basis using the update [inventory API](/v3/api-reference/inventory/inventory/adjust-inventory-counters). To create or update inventory, you must provide the necessary fields including SKU, item ID, location, channel ID, and counters. If you are exclusively using the fabric Inventory module without the fabric Orders (OMS) module, you must manually update the reserved, allocated, and shipped counter quantities as orders are fulfilled.

#### Why should I use fabric Inventory as a Single Source of Truth for my Inventory?

For retailers with distributed inventory, fabric Inventory is an optimal solution for effectively managing the aggregation of real-time inventory into a Single Source of Truth (SSOT). For each location you want to manage inventory for, a location with a unique location number must exist. In addition, you can configure networks of locations sharing inventory using Network APIs.

For testing purposes, fabric Inventory is pre-configured with a default location where all inventory is initially assigned. To manage inventory for each specific location, it's necessary to have a unique location number to every SKU during bulk upload. You can configure networks of locations that share inventory, by using the Networks interface.

#### How do I manage Inventory aggregation in fabric?

Inventory aggregation rules can vary from simple to very complex. This is possible through the Network service of fabric’s Inventory module, which facilitates a real-time inventory aggregation functionality.

**Simple Aggregation**

If you manage inventory aggregation in an external system and don't plan to manage it within fabric, or if you don't have complex distributed fulfillment and inventory requirements, then the Simple Aggregation approach within fabric Inventory's Network feature may be suitable for your usage.

Your default network configuration is simple and requires no additional configuration to automatically aggregate all inventory in your “Sandbox” environment instance of fabric. This is possible because the rules in your default “starter” Network contains a rule for your default Location which dictates that, as long as the location `isActive` flag is set to “TRUE,” all inventory uploaded for your default location will be included in the aggregated inventory availability.

**Complex Aggregation**

Your network configuration can also be very complex. fabric’s Inventory Networks support the ability to create groups of inventory by defining “Inventory Networks” with inclusion and exclusion rules for inventory aggregation. Inventory Networks can aggregate inventory across groups of fulfillment centers for different selling requirements such as channels, brands, or fulfillment method eligibility. For example, you may want to create “Network C,” for domestic selling which includes all stores and warehouses, and “Warehouse Network,” for International selling which only includes warehouses. This can be achieved with the following two steps:

*   First, create the rules ([https://developer.fabric.inc/v3/reference/createnetwork](/v3/api-reference/inventory/networks/create-inventory-network))for how inventory is aggregated in stores and warehouses. You may want to set up a rule set for “Network A” called “Store Network” and another rule set for “Network B” called “Warehouse Network,” each of which can have different inclusion and exclusion parameters based on the attributes of your location and product data.
*   In the second step, you may want to set up “Network C,” naming it “Domestic Selling,” and making it a “Multiple Network” type which is created by selecting the store inventory and warehouse inventory through the Multiple Network setup process. Now, you have a way to combine inventory pools for Domestic, while simply relying on the “Warehouse Network” for International selling. For both networks, you can call the Inventory API to look up inventory in real-time on the storefront, such as the Product Display Page (PDP) and other use cases, by passing the network code in the request object.

Before utilizing Complex Aggregation to use product data in fabric’s Network rule-setting interface, you must decide whether to use fabric's Product Catalog or a third-party product information management system. If you are using a third-party system, you must provide product details to fabric’s Catalog Connector.

To use product data in the Network rule-setting interface, decide whether you are using fabric’s Product Catalog or a third-party product information management system. If using a third-party system, you need to provide product details to the Catalog Connector.

Also, define your location details using the Locations service through either [Copilot](/docs/orders-location) or the [APIs](/reference/location). You may also configure custom attributes on the location model if you want to extend the JSON data model to support more fields.

**Note:** Custom attributes only support key-value data in a single “attributes” object of the service collection response format. Once a custom attribute is configured, it will apply for all data in the service collection.

#### What are the advanced configurations and features of fabric’s Inventory service?

**1. Backorder and Preorder**

Managing backorder and preorder inventory follows the same workflows as regular inventory, allowing seamless management through both [Copilot](/docs/orders-pre-order-and-backorder) and [API interfaces](/v3/api-reference/orders/backorders-preorders/overview). In the fabric Inventory module, the primary feature of Backorder and Preorder is the ability to reduce the available quantity of backorder or preorder products so that the inventory remains balanced even when orders are placed, and the inventory is marked as `OnHand` for availability.

**2. Safety Stock and Low Stock Setting**

In addition to the import-inventory and network features, you may configure values for `safetyStock` and `lowStock` fields while creating or updating either networks or inventory.

**3. Infinite Inventory Flag**

If you want to represent an inventory in unlimited quantities, you may set `infiniteInventory` to 'true' and reference that attribute on the storefront and other downstream systems consuming inventory from fabric.

#### Can I use fabric Inventory without using the fabric Orders module. If so, how?

Yes, fabric provides the flexibility of using only Inventory service independently without implementing the whole of fabric’s order management system into your business.

If you're not using the fabric Orders module, you must manually update the 'allocated' and 'shipped' counters using the [adjust inventory endpoint](/v3/api-reference/inventory/inventory/adjust-inventory-counters) every time an order is created, allocated, and shipped. Similarly, you will have to update inventory records using the [update inventory endpoint](/v3/api-reference/inventory/inventory/update-inventory-by-adding-new-property). When updating the `onHand` counter, remember that the 'availableToPurchase' quantity is calculated based on the default formula `onHand - allocated - shipped - safetyStock`. Note that the `availableToPurchase` quantity can be customized based on requirement. Contact fabric Support to customize `availableToPurchase`.

#### How can I upload inventory data from multiple sources?

To upload inventory data from multiple sources, you must create an upload URL by using the bulk operation endpoint. Prepare a .csv file with all the inventory details from your POS, WMS, or other sources, then upload this file to the URL you have created.


# Adjust inventory counters

inventory.openapi post /inventories/actions/find-and-adjust-inventory-counters
With this endpoint, you can modify inventory counters (also known as inventory positions) to maintain accurate inventory records. These counters are adjusted when new inventory is received or when an item is shipped. If the inventory does not exist, an error message will be displayed. An inventory can have multiple counters, and all counters will be updated when this endpoint is used.



# Create inventory

inventory.openapi post /inventories
Create inventory based on the combination of location number, channel ID, and item ID or SKU.



# Find inventories of specific items

inventory.openapi post /inventories/actions/find
Search for inventories of specific items by SKUs, itemIds, location numbers, and other parameters as specified in the request body. This endpoint retrieves the exact available quantity of the searched inventory.



# Find inventory of specific items in a specific region

inventory.openapi post /inventories/actions/find-by-geography
Search for list of inventories of specific items  in a specific region based on SKUs, postal code, latitude, longitude, and other details of the location as specified in the request body.



# Getting Started with Inventory



Inventory Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Inventory** API lets organizations use *Inventory* as a standalone service, which functions as the repository of product availability for order fulfillment. Typically, Storefront Websites use the Inventory service to retrieve data, while Warehouse Management Systems (WMS) use it to create and update inventory details. fabric's Inventory API includes high-performance endpoints built on highly scalable architecture, and includes a configurable data model to orchestrate the inventory lifecycle events.


# Search for inventories

inventory.openapi post /inventories/search
Search for inventories based on filter criteria.



# Update inventory by adding new property

inventory.openapi post /inventories/actions/find-and-update
Add a new property to existing inventory. <p> **Note:** This endpoint does not override all the existing properties; rather it updates inventory by adding new properties or by updating the existing inventory properties that are specified in the request body. Inventory is identified based on the combination of location number, channel ID, and item ID or SKU. </p>



# Cancel an outage using outageNumber

locations.openapi post /location-outages/outage-number/{outageNumber}/actions/cancel
Using the location outages cancel endpoint you can cancel a location outage by providing the `outageNumber`.



# Cancel an outage using outageID

locations.openapi post /location-outages/{outageId}/actions/cancel
The location outages cancel endpoint is used to cancel an outage by providing the `outageId`.



# Create a location

locations.openapi post /locations
Create a location to use for managing inventory and orders.



# Create Outage

locations.openapi post /location-outages
The location outages endpoint is used to create a location outage.



# Delete a location

locations.openapi delete /locations/{locationNumber}
Delete a location by location number.



# Get LocationOutages by query

locations.openapi post /location-outages/search
Get a filtered list of LocationOutages.



# Get a specific location

locations.openapi get /locations/{locationNumber}
Get a specific location by location number.



# Get locations by query

locations.openapi post /locations/search
Get a list of locations by specified filter criteria.



# Getting Started with Locations



Inventory Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Locations** API provides location endpoints that support multi-tenant services. This location data is used for both inventory management and order management. When an order is created, it's allocated to the nearest location according to the Order Fulfillment Logic.

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/inventoryLocations.json)


# Search for nearby locations

locations.openapi post /locations/geography-search
Search for nearby locations based on city name, state, postal code, and other geographical details as mentioned in the request body.



# Update a specific location

locations.openapi put /locations/{locationNumber}
Update details of a specific location by location number.



# Update an outage by outageNumber

locations.openapi put /location-outages/outage-number/{outageNumber}
You can use the location outages outage number endpoint to update the details of a specific location outage by providing its outageNumber.



# Update an outage using outageID

locations.openapi put /location-outages/{outageId}
Update the details of a specified location outage by providing the `outageId`.



# Create inventory network

inventory.openapi post /inventory-networks
Create a network using conditional rules to add locations and SKU to the network.



# Delete network by code

inventory.openapi delete /inventory-networks/{networkCode}
Delete a specific network, with all its details, by specified network code. Once deleted, it can't be undone.



# Get all networks

inventory.openapi get /inventory-networks
Get a paginated list of all the created networks.



# Get network by code

inventory.openapi get /inventory-networks/{networkCode}
Get details of a specific network by code.



# Update network by code

inventory.openapi put /inventory-networks/{networkCode}
Update details of a specific inventory network by specified network code.



# Get allocation by ID

allocations.openapi get /allocations/{allocationId}
Get allocation details by allocation ID. The allocation ID can be obtained using the `/allocations/search` endpoint or stored externally, for example, in the WMS order database.



# Getting Started with Allocations



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Allocations** API lets retailers manage allocation for existing orders. Allocations serve as records of the locations from which an order is fulfilled. The user of the Allocation service is a Warehouse Management Service (WMS) or Point of Sale Service (POS).

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/ordersAllocations.json)


# Search for allocations by query

allocations.openapi post /allocations/search
Search for inventory allocations based on the matching filter criteria.



# Update allocation or initiate reallocation

allocations.openapi put /allocations/allocation-request-id/{allocationRequestId}
Update allocation or initiate reallocation of the order by `allocationRequestId`.



# Update allocation attributes

allocations.openapi post /allocations/{allocationId}/actions/update-attributes
Update allocation attributes by `allocationId`.



# Create appeasement by order ID

orders.openapi post /orders/{orderId}/actions/create-appeasement
When customer is dissatisfied with their shopping experience, you may want to offer an appeasements amount such as partial refund to keep them happy. <p> This endpoint is used to create appeasement request by order ID </p> <p>. **Note**: If you do not have an order ID, but have an order number, use the order number-based endpoint - `POST /orders/order-number/{orderNumber}/actions/create-appeasement`.</p>



# Create appeasement by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/create-appeasement
When customer is dissatisfied with their shopping experience, you may want to offer an appeasement amount to keep them happy. <p> This endpoint is used to create appeasement request by order number.</p> <p> **Note**: If you don't have order number, use the corresponding order ID-based endpoint - `POST /orders/{orderId}/actions/create-appeasement`</p>



# Getting Started with Appeasements



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Appeasements** API endpoints help create appeasements.


# Get backorder or preorder details by ID

backorders-preorders.openapi get /backorders-preorders/{id}
Get backorder or preorder reservation details by ID.



# Getting Started with Backorders & Preorders



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Backorders and Preorders** API refer to orders placed for products not currently available for shipment or sale. Backorders are orders for out-of-stock products that will be shipped to customers as soon as they're available for shipment. Preorders are orders for products that aren't yet available in the market, but will be launched for sale. Customers can preorder products, and the products will be shipped when they're available for sale. fabric's Backorders & Preorders API supports multi-tenant service.

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/ordersBackorders.json)


# Record customer agreement to delay shipment

backorders-preorders.openapi post /backorders-preorders/{id}/actions/save-delay-consent
Record customer's agreement to delay the shipment.



# Search for backorders or preorders by query

backorders-preorders.openapi post /backorders-preorders/search
Search for the backorder or preorder reservations based on filter criteria.



# Cancel order by order ID

orders.openapi post /orders/{orderId}/actions/cancel
When customer's order cancellation request is determined to be eligible, this endpoint processes the cancellation by order ID. <p> **Note**: If you do not have the order number, use the corresponding order number-based endpoint - `POST /orders/order-number/{orderNumber}/actions/cancel`.</p>



# Cancel order by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/cancel
When customer's order cancellation request is determined to be eligible, this endpoint processes the cancellation by order number. <p> **Note**: If you do not have order number, use the corresponding order ID-based endpoint - `POST /orders/{orderId}/actions/cancel`. </p>



# Get order cancellation eligibility by order ID

orders.openapi post /orders/{orderId}/actions/check-cancel-eligibility
Either customer may initiate cancellation due to an incorrect order placement or as a merchant, you may initiate cancellation due to product unavailability, pricing errors, payment failure, or shipping restrictions. Before processing cancellation, it's crucial to determine the eligibility of the cancellation request. <p> This endpoint gets the eligibility of order cancellation by order ID. You can additionally specify `lineItemIds` to get the eligibility of specific line items.</p> <p> **Note**: If you do not have order ID, use the corresponding order number-based endpoint -`POST /orders/order-number/{orderNumber}/actions/check-exchange-eligibility`.</p>



# Get order cancellation eligibility by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/check-cancel-eligibility
Either customer may initiate cancellation due to an incorrect order placement or as a merchant, you may initiate cancellation due to product unavailability, pricing errors, payment failure, or shipping restrictions. Before processing cancellation, it's crucial to determine the eligibility of the cancellation request. <p> This endpoint gets the eligibility of the cancellation request by order number. You can additionally specify `lineItemIds` to get the eligibility of specific line items.</p> <p> **Note**: If you do not have order number, use the corresponding order ID-based endpoint - `/orders/{orderId}/actions/check-cancel-eligibility`.</p>



# Getting Started with Cancellations



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Cancellations** API endpoints check eligibility of order cancellation requests and if eligible, processes order cancellation.


# Check credits eligibility by order ID

orders.openapi post /orders/{orderId}/actions/check-credits-eligibility
In case of refund scenarios, credits such as gift card may be offered to customers for various reasons such as damaged products, later deliveries, or other qualifying factors as per your policy. <p> This endpoint checks the credits eligibility by order ID, allowing businesses to manage credits effectively and provide appropriate compensation to eligible customers.</p>



# Create credits by order ID

orders.openapi post /orders/{orderId}/actions/create-credits
Use this endpoint to create credits by order ID.



# Create credits by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/create-credits
The following endpoint is used to create credits using an order number.



# Update credit status by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/update-credit-status
The update credit status endpoint is used to update the credits status, notes, and additional credit attributes.



# Update credits by order ID

orders.openapi post /orders/{orderId}/actions/update-credit-status
Use this endpoint to update the credit status, as well as to add any associated notes and additional attributes.



# null

shipments.openapi post /shipments/inventory-transfer/{transferShipmentId}/action/cancel



# null

shipments.openapi post /shipments/inventory-transfer



# null

shipments.openapi get /shipments/inventory-transfer/{transferShipmentId}



# null

shipments.openapi post /shipments/inventory-transfer/query



# null

shipments.openapi post /shipments/inventory-transfer/search



# null

shipments.openapi post /shipments/inventory-transfer/{transferShipmentId}/actions/package-tracking-acknowledge



# null

shipments.openapi post /shipments/inventory-transfer/pack-unpack



# null

shipments.openapi post /shipments/inventory-transfer/{transferShipmentId}/action/receiving



# null

shipments.openapi post /shipments/inventory-transfer/actions/update-tracking



# Acknowledge financial transaction

invoices.openapi post /invoices/{invoiceId}/acknowledge
When an order is created or processed, fabric generates invoice and sends it to merchants or third-party systems for further financial processing of the order. This endpoint lets merchants acknowledge that they have received the invoice with payment information.



# Get invoice by ID

invoices.openapi get /invoices/{invoiceId}
Get details of an invoice by invoice ID.



# Getting Started with Invoices



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Invoices** API helps in generating invoices that can be used by any third party system for order fulfillment operation.

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/ordersInvoices.json)


# Search for invoices

invoices.openapi post /invoices/search
Search for invoices by matching filter criteria.



# Get acknowledgment receipt for notification

notifications.openapi post /oms-notifications/acknowledge
This endpoint gets notification acknowledgment from external service.



# Resend notifications

notifications.openapi post /oms-notifications/actions/resend
When an order is placed, the first notification is automatically sent to shopper. If the first notification isn't delivered for reasons such as incorrect email or server issues, this endpoint resends notification for specific events.



# Authorize order payments

orders.openapi post /orders/actions/authorize-payments
This endpoint is used synchronously or asynchronously for authorizing order payments pending for authorization.



# Getting Started with Order Payments



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Order Payments** API endpoints update payment status.


# Update order payment status by order ID

orders.openapi post /orders/{orderId}/actions/update-payment-status
This endpoint is used sync order payments when transactions happen externally. Additionally, used for updating order payment status and the amount, whether it is captured, refunded or void amount. <p> If you don't have order ID, use the corresponding order number-based endpoint - POST /orders/order-number/{orderNumber}/actions/update-payment-status.</p>



# Update status of order payment by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/update-payment-status
This endpoint is used sync order payments when transactions happen externally. Additionally, used for updating order payment status and the amount, whether it is captured, refunded or void amount. <p> If you don't have order number, use the corresponding order ID-based endpoint - POST /orders/{orderId}/actions/update-payment-status. </p>



# Get eligibility of returns for items in an order by order ID

orders.openapi post /orders/{orderId}/actions/check-return-eligibility
Customers may want to return one or more items because they do not meet the expectations or customer has changed their mind. Before processing return, it's crucial to verify whether the items are eligible for return as per your policy <p> This endpoint gets the eligibility of your return by order number. You can additionally specify `lineItemId` to get the eligibility of a single line item.</p> <p> **Note**: If you do not have the order ID, use the corresponding order number-based endpoint - `POST /orders/order-number/{orderNumber}/actions/check-return-eligibility`.</p>



# Get order exchange eligibility by order ID

orders.openapi post /orders/{orderId}/actions/check-exchange-eligibility
Customers may want exchange an item because of size, color, or style preferences. Before processing exchange, it's crucial to verify whether the item is eligible for exchange as per your policy. <p> This endpoint gets the eligibility of exchange request by order number. You can additionally specify `lineItemId` to get eligibility of a specific item.</p> <p> **Note**: If you do not have the order ID, but have the order number, use the order number-based endpoint - `POST /orders/order-number/{orderNumber}/actions/check-exchange-eligibility`.</p>



# Get order exchange eligibility by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/check-exchange-eligibility
Customers may want exchange an item because of size, fit, color, or style preferences. Before processing exchange, it's crucial to verify whether the item is eligible for exchange as per your policy. <p> This endpoint gets the exchange eligibility by order number. You can additionally specify `lineItemId` to get eligibility for a specific item.</p> <p> **Note**: If you do not have the order number, but have the order ID, use the order ID-based endpoint - `POST /orders/{orderId}/actions/check-exchange-eligibility`. </p>



# Get return eligibility by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/check-return-eligibility
Customers may want to return one or more items because they do not meet the expectations or customer has changed their mind. Before processing return, it's crucial to verify whether the items are eligible for return as per your policy <p> This endpoint gets the eligibility of return by order number. You can additionally specify `lineItemId` to get the eligibility of a single line item.</p> <p> **Note**: If you do not have the order number, use the corresponding order ID-based endpoint - `POST /orders/{orderId}/actions/check-return-eligibility`.</p>



# Order return by order ID

orders.openapi post /orders/{orderId}/actions/submit-return-request
When customer's return request is found to be eligible, this endpoint submits the return request by order ID. <p> **Note**: If you do not have order ID, use the corresponding order number-based endpoint- `POST /orders/order-number/{orderNumber}/actions/submit-return-request`.</p>



# Order return by order number

orders.openapi post /orders/order-number/{orderNumber}/actions/submit-return-request
When the customer's return request is determined to be eligible, this endpoint is used to process the return request. <p> **Note**: If you do not have the order number, but have order ID, use Return order by order ID endpoint - `POST /orders/{orderId}/actions/submit-return-request`.</p>



# Getting Started with Returns



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Returns** API endpoints check eligibility of order return or exchanges requests and, if eligible, processes order return or exchanges.


# Acknowledge shipment

shipments.openapi post /shipments/{shipmentId}/acknowledge
For users of fabric Webhook Service, Shipment related events can trigger HTTP callbacks to notify web clients through a merchant-defined URL/URI, typically an API Gateway for a middleware. While the response to fabric Webhook service HTTP call-back may occur, a secondary call-back can use this Acknowledge Shipment endpoint to indicate that a secondary external system has acknowledged this shipment event. Middleware receives the event, transforms it in a suitable format, and sends a success response back to fabric, confirming it received the event. It also sends the transformed event to an external merchant system (typically in XML or JSON).<p>With this endpoint, middleware immediately sends an asynchronous acknowledgement to fabric, based on shipping ID, to indicate whether the call was successful. This acknowledgement is used for learning, auditing, and taking any necessary action.</p>



# Create new shipment

shipments.openapi post /shipments
To use this endpoint an “allocation” must exist for the order that's being shipped. When an order is placed, fabric sends allocation details to external merchant system to create order fulfillment requirement details in an external system. With reference to the allocation that's being shipped, users of this POST API can create  shipment details for allocations. <p> **Note**: Shipment ID generated as part of the response is required for subsequent calls such as Acknowledge shipment (`POST /shipments/{shipmentId}/acknowledge`) and Get shipment (`GET /shipments/{shipmentId}`).</p>



# Create re-shipment

shipments.openapi post /shipments/actions/re-ship
Orders may go missing before they're delivered to customers for reasons such as incorrect address, theft, labelling issues, or other reasons. This endpoint triggers reshipment in such cases for the existing location. <p> **Note**: Shipment ID generated as part of the response is required for subsequent calls such as Acknowledge shipment (POST /shipments/{shipmentId}/acknowledge) and Get shipment (GET /shipments/{shipmentId}).</p>



# Find shipments

shipments.openapi post /shipments/search
As merchants, you may want to view shipments of specific statuses, monitor progress of deliveries, and proactively manage situations to ensure timely deliveries. <p> This endpoint enables you to easily search for shipments based on the specified criteria in the request body. You can refine your search by specifying `limit` and `offset`. When they're not specified, by default you will get up to 10 records. In addition, you can `sort` results.</p>



# Get shipment by ID

shipments.openapi get /shipments/{shipmentId}
As merchants, you may want to resolve customer queries related to shipment or track a specific shipment to manage customer expectations with timely communication. <p> This endpoint gets details of a single shipment by ID. You will get `shipmentId` by using the search endpoint, or by referencing a `shipmentId` on a file such as the Invoice.</p>



# Getting Started with Shipments



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Shipments** API is a multi-tenant service that enables you to manage shipments for existing 'Allocations.' Shipments serve as records of the locations from which an order was fulfilled. Typical user of fabric Shipment service is a Warehouse management service or Point of Sale service.

**Note**: Shipment API relies on the Allocation service to send allocation details to external merchant systems after an order is placed. Allocation is the prerequisite for using Shipment API.

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/ordersShipments.json)


# Update gift card activation status

shipments.openapi post /shipments/{shipmentId}/actions/update-gift-cards-status
This endpoint is used to activate gift cards before they're delivered to the customer. Typically used by “adapters” or external web services integrated with gift card applications, so that gift cards can be activated as part of the fabric fulfillment workflow.



# Update shipment tracking

shipments.openapi post /shipments/actions/update-tracking
The update tracking endpoint creates a new tracking log that can be used to update the order status. The most common application of this endpoint is to connect to external web services or 'adapters' that have been integrated with carrier tracking applications. With this endpoint, fabric Shipment service gets information from carrier tracking applications, and in turn, updates customers about their shipment status.



# Get acknowledgement for package tracking by order number

orders.openapi put /orders/order-number/{orderNumber}/actions/package-tracking-acknowledge
This endpoint gets acknowledgement of package tracking by order number. <p> **Note**: If you do not have order number, use the corresponding order ID-based endpoint - `PUT /orders/{orderId}/actions/package-tracking-acknowledge`.</p>



# Get package tracking acknowledgement by order ID

orders.openapi put /orders/{orderId}/actions/package-tracking-acknowledge
This endpoint gets acknowledgement of package tracking by order ID. <p> **Note**: If you do not have order ID, use the corresponding order number-based endpoint - `PUT /orders/order-number/{orderNumber}/actions/package-tracking-acknowledge`.</p>



# Getting Started with Tracking



Orders Support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new) | URL: [https://www.fabric.inc](https://www.fabric.inc) | License: [fabric API License](https://fabric.inc/api-license)

fabric **Tracking** API endpoints track orders.


# Create a file object and retrieve the file upload URL

cc.openapi post /catalog-connector-files
Use this endpoint to retrieve the URL of the AWS S3 location to upload the file that you want to import to the Catalog Connector.



# Download a file by ID

cc.openapi get /catalog-connector-files/actions/download
Use this endpoint to retrieve the URL used to download a previously processed file. You can then make a GET request with this URL to retrieve the products data in CSV or JSONL format.
<Note> The download link is valid for five minutes. </Note>




# Retrieve import and export history

cc.openapi get /catalog-connector-files
Use this endpoint to access files previously imported to or exported from the Catalog Connector, sorted in chronological order. You can refine the search results by using the following query parameters:
- `ids`: Provide a comma-separated list of file IDs to retrieve multiple files by their IDs. Note that pagination isn't supported when using this parameter.
- Format type (`formatType`) :  Specify the format of the file to filter files by format. The options are **CSV** or **JSONL**.
- Operation type (`type`): Use this parameter to specify whether you want imported or exported files.
- Pagination (`offset`, `limit`):  Use offset and limit parameters to refine the number of results returned.
- `sort`:  Use this parameter to view results in ascending or descending order.
If no query parameters are specified, the endpoint returns up to 10 records.




# Retrieve an import template

cc.openapi post /catalog-connector-templates/actions/generate
Use this endpoint to retrieve the product import template for Catalog Connector in either CSV or JSONL format, based on your preferred data handling method. You can open CSV template in applications, such as Excel or Google Sheets and JSONL template in text editors compatible with JSONL, such as Visual Studio Code. After filling in product data, save the template file with a unique name on your local system.



# Export products

cc.openapi post /catalog-connector-jobs/actions/export
Use this endpoint to start an internal job to export products from Catalog Connector. 
Specify the `formatType` query parameter to export data in either CSV or JSONL format. In the request body, provide the `ids` of all products to be exported, the product type, and the locale.




# Retrieve jobs

cc.openapi get /catalog-connector-jobs
Use this endpoint to retrieve a paginated list of import and export jobs related to Catalog Connector.
The following constraints apply when using the query parameters:
  - The query parameter job `ids` can't be combined with any other query parameters.
  - The query parameter `inputFileIds` can only be combined with the query parameter `lastJobOnly`. 
  - Pagination isn't supported when `ids` or `inputFileIds` is specified.




# Delete a product by Item ID

cc.openapi delete /catalog-connector/products/itemIds/{itemId}
Use this endpoint to delete a single product by its `itemId`. 

If you don't have the `itemId`, use one of the endpoints to delete the product: 
  - [Delete a product by SKU](/v3/api-reference/catalog-connector/operations/sku-operations/delete-with-sku). 
  - [Delete a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/delete-by-product).




# Retrieve a product or a variant by Item ID

cc.openapi get /catalog-connector/products/itemIds/{itemId}
Use this endpoint to retrieve a single product by its `itemId`. You must specify the query parameters `itemId` and `locale`. Optionally, you can set the following query parameters to `true` to refine the search results:
You must specify the query parameters `itemId` and `locale`. 
Optionally, you can set the following query parameters to `true` to refine the search results:
  - `excludeBundleProducts`: Exclude bundled products from the response.
  - `excludeCollections`: Exclude collections from the response.
  - `excludeCategories`: Exclude categories from the response.
  - `excludeAttributes`: Exclude attributes from the response. 
  - `excludeVariants`: Exclude variants from the response. 

If you don't have the `itemId`, use one of the endpoints to retrieve the product: 
    - [Update a product by SKU](/v3/api-reference/catalog-connector/operations/sku-operations/update-with-sku). 
    - [Update a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/update-by-product).




# Update a product by the Item ID.

cc.openapi put /catalog-connector/products/itemIds/{itemId}
Use this endpoint to update a single product by using its `itemId`. You can update the product's details, such as its name, category details, product images, attributes, and collections. However, you can't update the `itemId`. The new data completely replaces the existing data. 
You can update the product's details, such as its name, category details, product images, attributes, and collections. However, you can't update the itemId. The new data completely replaces the existing data. 

If you don't have the `itemId`, use the one of the endpoints to delete the product:
  - [Update a product by SKU](/v3/api-reference/catalog-connector/operations/sku-operations/update-with-sku).
  - [Update a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/update-by-product).




# Add a product

cc.openapi post /catalog-connector/products
Use this endpoint to add a single product to Catalog Connector. You must specify the `locale` in the query parameter and the product data in the request body. Only `sku` is mandatory for product data. Optionally, you can specify the `type` as item, variant, or bundle. The default setting for `type` is item.




# Delete a product by product ID

cc.openapi delete /catalog-connector/products/{productId}
Use this endpoint to delete a single product by its `productId`. 
If you don't have the `productId`, use one of the endpoints to delete the product:
  - [Delete a product by SKU](/v3/api-reference/catalog-connector/operations/sku-operations/delete-with-sku).
  - [Delete a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/delete-by-item).




# Retrieve a product by product ID

cc.openapi get /catalog-connector/products/{productId}
Use this endpoint to retrieve a single product by its `productId`. 
You must specify the query parameters `productId` and `locale`. 
Optionally, you can set the following query parameters to `true` to refine the search results:
  - `excludeBundleProducts`: Exclude bundled products from the response.
  - `excludeCollections`: Exclude collections from the response.
  - `excludeCategories`: Exclude categories from the response.
  - `excludeAttributes`: Exclude attributes from the response. 
  - `excludeVariants`: Exclude variants from the response. 

If you don't have the `productId`, use one of the endpoints to retrieve the product:
  - [Retrieve a product by SKU](/v3/api-reference/catalog-connector/operations/sku-operations/update-with-sku). 
  - [Retrieve a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/update-by-item).




# Update a product by product ID

cc.openapi put /catalog-connector/products/{productId}
Use this endpoint to update a single product by its `productId`. 
You can update the product's details, such as its name, category details, product images, attributes, and collections. However, you can't update the productId.
The new data completely replaces the existing data.

If you don't have the `productId`, use one of the corresponding endpoints:
  - [Update a product by SKU](/v3/api-reference/catalog-connector/operations/product-operations/update-by-product).
  - [Update a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/update-by-item).




# Find products

cc.openapi post /catalog-connector/products/search
Use this endpoint to search for products based on names, IDs, SKUs, image URLs, and more. By specifying the appropriate query parameters, you can exclude one or more types of data, such as collections, categories, variants, attributes, and products within a bundle.
<Note> 
  - Use the `CONTAINS` search operation to search for products based on keywords of SKU, name, and more. 
  - Use the `IN` search operation to search for products based on one or more values, such as IDs, names, SKUs, image URLs, attributes, and types.
  - Use the less than or equals to, `LTE`, greater than or equals to, `GTE`, less than, `LT`, greater than, `GT` and equals `EQ` operations to search for date-specific values, such as time of creation or modification.
</Note>




# Delete a product by SKU

cc.openapi delete /catalog-connector/products/skus/{skuId}
Use this endpoint to delete a single product by using its SKU. 

If you don't have the product SKU, use one of the endpoints to delete the product: 
 - [Delete a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/delete-by-product).
 - [Delete a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/delete-by-item).




# Retrieve a product by SKU

cc.openapi get /catalog-connector/products/skus/{skuId}
Use this endpoint to retrieve a single product by its SKU. You must specify the query parameters `sku` and `locale` to corresponding to the product. Optionally, you can set the following query parameters to `true` to refine the search results:
  - `excludeBundleProducts`: Exclude bundled products from the response.
  - `excludeCollections`: Exclude collections from the response.
  - `excludeCategories`: Exclude categories from the response.
  - `excludeAttributes`: Exclude attributes from the response. 
  - `excludeVariants`: Exclude variants from the response. 

If you don't have the product SKU, use one of the endpoints to retrieve the product: 
    - [Retrieve a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/retrieve-by-product). 
    - [Retrieve a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/retrieve-by-item).




# Update a product by SKU

cc.openapi put /catalog-connector/products/skus/{skuId}
Use this endpoint to update details of a product by its SKU. You can update details of the product, such as the product name, category details, product images, attributes, and collections. The new data replaces the existing data. Note that you can't update the SKU.
  
If you don't have the product SKU, use one of the endpoints update the product details:
  - [Update a product by product ID](/v3/api-reference/catalog-connector/operations/product-operations/update-by-product). 
  - [Update a product by item ID](/v3/api-reference/catalog-connector/operations/item-operations/update-by-item).




# 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 available exclusively to fabric users who don't have fabric’s proprietary Product Catalog service. Setting up Catalog Connector involves importing products, bundles, and their properties using a CSV or JSONL file.

Catalog Connector setup involves importing products and bundles and their properties in a CSV or JSONL file.


# Algolia standard integration



Use Algolia's search suite to enhance applications with search, recommendation, and browsing features by uploading product, pricing, and inventory data to Algolia. This integration enhances storefront functionalities including search, recommendations, and browsing based on your Algolia account settings. fabric aggregates product, pricing, and inventory data and sends it to Algolia SDKs for indexing.

fabrics Algolia integration supports the following key operations:

*   Define index settings during customer onboarding process.
*   Retrieve an index instance.
*   Save index records.
*   Delete index records.

![diagram](https://mintlify.s3-us-west-1.amazonaws.com/fabric-demo/images/integration-diagrams/algolia.png)

### Setting up the Algolia Connector

1.  Complete the setup and activation for your [Algolia](https://dashboard.algolia.com/users/sign%5Fup?ssnav=start) account.
2.  Submit a support request to [fabric customer success](https://support.fabric.inc/hc/en-us/requests/new) with the following details and search configurations:
    *   [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)
    *   **Should Save Zero Price Item**: Setting this configuration to `true` checks for records with prices equal to zero and determines whether these items are indexed. The default value is `false`.
    *   **Should Save Variants**: Setting this configuration to `true` publishes variant records. The default value is `false`.
    *   **Should Index Alternate Categories**: Setting this configuration to `true` indexes product categories. The default value is `false`.
    *   **Should Use I18N Service** (Localization): Setting this configuration to `true` localizes indexed data. The default value is `false`.
    *   **Price Lists**: Setting this configuration to `Enabled` 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`.

### Next steps

After you have completed the initial setup, you must use the Algolia dashboard to make changes to your index settings.


# Avalara standard integration



Use Avalara's cloud solution to manage tax compliance such as calculating tax rates, returns, and documents. This integration connects to your fabric account and is used by the fabric storefront to calculate taxes during checkout using Avalara SDKs.

fabric's Avalara integration supports the following key operations:

*   Creating an Avalara Tax Estimate

![diagram](https://mintlify.s3-us-west-1.amazonaws.com/fabric-demo/images/integration-diagrams/avalara.png)

### Setting up the Avalara Connector

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:
    *   **Avalara account ID**: Your unique Avalara account ID. For example, `110034662`.
    *   **Avalara API Key**: Your Avalara API Key used to make calls to the AvaTax API. For example, `C12EER1422IU76`.
    *   **Avalara company code**: Avalara assigns each company a unique code. For example, `NBF`.
    *   **Avalara customer code**: Avalara uses the customer code to calculate tax transactions. For example, `DEFAULT`.
    *   **Avalara environment**: Avalara supports multiple environments such as `Sandbox` and `Production` environments. Specify which environment you want to connect with fabric storefront.


# Constructor.io standard integration



Use the Constructor.io search suite to enhance search for product, pricing, recommendation, storefront, and inventory data. Constructor.io syncs with fabrics product 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 the Constructor.io SDK.

fabrics Constructor.io integration supports the following key operations:

*   Creating an item in Constructor.io
*   Deleting an item in Constructor.io
*   Updating an item in Constructor.io

![diagram](https://mintlify.s3-us-west-1.amazonaws.com/fabric-demo/images/integration-diagrams/constructor.png)

### Setting up the Constructor.io Connector

1.  Complete the setup and activation for your [Constructor.io](https://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**: To find your API Key, go to the **API Integration** section of your Constructor.io account dashboard. The API Key field is labeled **Sample Collection**.
    *   **Constructor.io API Token**: To generate an API Token, click **Generate API Token** in the **API Integration** section of your Constructor.io account dashboard.


# 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. The following standard integrations are currently supported:

*   [Stripe Connector](/v3/api-reference/integrations/stripe-standard-integration)
*   [Algolia Connector](/v3/api-reference/integrations/algolia-standard-integration)
*   [Constructor.io Connector](/v3/api-reference/integrations/constructor-io-standard-integration)
*   [Avalara connector](/v3/api-reference/integrations/avalara-standard-integration)

Custom integrations aren't supported at this time.

### Security

fabric takes security seriously and always follows the recommended security standards. AWS secret manager handles all the values passing between the standard integrations and keeps everything encrypted. Additionally, fabric uses each integrations 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 streaming product information updates or processing 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 standard integration



Stripe connects to your fabric account and is used by the fabric storefront to process payments during checkout. The fabric checkout experience calls Stripe SDKs to authorize, process, refund, or void payments.

fabrics Stripe integration supports the following key operations:

*   Create a payment
*   Authorize payments
*   Get a payment
*   Capture a payment
*   Refund a payment
*   Void a payment
*   Create a customer
*   Get a customer
*   Generate a client token

![diagram](https://mintlify.s3-us-west-1.amazonaws.com/fabric-demo/images/integration-diagrams/stripe.png)

### Setting up the Stripe Connector

1.  Complete the setup and activation for your [Stripe](https://stripe.com/) account.
2.  Submit a support request to [fabric customer success](https://support.fabric.inc/hc/en-us/requests/new) with the following details and configuration settings:
    *   [Stripe Secret Key](https://stripe.com/docs/keys)
    *   [Stripe Public Key](https://stripe.com/docs/keys)
    *   **Auto capture authorization**: This configuration determines if the capture should be performed in the authorization request. The auto capture default is `false`.
    *   **Payment method deleted after authorization**: This configuration determines if the payment token should be kept or invalidated for later uses. The default value is set to `true` to perform token invalidation. This is so guest users can be handled for this integration.


# Search for inventory hard reservations

inventory.openapi post /inventories/actions/hard-reserve-search
Search for hard reservations based on filter criteria.



# Release soft reservation

inventory.openapi post /inventory-networks/actions/soft-release
Release soft reservation.



# Soft reservation

inventory.openapi post /inventory-networks/actions/soft-reserve
Soft reserve quantity.



# Create attribute

attributes.openapi post /attributes
Use this endpoint to create a new attribute. Attributes can be used as part of the qualifications for promotions or coupons.



# Get attribute

attributes.openapi get /attributes/{attributeId}
Using this endpoint, you can get details of an attribute by its ID.



# Bulk update coupon codes

coupon-codes.openapi put /coupon-codes/batch
Use this endpoint to update multiple coupon codes using identifiers. Identifiers are a unique combination of a coupon code and a promotion ID. You can update up to 25 codes at a time.



# Get all coupon codes

coupon-codes.openapi get /coupon-codes
This endpoint provides coupon code lists. Use parameters to filter results, for example, set `status` as 'ACTIVE' for active coupons, or add `userId` for user-specific coupon codes. Navigate the results using the query parameters `size` and `startCursor`.



# Create coupon

coupons.openapi post /coupons
Create a coupon with the requested conditions.



# Delete a specific coupon

coupons.openapi delete /coupons/{couponId}
Delete a specific coupon by ID



# Enable or disable a coupon

coupons.openapi post /coupons/{couponId}/actions/toggle
Change coupon status by ID. **Enable a coupon:** Only *disabled* coupons can be enabled. **Disable a coupon:** Only *not expired* coupons can be disabled.



# Generate coupon codes

coupons.openapi post /coupons/actions/generate-codes
Generate coupon codes based on the given parameter.



# Get all coupons

coupons.openapi get /coupons
Get a paginated list of coupons.



# Coupons



Coupons are discounts on items, carts, or shipping that are applied to qualified purchases when shoppers provide a valid coupon code during the checkout process. You can use the `coupon` endpoints to create and manage coupons and their codes.


# Retrieve a coupon

coupons.openapi get /coupons/{couponId}
Use this endpoint to retrieve the details of a coupon by its ID.



# Search for coupons

coupons.openapi post /coupons/search
Use this endpoint to search for coupons based on filter conditions.



# Update a specific coupon

coupons.openapi put /coupons/{couponId}
Update a specific coupon by ID.



# Exporting Offers CSV



This topic provides developers with step-by-step instructions for exporting product pricing data in CSV format using Offers export API endpoints. It includes initiating an export request and downloading a CSV file containing product prices, enabling seamless integration with pricing analytics, inventory management, or external reporting tools.

Exporting product pricing data as a CSV file involves three main steps:

1.  [Initiate an export request](/v3/api-reference/offers/exports/initiate-export-request): Send a request to generate an `exportId` and configure filters to target specific data.
2.  [Retrieve the export details](/v3/api-reference/offers/exports/get-export-request-by-id): Use the `exportId` to check the progress and retrieve the `fileId` after the export is complete.
3.  [Download the CSV File](/v3/api-reference/offers/exports/download-exported-csv-file): With the `fileId`, obtain a download link to retrieve the CSV file.

## Export parameters

You can the refine the data included in your export by specifying filters in the `filters` array. If you leave the array empty, all data is included. The following table describes the parameters for filtering and the functions of each parameter:

| **Parameter** | **Description**                                                                                                                                                                                 |
| ------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `field`       | Specifies the data type used to search. Use `priceType` to set it as the search criteria.                                                                                                       |
| `value`       | Specifies the exact value for the selected `field`. If `priceType` is used as `field`, you must enter the corresponding `priceType` value for this parameter.                                   |
| `operator`    | Specifies how the `value` is applied to the `field`. If the field is `priceType` and the operator is set to `EQUAL`, all products with the specified `value` are included in the search result. |

The following table provides detailed information for the two different data types:

*   `CALCULATED_PRICE`: If the data type you want to export is `CALCULATED_PRICE`, use the following `field`, `operator`, and `value`:

    | `field`           | `operator` | `value`                                                                                                                                                                                                                     |
    | ----------------- | ---------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
    | `priceType`       | `EQUAL`    | Filter your data by `BASE` or `SALE` price. If the `filters` array in the request body is empty, both prices are included in the CSV export.                                                                                |
    | `priceListIds`    | `IN`       | Filter your data by a list of `priceListIds` by including them in an array in the request body. If the `filters` array is empty, the data is based on the default `priceList`.                                              |
    | `calculationTime` | `EQUAL`    | Filter your data by an ISO timestamp to specify when the price should be calculated. The provided timestamp is used for price determination. If the `filters` array is empty, the price is based on the CSV execution time. |

*   `REDEMPTION`: If the data type you want to export is `REDEMPTION`, use the following `field`, `operator`, and `value`:

    | `field`           | `operator`                                                                       | `value`                                                                                                                                                                                                                                                                        |
    | ----------------- | -------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
    | `promoCode`       | `EQUAL`                                                                          | Filter your data by redeemed promotion code.                                                                                                                                                                                                                                   |
    | `userId`          | `EQUAL`                                                                          | Filter your data by provided user ID.                                                                                                                                                                                                                                          |
    | `email`           | `EQUAL`                                                                          | Filter your data by provided email.                                                                                                                                                                                                                                            |
    | `orderId`         | `EQUAL`                                                                          | Filter your data by provided order ID.                                                                                                                                                                                                                                         |
    | `redeemedAt`      | <ul><li>`EQUAL`</li><li>`GREATER_THAN_OR_EQUAL_TO`</li><li>`LESS_THAN`</li></ul> | Filter data based on the provided redemption date. If the operator is: <ul><li>`EQUAL`: Redemptions on the provided date.</li><li>`GREATER_THAN_OR_EQUAL_TO`: Redemptions on and after the provided date.</li><li>`LESS_THAN`: Redemptions before the provided date.</li></ul> |
    | `storeId`         | `EQUAL`                                                                          | Filter data based on case-insensitive promotion titles.                                                                                                                                                                                                                        |
    | `promotionStatus` | `EQUAL`                                                                          | Filter data based on the specified promotion status: <ul><li>`ACTIVE`</li><li>`EXPIRED`</li><li>`DISABLED`</li></ul>                                                                                                                                                           |

    We recommend not to seach for all the `REDEMPTION` data by leaving the `filters` array empty.

## Prerequisites

*   Ensure that you have Offers editor or administrator privileges to fabric Offers. For more information, see the [Role-Based Access Control](/v3/guides/settings/rbac/role-based-access-control-offers-roles) section.
*   Ensure that you have added one or more products using one of the following methods:
    *   [Copilot](/v3/guides/product-catalog/list/items/adding-an-item)
    *   [API endpoints](/v3/api-reference/product-catalog/product-operations-by-id/add-product)
*   Ensure that you have added price to the products using one of the following methods:
    *   [Copilot](/v3/guides/offers/pricing)
    *   [API endpoints](/v3/api-reference/offers/prices/create-price)
*   Ensure that you have created a redemption for the products using the [create a redemption](/v3/api-reference/offers/redemptions/create-redemption) endpoint.

## Procedure

### Step 1: Initiating an export request

1.  Submit a POST request including the `type`, such as `CALCULATED_PRICE` or `REDEMPTION` with any required `filters`.
    The duration for this process increases with the amount of data being exported. The [initiate offers export](/v3/api-reference/offers/exports/initiate-export-request) endpoint initiates a CSV export request and generates an `exportId`. The following example shows a POST request with the request body set to `type` as `REDEMPTION`, searching for `storeId` with the value `store001`:

    <Accordion title="Click here to expand and see the request payload.">
      ```bash
      curl --request POST \
      --url https://api.fabric.inc/v3/offers-exports \
      --header 'Authorization: Bearer exampleToken123' \
      --header 'Content-Type: application/json' \
      --header 'x-fabric-tenant-id: exampleTenantID456' \
      --data '{
      "type": "REDEMPTION",
      "filters": [
              {
              "field": "storeId",
              "value": "store001",
              "operator": "EQUAL"
              }
          ]
      }'
      ```
    </Accordion>

    A successful request returns the following response:

    <Accordion title="Click here to expand and see the response.">
      ```json
      {
      "exportId": "ab50fe48-5da0-4e77-92d1-bb629eedf19e",
      "startedAt": "2023-05-17T21:24:52.398Z",
      "endedAt": "null",
      "totalDataExported": 0,
      "status": "IN_PROGRESS",
      "errors": [],
      "type": "REDEMPTION",
      "filters": [
          {
          "field": "storeId",
          "value": "store001",
          "operator": "EQUAL"
          }
      ]
      }
      ```
    </Accordion>

### Step 2: Retrieve the `fileId`

After initiating the export request, use the `exportId` generated in [step 1](#step-1-initiate-export-request) to [retrieve details of the request](/v3/api-reference/offers/exports/get-export-request-by-id). You can view the export details, such as `startedAt` and `endedAt` times, as well as the `totalDataExported`. The export request might take up to 10 hours.

1.[Submit a GET request using the `exportId`](/v3/api-reference/offers/exports/get-export-request-by-id) endpoint to check the export status to retrieve the `fileId`.

1.  When the `status` is `COMPLETE`, use the `fileId` in the [download the exported CSV file](/v3/api-reference/offers/exports/download-exported-csv-file) step to download the CSV file.

Use the following GET request to retrieve the details of an export request, including its status and `fileId`:

<Accordion title="Click here to expand and see the request payload.">
  ```bash
  curl --request GET \
  --url https://api.fabric.inc/v3/offers-exports/ab50fe48-5da0-4e77-92d1-bb629eedf19e \
  --header 'Authorization: Bearer exampleToken123' \
  --header 'x-fabric-tenant-id: exampleTenantID456'
  ```
</Accordion>

A successful request returns the following response:

<Accordion title="Click here to expand and see the response.">
  ```json
  {
  "exportId": "ab50fe48-5da0-4e77-92d1-bb629eedf19e",
  "startedAt": "2023-05-17T21:24:52.398Z",
  "endedAt": "null",
  "totalDataExported": 0,
  "status": "IN_PROGRESS",
  "errors": [],
  "type": "REDEMPTION",
  "filters": [
      {
      "field": "storeId",
      "value": "store001",
      "operator": "EQUAL"
      }
  ],
  "fileId": "redemption/tenantId/1687472977242-redemption-export.csv"
  }
  ```
</Accordion>

<Note>Wait until you receive a response with `status: COMPLETED` before moving to the next step. If you don't receive a `status` of `COMPLETED`, [you won't get a complete export file](#exported-file-is-incomplete).</Note>

### Step 3: Downloading the exported CSV file

1.  After retrieving `fileId` from [step 2](#step-2-retrieve-the-fileid), include it in the request body of the [download exported CSV file](/v3/api-reference/offers/exports/download-exported-csv-file) endpoint to generate a temporary URL for downloading the file as shown in the following request:

    <Accordion title="Click here to expand and see the request payload.">
      ```bash
      curl --request POST \
      --url https://api.fabric.inc/v3/offers-exports/actions/download-export-file \
      --header 'Authorization: Bearer exampleToken123' \
      --header 'Content-Type: application/json' \
      --header 'x-fabric-tenant-id: exampleTenantID456' \
      --data '{
      "fileId": "redemption/tenantId/1687472972-redemption-export.csv"
      }'
      ```
    </Accordion>

    A successful request returns the following response with a URL used to download your file:

    <Accordion title="Click here to expand and see the response.">
      ```json
      {
      "url": {Your Download URL},
      "fileId": "redemption/tenantId/1687472972-redemption-export.csv"
      }
      ```
    </Accordion>

    You can copy and paste the URL from the response into your browser's address bar to download your file.

<Note>This URL is valid for 5 minutes. If you exceeded this duration, repeat [step 3](#step-3-download-exported-csv-file) to generate another URL.</Note>

## Common Variations

### Searching with multiple fields

You can include more than one `field` in the `filters` array as long as you are filtering single data type. Using more than one `field` allows you to refine the search results to meet all of the specified search conditions.

You can expand the following example of a POST request to initiate an export request with more than one `field`. In the following example, the request filters `CALCULATED_PRICE` by both `priceType` and `priceListIds`:

<Accordion title="Click here to expand and see the request payload.">
  ```bash
  curl --request POST \
    --url https://api.fabric.inc/v3/offers-exports \
    --header 'Authorization: Bearer exampleToken123' \
    --header 'Content-Type: application/json' \
    --header 'x-fabric-tenant-id: exampleTenantID456' \
    --data '{
    "type": "CALCULATED_PRICE",
    "filters": [
      {
        "field": "priceType",
        "value": "BASE",
        "operator": "EQUAL"
      },
      {
        "field": "priceListIds",
        "value": [
          1000003,
          1000004
        ],
        "operator": "IN"
      }
    ]
  }'
  ```
</Accordion>

A successful request returns the following response:

<Accordion title="Click here to expand and see the response.">
  ```json
  {
    "exportId": "4a73a9a9-b8c3-4dc1-a467-c528a1b2dfe7",
    "startedAt": "2023-12-01T10:33:33.638Z",
    "endedAt": "null",
    "totalDataExported": 0,
    "status": "IN_PROGRESS",
    "errors": [],
    "type": "CALCULATED_PRICE",
    "filters": [
      {
        "field": "priceType",
        "value": "BASE",
        "operator": "EQUAL"
      },
      {
        "field": "priceListIds",
        "value": [
          1000003,
          1000004
        ],
        "operator": "IN"
      }
    ]
  }
  ```
</Accordion>

### Retrieving all export requests

If you have initiated multiple export requests, you can retrieve details of all export requests using the [Get all export requests](/v3/api-reference/offers/exports/get-all-export-requests) endpoint. A successful request returns an array containing details of all export request details, including the respective `fieldId` values. You can expand the following example to see the GET response:

<Accordion title="Click here to expand and see the response.">
  ```json
  {
    "query": {
      "size": 10,
      "offset": 10,
      "count": 50
    },
    "data": [
      {
        "exportId": "ab50fe48-5da0-4e77-92d1-bb629eedf19e",
        "startedAt": "2023-05-17T21:24:52.398Z",
        "endedAt": "null",
        "status": "IN_PROGRESS",
        "type": "REDEMPTION",
        "totalDataExported": 0,
        "fileId": "redemption/tenantId/1687294954996-redemption-export.csv"
      },
      {
        "exportId": "4a73a9a9-b8c3-4dc1-a467-c528a1b2dfe7",
        "startedAt": "2023-12-01T10:33:33.638Z",
        "endedAt": "null",
        "status": "IN_PROGRESS",
        "type": "CALCULATED_PRICE",
        "totalDataExported": 0,
        "fileId": "redemption/tenantId/5900139542278-calculated-price-export.csv"
      }
    ]
  }
  ```
</Accordion>

## Troubleshooting

### `EXPORT_CALCULATED_PRICE_ERROR`

If you get the `EXPORT_CALCULATED_PRICE_ERROR` error after initiating an export request, resubmit the request. If the problem persists, contact [fabric support](https://support.fabric.inc/hc/en-us/requests/new).

### Exported file is incomplete

If your exported CSV is incomplete, use the [get export request](/v3/api-reference/offers/exports/get-export-request-by-id) endpoint and ensure that the `status` is marked as `COMPLETE`. If the `status` remains `IN_PROGRESS` after the 10-hours, try the request again or contact [fabric support](https://support.fabric.inc/hc/en-us/requests/new).

### CSV file download link not working

The download link is valid for only 5 minutes. If the link has expired, generate the link again using the [download exported CSV file](/v3/api-reference/offers/exports/download-exported-csv-file) endpoint. If the problem persists, contact [fabric support](https://support.fabric.inc/hc/en-us/requests/new).

## Related Topics

*   [Initiate export request](/v3/api-reference/offers/exports/initiate-export-request)
*   [Get export request by ID](/v3/api-reference/offers/exports/get-export-request-by-id)
*   [Get all export requests](/v3/api-reference/offers/exports/get-all-export-requests)
*   [Download exported CSV file](/v3/api-reference/offers/exports/download-exported-csv-file)


# Offers (3.0.0)



Offers support: [fabric support](https://support.fabric.inc/hc/en-us/requests/new)| License: [fabric API License](https://fabric.inc/api-license)\
fabric Offers service supports two sets of APIs. The first set is for managing the Create, Retrieve, Update, and Delete (CRUD) operations for objects, such as prices, promotions, and coupons. The second set is our [Real-Time Pricing Engine (RTPE)](/reference/dynamic-pricing-engine) designed to power your site experiences, such as displaying prices and promotional discounts on a Product Description Page (PDP) or shopping cart.

### Related Resources

*   [Offers](/v3/guides/offers/overview)
*   [Prices](/v3/api-reference/offers/prices/overview)
*   [Promotions](/v3/api-reference/offers/promotions/overview)
*   [Coupons](/v3/api-reference/offers/coupons/overview)

[Download Postman Collection](https://github.com/FabricCommerce/public-fabric-api-postman-collections/blob/main/v3/offers.json)


# Create price list

price-lists.openapi post /price-lists
Create a price list. Based on the currency code you define for a price list, you will be able to create or update prices under the price list for the defined currency code only.



# Delete a specific price list

price-lists.openapi delete /price-lists/{id}
Delete a specific price list by ID.



# Get a specific price list

price-lists.openapi get /price-lists/{id}
Get a specific price list by ID.



# Get all price lists

price-lists.openapi get /price-lists
Get a paginated list of all price lists.



# Price Lists



A price list is a collection of items and their assigned prices. You can add the same item to multiple price lists and set different prices for that item in each of those lists. For example, for the same item, you can assign a one-time purchase price, a subscription price, or a special loyalty member price. You can set the currency and duration of the prices in each price list. If the price list expires, the prices of items within the price list will also expire.


# Update a specific price list

price-lists.openapi put /price-lists/{id}
Update a specific price list by ID.



# Create batch prices

prices.openapi post /prices/batch
Create one or more prices for items based on `itemId` and `itemSku`.



# Create price

prices.openapi post /prices
Create or update price of an item based on given `itemId` and `itemSku`



# Delete price by itemId

prices.openapi delete /prices/{itemId}
Delete price details by `itemId`. If `priceListId` isn't specified, price is deleted for the `itemId` that belongs to the default price list.



# Delete price by SKU

prices.openapi delete /prices/sku/{sku}
Delete price record for the given `sku` and `priceListId`.



# Get all active prices

prices.openapi get /prices
Get a paginated list of active and scheduled prices. Active prices have start date greater than the current date and end date is in the future.



# Get price by itemId

prices.openapi get /prices/{itemId}
Get a paginated list of price details for the given `itemId` and `priceListId`. If `priceListId` isn't specified, prices are retrieved for the `itemId` that belongs to the default price list.



# Get price by SKU

prices.openapi get /prices/sku/{sku}
Get price details for the `sku` and `priceListId`. If `priceListId` isn't specified, price is retrieved for the `sku` that belongs to the default price list.



# Prices



Pricing endpoints let you create and manage price details for one or more items. You can configure the prices endpoints to include your default price list in all requests.


# Create product exclusion list

product-exclusion-lists.openapi post /product-exclusion-lists
Create a product exclusion list with target products that will be exempted from being discounted.



# Delete a specific product exclusion list

product-exclusion-lists.openapi delete /product-exclusion-lists/{id}
Delete a specific product exclusion list by ID.



# End a product exclusion list

product-exclusion-lists.openapi post /product-exclusion-lists/{id}/actions/end
End a product exclusion list by setting the start date and end date to the same current date. When you end a product exclusion list, target products of the product exclusion list become eligible for discounts.



# Get a specific product exclusion list

product-exclusion-lists.openapi get /product-exclusion-lists/{id}
Get a specific product exclusion list by ID. The response contains a list of target products that are exempted from being discounted based on the `scopes` value.



# Get all product exclusion lists

product-exclusion-lists.openapi get /product-exclusion-lists
Get a paginated list of product exclusion lists based on the query parameters.



# Product Exclusion Lists



Product exclusion lists let you protect SKUs from being discounted by active promotions. These endpoints let you create and manage such product exclusion lists.


# Update a specific product exclusion list

product-exclusion-lists.openapi put /product-exclusion-lists/{id}
Update a specific product exclusion list record by ID.



# Create promotion

promotions.openapi post /promotions
Create a promotion that you can apply to one or more items to increase sales, or to a segment of customers to reward existing customers or attract new customers. Promotions are configured with rules that define the type of promotion, conditions, and discounts.



# Delete a specific promotion

promotions.openapi delete /promotions/{promotionId}
Delete a specific promotion by ID.



# Enable or disable a promotion

promotions.openapi post /promotions/{promotionId}/actions/toggle
Use this endpoint to change promotion status by enabling or disabling a promotion. Note that you can't change the status of a promotion that's currently _ACTIVE_. You can enable the promotions that are currently _disabled_ and disable the promotions that haven't expired yet.



# End a promotion

promotions.openapi post /promotions/{promotionId}/actions/end
End a specific promotion by ID. To end a promotion, set `status` to `EXPIRED`, and expiration date (both `startAt` and `endAt`) to the same current date.



# Get a specific promotion

promotions.openapi get /promotions/{promotionId}
Get a specific promotion by ID.



# Get all promotions

promotions.openapi get /promotions
Get a paginated list of all promotions.



# Promotions



Promotions are discounts on items, carts, or shipping that are applied automatically if the required conditions are met. Using the `promotions` endpoints, you can create and manage promotions.


# Search for promotions

promotions.openapi post /promotions/search
Use this endpoint to search for promotions based on filter conditions.



# Update a specific promotion

promotions.openapi put /promotions/{promotionId}
Update a specific promotion by ID.



# Calculate prices for products by IDs

price-engine.openapi post /price-engine/actions/evaluate-products-by-id
Use this endpoint to calculate prices for one or more products in a specific price list based on product IDs. Note that the `itemId` is the default identifier of a product. If you want to set SKUs as the identifier of a product identifiers, reach out to the fabric support at support@fabric.inc.



# Calculate prices for products by SKUs

price-engine.openapi post /price-engine/actions/evaluate-products-by-sku
Use this endpoint to calculate prices for one or more products in a specific price list by product SKUs. Note that the `itemId` is used as the default identifier for a product. If you want to set SKUs as product identifiers, you must contact fabric support at support@fabric.inc.



# Evaluate cart promotions

price-engine.openapi post /price-engine/actions/evaluate-cart
Evaluate cart's total cost instantly, after applying all applicable promotions and discount coupons. Using this endpoint, submit a range of data that will be referenced against the conditions that are set earlier using the promotions, coupons or prices APIs. The response includes the details of the promotions and discounts applied. These promotions and discounts can be displayed on your website to help shoppers know that they're getting their expected discounts.



# Real-time Pricing Engine



fabric’s Real-time Pricing Engine (RTPE) endpoints calculate prices and evaluate discounts for individual products and carts.

*   The endpoints `Get prices by item ID` and `Get prices by product SKUs` are used to power product description pages.
*   The endpoint `Evaluate cart promotions` is used to determine prices and returns cart-level promotions.
*   Both the base price and sales prices are included.
*   Use segments to target specific customer groups with particular promotions.
*   Settings specific to stacking influence how RTPE applies promotions, determining which can be combined and in what order.

RTPE relies on cached information rather than getting product offers from the database. This approach is useful for immediate evaluation of promotions and price calculations. It's designed for speed, supports intricate promotional strategies, and handles millions of pricing requests daily.


# Bulk update redemptions

redemptions.openapi put /redemptions/batch
Use this endpoint to update multiple redemptions. You can update up to 25 redemptions at a time.



# Create redemption

redemptions.openapi post /coupons/{couponId}/redemptions
Create redemption for a specific coupon by coupon ID.



# Create redemption

redemptions.openapi post /redemptions
Create a redemption record for a specific promotion.



# Delete redemption by ID

redemptions.openapi delete /coupons/{couponId}/redemptions/{redemptionId}
Delete a specific redemption by redemption ID.



# Delete redemption by ID

redemptions.openapi delete /redemptions/{redemptionId}
Delete a specific redemption by redemption ID.



# Get all redemption details

redemptions.openapi get /redemptions
Use this endpoint to get a list of redemption records. You can also filter the records by using different parameters, such as coupon code, user ID, email address, order ID, store ID, and more.



# Get redemption by ID

redemptions.openapi get /redemptions/{redemptionId}
Get a specific redemption by redemption ID.



# Redemptions



Redemptions are used to track the usage of coupons or promotions by shoppers. The redemption records are used to keep track of [coupon limits](/docs/offers-coupons#coupon-limits) across the site or per customer.


# Update redemption by ID

redemptions.openapi put /redemptions/{redemptionId}
Update a specific redemption by redemption ID.



# Create segment

segments.openapi post /segments
Create a segment to group a specific set of customers. By segmenting customers, you can gain insight into which products are popular among different customer segments, and can create targeted retention strategies. You can also create targeted marketing campaigns that can result in higher conversion rates and increased sales.



# Delete a specific segment

segments.openapi delete /segments/{segmentId}
Delete a specific segment by ID.



# Get a specific segment

segments.openapi get /segments/{segmentId}
Get details of a specific segment by ID.



# Get all segments

segments.openapi get /segments
Get a paginated list of all the created segments.



# Segments



Segmentation is a way of grouping customers that share similar characteristics, such as loyalty status, demographics, location, or device type. Using the `segment` endpoints, merchants can create and manage segments. After creating a segment of customers, merchants can target promotions to a specific customer segment by linking the promotion to a segment identifier.


# Update a specific segment

segments.openapi put /segments/{segmentId}
Update a specific segment by ID.



# Coupon



### Overview

Coupons are used to apply discounts on items, carts, or shipping during the checkout process. By subscribing to coupon-related events, as merchants, you can get event-specific information, including coupon ID, event name, and event status.

The following table details various coupon-related events along with the example responses:

### Events

| Event Type                | Description                                                                                                                                                                    | Example Response                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| offers:coupon:created     | The event is triggered when a coupon is created.                                                                                                                               | `{   "specversion": "v1",   "type": "offers:coupon:created",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "COUPON",         "status": "CREATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }  `                                        |
| offers:coupon:deleted     | The event is triggered when a coupon is deleted.                                                                                                                               | `{   "specversion": "v1",   "type": "offers:coupon:deleted",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "COUPON",         "status": "DELETED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }     `                                     |
| offers:coupon:updated     | The event is triggered when a coupon is updated.                                                                                                                               | `{   "specversion": "v1",   "type": "offers:coupon:updated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "COUPON",         "status": "UPDATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }     `                                     |
| offers:coupon:enabled     | The event is triggered when a coupon is enabled. Only disabled coupons can be enabled. When a coupon is enabled, shoppers can use them to get a discount on eligible products. | `{   "specversion": "v1",   "type": "offers:coupon:enabled",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "COUPON",         "status": "ENABLED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }      `                                    |
| offers:coupon:disabled    | The event is triggered when a coupon is disabled. When a coupon is disabled, shoppers can't use them to get a discount on their purchases.                                     | `{   "specversion": "v1",   "type": "offers:coupon:disabled",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "COUPON",         "status": "DISABLED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }        `                                |
| offers:coupon:activated   | The event is triggered when a coupon becomes active and is available for use.                                                                                                  | `{   "specversion": "v1",   "type": "offers:coupon:activated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "COUPON",         "status": "ACTIVATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }       `                               |
| offers:coupon:deactivated | The event is triggered when a coupon is deactivated and is no longer available for use.                                                                                        | `{   "specversion": "v1",   "type": "offers:coupon:deactivated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "COUPON",         "status": "DEACTIVATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }     `                             |
| offers:couponCode:created | The event is triggered when a coupon code is created.                                                                                                                          | `{   "specversion": "v1",   "type": "offers:couponCode:created",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "COUPON-CODE",         "status": "CREATED",         "promotionId": "642babcd3ebd250008455701","couponCode":"ABC-123"         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] } ` |
| offers:couponCode:updated | The event is triggered when a coupon code is updated.                                                                                                                          | `{   "specversion": "v1",   "type": "offers:couponCode:updated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "COUPON-CODE",         "status": "UPDATED",         "promotionId": "642babcd3ebd250008455701","couponCode":"ABC-123"         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] } ` |


# Global Exclusion



### Overview

Global exclusion refers to a list to which you can add SKUs to prevent them from being discounted by active promotions. By subscribing to global exclusion events, as merchants, you can get event-specific information, including the ID of the global exclusion list.

The following table details various global exclusion events along with the example responses:

### Events

| Event Type                     | Description                                                     | Example Response                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ------------------------------ | --------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| offers:globalExclusion:created | The event is triggered when a global exclusion list is created. | `{   "specversion": "v1",   "type": "offers:globalExclusion:created",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "GlobalExclusion",         "status": "CREATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }` |
| offers:globalExclusion:deleted | The event is triggered when a global exclusion list is deleted. | `{   "specversion": "v1",   "type": "offers:globalExclusion:deleted",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "GlobalExclusion",         "status": "DELETED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }` |
| offers:globalExclusion:updated | The event is triggered when a global exclusion list is updated. | `{   "specversion": "v1",   "type": "offers:globalExclusion:updated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "GlobalExclusion",         "status": "UPDATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }` |


# Glossary

This section collects brief definitions of some of the technical terms used in the documentation for Convoy.

### Projects

Projects are used to create logical contexts or separate environments (dev, staging & production). Different projects can also be created for different teams each with its own login details on the same convoy deployment.

### Endpoints

An endpoint represents a target URL to receive events. An endpoint can be in either of these states - `active`, `inactive` or `pending`. When an endpoint is in the `inactive` state all events sent will be saved but not dispatched until the endpoint is re-enabled. These events are known set to the `Discarded` state.

### Events

An event represents a specific event triggered by your system. Convoy persists events sent to [dead endpoints](#dead-endpoints) with a status - `Discarded`. This enables users re-activate their endpoints and easily retry events without the need to re-trigger the events from your systems.

### Event delivery

An event delivery is resource that tracks successive attempts to deliver the event payload to each endpoint. Multiple event deliveries can be created for a single event, this is influenced by the number of subscriptions that are matched to it.

### Event Types

Events are sent to an endpoint depending on the event type, which is defined when creating the endpoint defaulting to `"*"` if not set, which is a catch all for all events. An endpoint can define multiple event types, as such it will receive an event from all those events. Event types are matched using direct string comparison and are case sensitive. Support for regex event matching is planned.

### Delivery Attempts

A delivery attempt represents a single attempt to dispatch an event to an endpoint. Specifically, it contains two things - Request Headers & Payload, Response Headers & Payload. Convoy records this information for every retry attempt sent. The UI currently shows only the last delivery attempt. The number of delivery attempts and retry strategy can be configured per group.

### Dead Endpoints

A dead endpoint is an endpoint that failed consecutively to acknowledge events. Currently, we define consecutively failures as at least one event as maxed out it's retry limit to the maximum configured. In the future, we should support different consecutive failure strategies.

### Secrets

Secrets are used to sign the payload when sending events to an endpoint. If you don't supply a secret convoy will generate one for you.

### Hash Functions

We've found out that most implementations use `SHA256` or `SHA512`. However, Convoy also supports the following hash functions:

*   `MD5`
*   `SHA1`
*   `SHA224`
*   `SHA256`
*   `SHA384`
*   `SHA512`
*   `SHA3_224`
*   `SHA3_256`
*   `SHA3_384`
*   `SHA3_512`
*   `SHA512_224`
*   `SHA512_256`

### Replay Attacks

A replay attack occurs when an attacker intercepts a valid network payload with the intent of fraudulently re-transmitting the payload. Convoy supports replay attack prevention by including a timestamp in the request header under the key `Convoy-Timestamp`. This timestamp is also included in the signature-header and is signed together with the request body using the endpoint secret. Therefore, an attacker can't change the timestamp without invalidating the signature. Take the following steps to verify your signature and prevent replay attacks;

*   Extract the timestamp and the signed signature-header from the request header, extract the request body.
*   Prepare a string by concatenating the timestamp followed by a `,` and the request body.
*   Generate a signature of the concatenated string using the endpoint secret and your hashing algorithm (e.g `SHA256`)
*   Compare the newly generated signature with the value in the signature-header, if the signatures match, check the time interval between the timestamp and the current time. In your system, set a tolerance on this time interval to prevent replay attacks.

### Rate Limiting Endpoints

While you are guaranteed you'll be able to receive events as fast as possible using convoy, your customers might not be able to handle events coming to their systems at the same rate which might cause a disruption of service on their end. You can control the number events you want to send to an endpoint by setting a rate limit and a rate limit duration on each endpoint. The default is `5000` in `1m` or 5,000 requests per minute.

### Retry Schedule

When an endpoint is experiencing temporary disruption of service, events sent to them might fail to require you to retry them. Convoy allows you to set the number of attempts to a particular endpoint and how to initiate the retry. Convoy supports two retry strategies:

*   `default`: retries are done in linear time. It's best to set a reasonable number of attempts if the duration is short.
*   `exponential-backoff`: retries events while progressively increasing the time before the next attempt. The default schedule looks like this:
    *   10 seconds
    *   30 seconds
    *   1 minute
    *   3 minutes
    *   5 minutes
    *   10 minutes
    *   15 minutes

Retry strategies are configured per group.


# Price



### Overview

Price represents the cost of an item or [Stock Keeping Unit (SKU)](/v3/api-reference/offers/webhook-events/glossary)webhook-events-glossary#sku). By subscribing to price-based events, as merchants, you can get event-specific information, including the `itemId`, `SKU`, and price list `id`.

The following table details various pricing events along with the example responses:

### Events

| Event Type               | Description                                              | Example Response                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
| ------------------------ | -------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| offers:price:created     | The event is triggered when a price is created.          | `{   "specversion": "v1",   "type": "offers:price:created",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PRICE",         "status": "CREATED",         "itemId": 1684471584,         "itemSku": "DS SD S",         "priceListId": 100001,         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/price/DS SD S/priceList/100001?type=itemSku"         \]       }     }   \] }`                    |
| offers:price:deleted     | The event is triggered when a price is deleted.          | `{   "specversion": "v1",   "type": "offers:price:deleted",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PRICE",         "status": "DELETED",         "itemId": 1684471584,         "itemSku": "DS SD S",         "priceListId": 100001,         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/price/DS SD S/priceList/100001?type=itemSku"         \]       }     }   \] }`                    |
| offers:price:activated   | The event is triggered when a price becomes operational. | `{   "specversion": "v1",   "type": "offers:price:activated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PRICE-ACTIVATION",         "status": "ACTIVATED",         "itemId": 1684471584,         "itemSku": "DS SD S",         "priceListId": 100001,         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/price/DS SD S/priceList/100001?type=itemSku"         \]       }     }   \] }`     |
| offers:price:deactivated | The event is triggered when a price is no longer valid.  | `{   "specversion": "v1",   "type": "offers:price:deactivated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PRICE-ACTIVATION",         "status": "DEACTIVATED",         "itemId": 1684471584,         "itemSku": "DS SD S",         "priceListId": 100001,         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/price/DS SD S/priceList/100001?type=itemSku"         \]       }     }   \] }` |


# Price List



### Overview

A price list is a collection of items and their assigned prices. By subscribing to `priceList` events, as merchants, you can get event-specific information, including the price list ID.\
The following table details the various `priceList` events along with the example responses:

### Events

| Event Type               | Description                                          | Example Response                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ------------------------ | ---------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| offers:priceList:created | The event is triggered when a price list is created. | `{   "specversion": "v1",   "type": "offers:priceList:created",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PRICELIST",         "status": "CREATED",         "id": 100001,         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }                      `                                                                           |
| offers:priceList:deleted | The event is triggered when a price list is deleted. | `{   "specversion": "v1",   "type": "offers:priceList:deleted",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PRICELIST",         "status": "DELETED",         "id": 100001,         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }                            `                                                                     |
| offers:priceList:updated | The event is triggered when a price list is updated. | `{   "specversion": "v1",   "type": "offers:priceList:updated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PRICELIST",         "status": "UPDATED",         "itemId": 1684471584,         "itemSku": "DS SD S",         "priceListId": 100001,         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/price/DS SD S/priceList/100001?type=itemSku"         \]       }     }   \] }` |


# Promotion



### Overview

Promotions are discounts on items, carts, or shipping that are automatically applied when the required conditions are met. By subscribing to promotion events, as merchants, you can receive event-specific information, including promotion ID, event name, and event status.

The following table details various promotion events along with the example responses:

### Events

| Event Type               | Description                                                                                | Example Response                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ------------------------ | ------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| offers:promo:created     | The event is triggered when a promotion is created.                                        | `{   "specversion": "v1",   "type": "offers:promo:created",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PROMOTION",         "status": "CREATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] } `        |
| offers:promo:deleted     | The event is triggered when a promotion is deleted.                                        | `{   "specversion": "v1",   "type": "offers:promo:deleted",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PROMOTION",         "status": "DELETED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }   `      |
| offers:promo:updated     | The event is triggered when a promotion is updated.                                        | `{   "specversion": "v1",   "type": "offers:promo:updated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PROMOTOION",         "status": "UPDATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] } `       |
| offers:promo:activated   | The event is triggered when a promotion becomes active and is available for use.           | `{   "specversion": "v1",   "type": "offers:promo:activated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PROMOTION",         "status": "ACTIVATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }   `  |
| offers:promo:deactivated | The event is triggered when a promotion is deactivated and is no longer available for use. | `{   "specversion": "v1",   "type": "offers:promo:deactivated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "PROMOTION",         "status": "DEACTIVATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }` |


# Redemption



### Overview

Redemption refers to instances when coupons or promotions are applied to an order. By subscribing to redemption events, as merchants, you can get event-specific information, including redemption ID, event name, and event status.

The following table details various redemption events along with the example responses:

### Events

| Event Type                          | Description                                                                 | Example Response                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
| ----------------------------------- | --------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| offers:redemption:promotion:created | The event is triggered when redemption details for a promotion are created. | `{   "specversion": "v1",   "type": "offers:redemption:promotion:created",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "REDEMPTION",         "status": "CREATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }` |
| offers:redemption:promotion:deleted | The event is triggered when redemption details for a promotion are deleted. | `{   "specversion": "v1",   "type": "offers:redemption:promotion:deleted",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "REDEMPTION",         "status": "DELETED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }` |
| offers:redemption:promotion:updated | The event is triggered when redemption details for a promotion are updated. | `{   "specversion": "v1",   "type": "offers:redemption:promotion:updated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "REDEMPTION",         "status": "UPDATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }` |
| offers:redemption:coupon:created    | The event is triggered when redemption details of a coupon are created.     | `{   "specversion": "v1",   "type": "offers:redemption:coupon:created",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "REDEMPTION",         "status": "CREATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }`    |
| offers:redemption:coupon:updated    | The event is triggered when the redemption details of a coupon are updated. | `{   "specversion": "v1",   "type": "offers:redemption:coupon:updated",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "REDEMPTION",         "status": "UPDATED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }`    |
| offers:redemption:coupon:deleted    | The event is triggered when the redemption details of a coupon are deleted. | `{   "specversion": "v1",   "type": "offers:redemption:coupon:deleted",   "tenantid": "63a123070cf218e178efda30",   "events": \[     {       "id": "0076064a-695e-43ac-b004-17802ed186ac",       "time": "2023-06-01T13:29:40.000Z",       "source": "offers:business-layer",       "subject": null,       "data": {         "eventName": "REDEMPTION",         "status": "DELETED",         "id": "642babcd3ebd250008455701",         "callbackUrls": \[           "https://stg02.copilot.fabric.inc/api-offers/priceList/100001"         \]       }     }   \] }`    |


# Ship To



Ship To APIs

**Note:** These are the legacy Ship To APIs. To view fabric's new Shipping APIs, navigate to *Cart API > Shipping* from the left side navigation pane.


# Subscribing Events



### Overview

As a merchant, you can subscribe to one or more Offers events to get asynchronous event notifications without calling the individual REST API endpoints.

### Procedure

To subscribe to Offers events, you must either [raise a support ticket](https://support.fabric.inc/hc/en-us) with the following details or share the details with your customer success manager:

1.  Webhook URL or API that you want fabric to send notifications to.
2.  Webhook call method(POST, GET) associated with the Webhook URL or API.
3.  API key.
4.  Stage for which you want to receive notifications when the event takes place in that stage. For example, sandbox or production.
5.  Tenant ID, which is the 24-character Copilot account ID.
6.  Event types that you want to subscribe to.


# Webhook Events



### Overview

An event is a specific action within a system, such as updating price, generating a coupon code, or deleting a promotion. Through Webhooks, you can get automated, real-time notifications when an event is initiated. You can subscribe to one or more webhook events to receive event-specific information without making individual REST API calls. For example, if you subscribe to a `price update` event, you will be notified whenever a new price becomes active. This enables you to update your Product Description Page (PDP) promptly, ensuring your website reflects the latest prices accurately. Similarly, by subscribing to new promotions event, you are notified whenever a new promotion becomes active, enabling you to display the new promotion on your website as soon as the promotion is available. For using the event-driven notifications, you must [subscribe to the relevant webhook events](/v3/api-reference/offers/webhook-events/subscribing-events).

## fabric Offer Events

You can subscribe to one or more Offers events in each of the following objects to get event-specific information in real-time:

*   [Price](https://developer.fabric.inc/v3/reference/offers-webhook-events-price)
*   [Promotion](https://developer.fabric.inc/v3/reference/offers-webhook-events-promotion)
*   [Coupon](https://developer.fabric.inc/v3/reference/offers-webhook-events-coupon)
*   [Price list](https://developer.fabric.inc/v3/reference/offers-webhook-events-price-list)
*   [Global exclusion](https://developer.fabric.inc/v3/reference/offers-webhook-events-global-exclusion)
*   [Redemption](https://developer.fabric.inc/v3/reference/offers-webhook-events-redemption)

For example, by subscribing to  `offers:price:created` event, you can get notified whenever a new price is created for a specific item. If you want more information about an event, you can make an API call to the `callBackUrl` available in the sample response. The following is a sample cURL request to get an event-related information from a specific URL:

```javascript
curl --location 'https://api-stg02.admin.offers.fabric.inc/v3/prices/1000072889?priceListId=100000' \\ Replace this URL with the event-specific callBackUrl
--header 'x-fabric-tenant-id: 64a86ebb0cf29efc89cd2d9d' \
--header 'x-fabric-channel-id: 12' \
--header 'x-fabric-source: copilot' \
--header 'x-fabric-request-id: 73068ccf-d359-4292-bbc9-6b31e865587b' \
--header 'x-fabric-stage: stg02' \
--header 'Content-Type: application/json' \
--header 'Authorization: Bearer eyJraWQiOiJqbXE2bFNUTTZEZTRfcGhveTQ4eVFjb1dLLWFnLWo3RktVbkhaUG5vbmhRIiwiYWxnIjoiUlMyNTYifQ.eyJ2ZXIiOjEsImp0aSI6IkFULm5KQ0tvMzRtNjFUUHZqU1NmeHN4VlB1allEMUdiZENfRjU5NGc0YU05b0UiLCJpc3MiOiJodHRwczovL2NvcGlsb3QubG9naW4tc2J4LmZhYnJpYy5pbmMvb2F1dGgyL2F1c29wYm85c3JPUndIY001Njk2IiwiYXVkIjoiYXBpOi8vc2VydmljZSIsInN1YiI6IjBvYTFqb2s0OGR6YWZLZEZsNjk3IiwiaWF0IjoxNjkzMzc5ODM2LCJleHAiOjE2OTMzODE2MzYsImNpZCI6IjBvYTFqb2s0OGR6YWZLZEZsNjk3Iiwic2NwIjpbInMycyJdLCJhY2NvdW50cyI6IntcImZhYnJpY1wiOntcInJvbGVzXCI6W1wiNWU5YmNhYmItYWFhOC00MTgwLWE3ZjctNzQ0MjQxMzI2MmZkXCIsXCJmODJkOGIyMC1lMjZmLTQxZjYtYWRhNi0xMWI3YWU5YjMxNDFcIixcIjkwYWM0OWExLTdhYTQtNGQ0OS1hMmM3LTE2MGQxY2Y0NWYzOVwiXSxcImlkXCI6XCJmYWJyaWNcIixcIm5hbWVcIjpcImZhYnJpY1wiLFwidGVuYW50SWRcIjpcImZhYnJpY1wifX0iLCJpZGVudGl0eVZlcnNpb24iOiJ2MiJ9.Tcl9I9Z76t0rj_L49cW7h7VzSNbhl7tzqZjQv1CUkDZ1aNw6DgXDIuwp-XsKP4_zTsAJ7CtHMDBt00usRPJYvUAKmi5C6I19rB5bw9t4wrqg-3hqItg_vVEmMTMUq9LryVfuc42NDoA29BvQ6bWfQ43B66e4c5yK77HqRULJegrESB9jXNGbMAXiQtMcv1IBMtK5uMHWfGnffMEvJpsl5lJq9QW0Lfn5PUQo5Gkm7YZMKXNYfneWROwuYqaY6cCykcas2rRVP5sx0pmnBSRYISoBGGe6o4m-k2k07oVxnI_vg4yAcraqxyFw1Qxu7wyBd0nJkWxogm3-tc2UnAmKhw' \
--data ''
```


# Create address

modular-cart post /carts/{cartId}/addresses
Adds a billing address to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Delete address

modular-cart delete /carts/{cartId}/addresses/{addressId}
Removes the billing address associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Address ID from the [Create address](/v3/api-reference/carts-v3/addresses/create-addresses) endpoint is used in the path parameter.




# Get address

modular-cart get /carts/{cartId}/addresses/{addressId}
Gets the billing address associated the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Address ID from the [Create address](/v3/api-reference/carts-v3/addresses/create-addresses) endpoint is used in the path parameter.




# Update address

modular-cart patch /carts/{cartId}/addresses/{addressId}
Updates the billing address associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Address ID from the [Create address](/v3/api-reference/carts-v3/addresses/create-addresses) endpoint is used in the path parameter.




# Add cart attributes

modular-cart post /carts/{cartId}/actions/add-attributes
Partially updates attributes of your choice in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Delete cart attributes

modular-cart post /carts/{cartId}/actions/delete-attributes
Partially deletes attributes of your choice associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Merge carts

modular-cart post /carts/{cartId}/actions/merge
This endpoint merges two carts together. Specify one cart in the path parameter and the second cart in the request body.

To learn more about merge cart behaviors, you can check out the [Merge Cart Behaviors](/v3/api-reference/carts-v3/merge-carts-behaviors) page.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Create adjustment

modular-cart post /carts/{cartId}/adjustments
Creates adjustments to the corresponding cart. This is useful when a price needs to be adjusted by a CSR agent.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Remove adjustment

modular-cart delete /carts/{cartId}/adjustments/{adjustmentId}
Removes an adjustment made to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Adjustment ID from the [Create adjustment](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) endpoint is used in the path parameter.




# Update adjustment

modular-cart patch /carts/{cartId}/adjustments/{adjustmentId}
Updates the adjustments made to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Adjustment ID from the [Create adjustment](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) endpoint is used in the path parameter.




# Create an empty cart

modular-cart post /carts
Use this endpoint to create a new cart.

**Default Configurations**: To create a cart with default configurations, send a request with an empty body.

**Provided Configurations**: To create a cart with provided configurations, include the configurations in the request body. To learn more about configuration behaviors, visit the [Configuration Behaviors](/v3/api-reference/carts-v3/configuration-behaviors) page.




# Delete cart

modular-cart delete /carts/{cartId}
Removes the cart corresponding to the provided cart ID.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Get the provided cart

modular-cart get /carts/{cartId}
Retrieves the cart information corresponding to the provided cart ID.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Search for multiple carts

modular-cart post /carts/search
Returns a list of carts based on the search criteria.



# Sequence calling

modular-cart post /carts/{cartId}/sequence
Use this endpoint to execute multiple cart-related operations with a single request. This allows you to perform various actions such as creating a cart, adding items, and checking out in a single API call.

 **Note:** The order of operations matters since IDs are carried over from call to call.

 The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Update cart

modular-cart patch /carts/{cartId}
Updates the cart information corresponding to the provided cart ID.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Configuration Behaviors



The Configuration Behaviors page provides an overview of the configuration settings and their associated functionalities.

To ensure your cart functions as intended, you must specify which configurations to activate when making a [Create a cart](/v3/api-reference/carts-v3/carts/carts) request.

When setting a cache expiry, the minimum duration is 1 second and the maximum  duration is 7,776,000 seconds, which is 3 months.

| Configuration | Description                                              |
| ------------- | -------------------------------------------------------- |
| WARN          | Executes the action, and the state object is updated.    |
| REJECT        | Rejects the action and a detailed exception is returned. |
| DROP          | Drops the action and resource is removed from the cart.  |
| NONE          | Accepts the action.                                      |
| BLOCK         | Blocks the action and returns an exception.              |

## Related Topics

*   [Create a cart](/v3/api-reference/carts-v3/carts/carts)


# Configuring  Adjustment



This feature in Carts API provides you the flexibility to apply adjustments at the cart, item, or fulfillment level. Adjustments are deductible elements that modify the total amount and are non-taxable.

## Prerequisites

The following prerequisites must be completed sequentially to configure an adjustment.

1.  [Create a cart](/v3/api-reference/carts-v3/carts/carts).
2.  [Create a fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) to add a fulfillment adjustment.
3.  [Create an item](/v3/api-reference/carts-v3/items/items) to add an item adjustment.

## Adjustment Initialization

You can apply adjustments at multiple levels, including the cart, individual items, or fulfillment. The adjustment maintains a consistent structure across all levels.

The following code sample provides the structure of an adjustment object:

<Accordion title="Click to expand the JSON example.">
  ```json
  {
      "id": "6964b984-49fd-4754-b979-a260e944320c",
      "price": {
          "amount": 10
      },
      "reason": "DelayedOrder",
      "attributes": {
          "reasonDescription": "Price Adjustment due to delayed shipping"
      },
      "updatedAt": "2024-06-20T08:09:58.951Z",
      "createdAt": "2024-06-20T08:09:58.951Z"
  }
  ```
</Accordion>

As multiple adjustments can be applied to a single cart, item, or fulfillment, adjustments are displayed as a collection.

The following code sample provides the structure of an adjustment object in a collection:

<Accordion title="Click to expand the JSON example.">
  ```json
  "adjustments": {
        "total": 10,
        "collection": [
            {
                "id": "6964b984-49fd-4754-b979-a260e944320c",
                "price": {
                    "amount": 10
                },
                "reason": "DelayedOrder",
                "attributes": {
                    "reasonDescription": "Price Adjustment due to delayed shipping"
                },
                "updatedAt": "2024-06-20T08:09:58.951Z",
                "createdAt": "2024-06-20T08:09:58.951Z"
            }
        ]
    }
  ```
</Accordion>

## Examples

### Making adjustments at the cart level

Use the [create cart adjustment](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) endpoint to make adjustments at the cart level and credit points available for discounts as in the following example:

<Accordion title="Click to expand the curl example.">
  ```curl
      curl --location '{{modular_cart_domain}}/carts/7d403833-8e0c-43f5-aded-72d6a2eaf062/adjustments' \
      --header 'Content-Type: application/json' \
      --header 'x-fabric-tenant-id:  {tenantId}' \
      --data '{
          "price": {
              "amount":10
          },
          "reason":"Avail 1000 Credit Points"
      }'
  ```
</Accordion>

### Using adjustments at the item level

Use the [create item adjustment](/v3/api-reference/carts-v3/item-adjustments/create-item-adjustments) endpoint to make adjustments at the item level and apply the sale price as in the following example:

<Accordion title="Click to expand the curl example.">
  ```curl
      curl --location '{{modular_cart_domain}}/carts/7d403833-8e0c-43f5-aded-72d6a2eaf062/items/806d6671-801d-4554-976d-0d38e525a852/adjustments' \
      --header 'Content-Type: application/json' \
      --header 'x-fabric-tenant-id:  {tenantId}' \
      --data '{
          "price": {
              "amount":"10"
          },
          "reason":"Item was a sale item 2 days ago",
          "attributes": {
              "type": "retail"
          }
      }'
  ```
</Accordion>


# Configuring Fees



The fees feature in Carts API allows you to add, update, or remove additional fees beyond the resource price, such as gifting fees, platform fees, and service fees. These fees can be applied at various levels, including the cart, individual items, or fulfillment, providing flexibility in customizing the total cost structure. Optionally, the fees may be taxable.

## Prerequisites

The following prerequisites must be completed sequentially to configure a fee.

1.  [Create a cart](/v3/api-reference/carts-v3/carts/carts).
2.  [Create a fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) to apply the fulfillment fee.
3.  [Create an item](/v3/api-reference/carts-v3/items/items) to add the item fee.

## Fee Initialization

You can apply fees at multiple levels, including the cart, individual items, or fulfillment. The fee resource maintains a consistent structure across all levels. Taxes on fees is controlled by the `taxable` attribute in the request payload, which defaults to `true`. This means fees are taxed unless specifically set to `false`.

The following code sample provides the structure of a fee object:

<Accordion title="Click to expand the JSON example.">
  ```json
  {
      "id": "188514cb-f36b-4835-a8b3-df75164325d7",
      "name": "cart v3 fees",
      "price": {
          "amount": 10
      },
      "taxable": true,
      "attributes": {
          "message": "gifting-fee"
      },
      "updatedAt": "2024-06-20T07:55:49.021Z",
      "createdAt": "2024-06-20T07:55:49.021Z"
  } 
  ```
</Accordion>

The resource is displayed as a collection of fees for the associated resource as multiple fees can be applied to a single resource.

The following code sample provides the structure of a fee object in a collection:

<Accordion title="Click to expand the JSON example.">
  ```json
      "fees": {
          "total": 10,
          "collection": [
              {
                  "id": "188514cb-f36b-4835-a8b3-df75164325d7",
                  "name": "cart v3 fees",
                  "price": {
                      "amount": 10
                  },
                  "taxable": true,
                  "attributes": {
                      "message": "gifting-fee"
                  },
                  "updatedAt": "2024-06-20T07:55:49.021Z",
                  "createdAt": "2024-06-20T07:55:49.021Z"
              }
          ]
      }
  ```
</Accordion>

## Examples

### Adding shipping fees, including shipping fee tax

The following steps outline how a fulfillment fee is configured:

1.  [Create fulfillment fee.](/v3/api-reference/carts-v3/fulfillment/create-fulfillments)
    <Accordion title="Click to expand the curl example.">
      ```curl
      curl --location '{{modular_cart}}/carts/7d403833-8e0c-43f5-aded-72d6a2eaf062/fulfillments/65879f42-edfb-46de-bf57-77835dec3d60/fees' \
       --header 'Content-Type: application/json' \
       --header 'x-fabric-tenant-id:  {tenantId}' \
       --data '{
           "name": "Shipping fee",
           "price": {
               "amount": 10
           },
           "taxable": true,
           "attributes": {
               "displayMsg": "Shipping Off for orders over $100"
           }
       }'
      ```
    </Accordion>
2.  Add tax for the fulfillment fee using the [replace tax date](/v3/api-reference/carts-v3/validations/add-tax) endpoint.

    <Accordion title="Click to expand the curl and JSON response examples">
      ```curl
      curl --location --request PUT 'https://dev.cart.fabric.inc/beta/v3/modular/carts/7d403833-8e0c-43f5-aded-72d6a2eaf062/tax' \
       --header 'x-fabric-tenant-id:  {tenantId}' \
       --header 'Content-Type: application/json' \
       --data '{
           "fulfillments": [
               {
                   "id": "65879f42-edfb-46de-bf57-77835dec3d60",
                   "tax": [
                       {
                           "amount": 2,
                           "attributes": {
                               "rate": 1
                           }
                       }
                   ],
                   "fees": [
                       {
                           "id": "026b9bd1-2e96-4016-93a3-674da01aa29e",
                           "tax": [
                               {
                                   "amount": 1,
                                   "attributes": {
                                       "rate": 1
                                   }
                               }
                           ]
                       }
                   ]
               }
           ]
       }'
      ```

      Tax here includes fulfillment tax and fulfillment the fee tax as provided in the payload.

      Response:

      ```json
       "price": {
           "total": 343,
           "subtotal": 310,
           "tax": 3,
           "fulfillments": 30,
           "discounts": 0,
           "fees": 110,
           "adjustments": 0
       }
      ```
    </Accordion>

### Applying a gifting fee to items that are gift-wrapped

Use the [create item fees](/v3/api-reference/carts-v3/item-fees/create-item-fees) endpoint to apply the gifting fees to the items that are gift wrapped.
The following curl example provides how the request is structured when creating an item fee:

<Accordion title="Click to expand the curl example.">
  ```curl
  curl --location '{{modular_cart_domain}}/carts/7d403833-8e0c-43f5-aded-72d6a2eaf062/items/806d6671-801d-4554-976d-0d38e525a852/fees' \
  --header 'Content-Type: application/json' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --data '{
      "name": "Gift wrap",
      "price": {
          "amount": 10
      },
      "taxable": false,
      "attributes": {
          "message": "Happy Birthday John Doe"
      }
  }'
  ```
</Accordion>

### Adding a platform fee at the cart level

Use the [create cart fees](/v3/api-reference/carts-v3/fees/create-fees) endpoint to add a platform fee at the cart level.
The following curl example provides how the request is structured when creating fee at the cart level:

<Accordion title="Click to expand the curl example.">
  ```curl
      curl --location '{{modular_cart_domain}}/carts/7d403833-8e0c-43f5-aded-72d6a2eaf062/fees' \
      --header 'Content-Type: application/json' \
      --header 'x-fabric-tenant-id:  {tenantId}' \
      --data '{
          "name": "Platform-fee",
          "price": {
              "amount": 100
          },
          "taxable": true,
          "attributes": {
              "reason": "added as an example"
          }
      }'
  ```
</Accordion>


# Configuring Fulfillment



This feature in Carts API allows you to add, update, or remove fulfillment information in the cart and associate it with individual items. The cart supports multiple fulfillment options.

## Prerequisites

The following prerequisites must be completed sequentially to configure a fulfillment.

1.  [Create a cart](/v3/api-reference/carts-v3/carts/carts).
2.  [Create a destination address](/v3/api-reference/carts-v3/addresses/create-addresses) if the fulfillment type is `SHIP_TO`.
3.  [Create an origin address](/v3/api-reference/carts-v3/addresses/create-addresses) if the fulfillment type is `BOPIS` or `ROPIS`.

## Fulfillment Initialization

After you create a cart with [Create a cart](/v3/api-reference/carts-v3/carts/carts), you will see the fulfillment resource in the cart response.

The following code sample provides the structure of fulfillment object in a cart response:

<Accordion title="Click to expand the JSON example.">
  ```json
  {
      "id": "a7f51053-6fbd-42a6-8fbc-303bfc16c13f",
      "type": "SHIP_TO",
      "refId": "6425279f661bf878448465b4",
      "originAddress": "{{originAddressId}}",
      "destinationAddress": "{{destinationAddressId}}",
      "price": {
          "amount": 10
      },
      "fees": {
          "total": 0,
          "collection": []
      },
      "adjustments": {
          "total": 0,
          "collection": []
      },
      "tax": {
          "total": 0,
          "collection": []
      }
  }
  ```
</Accordion>

The fulfillment resource can be associated with an item using the `fulfillmentId` by making POST request to the `{cartId}/fulfillments` endpoint.

The following code sample provides how the request is structured in a request payload:

### POST Response

<Accordion title="Click to expand the curl example.">
  ```curl
  curl --location '{{cartV3_domain}}/carts/{{cartId}}/items' \
  --header 'x-fabric-tenant-id: {tenantId}' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: {authToken}' \
  --data 
  '{
      "sku": "5",
      "refId": "19",
      "quantity": 10,
      "price": 
      {
          "type": "UNIT",
          "amount": 100
      },
      "fulfillment": 
      {
          "id": "a7f51053-6fbd-42a6-8fbc-303bfc16c13f",  // fulfillmentId
          "inventory": 
          {
              "channels": 
                  {"networkCode": "ShipToHome"},
              "type": "preOrder"
          }
      }
  }'
  ```
</Accordion>

The cart has a fulfillment object that stores all the fulfillments added to it.

You can check your fulfillment information by making a GET request to `carts/{cartId}/fulfillments/{fulfillmentId}` endpoint.

The following code sample provides the structure of fulfillment object in the response:

<Accordion title="Click to expand the JSON example.">
  ```json
  {
      "fulfillments": 
      {
          "a7f51053-6fbd-42a6-8fbc-303bfc16c13f":{
              "id": "a7f51053-6fbd-42a6-8fbc-303bfc16c13f",
              "type": "SHIP_TO",
              "refId": "6425279f661bf878448465b4",
              "attributes": {},
              "originAddress": "d48340ac-23c6-42ef-8aa3-84c43eb4e391",
              "destinationAddress": "d48340ac-23c6-42ef-8aa3-84c43eb4e391",
              "price": {
                  "amount": 10
              },
              "fees": {
                  "total": 0,
                  "collection": []
              },
              "adjustments": {
                  "total": 0,
                  "collection": []
              },
              "tax": {
                  "total": 0,
                  "collection": []
              }
          },
          "b326819-6fbd-42a6-8fbc-303bfc16e222": {
              "id": "b326819-6fbd-42a6-8fbc-303bfc16e222",
              "type": "SHIP_TO",
              "refId": "632479f661bf87844846534",
              "attributes": {},
              "originAddress": "d48340ac-23c6-42ef-8aa3-84c43eb4e391",
              "destinationAddress": "d48340ac-23c6-42ef-8aa3-84c43eb4e391",
              "price": {
                  "amount": 10
              },
              "fees": {
                  "total": 0,
                  "collection": []
              },
              "adjustments": {
                  "total": 0,
                  "collection": []
              },
              "tax": {
                  "total": 0,
                  "collection": []
              }
          }
      }
  }
  ```
</Accordion>

## Examples

### Adding a fulfillment with a single cost to multiple items

1.  [Create a fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) curl.
    <Accordion title="Click to see fulfillment curl and response examples">
      ```curl
      curl --location '{{modular_cart_domain}}/carts/07618f2d-8559-479a-80ed-5ed7259cbd25/fulfillments' \
      --header 'Content-Type: application/json' \
      --header 'x-fabric-tenant-id:  {tenantId}' \
      --data '{
          "type": "SHIP_TO",
          "refId": "6622d50d2eee4e4e124c7467",
          "destinationAddress": "2ac62be8-2440-46e7-9a42-6b2c62fb6690",
          "price": {
              "amount": 10.0
          }
      }'
      ```

      **Response**

      ```json
      {
          "id": "e4d68b36-8902-4427-a244-9eb65290855c",
          "type": "SHIP_TO",
          "refId": "6622d50d2eee4e4e124c7467",
          "destinationAddress": "2ac62be8-2440-46e7-9a42-6b2c62fb6690",
          "price": {
              "amount": 10.0
          },
          "fees": {
              "total": 0,
              "collection": []
          },
          "adjustments": {
              "total": 0,
              "collection": []
          },
          "tax": {
              "total": 0,
              "collection": []
          }
      }
      ```
    </Accordion>
2.  Create multiple items with same fulfillment using the [add items](/v3/api-reference/carts-v3/orchestrator/line-items/add-items) endpoint.
    <Accordion title="Click to expand">
      ```curl
      curl --location '{{orchestrator_domain}}/orchestrator/carts/07618f2d-8559-479a-80ed-5ed7259cbd25/items' \
      --header 'x-fabric-tenant-id:  {tenantId}' \
      --header 'x-fabric-request-id: 1' \
      --header 'x-fabric-channel-id: 12' \
      --header 'Authorization: {authToken}' \
      --header 'customer-id: 1234' \
      --header 'Content-Type: application/json' \
      --data '{
          "items": [
              {
                  "quantity": 4,
                  "itemId": "41",
                  "sku": "SKU2",
                  "priceListId": "100000",
                  "price": {
                      "type": "UNIT",
                      "amount": 10
                  },
                  "fulfillment": {
                      "id": "e4d68b36-8902-4427-a244-9eb65290855c",
                      "inventory": {
                          "channels": {
                              "type": "WEB_PICKUP",
                              "locationNumber": "15",
                              "channelId": "12"
                          },
                          "type": "availableToPurchase"
                      }
                  }
              },
              {
                  "quantity": 5,
                  "itemId": "44",
                  "sku": "SKU3",
                  "priceListId": "100000",
                  "price": {
                      "type": "UNIT",
                      "amount": 100
                  },
                  "fulfillment": {
                      "id": "e4d68b36-8902-4427-a244-9eb65290855c",
                      "inventory": {
                          "channels": {
                              "type": "WEB_SHIP",
                              "networkCode": "ShipToHome",
                              "channelId": "12"
                          },
                          "type": "availablePreorder"
                      }
                  }
              }
          ]
      }'
      ```
    </Accordion>

### Adding a fulfillment with a custom cost to an item

1.  [Create a fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) curl.

    <Accordion title="Click to see the curl and the JSON response">
      ```curl
      curl --location '{{modular_cart_domain}}/carts/07618f2d-8559-479a-80ed-5ed7259cbd25/fulfillments' \
      --header 'Content-Type: application/json' \
      --header 'x-fabric-tenant-id:  {tenantId}' \
      --data '{
          "type": "SHIP_TO",
          "refId": "6622d50d2eee4e4e124c7467",
          "destinationAddress": "2ac62be8-2440-46e7-9a42-6b2c62fb6690",
          "price": {
              "amount": 10.0
          }
      }'
      ```

      Response:

      ```json
      {
          "id": "e4d68b36-8902-4427-a244-9eb65290855c",
          "type": "SHIP_TO",
          "refId": "6622d50d2eee4e4e124c7467",
          "destinationAddress": "2ac62be8-2440-46e7-9a42-6b2c62fb6690",
          "price": {
              "amount": 10.0
          },
          "fees": {
              "total": 0,
              "collection": []
          },
          "adjustments": {
              "total": 0,
              "collection": []
          },
          "tax": {
              "total": 0,
              "collection": []
          }
      }
      ```
    </Accordion>
2.  Add a custom cost to the item using the [add item](/v3/api-reference/carts-v3/items/items) endpoint.

    <Accordion title="Click to see the curl and the JSON response">
      The example shows adding an additional \$5.00 as the fulfillment cost for the item.

      ```curl
      curl --location 'https:{{modular_cart_domain}}/carts/7d403833-8e0c-43f5-aded-72d6a2eaf062/items' \
      --header 'x-fabric-tenant-id:  {tenantId}' \
      --header 'Content-Type: application/json' \
      --data '{
          "sku": "5",
          "refId": "1",
          "quantity": 1,
          "priceListId": "100000",
          "price": {
              "type": "UNIT",
              "amount": 100
          },
          "fulfillment": {
              "id": "e4d68b36-8902-4427-a244-9eb65290855c",
              "inventory": {
                  "channels": {
                      "networkCode": "ShipToHome"
                  },
                  "type": "backOrder"
              },
              "price": {
                  "amount": 5
              }
          }
      }'
      ```

      `price.fulfillments` accepts both the fulfillment cost and any additional fulfillment amount added to the item.

      Response:

      ```json
      {
          "lineItems": {
              "total": 100,
              "collection": [
                  {
                      "id": "806d6671-801d-4554-976d-0d38e525a852",
                      "sku": "5",
                      "refId": "1",
                      "quantity": 1,
                      "priceListId": "100000",
                      "position": 1,
                      "price": {
                          "unit": 100,
                          "amount": 100
                      },
                      "fees": {
                          "total": 0,
                          "collection": []
                      },
                      "promotions": {
                          "total": 0,
                          "collection": []
                      },
                      "adjustments": {
                          "total": 0,
                          "collection": []
                      },
                      "fulfillment": {
                          "id": "cda19e15-ab04-419e-8fc1-61fa7874beb0",
                          "price": {
                              "amount": 5
                          },
                          "inventory": {
                              "type": "backOrder",
                              "channels": {
                                  "networkCode": "ShipToHome"
                              }
                          },
                          "tax": {
                              "total": 0,
                              "collection": []
                          }
                      },
                      "attributes": {},
                      "tax": {
                          "total": 0,
                          "collection": []
                      },
                      "updatedAt": "2024-08-31T15:17:20.584Z",
                      "createdAt": "2024-08-31T15:17:20.584Z"
                  }
              ]
          },
          "id": "7d403833-8e0c-43f5-aded-72d6a2eaf062",
          "attributes": {
              "key": "value"
          },
          "configuration": {
              "order": {
                  "validate": {
                      "paymentsRemaining": "BLOCK",
                      "taxRemaining": "BLOCK",
                      "invalidItem": "BLOCK",
                      "itemOutOfStock": "BLOCK"
                  }
              },
              "product": {
                  "cacheExpiry": 1,
                  "behaviors": {
                      "add": "NONE",
                      "update": "NONE",
                      "get": "NONE",
                      "cacheExpiry": "NONE"
                  },
                  "maxQuantity": {
                      "behaviors": {
                          "add": "NONE",
                          "update": "NONE",
                          "get": "NONE"
                      }
                  }
              },
              "inventory": {
                  "cacheExpiry": 1,
                  "behaviors": {
                      "add": "NONE",
                      "update": "NONE",
                      "get": "NONE",
                      "cacheExpiry": "NONE"
                  },
                  "check": "SKU"
              },
              "tax": {
                  "cacheExpiry": 5,
                  "behaviors": {
                      "cacheExpiry": "NONE"
                  }
              },
              "promotions": {
                  "cacheExpiry": 5,
                  "behaviors": {
                      "cacheExpiry": "WARN"
                  }
              },
              "maxQuantity": {
                  "limit": 10,
                  "behaviors": {
                      "add": "NONE",
                      "update": "NONE",
                      "get": "NONE"
                  }
              }
          },
          "customerContext": {},
          "status": "ACTIVE",
          "state": [
              {
                  "resource": "CART",
                  "resourceId": "",
                  "key": "MISSING_PAYMENT_DETAILS",
                  "description": "No payment details have been added to this Cart"
              },
              {
                  "resource": "CART",
                  "resourceId": "",
                  "key": "MISSING_TAX",
                  "description": "No tax has been added to this Cart"
              }
          ],
          "price": {
              "total": 115,
              "subtotal": 100,
              "tax": 0,
              "fulfillments": 15,
              "discounts": 0,
              "fees": 0,
              "adjustments": 0
          },
          "promotions": {
              "total": 0,
              "collection": null
          },
          "fees": {
              "total": 0,
              "collection": []
          },
          "adjustments": {
              "total": 0,
              "collection": []
          },
          "addresses": {
              "702009a6-fc56-4df7-a1b4-c73cf916d9fc": {
                  "id": "702009a6-fc56-4df7-a1b4-c73cf916d9fc",
                  "name": {
                      "first": "Pat",
                      "last": "E"
                  },
                  "email": "samiksha@gmail.com",
                  "phone": {
                      "number": "9050123102",
                      "type": "MOBILE"
                  },
                  "addressLine1": "Princeton",
                  "addressLine2": "Street 2",
                  "addressLine3": "Stars Hollow",
                  "city": "Phillidelphia",
                  "region": "Pennsylvania",
                  "country": "US",
                  "postalCode": "1-21-12",
                  "updatedAt": "2024-08-31T15:17:17.312Z",
                  "createdAt": "2024-08-31T15:17:17.312Z"
              }
          },
          "summary": {
              "totalItems": 1,
              "totalUniqueItems": 1
          },
          "fulfillments": {
              "cda19e15-ab04-419e-8fc1-61fa7874beb0": {
                  "id": "cda19e15-ab04-419e-8fc1-61fa7874beb0",
                  "type": "SHIP_TO",
                  "refId": "1",
                  "attributes": {
                      "test1": {},
                      "channelId": [
                          "12"
                      ]
                  },
                  "originAddress": "",
                  "destinationAddress": "702009a6-fc56-4df7-a1b4-c73cf916d9fc",
                  "price": {
                      "amount": 10
                  },
                  "fees": {
                      "total": 0,
                      "collection": []
                  },
                  "adjustments": {
                      "total": 0,
                      "collection": []
                  },
                  "tax": {
                      "total": 0,
                      "collection": []
                  }
              }
          },
          "coupons": [],
          "appliedCoupons": [],
          "notAppliedCoupons": [],
          "validations": {
              "promotions": null,
              "lineItems": [],
              "product": null,
              "tax": null
          },
          "payments": {
              "authorized": 0,
              "collection": []
          },
          "channelId": "13",
          "currency": "USD",
          "updatedAt": "2024-08-31T15:17:18.982Z",
          "createdAt": "2024-08-31T15:17:07.865Z"
      }
      ```
    </Accordion>

### Adding a fulfillment with the type `BOPIS` or `ROPIS` requires a `locationId`

Use the [add fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint to add a location when creating a fulfillment as in the following example:

<Accordion title="Click to see curl example.">
  ```curl
  curl --location '{{modular_cart_domain}}/carts/7d403833-8e0c-43f5-aded-72d6a2eaf062/fulfillments' \
      --header 'Content-Type: application/json' \
      --header 'x-fabric-tenant-id:  {tenantId}' \
      --data '{
          "type": "BOPIS",
          "refId": "1",
          "originAddress": "702009a6-fc56-4df7-a1b4-c73cf916d9fc",
          "locationId": "1",
          "attributes": {
              "channelId": [
                  "12"
              ],
              "test1": 123
          },
          "price": {
              "amount": 10
          },
          "pickupPerson": {
              "primary": {
                  "name": {
                      "firstName": "BOB"
                  },
                  "email": "123",
                  "phone": {
                      "type": "MOBILE",
                      "number": "1231231234"
                  },
                  "addressId": "702009a6-fc56-4df7-a1b4-c73cf916d9fc"
              }
          }
      }'
  ```
</Accordion>

### Adding the same destination address to different fulfillments for multiple items

Use the [add fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint to create multiple fulfillment with the same addresses as in the following example:

<Accordion title="Click to see curl example.">
  ```curl
  curl --location '{{modular_cart_domain}}/carts/7d403833-8e0c-43f5-aded-72d6a2eaf062/fulfillments' \
  --header 'Content-Type: application/json' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --data '{
      "type": "BOPIS",
      "refId": "1",
      "originAddress": "702009a6-fc56-4df7-a1b4-c73cf916d9fc",
      "destinationAddress": "702009a6-fc56-4df7-a1b4-c73cf916d9fc",
      "locationId": "1",
      "attributes": {
          "channelId": [
              "12"
          ],
          "test1": 123
      },
      "price": {
          "amount": 10
      },
      "pickupPerson": {
          "primary": {
              "name": {
                  "firstName": "BOB"
              },
              "email": "123",
              "phone": {
                  "type": "MOBILE",
                  "number": "1231231234"
              },
              "addressId": "702009a6-fc56-4df7-a1b4-c73cf916d9fc"
          }
      }
  }'  
  ```
</Accordion>


# Configuring Order Drafts



This feature in Carts API enables the cart to be transformed into a schema ready for submission to the **Order Management System (OMS)**, representing the **order draft** stage before the order is officially created.

At this stage, the cart contains all necessary data, including items, fulfillment details, fees, taxes, and payment information. This transformation ensures that the cart aligns with OMS requirements, allowing for final review and confirmation of the order before proceeding to fulfillment.

## Prerequisites

There are two types prerequisites, depending on your cart configurations.

One of the following prerequisites must be completed sequentially to configure an order draft.

<Accordion title="Prerequisites where cart configurations are set to BLOCK">
  ```json
  "configuration": {
      "order": {
          "validate": {
              "paymentsRemaining": "BLOCK",
              "taxRemaining": "BLOCK",
              "invalidItem": "BLOCK",
              "itemOutOfStock": "BLOCK"
          }
      }
  }
  ```

  **Prerequisites**

  1.  [Create a cart](/v3/api-reference/carts-v3/carts/carts).
  2.  [Add item](/v3/api-reference/carts-v3/items/items) to the cart.
  3.  [Add taxes](/v3/api-reference/carts-v3/validations/add-tax) to the resources in the cart.
  4.  [Add payments to the cart](/v3/api-reference/carts-v3/payments/create-payments), ensuring they match the cart total.
  5.  Ensure that the items added to the cart are valid and in stock.
</Accordion>

<Accordion title="Prerequisites where cart configurations are set to NONE">
  ```json
  "configuration": {
      "order": {
          "validate": {
              "paymentsRemaining": "BLOCK",
              "taxRemaining": "BLOCK",
              "invalidItem": "BLOCK",
              "itemOutOfStock": "BLOCK"
          }
      }
  }
  ```

  **Prerequisites**

  1.  [Create a cart](/v3/api-reference/carts-v3/carts/carts).
  2.  [Add item](/v3/api-reference/carts-v3/items/items) to the cart.
</Accordion>

## Order Drafts Initialization

The order draft captures a snapshot of the cart, which can then be converted into an order. The ability to create an order draft is controlled by [cart configurations](/v3/api-reference/carts-v3/configuration-behaviors). Cart offers users the flexibility to prevent order draft creation if:

*   Payments haven't been added to the cart.
*   Taxes are missing for resources in the cart.
*   Items are invalid.
*   Items are out of stock.

The following code sample provides the structure of order draft settings that block creation in the response:

### Cart configuration

<Accordion title="Click to expand the JSON example.">
  ```json
  "configuration": {
      "order": {
          "validate": {
              "paymentsRemaining": "BLOCK",
              "taxRemaining": "BLOCK",
              "invalidItem": "BLOCK",
              "itemOutOfStock": "BLOCK"
          }
      }
  }
  ```
</Accordion>

## Examples

### Creating an order draft to send to an Order Management System (OMS)

Use the [create an order draft](/v3/api-reference/carts-v3/orchestrator/carts/order-drafts) endpoint to create an order draft and send it to OMS as in the following example:

<Accordion title="Click to expand the curl and JSON response example.">
  ```curl
      curl --location '{{orchestrator_domain}}/carts/{{cartId}}/order-draft' \
      --header 'x-fabric-tenant-id: {tenantId}' \
      --header 'x-fabric-request-id: {{requestId}}' \
      --header 'x-fabric-channel-id: {{channelId}}' \
      --header 'Authorization: {authToken}' \
      --header 'Content-Type: application/json'
      --data '{
          "orderNumber": "W0013"
      }'
  ```

  **Response**

  ```json
      {
          "order": {
              "number": "W0013",
              "currency": "USD",
              "createdAt": "2024-06-24T09:22:40.979+00:00",
              "attributes": {}
          },
          "cartId": "39ea2154-7160-4feb-ae42-1506223efd95",
          "attributes": {
              "name": "cart test",
              "description": "This cart is created by cart v2 service"
          },
          "customerContext": {
              "id": "C01",
              "segments": [
                  {
                      "name": "membership",
                      "value": [
                          "premium"
                      ]
                  },
                  {
                      "name": "customer-type",
                      "value": [
                          "high"
                      ]
                  }
              ],
              "attributes": {
                  "returnRate": "high",
                  "city": "london",
                  "type": "regular"
              }
          },
          "status": "ACTIVE",
          "state": [
              {
                  "resource": "VALIDATION",
                  "resourceId": "",
                  "key": "PROMOTION_REFRESH",
                  "description": "Promotions require a refresh in the Cart"
              },
              {
                  "resource": "CART",
                  "resourceId": "HAPPY10",
                  "key": "COUPON_NOT_APPLIED",
                  "description": "Coupon HAPPY10 has no associated promotion"
              }
          ],
          "price": {
              "total": 1180.19,
              "subtotal": 1043,
              "tax": 97.19,
              "fulfillments": 40,
              "discounts": 0,
              "fees": 25,
              "adjustments": 12
          },
          "promotions": {
              "total": 0,
              "collection": [
                  {
                      "id": "6626c179627d450008a5b202",
                      "title": "SXP Cart Promotion Fixed Price",
                      "type": "QUANTITY",
                      "value": 10,
                      "attributes": {}
                  },
                  {
                      "id": "64959a4b2341cd00080ca746",
                      "title": "happy10 coupon",
                      "code": "HAPPY10",
                      "type": "PRODUCT",
                      "value": 103,
                      "attributes": {}
                  },
                  {
                      "id": "662a7a5c65c3c7000cff7c4a",
                      "title": "SXP Cart Promotion Item Free",
                      "type": "BUYGET",
                      "value": 3.9,
                      "attributes": {}
                  },
                  {
                      "id": "6626e327fc29c3000858c6e6",
                      "title": "SXP Cart Promotion Percentage Off",
                      "type": "QUANTITY",
                      "value": 515,
                      "attributes": {}
                  }
              ]
          },
          "fees": {
              "total": 15,
              "collection": [
                  {
                      "id": "9db3ed22-9a71-47c7-844e-bd42e28319c2",
                      "name": "cart v3 fees",
                      "price": {
                          "amount": 15
                      },
                      "taxable": true,
                      "attributes": {
                          "message": "gifting-fee"
                      },
                      "tax": {
                          "total": 1.33,
                          "collection": [
                              {
                                  "amount": 0.6,
                                  "attributes": {
                                      "taxRate": 0.04,
                                      "taxType": "SALES",
                                      "taxJurisdiction": {
                                          "jurisdictionValue": "NEW YORK",
                                          "jurisdictionType": "STATE",
                                          "jurisdictionId": "24354"
                                      }
                                  }
                              },
                              {
                                  "amount": 0.67,
                                  "attributes": {
                                      "taxRate": 0.045,
                                      "taxType": "SALES",
                                      "taxJurisdiction": {
                                          "jurisdictionValue": "NEW YORK",
                                          "jurisdictionType": "CITY",
                                          "jurisdictionId": "25353"
                                      }
                                  }
                              },
                              {
                                  "amount": 0.06,
                                  "attributes": {
                                      "taxRate": 0.00375,
                                      "taxType": "SALES",
                                      "taxJurisdiction": {
                                          "jurisdictionValue": "METROPOLITAN COMMUTER TRANSPORTATION DISTRICT",
                                          "jurisdictionType": "DISTRICT",
                                          "jurisdictionId": "79774"
                                      }
                                  }
                              }
                          ]
                      },
                      "updatedAt": "2024-06-24T09:07:50.155Z",
                      "createdAt": "2024-06-24T09:07:50.155Z"
                  }
              ]
          },
          "adjustments": {
              "total": 7,
              "collection": [
                  {
                      "id": "c18aa476-97a7-4f31-a2ae-528adb3d6e84",
                      "price": {
                          "amount": 7
                      },
                      "reason": "DelayedOrder",
                      "attributes": {
                          "reasonDescription": "Price Adjustment due to delayed shipping"
                      },
                      "updatedAt": "2024-06-24T09:07:51.960Z",
                      "createdAt": "2024-06-24T09:07:51.960Z"
                  }
              ]
          },
          "addresses": {
              "476e673c-10c1-4bd6-b83d-26d403b5a735": {
                  "id": "476e673c-10c1-4bd6-b83d-26d403b5a735",
                  "name": {
                      "first": "Jane",
                      "last": "Doe"
                  },
                  "email": "jane.doe@gmail.com",
                  "phone": {
                      "number": "9050123102",
                      "type": "MOBILE"
                  },
                  "addressLine1": "888 Broadway",
                  "addressLine2": "Street 2",
                  "addressLine3": "Stars Hollow",
                  "city": "New York",
                  "region": "NY",
                  "country": "US",
                  "postalCode": "10003",
                  "updatedAt": "2024-06-24T09:07:41.463Z",
                  "createdAt": "2024-06-24T09:07:41.463Z"
              },
              "9f615749-35ef-43e7-adfc-3369eb3b05e8": {
                  "id": "9f615749-35ef-43e7-adfc-3369eb3b05e8",
                  "name": {
                      "first": "Joe",
                      "last": "Cooper"
                  },
                  "email": "joe.cooper@mail.com",
                  "phone": {
                      "number": "+1-5807769338",
                      "type": "MOBILE"
                  },
                  "addressLine1": "92 Landon",
                  "addressLine2": "Street 1",
                  "addressLine3": "5th Avenue",
                  "city": "New York",
                  "region": "NY",
                  "country": "US",
                  "postalCode": "10006",
                  "updatedAt": "2024-06-24T09:07:43.138Z",
                  "createdAt": "2024-06-24T09:07:43.138Z"
              }
          },
          "lineItems": {
              "total": 1035,
              "collection": [
                  {
                      "id": "75c41689-7bc5-4775-8d72-c7821d38ed9c",
                      "sku": "SKU2",
                      "refId": "41",
                      "quantity": 2,
                      "priceListId": "100000",
                      "position": 1,
                      "price": {
                          "unit": 500,
                          "amount": 1000
                      },
                      "fees": {
                          "total": 10,
                          "collection": [
                              {
                                  "id": "e3a734c6-d496-43e2-8912-881b44d5f083",
                                  "name": "giftingFee",
                                  "price": {
                                      "amount": 10
                                  },
                                  "taxable": true,
                                  "attributes": {
                                      "message": "regular"
                                  },
                                  "tax": {
                                      "total": 0.89,
                                      "collection": [
                                          {
                                              "amount": 0.4,
                                              "attributes": {
                                                  "taxRate": 0.04,
                                                  "taxType": "SALES",
                                                  "taxJurisdiction": {
                                                      "jurisdictionValue": "NEW YORK",
                                                      "jurisdictionType": "STATE",
                                                      "jurisdictionId": "24354"
                                                  }
                                              }
                                          },
                                          {
                                              "amount": 0.45,
                                              "attributes": {
                                                  "taxRate": 0.045,
                                                  "taxType": "SALES",
                                                  "taxJurisdiction": {
                                                      "jurisdictionValue": "NEW YORK",
                                                      "jurisdictionType": "CITY",
                                                      "jurisdictionId": "25353"
                                                  }
                                              }
                                          },
                                          {
                                              "amount": 0.04,
                                              "attributes": {
                                                  "taxRate": 0.00375,
                                                  "taxType": "SALES",
                                                  "taxJurisdiction": {
                                                      "jurisdictionValue": "METROPOLITAN COMMUTER TRANSPORTATION DISTRICT",
                                                      "jurisdictionType": "DISTRICT",
                                                      "jurisdictionId": "79774"
                                                  }
                                              }
                                          }
                                      ]
                                  },
                                  "updatedAt": "2024-06-24T09:07:53.712Z",
                                  "createdAt": "2024-06-24T09:07:53.712Z"
                              }
                          ]
                      },
                      "adjustments": {
                          "total": 5,
                          "collection": [
                              {
                                  "id": "b36d4bf0-3e10-40fb-b629-7f7760bbadcc",
                                  "price": {
                                      "amount": 5
                                  },
                                  "reason": "Item was a sale item 2 days ago",
                                  "attributes": {
                                      "type": "retail"
                                  },
                                  "updatedAt": "2024-06-24T09:07:55.423Z",
                                  "createdAt": "2024-06-24T09:07:55.423Z"
                              }
                          ]
                      },
                      "fulfillment": {
                          "id": "e8d9d243-80cf-48a3-bf3d-765b55c2bca9",
                          "inventory": {
                              "type": "availableToPurchase",
                              "channels": {
                                  "type": "WEB_PICKUP",
                                  "locationNumber": "15",
                                  "channelId": "12"
                              }
                          }
                      },
                      "attributes": {},
                      "tax": {
                          "total": 88.75,
                          "collection": [
                              {
                                  "amount": 40,
                                  "attributes": {
                                      "taxRate": 0.04,
                                      "taxType": "SALES",
                                      "taxJurisdiction": {
                                          "jurisdictionValue": "NEW YORK",
                                          "jurisdictionType": "STATE",
                                          "jurisdictionId": "24354"
                                      }
                                  }
                              },
                              {
                                  "amount": 45,
                                  "attributes": {
                                      "taxRate": 0.045,
                                      "taxType": "SALES",
                                      "taxJurisdiction": {
                                          "jurisdictionValue": "NEW YORK",
                                          "jurisdictionType": "CITY",
                                          "jurisdictionId": "25353"
                                      }
                                  }
                              },
                              {
                                  "amount": 3.75,
                                  "attributes": {
                                      "taxRate": 0.00375,
                                      "taxType": "SALES",
                                      "taxJurisdiction": {
                                          "jurisdictionValue": "METROPOLITAN COMMUTER TRANSPORTATION DISTRICT",
                                          "jurisdictionType": "DISTRICT",
                                          "jurisdictionId": "79774"
                                      }
                                  }
                              }
                          ]
                      },
                      "updatedAt": "2024-06-24T09:07:53.712Z",
                      "createdAt": "2024-06-24T09:07:48.783Z"
                  },
                  {
                      "id": "9a45a494-0cc5-49aa-b339-88e4659ede8b",
                      "sku": "SKU3",
                      "refId": "44",
                      "quantity": 3,
                      "priceListId": "100000",
                      "position": 2,
                      "price": {
                          "unit": 10,
                          "amount": 30
                      },
                      "fees": {
                          "total": 0,
                          "collection": []
                      },
                      "adjustments": {
                          "total": 0,
                          "collection": []
                      },
                      "fulfillment": {
                          "id": "94b538bb-713f-464d-aa2e-d23ae6fd3115",
                          "inventory": {
                              "type": "availablePreorder",
                              "channels": {
                                  "networkCode": "ShipToHome",
                                  "type": "WEB_SHIP",
                                  "channelId": "12"
                              }
                          }
                      },
                      "attributes": {},
                      "tax": {
                          "total": 2.66,
                          "collection": [
                              {
                                  "amount": 1.2,
                                  "attributes": {
                                      "taxRate": 0.04,
                                      "taxType": "SALES",
                                      "taxJurisdiction": {
                                          "jurisdictionValue": "NEW YORK",
                                          "jurisdictionType": "STATE",
                                          "jurisdictionId": "24354"
                                      }
                                  }
                              },
                              {
                                  "amount": 1.35,
                                  "attributes": {
                                      "taxRate": 0.045,
                                      "taxType": "SALES",
                                      "taxJurisdiction": {
                                          "jurisdictionValue": "NEW YORK",
                                          "jurisdictionType": "CITY",
                                          "jurisdictionId": "25353"
                                      }
                                  }
                              },
                              {
                                  "amount": 0.11,
                                  "attributes": {
                                      "taxRate": 0.00375,
                                      "taxType": "SALES",
                                      "taxJurisdiction": {
                                          "jurisdictionValue": "METROPOLITAN COMMUTER TRANSPORTATION DISTRICT",
                                          "jurisdictionType": "DISTRICT",
                                          "jurisdictionId": "79774"
                                      }
                                  }
                              }
                          ]
                      },
                      "updatedAt": "2024-06-24T09:07:48.783Z",
                      "createdAt": "2024-06-24T09:07:48.783Z"
                  }
              ]
          },
          "summary": {
              "totalItems": 5,
              "totalUniqueItems": 2
          },
          "fulfillments": {
              "e8d9d243-80cf-48a3-bf3d-765b55c2bca9": {
                  "type": "SHIP_TO",
                  "refId": "6622d50d2eee4e4e124c7467",
                  "attributes": {
                      "dropOffMethod": false,
                      "WEB_CARRIER_MODE": "2DAY",
                      "proOrderShipDays": 2,
                      "shipmentInstructions": "Ring doorbell for 2nd Floor",
                      "radialShippingID": "ANY_2 DAY",
                      "promisedShipDate": "2023-02-10T18:31:31.784Z",
                      "taxCode": "FR1000",
                      "WEB_CARRIER_CODE": "ANY",
                      "storePickupEnabled": false
                  },
                  "originAddress": "",
                  "destinationAddress": "476e673c-10c1-4bd6-b83d-26d403b5a735",
                  "price": {
                      "amount": 10
                  },
                  "fees": {
                      "total": 0,
                      "collection": []
                  },
                  "adjustments": {
                      "total": 0,
                      "collection": []
                  },
                  "tax": {
                      "total": 0.89,
                      "collection": [
                          {
                              "amount": 0.4,
                              "attributes": {
                                  "taxRate": 0.04,
                                  "taxType": "SALES",
                                  "taxJurisdiction": {
                                      "jurisdictionValue": "NEW YORK",
                                      "jurisdictionType": "STATE",
                                      "jurisdictionId": "24354"
                                  }
                              }
                          },
                          {
                              "amount": 0.45,
                              "attributes": {
                                  "taxRate": 0.045,
                                  "taxType": "SALES",
                                  "taxJurisdiction": {
                                      "jurisdictionValue": "NEW YORK",
                                      "jurisdictionType": "CITY",
                                      "jurisdictionId": "25353"
                                  }
                              }
                          },
                          {
                              "amount": 0.04,
                              "attributes": {
                                  "taxRate": 0.00375,
                                  "taxType": "SALES",
                                  "taxJurisdiction": {
                                      "jurisdictionValue": "METROPOLITAN COMMUTER TRANSPORTATION DISTRICT",
                                      "jurisdictionType": "DISTRICT",
                                      "jurisdictionId": "79774"
                                  }
                              }
                          }
                      ]
                  }
              },
              "94b538bb-713f-464d-aa2e-d23ae6fd3115": {
                  "type": "BOPIS",
                  "refId": "64b985ef9e16365c4d2b0083",
                  "attributes": {
                      "warehouseId": "6126819ec326fe0009f473ba",
                      "isPickup": true,
                      "taxCode": "FR1000"
                  },
                  "originAddress": "9f615749-35ef-43e7-adfc-3369eb3b05e8",
                  "destinationAddress": "476e673c-10c1-4bd6-b83d-26d403b5a735",
                  "locationId": "15",
                  "pickupPerson": {
                      "primary": {
                          "name": {
                              "first": "Jay",
                              "last": "Cooper"
                          },
                          "email": "jay.cooper@gmail.com",
                          "phone": {
                              "number": "+1-1153202801",
                              "type": "MOBILE"
                          }
                      }
                  },
                  "price": {
                      "amount": 30
                  },
                  "fees": {
                      "total": 0,
                      "collection": []
                  },
                  "adjustments": {
                      "total": 0,
                      "collection": []
                  },
                  "tax": {
                      "total": 2.67,
                      "collection": [
                          {
                              "amount": 1.2,
                              "attributes": {
                                  "taxRate": 0.04,
                                  "taxType": "SALES",
                                  "taxJurisdiction": {
                                      "jurisdictionValue": "NEW YORK",
                                      "jurisdictionType": "STATE",
                                      "jurisdictionId": "24354"
                                  }
                              }
                          },
                          {
                              "amount": 1.35,
                              "attributes": {
                                  "taxRate": 0.045,
                                  "taxType": "SALES",
                                  "taxJurisdiction": {
                                      "jurisdictionValue": "NEW YORK",
                                      "jurisdictionType": "CITY",
                                      "jurisdictionId": "25353"
                                  }
                              }
                          },
                          {
                              "amount": 0.12,
                              "attributes": {
                                  "taxRate": 0.00375,
                                  "taxType": "SALES",
                                  "taxJurisdiction": {
                                      "jurisdictionValue": "METROPOLITAN COMMUTER TRANSPORTATION DISTRICT",
                                      "jurisdictionType": "DISTRICT",
                                      "jurisdictionId": "79774"
                                  }
                              }
                          }
                      ]
                  }
              }
          },
          "coupons": [
              {
                  "code": "HAPPY10",
                  "updatedAt": "2024-06-24T09:07:57.295Z"
              }
          ],
          "appliedCoupons": [
              {
                  "code": "HAPPY10",
                  "updatedAt": "2024-06-24T09:07:57.295Z"
              }
          ],
          "notAppliedCoupons": [],
          "payments": {
              "authorized": 1180.19,
              "collection": [
                  {
                      "id": "43eaf31a-2ef6-403a-ace7-0cca0dee9d97",
                      "provider": "fabricmock",
                      "processor": "fabricmock",
                      "method": "CREDIT_CARD",
                      "methodType": "VISA",
                      "state": "AUTHORIZED",
                      "authorization": {
                          "amount": 1180.19,
                          "expiry": "",
                          "verifier": {
                              "type": "PAYMENT_TOKEN",
                              "key": "123"
                          }
                      },
                      "billToAddress": "476e673c-10c1-4bd6-b83d-26d403b5a735",
                      "cardDetails": {},
                      "attributes": {}
                  }
              ]
          },
          "channelId": "12",
          "updatedAt": "2024-06-24T09:22:40.907Z",
          "createdAt": "2024-06-24T09:07:37.140Z",
          "errors": []
      }
  ```
</Accordion>


# Configuring Payment



This feature in Carts API allows users to add, update, and delete payment details. The cart maintains the state of each payment—pending, authorized, captured, and failed—as provided by the user, but it doesn't store tokens, which are expected from the System Integrator (SI).

## Prerequisites

The following prerequisites must be completed sequentially to configure a payment.

1.  [Create a cart](/v3/api-reference/carts-v3/carts/carts).
2.  [Add an item](/v3/api-reference/carts-v3/items/items) to the cart.

## Payments Initialization

The cart displays authorized amounts and allows updates or removals of payments. Payments can be purged or held when the cart changes such as, price changes. The cart also verifies the authorized payment amount against the cart total.

The following code sample provides an example of the structure of payment information and status in the response:

<Accordion title="Click to expand the JSON example.">
  ```json
  {
      "provider": "fabricmock",
      "processor": "fabricmock",
      "method": "CREDIT_CARD",
      "methodType": "VISA", 
      "state": "PENDING",
      "authorization": {
      "amount": 520.0,
      "expiry": "",
      "verifier": {
          "type": "PAYMENT_TOKEN",
          "key": "{{payment_token}}"
      }
      },
      "billToAddress": "{{addressId}}",
      "cardDetails": null,
      "attributes":{
          "orderSource": "ecommerce",
          "expirationDate": "0224",
          "requestedDate": "2022-01-27T16:15:58-05:00",
          "paymentDate": "2022-01-27T16:15:58-05:00",
          "billToId": "213321"
      }
  }
  ```
</Accordion>

As the cart can contain multiple payments, they are shown as a collection. The authorized amount is the sum of all payments with the **AUTHORIZED** state added to the cart as in the following example:

<Accordion title="Click to expand the JSON example.">
  ```json
  "payments": {
      "authorized": 0,
      "collection": [
          {
              "provider": "fabricmock",
              "processor": "fabricmock",
              "method": "CREDIT_CARD",
              "methodType": "VISA", 
              "state": "PENDING",
              "authorization": {
                  "amount": 520.0,
                  "expiry": "",
                  "verifier": {
                      "type": "PAYMENT_TOKEN",
                      "key": "{{payment_token}}"
                  }
              },
              "billToAddress": "{{addressId}}",
              "cardDetails": null,
              "attributes":{
                  "orderSource": "ecommerce",
                  "expirationDate": "0224",
                  "requestedDate": "2022-01-27T16:15:58-05:00",
                  "paymentDate": "2022-01-27T16:15:58-05:00",
                  "billToId": "213321"
              }
          }
      ]
  }

  ```
</Accordion>

## Examples

### Adding payments with the `CAPTURED` status to the cart

Use the [create a payment](/v3/api-reference/carts-v3/payments/create-payments) endpoint to add a `CAPTURED` payment method to the cart as in the following example:

<Accordion title="Click to expand the curl and JSON response example.">
  ```curl
      curl --location '{{modular_cart_domain}}/carts/ba0e93f5-e47f-4b0d-bac8-6233b67ef65f/payments' \
      --header 'Content-Type: application/json' \
      --header 'x-fabric-tenant-id:  {tenantId}' \
      --header 'Authorization: {authToken}' \
      --data '{
          "provider": "fabricmock",
          "processor": "fabricmock",
          "method": "CREDIT_CARD",
          "methodType": "VISA", 
          "state": "CAPTURED",
          "authorization": {
              "amount": 500.0,
              "expiry": "",
              "verifier": {
              "type": "PAYMENT_TOKEN",
              "key": "{{payment_token}}"
              }
          },
          "billToAddress": "46622c9c-604c-4f8c-8bcf-2a393a572839",
          "cardDetails": null,
          "attributes": {
                  "orderSource": "ecommerce",
                  "expirationDate": "0224",
                  "requestedDate": "2022-01-27T16:15:58-05:00",
                  "paymentDate": "2022-01-27T16:15:58-05:00",
                  "billToId": "213321"
          }
      }
      '
  ```

  A successful response to `carts/{cartId}/payments` provides a payments object as the following example:

  ```json
  "payments": {
      "authorized": 0,
      "collection": [
          {
              "provider": "fabricmock",
              "processor": "fabricmock",
              "method": "CREDIT_CARD",
              "methodType": "VISA", 
              "state": "CAPTURED",
              "authorization": {
                  "amount": 500.0,
                  "expiry": "",
                  "verifier": {
                      "type": "PAYMENT_TOKEN",
                      "key": "{{payment_token}}"
                  }
              }
          },
          "billToAddress": "46622c9c-604c-4f8c-8bcf-2a393a572839",
          "cardDetails": null,
          "attributes":{
              "orderSource": "ecommerce",
              "expirationDate": "0224",
              "requestedDate": "2022-01-27T16:15:58-05:00",
              "paymentDate": "2022-01-27T16:15:58-05:00",
              "billToId": "213321"
          }
      ]
  }
  ```
</Accordion>

### Adding payments with the `AUTHORIZED` status to the cart

Use the [create a payment](/v3/api-reference/carts-v3/payments/create-payments) endpoint to add `AUHTORIZED` payments to the cart as in the following example:

<Accordion title="Click to expand the curl and JSON response example.">
  ```curl
  curl --location '{{modular_cart_domain}}/carts/ba0e93f5-e47f-4b0d-bac8-6233b67ef65f/payments' \
  --header 'Content-Type: application/json' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --header 'Authorization: {authToken}' \
  --data '{
      "provider": "fabricmock",
      "processor": "fabricmock",
      "method": "CREDIT_CARD",
      "methodType": "VISA", 
      "state": "AUTHORIZED",
      "authorization": {
          "amount": 500.0,
          "expiry": "",
          "verifier": {
          "type": "PAYMENT_TOKEN",
          "key": "{{payment_token}}"
          }
      },
      "billToAddress": "46622c9c-604c-4f8c-8bcf-2a393a572839",
      "cardDetails": null,
      "attributes": {
              "orderSource": "ecommerce",
              "expirationDate": "0224",
              "requestedDate": "2022-01-27T16:15:58-05:00",
              "paymentDate": "2022-01-27T16:15:58-05:00",
              "billToId": "213321"
      }
  }
  '
  ```

  A successful response to `carts/{cartId}/payments` provides a payments object as in the following example:

  ```json
  "payments": {
      "authorized": 500.0,
      "collection": [
      {
          "provider": "fabricmock",
          "processor": "fabricmock",
          "method": "CREDIT_CARD",
          "methodType": "VISA", 
          "state": "AUTHORIZED",
          "authorization": {
          "amount": 500.0,
          "expiry": "",
          "verifier": {
              "type": "PAYMENT_TOKEN",
              "key": "{{payment_token}}"
          }
          }
      },
          "billToAddress": "46622c9c-604c-4f8c-8bcf-2a393a572839",
          "cardDetails": null,
          "attributes":{
              "orderSource": "ecommerce",
              "expirationDate": "0224",
              "requestedDate": "2022-01-27T16:15:58-05:00",
              "paymentDate": "2022-01-27T16:15:58-05:00",
              "billToId": "213321"
          }
      ]
  }
  ```
</Accordion>


# Configuring Search Cart



This feature in Carts API allows the user to search the cart by the following parameters:

*   Cart Status
*   Order Number
*   Customer Information
*   Promotion Codes
*   Created/Updated Date Range
*   Channel ID

## Prerequisites

*   A cart that needs to be searched is created with the required parameters using the [create a cart](/v3/api-reference/carts-v3/carts/carts) endpoint.

## Search Cart Initialization

The search endpoint returns a paginated response, displaying the first 10 search results by default. The `total` field in the response indicates the number of results found for the search query, capped at 10,000 results.
For queries that exceed this `limit`, use an `offset`. Querying many carts through this endpoint isn't recommended, as it's intended for basic use cases to retrieve a limited number of carts rather than for analytics purposes.

The following code sample provides the structure of `limit`, `offset`, and `total` in the response when searching for a cart:

<Accordion title="Click to expand the JSON example.">
  ```json
  {
      "query": {
          "limit": 20,
          "offset": 0,
          "total": 3
      },
      "data": [
          {
          ...
          }
      ]
  }
  ```
</Accordion>

## Examples

### Retrieving a cart with an order number

Use the [search for multiple carts](/v3/api-reference/carts-v3/carts/search) endpoint and include the order number in the request body as in the following example:

<Accordion title="Click to expand the curl example.">
  ```curl
  curl --location '{{modular_cart_domain}}/carts/search' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: {authToken}' \
  --data '{
      "offset": 0,
      "limit": 20,
      "filter": {
          "orderNumber": "O1232",
          "updatedAt": {
              "start": "2024-03-27T06:06:53.709Z",
              "end": "2024-06-29T06:06:53.709Z"
          }
      }
  }'
  ```
</Accordion>

### Retrieving a cart with the date range and the `customerId`

Use the [search for multiple carts](/v3/api-reference/carts-v3/carts/search) endpoint and include the date range and the `customerId` in the request body as in the following example:

<Accordion title="Click to expand the curl example.">
  ```curl
  curl --location '{{modular_cart_domain}}/carts/search' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: {authToken}' \
  --data '{
      "offset": 0,
      "limit": 20,
      "filter": {
      "customer": {
              "id": "testCustomerId",
              "sessionId": "testSessionId"
          },
          "createdAt": {
              "start": "2024-03-27T06:06:53.709Z",
              "end": "2024-06-29T06:06:53.709Z"
          }
      }
  }'
  ```
</Accordion>

### Retrieving a cart with the `customerId` and `promotionTitles`

Use the [search for multiple carts](/v3/api-reference/carts-v3/carts/search) endpoint and include `customerId` and promotionTitles\` in the request body as in the following example:

<Accordion title="Click to expand the curl example.">
  ```curl
  curl --location '{{modular_cart_domain}}/carts/search' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: {authToken}' \
  --data '{
      "offset": 0,
      "limit": 20,
      "filter": {
          "promotionTitles": [
              "FREE_SHIPPING"
          ],
          "customer": {
              "id": "testCustomerId",
              "sessionId": "testSessionId"
          }
      }
  }'
  ```
</Accordion>


# Configuring Split Line Items



Splitting line items allows the user to split a single line item into multiple line items based on quantity.

## Prerequisites

The following prerequisites must be completed sequentially to configure splitting line items.

1.  [Create a cart](/v3/api-reference/carts-v3/carts/carts).
2.  [Add an item to the cart](/v3/api-reference/carts-v3/items/items) that needs to be split.

<Note>The sum of the quantities of the split items must not exceed the total quantity of the line item.</Note>

## Split Line Items Initialization

All information from the original item is copied to the split items except for the item ID, quantity, `createdAt`, and `updatedAt` timestamps. Adjustments, fees, and fulfillment can be copied to split items based on configuration. The default setting is `NONE`, meaning these elements aren't copied to split items unless specified.

The following code sample provides an example for split line items request payload:

<Accordion title="Click to expand the JSON example.">
  ```json
      {
          "quantities": [2,1],
          "adjustmentsBehaviour": "COPY",
          "feesBehaviour": "COPY",
          "fulfillmentBehaviour": "COPY"
      }
  ```
</Accordion>

The `quantities` array allows users to specify the number and quantity of split items. The total number of split items is `quantities.size + 1`.\
In this example, a line item with `6` units and `quantities` set to `[2, 1]` splits into `3` items with `quantities [2, 1, 3]`, where the last quantity represents the remainder. With `adjustmentsBehaviour`, `feesBehaviour`, and `fulfillmentBehaviour` set to `COPY`, adjustments, fees, and fulfillment details from the original item are copied to each split item.

The quantities array lets users specify the number and quantity of split items. The total number of split items will be `quantities.size` plus 1.

For example, if a line item has 6 units and quantities is `[2, 1]`, it will be split into 3 items with quantities `[2, 1, 3]`, where the last quantity is the remainder.

The following code sample provides an example for split line items request payload with the `quantities`:

### Split line items request payload

<Accordion title="Click to expand the JSON example.">
  ```json
      {
          "quantities": [2,1],
          "adjustmentsBehaviour": "COPY",
          "feesBehaviour": "COPY",
          "fulfillmentBehaviour": "COPY"
      }
  ```
</Accordion>

## Examples

### The item is available in limited quantities at multiple warehouses

Use the [split line items](/v3/api-reference/carts-v3/item-actions/split) endpoint to split and ship items from different locations as in the following example:

<Accordion title="Click to expand the curl example.">
  In this example, 4 units are available in Warehouse A, and the remaining units are in Warehouse B.

  ```curl
  curl --location '{{modular_cart_domain}}/carts/9877b7ab-092d-4d67-ad42-b070ac778df8/items/806d6671-801d-4554-976d-0d38e525a852/actions/split' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --header 'Content-Type: application/json' \
  --data '{
      "quantities": [4,5],
      "adjustmentsBehaviour": "COPY",
      "feesBehaviour": "COPY",
      "fulfillmentBehaviour": "COPY"
  }'
  ```
</Accordion>

### Sending individual items in the order to different addresses as gifts

Use the [split line items](/v3/api-reference/carts-v3/item-actions/split) endpoint to split items in the cart and send them to different addresses as in the following example:

<Accordion title="Click to expand the curl example.">
  ```curl
  curl --location '{{modular_cart_domain}}/carts/9877b7ab-092d-4d67-ad42-b070ac778df8/items/806d6671-801d-4554-976d-0d38e525a852/actions/split' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --header 'Content-Type: application/json' \
  --data '{
      "quantities": [4,5],
      "adjustmentsBehaviour": "COPY",
      "feesBehaviour": "COPY",
      "fulfillmentBehaviour": "COPY"
  }'
  ```
</Accordion>

### Splitting items for promotional bundles or discounts

Use the [split line items](/v3/api-reference/carts-v3/item-actions/split) endpoint to split the items in the cart and item prices will adjust appropriately as in the following example:

<Accordion title="Click to expand the curl example.">
  ```curl
  curl --location '{{modular_cart_domain}}/carts/9877b7ab-092d-4d67-ad42-b070ac778df8/items/806d6671-801d-4554-976d-0d38e525a852/actions/split' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --header 'Content-Type: application/json' \
  --data '{
      "quantities": [4,5],
      "adjustmentsBehaviour": "COPY",
      "feesBehaviour": "COPY",
      "fulfillmentBehaviour": "COPY"
  }'
  ```
</Accordion>


# Configuring Taxes



This feature in Carts API allows users to levy taxes on resources such as items, fulfillment, and fees. Fees are optionally taxable.

### Prerequisites

The following prerequisites must be completed sequentially to configure a fulfillment.

1.  [Create a cart](/v3/api-reference/carts-v3/carts/carts).
2.  [Create a fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) to add fulfillment taxes.
3.  [Create an item](/v3/api-reference/carts-v3/items/items) to add item taxes.
4.  Create either [item](/v3/api-reference/carts-v3/item-fees/create-item-fees), [fulfillment](/v3/api-reference/carts-v3/fulfillment-fees/add-fulfillment), or [cart fees](/v3/api-reference/carts-v3/fees/create-fees) to add fee taxes.

### Tax Initialization

You can add taxes on the cart, cart fees, cart fulfillment, items, item fees, item fulfillment, and fulfillment fees through a single request. To ensure that fees are subject to tax, the fees should be marked as taxable.

You can apply taxes at multiple levels, including individual items, fulfillment, or fees. The tax resource maintains a consistent structure across all levels.

The following code sample provides an example of tax object structure in request payload:

### Tax resource

<Accordion title="Click to expand the JSON example.">
  ```json
      {
          "amount": 4.0,
          "attributes": {
              "rate": 5,
              "message": "5% tax"
          }
      }
  ```
</Accordion>

For accurate tax calculation, address information is required. While items, fulfillment, and their fees already have associated addresses from the fulfillment information, the cart fee requires a separate field for the address to be provided.

The following code sample provides an example tax object structure in a request payload with the `destinationAddress` and `originAddress`:

### Tax fee resource with addresses

<Accordion title="Click to expand the JSON example.">
  ```json
      {
          "amount": 4.0,
          "attributes": {
              "rate": 5,
              "message": "5% tax"
          },
          "taxDetails":{
          "destinationAddress": "{{destinationAddressId}}",
          "originAddress": "{{originAddressId}}"
          }
      }
  ```
</Accordion>

## Examples

### Applying sales taxes on items and fulfillments

Use the [replace tax data](/v3/api-reference/carts-v3/validations/add-tax) endpoint to create sales taxes on items and fulfillments as in the following example:

<Accordion title="Click to expand the curl example.">
  ```curl
  curl --location --request PUT '{{modular_cart_domain}}/carts/ba0e93f5-e47f-4b0d-bac8-6233b67ef65f/tax' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: {authToken}' \
  --data '{
      "items": [
          {
              "id": "c0f1c36d-35e6-4098-94a7-3b92fba089d7",
              "tax": [
                  {
                      "amount": 10,
                      "attributes": {
                          "rate": 8
                      }
                  },
                  {
                      "amount": 2,
                      "attributes": {
                          "rate": 3
                      }
                  }
              ]    
          }
      ],
      "fulfillments": [
          {
              "id": "a7f51053-6fbd-42a6-8fbc-303bfc16c13f",
              "tax": [
                  {
                      "amount": 10,
                      "attributes": {
                          "rate": 1
                      }
                  },
                  {
                      "amount": 4,
                      "attributes": {
                          "VAT": "enabled"
                      }
                  }
              ]
          }
      ]
  }'
  ```
</Accordion>

### Applying sales taxes on items, fulfillments and the service charge

Use the [replace tax data](/v3/api-reference/carts-v3/validations/add-tax) endpoint to create sales taxes on items and fulfillments, and service charge which are also taxable as in the following example:

<Accordion title="Click to expand the JSON and curl example.">
  Ensure that fulfillment fees are set to taxable.

  ```json
  {
      "id": "d4e9f8dc-c0ae-4ef3-be8b-bd23579a4dd3",  // feeId
      "name": "fulfillment-fee",
      "price": {
          "amount": 5.0
      },
      "taxable": true,
      "attributes": {
          "message": "Shipping fee"
      },
      "tax": {
          "total": 0,
          "collection": []
      },
      "updatedAt": "2024-09-02T15:21:19.874Z",
      "createdAt": "2024-09-02T15:21:19.874Z"
  }
  ```

  Add tax to the cart `curl`.

  ```curl
  curl --location --request PUT 'https://dev.cart.fabric.inc/beta/v3/modular/carts/ba0e93f5-e47f-4b0d-bac8-6233b67ef65f/tax' \
  --header 'x-fabric-tenant-id:  {tenantId}' \
  --header 'Content-Type: application/json' \
  --header 'Authorization: {authToken}' \
  --data '{
      "items": [
          {
              "id": "2c51a3da-e3ff-40ef-bb5b-3e191892293c",
              "tax": [
                  {
                      "amount": 10,
                      "attributes": {
                          "rate": 8
                      }
                  },
                  {
                      "amount": 2,
                      "attributes": {
                          "rate": 3
                      }
                  }
              ]    
          }
      ],
      "fulfillments": [
          {
              "id": "131b9a58-8ee5-41dc-a79e-736ca934b435",
              "tax": [
                  {
                      "amount": 10,
                      "attributes": {
                          "rate": 1
                      }
                  },
                  {
                      "amount": 4,
                      "attributes": {
                          "VAT": "enabled"
                      }
                  }
              ],
              "fees": [
                  {
                      "id": "d4e9f8dc-c0ae-4ef3-be8b-bd23579a4dd3",
                      "tax": [
                          {
                              "amount": 1,
                              "attributes": {
                                  "rate": 1
                              }
                          }
                      ]
                  }
              ]
          }
      ]
  }'
  ```
</Accordion>


# Getting Started with fabric Carts API



This guide provides instructions to help you get started with fabric Carts API, from initial setup to basic usage.

## Target Audience

*   Third-party developers who set up Carts on behalf of merchants.
*   The fabric developers who work with Carts.

### 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](/v3/api-reference/getting-started/getting-started-with-fabric-apis).
*   Know the cart [configuration](/v3/api-reference/carts-v3/configuration-behaviors) and [merge](/v3/api-reference/carts-v3/merge-carts-behaviors) behaviors.
*   Have access to development tools capable of interacting with HTTP-based APIs, such as Postman or cURL for testing.

## Workflow

The following steps outline the Carts process, from creating a cart to generating an order draft:

1.  [Create an empty cart](/v3/api-reference/carts-v3/carts/carts) for shoppers to add products for purchase.
    You can customize the cart settings by sending configuration details in the request body. Otherwise, the default settings apply. For more information about cart configuration behaviors, see [Configuration Behaviors](/v3/api-reference/carts-v3/configuration-behaviors) section. If the initial request is successful, a response body containing cart information, such as `cartId` and configurations is returned.
2.  [Create a destination address](/v3/api-reference/carts-v3/addresses/create-addresses) to fulfill the order in the cart.
    You can [delete](/v3/api-reference/carts-v3/addresses/delete-addresses) or [update](/v3/api-reference/carts-v3/addresses/update-addresses) the address. If the initial request is successful, a response body that contains the address information is returned.
3.  [Create all the necessary fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) information for the cart. <br />
    You can [partially update](/v3/api-reference/carts-v3/fulfillment/add-fulfillments-attribute) or [delete](/v3/api-reference/carts-v3/fulfillment/delete-fulfillments-attribute) fulfillment attributes, [fully update](/v3/api-reference/carts-v3/fulfillment/update-fulfillments) fulfillments, or [delete them entirely](/v3/api-reference/carts-v3/fulfillment/delete-fulfillments) if needed. If the initial request is successful, a response body containing fulfillment information is returned.
4.  [Add items](/v3/api-reference/carts-v3/items/items) to the cart. <br />
    You can [update](/v3/api-reference/carts-v3/items/update-items) or [delete](/v3/api-reference/carts-v3/items/delete-items) items in the cart. If the initial request is successful, a response body that contains the cart information, including the items that are added, is returned.
5.  (Optional) [Apply any eligible coupons](/v3/api-reference/carts-v3/coupons/add-coupons) for the cart. <br />
    Use [remove the coupon](/v3/api-reference/carts-v3/coupons/remove-coupons) endpoint to remove coupons if necessary. If the initial request is successful, a response body that contains the cart information, including the coupon information, is returned.
6.  [Add tax rules](/v3/api-reference/carts-v3/validations/add-tax) for the cart. Look up the usage as tax rates vary by location. You must apply the appropriate taxes for each area. <br />
    If the initial request is successful, a response body that contains cart information with the updated tax rates is returned.
7.  [Add a payment method](/v3/api-reference/carts-v3/payments/add-payment-attributes) for the cart. <br />
    You can [partially update](/v3/api-reference/carts-v3/payments/add-payment-attributes) or [delete payment attributes](/v3/api-reference/carts-v3/payments/delete-payment-attributes) and [fully update](/v3/api-reference/carts-v3/payments/update-payments) or [delete payment methods entirely](/v3/api-reference/carts-v3/payments/delete-payments). If the initial request is successful, a response body containing payment information is returned.
8.  [Create an order draft](/v3/api-reference/carts-v3/order-drafts/create-order-drafts). If the payment is authorized, then the order is shipped. <br />
    If the initial request is successful, the response containing all the necessary information for an order to ship is returned. Before submitting the order details, ensure that all the information for the order is correct.


# Create fee

modular-cart post /carts/{cartId}/fees
Creates a fee that is applied to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Delete fee

modular-cart delete /carts/{cartId}/fees/{feeId}
Removes a fee from the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fee ID from the [Create fee](/v3/api-reference/carts-v3/fees/delete-fees) endpoint is used in the path parameter.




# Update fee

modular-cart patch /carts/{cartId}/fees/{feeId}
Updates a fee in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fee ID from the [Create fee](/v3/api-reference/carts-v3/fees/delete-fees) endpoint is used in the path parameter.




# Create fulfillment adjustment

modular-cart post /carts/{cartId}/fulfillments/{fulfillmentId}/adjustments
Creates an adjustment to the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.




# Delete fulfillment adjustment

modular-cart delete /carts/{cartId}/fulfillments/{fulfillmentId}/adjustments/{adjustmentId}
Removes the adjustment from the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

The Adjustment ID from the [Create fulfillment adjustment](/v3/api-reference/carts-v3/fulfillment-adjustments/create-fulfillment-adjustments) endpoint is used in the path parameter.




# Update fulfillment adjustment

modular-cart patch /carts/{cartId}/fulfillments/{fulfillmentId}/adjustments/{adjustmentId}
Updates the adjustment to the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

The Adjustment ID from the [Create fulfillment adjustment](/v3/api-reference/carts-v3/fulfillment-adjustments/create-fulfillment-adjustments) endpoint is used in the path parameter.




# Create fulfillment fee

modular-cart post /carts/{cartId}/fulfillments/{fulfillmentId}/fees
Creates a fee associated the fulfillment.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.




# Delete fulfillment fee

modular-cart delete /carts/{cartId}/fulfillments/{fulfillmentId}/fees/{feeId}
Removes the fee from associated with the fulfillment.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.

The Fee ID from the [Create fulfillment fee](/v3/api-reference/carts-v3/fulfillment-fees/add-fulfillment) endpoint is used in the path parameter.




# Update fulfillment fee

modular-cart patch /carts/{cartId}/fulfillments/{fulfillmentId}/fees/{feeId}
Updates the fee associated with the fulfillment.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fee ID from the [Create fulfillment fee](/v3/api-reference/carts-v3/fulfillment-fees/add-fulfillment) endpoint is used in the path parameter.




# Add fulfillment attributes

modular-cart post /carts/{cartId}/fulfillments/{fulfillmentId}/actions/add-attributes
Partially updates the attributes of the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.




# Create fulfillment

modular-cart post /carts/{cartId}/fulfillments
Creates a fulfillment to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Delete fulfillment

modular-cart delete /carts/{cartId}/fulfillments/{fulfillmentId}
Removes the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.




# Delete fulfillment attributes

modular-cart post /carts/{cartId}/fulfillments/{fulfillmentId}/actions/delete-attributes
Partially deletes attributes of your choice in the fulfillment object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.




# Get fulfillment

modular-cart get /carts/{cartId}/fulfillments/{fulfillmentId}
Returns the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.




# Update fulfillment

modular-cart put /carts/{cartId}/fulfillments/{fulfillmentId}
Updates the fulfillment associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Fulfillment ID from the [Create fulfillment](/v3/api-reference/carts-v3/fulfillment/create-fulfillments) endpoint is used in the path parameter.




# Update item attributes

modular-cart post /carts/{cartId}/items/{itemId}/actions/add-attributes
Partially updates the attributes of your choice in the item object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.




# Delete item attributes

modular-cart post /carts/{cartId}/items/{itemId}/actions/delete-attributes
Partially deletes attributes of your choice in the item object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.




# Split line items

modular-cart post /carts/{cartId}/items/{itemId}/actions/split
Splits the item associated with the corresponding cart into multiple line items based on quantity.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.




# Create item adjustment

modular-cart post /carts/{cartId}/items/{itemId}/adjustments
Creates an adjustment for the item in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.




# Delete item adjustment

modular-cart delete /carts/{cartId}/items/{itemId}/adjustments/{adjustmentId}
Deletes the adjustment from the item associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

The Adjustment ID from the [Create item adjustment](/v3/api-reference/carts-v3/item-adjustments/create-item-adjustments) endpoint is used in the path parameter.




# Update item adjustment

modular-cart patch /carts/{cartId}/items/{itemId}/adjustments/{adjustmentId}
Updates the adjustment to the item associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

The Adjustment ID from the [Create item adjustment](/v3/api-reference/carts-v3/item-adjustments/create-item-adjustments) endpoint is used in the path parameter.




# Create item fee

modular-cart post /carts/{cartId}/items/{itemId}/fees
Creates a fee for the item.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.




# Delete item fee

modular-cart delete /carts/{cartId}/items/{itemId}/fees/{feeId}
Deletes the fee that is applied to the item.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

The Fee ID from the [Create item fee](/v3/api-reference/carts-v3/item-fees/create-item-fees) endpoint is used in the path parameter.




# Update item fee

modular-cart patch /carts/{cartId}/items/{itemId}/fees/{feeId}
Updates the fee that is applied to the item.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.

The Fee ID from the [Create item fee](/v3/api-reference/carts-v3/item-fees/create-item-fees) endpoint is used in the path parameter.




# Delete item

modular-cart delete /carts/{cartId}/items/{itemId}
Deletes the item from the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.




# Get item

modular-cart get /carts/{cartId}/items/{itemId}
Returns the item from the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.




# Create item

modular-cart post /carts/{cartId}/items
Creates the item in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Update item

modular-cart patch /carts/{cartId}/items/{itemId}
Updates the item in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.




# Merge Cart Behaviors



The Merge Cart Behaviors page provides an overview of the configuration settings and the associated functionalities.

To ensure your merged cart functions as intended, you must specify which configurations to activate when making a [Merge carts](/v3/api-reference/carts-v3/cart-actions/merge) request.

| Merge Cart Behavior | Represents                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |
| ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `MERGE`             | Include both primary and secondary resources, and in case of a conflict, override secondary data with primary data. For example, a coupon can be merged between carts. If one cart has no coupon and the other does, the merged cart will retain the coupon. However, if one cart has a 10% discount and the other has a 20% discount, the merge can't happen exactly due to conflicting coupon functions. In this case, the 20% discount from the second cart will be discarded, and the merged cart will have the 10% discount. |
| `ALL`               | Include both primary and secondary resources together without checking for conflicts. This is mostly applicable for list resources.                                                                                                                                                                                                                                                                                                                                                                                               |
| `PRIMARY`           | Only include primary resources.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| `SECONDARY`         | Only include secondary resources.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
| `PURGE`             | Remove both primary and secondary resources.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
| `REFERENCED`        | Add primary resources and retain only the secondary resources that are referred to in the merged cart.                                                                                                                                                                                                                                                                                                                                                                                                                            |

## Merge Results

### Validations merge

*   **Behavior for line item validation**: Inherited from [`mergeBehavior.item.behavior`](/v3/api-reference/carts-v3/cart-actions/merge).
*   **Behavior for product catalog validation**: Inherited from [`mergeBehavior.item.behavior`](/v3/api-reference/carts-v3/cart-actions/merge).

When carts are merged, promotions are cleared due to updated items, quantities, taxes, or fulfillments in the cart. Additionally, a state is added to refresh the promotions.

### Taxes

Taxes follow the same rules as the parent item. For example, if the item merge rule is set to secondary, the respective taxes are included accordingly.
When the item merge rule is set to `MERGE`, taxes are cleared, and a state is added to the cart indicating that the item is missing taxes. This adjustment is necessary because changes in quantities may require tax updates.

### Item quantity behavior

Item merge behaviors are:

*   **Default (SUM)**: Quantities of items with the same SKU are summed.
*   **MAX**: The highest quantity of items with the same SKU is selected.

### States

You must fully re-evaluate the state object for the merged cart from the response body to ensure the merged cart is configured with the intended settings.

## Related Topics

*   [Merge carts](/v3/api-reference/carts-v3/cart-actions/merge)


# Create an order draft

modular-cart post /order-drafts
Create an order using the cart ID of the cart that contains the order.



# Get the order draft by the customer ID

modular-cart get /order-drafts/customer/{customerId}
Retrieves the order draft using the customer ID associated with it from [Create an order draft](/v3/api-reference/carts-v3/order-drafts/create-order-drafts) endpoint.



# Get the order draft by the order draft ID

modular-cart get /order-drafts/{orderDraftId}
Retrieves the order draft using the order ID associated with it from [Create an order draft](/v3/api-reference/carts-v3/order-drafts/create-order-drafts) endpoint.



# Get the order draft by the order draft number

modular-cart get /order-drafts/order-number/{orderNumber}
Retrieves the order draft using the order number associated with it from [Create an order draft](/v3/api-reference/carts-v3/order-drafts/create-order-drafts) endpoint.



# Overview



### Carts 3.0

fabric's Cart API is used to add, update, and remove items from your Storefront cart, either as a guest or logged-in user. It also supports merging carts when transitioning from a guest to a logged-in user, and applying coupons and other attributes, such as gift wrapping, to line items. The API supports advanced features like using multiple carts within a B2B organization, sharing carts, and providing a unified cart experience for multi-region and multi-brand businesses.

The Cart API supports configurability for end-to-end order processing actions by adding items to the cart, handling pre-checkout tasks like billing, shipping, and payment details, and proceeding to checkout, where orders are processed and confirmed by fabric's Order Management System (OMS).

Cart 3.0 is modular, enabling users to select only the necessary endpoints. It integrates seamlessly with both fabric and non-fabric services.

### Cart orchestrator

If you're using other fabric services, you can leverage the Cart Orchestrator endpoints for seamless integration with those services.

### Contact and support

If you have any additional questions, please reach out to the Cart support team at [support.cnc@fabric.inc](mailto:support.cnc@fabric.inc).


# Add payment attributes

modular-cart post /carts/{cartId}/payments/{id}/actions/add-attributes
Partially updates attributes of your choice in the payment.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The ID from the [Create payment](/v3/api-reference/carts-v3/payments/create-payments) endpoint is used in the path parameter.




# Create payment

modular-cart post /carts/{cartId}/payments
Adds a payment method to the corresponding cart to process a transaction.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Delete payment attributes

modular-cart post /carts/{cartId}/payments/{id}/actions/delete-attributes
Partially deletes attributes of your choice in the payment object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The ID from the [Create payment](/v3/api-reference/carts-v3/payments/create-payments) endpoint is used in the path parameter.




# Delete payment

modular-cart delete /carts/{cartId}/payments/{id}
Removes the payment from the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The ID from the [Create payment](/v3/api-reference/carts-v3/payments/create-payments) endpoint is used in the path parameter.




# Update payment

modular-cart patch /carts/{cartId}/payments/{id}
Updates the payment in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The ID from the [Create payment](/v3/api-reference/carts-v3/payments/create-payments) endpoint is used in the path parameter.




# Create add-on

addons.openapi post /addons
Create an add-on with its price and currency details. By creating add-ons, you can enhance customer experience by allowing them to choose personalized products while placing an order.



# Delete a specific add-on

addons.openapi delete /addons/{id}
Delete an add-on by ID.



# Get a specific add-on

addons.openapi get /addons/{id}
Get a specific add-on by ID.



# Get all add-ons

addons.openapi get /addons
Get a paginated list of all the created add-ons.



# Add-ons



Add-ons are additional items that shoppers can buy while placing an order. These endpoints let you create, update, and delete details of add-ons, including their prices and currency types.


# Update a specific add-on

addons.openapi put /addons/{id}
Update a specific add-on by ID.



# Delete attribute

attributes.openapi delete /attributes/{attributeId}
Using this endpoint, you can delete an attribute by its ID.



# Get all attributes

attributes.openapi get /attributes
Using this endpoint, you can get a paginated list of attributes. You can narrow down the search results by specifying pagination criteria, and you can also sort the results.



# Update attribute

attributes.openapi put /attributes/{attributeId}
Using this endpoint, you can update an attribute by its ID. You can primarily update attribute and its value.



# Download exported CSV file

exports-offers.openapi post /offers-exports/actions/download-export-file
This endpoint lets you generate a URL, using fileId, from which you can download the exported CSV file. The generated URL expires in five mins.



# Get all export requests

exports-offers.openapi get /offers-exports
Get a paginated list of all the export requests.



# Get export request by ID

exports-offers.openapi get /offers-exports/{exportId}
Get details of a specific export request by its ID.



# Initiate export request

exports-offers.openapi post /offers-exports
Initiate an export request based on specified filter criteria.



# Generate URL to import a CSV file

imports-offers.openapi post /offers-imports/actions/generate-upload-url
Use this endpoint to create a secured S3 URL to import a CSV file, allowing for bulk data updates from the information within the file. For example, if the data in the file is price type, then only the price related data will be updated. Note that an error will be shown if the type of data included in the file doesn't match with the data type mentioned in the request body. You must upload only one single file, specifically in the CSV format, to the generated URL.



# Get import job by ID

imports-offers.openapi get /offers-imports-jobs/{jobId}
Get details of a specific import job by job ID.



# Get import jobs

imports-offers.openapi get /offers-imports-jobs
Get a paginated list of import jobs.



# Retrieve the download URL for an error file

imports-offers.openapi post /offers-imports/actions/generate-error-file-download-url
Use this endpoint to retrieve an AWS S3 URL to access the error data of a previously imported file. The URL is valid for five minutes. Make a GET request with this URL to download the error data  in a CSV format.



# Create price control

price-controls.openapi post /price-controls
Create a price control record that contains various price types other than the elemental prices such as base price, sale price, and sale price.



# Delete price controls by itemId

price-controls.openapi delete /price-controls/{itemId}
Delete price controls of a specific item by `itemId`



# Get all price controls

price-controls.openapi get /price-controls
Get a paginated list of all the created price controls.



# Get price controls by itemId

price-controls.openapi get /price-controls/{itemId}
Get price control records of an item by `itemId` and `priceListId`. If `priceListId` isn't specified, price controls of the item will be retrieved under the default price list.



# Get price controls by SKU

price-controls.openapi get /price-controls/sku/{sku}
Get price controls of a specific product by `sku`.



# Price Controls



With price control endpoints, merchants can create and manage more diversified prices, such as Manufacturer Recommended Retail Price (MSRP), Minimum Advertised Price (MAP), floor price, and ceiling price, for an item. These endpoints restrict any accidental changes to the base and sale prices.


# Update price controls by itemId

price-controls.openapi put /price-controls/{itemId}
Update price controls of a specific item by `itemId` and `piceListId`. If `priceListId` isn't specified, price controls of the item will be updated under the default price list.



# Create price method

price-methods.openapi post /price-methods
Create a price method that you can use to set up the SKU price. Price method can be created based on SKU quantity, dimension of the SKU, or any other strategy that aligns with the business.



# Delete a specific price method

price-methods.openapi delete /price-methods/{id}
Delete a specific price method by ID.



# Get all price methods

price-methods.openapi get /price-methods
Get a paginated list of all price methods of SKUs.



# Price Methods



Price methods are the different approaches or strategies used in calculating prices. These endpoints let you set up the SKU price by choosing a defined price method.


# Update a specific price method

price-methods.openapi put /price-methods/{id}
Update a specific price method by ID.



# Get price types

price-types.openapi get /price-types
Get a paginated list of all price types.



# Price Types



Using the price type endpoints, you can get the following price types:

*   **Base price:** The regular amount that merchants charge shoppers to purchase an item.
*   **Sale price:** The lowest amount that merchants charge shoppers to purchase an item without a promotion or coupon.


# Get priced products

priced-products.openapi get /priced-products
Get a paginated list of products and prices for the specified price list ID.



# Get product and price details by product item ID

priced-products.openapi get /priced-products/{itemId}
Get product and price details by product item ID



# Get product and price details by SKU

priced-products.openapi get /priced-products/sku/{sku}
Retrieves the details of a product and its associated prices using the SKU, including the details for the variants of the product, if any.



# Get SKUs in price list

priced-products.openapi get /priced-products-identifiers
Retrieve SKUs and product item IDs that have a price entry in the given price list.



# Add Coupon

modular-cart post /carts/{cartId}/coupons/{couponId}
Adds a coupon to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Coupon ID, which is the coupon code generated when [creating a custom coupon](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) in Copilot, is used in the path parameter.




# Removes Coupon

modular-cart delete /carts/{cartId}/coupons/{couponId}
Removes the existing coupon from the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Coupon ID is a coupon code generated when [creating a custom coupon](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) in Copilot and is used in the path parameter.




# Add customer attributes

modular-cart post /carts/{cartId}/customer/actions/add-attributes
Partially updates attributes of your choice in the customer object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Delete customer attributes

modular-cart post /carts/{cartId}/customer/actions/delete-attributes
Partially deletes attributes of your choice in the customer object associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Update customer

modular-cart patch /carts/{cartId}/customer
Updates the customer information in the cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Apply coupon

ShopperXP post /orchestrator/carts/{cartId}/coupons/{couponCode}
Apply a coupon code to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The coupon code generated when [creating a custom coupon](/v3/api-reference/carts-v3/carts-adjustments/create-adjustments) in Copilot is used in the path parameter.




# Delete cart

ShopperXP delete /orchestrator/carts/{cartId}
Removes the cart corresponding to the provided cart ID.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Removes coupon

ShopperXP delete /orchestrator/carts/{cartId}/coupons/{couponCode}
Removes the coupon from the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Get the cart

ShopperXP get /orchestrator/carts/{cartId}
Retrieves the cart information corresponding to the provided cart ID.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Create an order draft

ShopperXP post /orchestrator/carts/{cartId}/order-drafts
Creates an order from the current cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Add items

ShopperXP post /orchestrator/carts/{cartId}/items
Add items to the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Delete items

ShopperXP delete /orchestrator/carts/{cartId}/items
Removes the items from the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Split line items

ShopperXP post /orchestrator/carts/{cartId}/items/{itemId}/actions/split
Splits the item associated with the corresponding cart into multiple line items based on quantity.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.

The Item ID from the [Create item](/v3/api-reference/carts-v3/items/items) endpoint is used in the path parameter.




# Update items

ShopperXP patch /orchestrator/carts/{cartId}/items
Updates the item information in the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Authorize payments

ShopperXP post /orchestrator/carts/{cartId}/payments/actions/authorize
Authorize payments made within the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Void payments

ShopperXP post /orchestrator/carts/{cartId}/payments/actions/void
Void payments made within the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Replace inventory data

modular-cart put /carts/{cartId}/inventory
Replaces inventory data associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Replace product data

modular-cart put /carts/{cartId}/product
Replaces product data associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Replace promotions

modular-cart put /carts/{cartId}/promotions
Replaces promotions associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Replace tax data

modular-cart put /carts/{cartId}/tax
Replaces tax data associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Updates inventory data

modular-cart patch /carts/{cartId}/inventory
Partially updates inventory data associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Updates product data

modular-cart patch /carts/{cartId}/product
Partially updates product data associated with the corresponding cart.

The Cart ID from the [Create cart](/v3/api-reference/carts-v3/carts/carts) endpoint is used in the path parameter.




# Add a new address

customers.openapi post /customers/{customerId}/customer-address
Using this endpoint, you can add a new address for the customer by `customerId`.



# Delete customer's address

customers.openapi delete /customers/{customerId}/customer-address/{addressId}
Using this endpoint, you can delete an existing address of a customer based on the `customerId` and `addressId`.



# Get customer's address

customers.openapi get /customers/{customerId}/customer-address/{addressId}
Using this endpoint, you can get a single address of a customer based on the `customerId` and `addressId`.



# Get customer's addresses

customers.openapi get /customers/{customerId}/customer-address
Using this endpoint, you can get all addresses of a customer. <br /> By specifying the query parameters `offset` and `limit`, you can narrow down the search results. You can also `sort` the results in an ascending or descending order. Additionally, with the `isDeleted` query parameter, you can filter for either deleted or non-deleted customers. When no query parameter is specified, by default, you get up to 10 records.



# Customer Address



These endpoints provide the features for store admins to create and manage customers' addresses.


# Partially update customer's address

customers.openapi patch /customers/{customerId}/customer-address/{addressId}
Using this endpoint, you can partially update a customer's address based on the `customerId` and `addressId`. To fully replace an existing address, use the `PUT /customers/{customerId}/customer-address/{addressId}` endpoint.



# Search for customer's addresses

customers.openapi post /customers/{customerId}/customer-address/search
With this endpoint, you can search for customer's addresses based on the specified filter conditions. In addition, you can tailor the search results by including or excluding the deleted addresses and the default addresses.<br />**Note**:A customer can have a default address for both billing and shipping.



# Update customer's address

customers.openapi put /customers/{customerId}/customer-address/{addressId}
Using this endpoint, you can update a customer's address based on the `customerId` and `addressId`. This replaces the existing address with the new one. If you want to make only a partial update, use the `PATCH /customers/{customerId}/customer-address/{addressId}` endpoint.



# Add a new customer

customers.openapi post /Customers
Using this endpoint, you can add a new customer to the system. The response includes an `id` which is required in subsequent calls, such as `GET /customers/{customerId}`, `PUT /customers/{customerId}`, `PATCH /customers/{customerId}`, and more. <br /> When `externalId` is specified, the customers have the ability to manage their own details through the storefront UI.



# Delete customer

customers.openapi delete /customers/{customerId}
With this endpoint, you can delete an existing customer data by `customerId`.



# Get customer details

customers.openapi get /customers/{customerId}
Using this endpoint, you can get details of a single customer by `customerId`.



# Get customers

customers.openapi  get /Customers
Use this endpoint to get a paginated list of customers. <br /> By specifying the query parameters `offset` and `limit`, you can narrow down the search results. You can also `sort` the results in an ascending or descending order. Additionally, with the `isDeleted` query parameter, you can filter for either deleted or non-deleted customers. When no query parameter is specified, by default, you get up to 10 records.



# Partially update customer details

customers.openapi patch /customers/{customerId}
Using this endpoint, you can partially update details of a customer by `customerId`. To fully replace the details of an existing customer, use the `PUT /customers/{customerId}` endpoint.



# Search for customer

customers.openapi post /customers/search
Using this endpoint, you can search for customers based on filter conditions. By specifying `offset` and `limit`, you can narrow down your search results. In addition, using the `isDelete` property in the request body, you can filter for either deleted or non-deleted customers.



# Update customer details

customers.openapi put /customers/{customerId}
Using this endpoint, you can update details of an existing customer by `customerId`. <br /> This endpoint replaces the existing details of the customer. If you want to make only a partial update, without replacing the entire details, use the `PATCH /customers/{customerId}` endpoint.



# Update customer status

customers.openapi post /customers/{customerId}/actions/update-status
With this endpoint, you can update the account status of an existing customer by `customerId`.



# Add address - customer context.

customers.openapi post /customers/self/customer-address
Using this endpoint, a customer can add their address through a storefront UI.



# Delete address - customer context

customers.openapi delete /customers/self/customer-address/{addressId}
Using this endpoint, a customer can delete their own address through the storefront UI based on `addressId`.



# Get customer details - customer context

customers.openapi get /customers/self
Using this endpoint, a customer can view their details through the storefront UI.



# Customer Self



These endpoints provide the feature for customers or shoppers to independently manage their details in the storefront.


# Update address - customer context

customers.openapi put /customers/self/customer-address/{addressId}
Using this endpoint, a customer can update their own address through the storefront UI based on `addressId`.



# Update customer details - customer context

customers.openapi put /customers/self
Using this endpoint, customers can update their own details through the storefront UI.



# View address - customer context

customers.openapi get /customers/self/customer-address/{addressId}
Using this endpoint, a customer can view their own address through the storefront UI based on the `addressId`.



# View addresses - customer context

customers.openapi get /customers/self/customer-address
Using this endpoint, a customer can view their own addresses through the storefront UI.



# Feedback and Contact



We value your feedback and suggestions. For any feedback, questions, or support, reach out to our [support team](https://support.fabric.inc/hc/en-us/requests/new).


# Commerce Platform



## New Features

### Operational alerts subscription management (Admin Feature)

Copilot Admins can subscribe or unsubscribe users to an alert, view the subscribers to an alert, and manage their alert subscription status.

[fabric Alerts guide](/v3/guides/home/alerts/alerts-overview)

### User Management: Bulk add roles to users (Admin Feature)

Copilot Admins can add new roles to users in bulk. In previous releases, the Copilot Admin could only replace a users roles.

[fabric User Management guide](/v3/guides/settings/user-management/user-management)


# Dropship



## New Features

### Enhanced compatibility check 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.

### Improved import error handling

*   **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 users to fix these specific items and re-import them without needing to handle the entire original file again.

### fabric Integration

If you are a merchant using Dropship with other fabric products such as Catalog or Orders, you can set up integration workflow and configurations on the UI. This enables you to create and update multiple templates for publishing products to fabric Catalog.

*   [Dropship fabric integration guide](/v3/guides/dropship-retailers/fabric-integration)

### Template Cloning

Templates can now be cloned with a single-click action on the template details screen, making it easier to duplicate existing templates.

*   [Dropship templates guide](/v3/guides/dropship-retailers/settings/templates)

### Shopify Integration

*   **Fraud Order Protection:** Retailers can now specify whether they want to import orders flagged as High or Medium risk by Shopify.

*   **Variant-Level Metafields:** Retailers can now publish Metafields and their values at the variant level. Previously, only products could include Metafields.

*   **Additional Metafield Types:** Added support for additional Metafield types such as `multi_line_text_field`, `boolean`, `URL`, and `date_time`.

*   **Customizable Order Notes:** Order notes can now be customized to include the “Fulfill By” date.

*   **Data Override on Publish:** Any publish to Shopify actions by retailers now override the data for products and variants in Shopify with the data in Dropship. Empty attributes aren't sent.

*   [Shopify integration guide](/v3/guides/dropship-retailers/shopify-integration)

### Address fields

All countries and their provinces are now available to be added in all address fields across the platform.

### Order Bulk Utility Tool

The new bulk order utility tool allows suppliers to manage orders using a CSV import. You can cancel orders for the following use cases:

*   Cancel entire orders by PO Number
*   Cancel specific order lines by SKU
*   Cancel all order lines of specific SKU

### Retailer 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.

*   [Retailer information guide](/v3/guides/dropship-suppliers/retailer-information)


# Fulfillment



## New Features

### Order fulfillment logic rulesets

The order fulfillment feature enables 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. For more information, see the [Order Fulfillment Logic Guide](/v3/guides/orders/order-fulfillment-logic/order-fulfillment-logic).

### Location capacity limits

*   You can now set location specific allocation capacity limits.
*   Added support for bulk uploads for special location allocation capacity planning to adjust capacity limits based on upcoming events or seasonal fluctuations. For more information, see the [Location Setup Guide](/v3/guides/inventory/locations#location-setup).

### Location Import & Export

*   You can now bulk import a list of multiple locations using the import CSV file feature.
*   You can now export location data, scheduled outages, and temporary capacity plans.

For more information, see the [Importing Locations Guide](/v3/guides/inventory/locations#importing-locations).


# Offers



# New Features

## Independent Price Bulk Upload

You can now import new products to Product Catalog and prices to Offers in parallel. If a new product is imported to Product Catalog at the same time as its associated pricing file is imported to Offers, fabric automatically queues the prices that don't have an associated SKU yet created in Product Catalog and retries the SKU lookup until the product is successfully created in Product Catalog. No more file sequencing between Product Catalog and Offers.

## Calculated Price Export

Ability to export the calculated price for 1 or more products, including eligible sale and promotion discounts. The exported file will include:

*   SKU
*   Price list ID
*   Cost
*   Sale price
*   Base price
*   Price Start Date
*   Price End Date
*   Calculated price
*   Promotion IDs
*   Promotion message: PDP
*   Promotion message: PLP

Products can be queried by:

*   `calculationTime`

**Price Filters:**

*   **Price list:** Users should be able to specify the price list for which the price belongs and export the calculated price accordingly.
*   **PriceType:** Users should be able to specify the `priceType` with base or sale and only export the calculated price for those accordingly.

[Calculated Price Export](https://developer.fabric.inc/v3/api-reference/offers/exports/initiate-export-request)


# Orders



## New Features

### Exchanges

You can now exchange items for the same item in a different size or color, exchange one of two items for a different item, and exchange an item for a different item. The difference in cost is automatically calculated. For more information, see the [Exchange Orders Guide](/v3/guides/orders/order-management/exchange-orders).

### Order Appeasements

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. For more information, see the [Order Management Appeasements Guide](/v3/guides/orders/order-management/appeasements).

### Order Details

*   Added return metrics to the order total summary to represent the total refund amount.
*   Updated the progress steps for item groups and split shipments to display shipping groups separately.
*   Added the ability to preview an item's individual attributes.

For more information, see the [Viewing Details of an Order - Basic Details](/v3/guides/orders/order-management/viewing-details-of-an-order/basic-details) section.

### Order Details Shipments Tab

Added an additional order details shipment tab to display item details such as shipped quantities.

For more information, see the [Viewing Details of an Order - Shipment Details](/v3/guides/orders/order-management/viewing-details-of-an-order/shipment-details) section.

### Order Details Activity Log

Added an additional order details activity log tab to display the history of changes for an order.

For more information, see the [Viewing Details of an Order - Viewing Activity Log](/v3/guides/orders/order-management/viewing-details-of-an-order/viewing-activity-log) section.

## Copilot Enhancements

### Policies

Added the ability to mark return, exchange, and cancellation policies as default. Additionally, added the ability to apply a policy to all your configured channels.

For more information, see the [Policies Guide](/v3/guides/orders/settings/policies).

### Error Handling

Added additional error handling banners. When an order has errors such as missing customer details, an error banner appears. Clicking the banner opens a window with the error details and how to fix the errors.

### New Order Searching & Filtering

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. Additional search and filter parameters down to the attribute level have been added.

For more information, see the [Filtering Orders Guide](/v3/guides/orders/order-management/filtering-orders).

### Added Additional Order Line Statuses

Two new order line statuses were added: `PENDING_ALLOCATION` and `PENDING_REALLOCATION`.

### Inventory Activity Log

The Inventory Activity Log can now be sorted and filtered.


# Product Catalog



## New Features

### Cancellation of Product Import Jobs

Cancel product import jobs that are scheduled or in progress. For more information, see the following documentation pages:

*   [Managing Background Jobs](https://developer.fabric.inc/v3/guides/product-catalog/background-jobs/managing-background-jobs)
*   [Cancel Background Jobs](https://developer.fabric.inc/v3/api-reference/product-catalog/jobs/cancel-background-jobs)

## Copilot Enhancement

### Redesigned Collections Management

We’ve done a complete overhaul of the collection management experience and it's now much easier and faster to manage your collections. For more information, see the [Collections Overview](https://developer.fabric.inc/v3/guides/product-catalog/collections/collections) section.

### Collection Node Sorting

Ability to sort collection nodes by name in Copilot. For more information, see the [Sorting Collections](https://developer.fabric.inc/v3/guides/product-catalog/collections/managing-collections#sorting-collections) section.

### Product Search Using Comma Separated Values

Ability to search for multiple products in the Product Item List Page search bar using a comma as the value separator. or more information, see the [Searching, Filtering, Sorting Items](https://developer.fabric.inc/v3/guides/product-catalog/list/items/searching-filtering-sorting-items) section.

# API Changes

## New Endpoints

*   **Bulk Product Search Using “Comma” Separator**: Search for multiple products using a comma separator. For more information, see the following sections:
    *   [Search Products by ID](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-id/get-product-by-id)
    *   [Search Products by SKU](https://developer.fabric.inc/v3/api-reference/product-catalog/product-operations-by-sku/get-product-by-sku)


# Release Summary



**Release Date**: July 2024

We are thrilled to introduce the latest features and enhancements designed to elevate your order management, data handling, and collection management experiences. This release brings powerful new tools and improvements aimed at optimizing your workflows, enhancing operational efficiency, and providing a more intuitive user experience:

*   Order Orchestration with real time inventory and location management
*   Improvements for data imports and exports
*   Redesigned Collections experience with enhanced features


# Dropship



## Feature Enhancements

### Inventory Management

Negative inventory values are now skipped and not sent to external systems, including fabric OMS. When inventory is negative a zero value is sent.

### Invoice Improvements

*   Invoice numbers now support up to 128 characters.
*   The Invoice Export spreadsheet includes SKU information for each invoice line.

### File Transfer Protocol System Expansion (Suppliers only)\*\*

The File Transfer Protocol (FTP) system for Shipments and Inventory now supports Invoices.

### Packing Slips

Packing Slips now use attribute values from the retailer’s scope rather than the supplier’s original values.

### Compliance Scorecard

Retailers can now export the monthly compliance reports for their suppliers.

### Order Line Consolidation Options (Supplier & Retailer on EDI)

*   Suppliers can now specify and receive separate order lines for the same item if a retailer opts to skip order line consolidation.
*   **EDI Mapping:**
    *   **EDI 850:** SLN (Sub-line number) is used to store this information.
    *   **EDI 856:** LIN10 (Line number 10) is used to store this information.

### ShipStation Integration (Supplier only)

A link to the packing slip is now included in the notes sent to ShipStation.

### Loop Integration

Carrier information is now being fetched along with the tracking number for returns.

### fabric Products Integration

*   Retailers can now create and manage templates for fabric Products directly from the UI.
*   Any items published from Dropship now have attributes `“Dropship?” = TRUE` and `Vendor ID` populated by default.

### fabric Orders Integrations

Discounted Shipping cost is now being captured and passed on to suppliers if a retailer is using discounts for shipping costs in their Order Management.

## Shopify integration enhancements

### Variant Management (Retailer only)

Retailers can now edit or remove any duplicate variants in the system.

### Order Syncronization\*\*

fabric now runs a background job that audits Orders and reruns them every 24 hours to sync any missed orders.

### API Migration to GraphQL

Ahead of Shopify's deprecation of REST APIs for Products (Feb 2025), fabric product endpoints have migrated to use GraphQL. This migration supports:

*   Product and collection synchronization
*   Inventory syncing
*   Fulfillment workflows
*   Syncronization of Shopify Variant IDs

## Copilot Enhancements

### Proposal Details Page

*   **Products Tab:**
    *   **New Sidebar View:** Displays product attributes, variants, comments, and issues.
    *   **Product Actions:** New "Approve/Remove" options added for each product.
    *   **Commenting on Products:** You can now add comments on individual products, with support for replies and reactions.
    *   **Issues Management:** Products can now be directly added to issues from the sidebar.
*   **Items & Pricing Tab:**
    *   **Sidebar for Variant Attributes:** The sidebar replaces the previous window for displaying variant attributes.
    *   **Action Removal:** Actions have been removed; variants can no longer be added to issues or approved/removed individually or in bulk.
*   **Issues:**
    *   **Sidebar for Products and Notes:** The sidebar now replaces the window for displaying products and notes associated with issues.
*   **Comments Section:**
    *   **Proposal-Level Comments:** You can add comments at the proposal level, including reply and tagging capabilities.
    *   **Reactions:** Reactions have been added to enhance engagement on comments.
*   [Dropship Proposals section](/v3/guides/dropship-retailers/proposals)

### Integrations

*   Integrations for Shopify and fabric platforms are now available to be setup from the settings UI.
*   [Shopify integration](/v3/guides/dropship-retailers/shopify-integration)
*   [fabric integration](/v3/guides/dropship-retailers/fabric-integration)

### Templates

*   Support added for internal and external platform templates for Shopify and fabric Products.
*   [Templates section](/v3/guides/dropship-retailers/settings/templates)


# Fulfillment



## Feature Enhancements

*   **Refresh Rate**: Increased the refresh cache default configuration from 3 hours to 24 hours. This helps to reduce failure during the allocation processing due to unready allocation.
*   **Pending and Reallocation handling**: Allocation service now considers pending allocations when updating the allocation lines status. Additionally, reallocation now supersedes the cancel SLA process.


# Offers



## New Features

### Redesigned promotions management

Promotion management is easier than ever with the redesigned fabric promotions manager. Create a promotion in 4 steps with a simple guided screen. For more information, see the [Promotions Overview](/v3/guides/offers/Promotions/overview) section.

### Promotion Stacking for Exclusive and Type Exclusive

You can now select stacking priority for all types of promotions, giving marketing managers more control over margin and how promotions interact with one another. For more infomation, see the [Promotion Stacking](/v3/guides/offers/Promotions/overview#stacking-and-additional-settings) section.


# Orders



## Feature Enhancements

### Invoices and Returns

Order service now registers the original invoice shipment number for returned items.


# Product Catalog



## New Features

### Update and publish all product action

Operators now have the ability to select all products in their catalog and either update common attribute values or publish/unpublish them.There was previously a limit of 25 products for bulk updates in Copilot.
For more information, see the [Bulk Publishing](/v3/guides/product-catalog/list/items/bulk-operations-items#publishing) section.

## Copilot Enhancement

### OR condition on Collections

Users can now set more complex rules for merchandising collections using up to 5 OR conditions between attributes rules.
For more information, see the [Collections Rules and Conditions](/v3/guides/product-catalog/collections/collections#rules-and-conditions) section.


# Release Summary



**Release Date**: October 2024

We are excited to share the latest updates designed to streamline inventory management, supplier collaboration, and product data workflows. This release introduces key enhancements to improve operational efficiency and deliver a seamless user experience:

*   Unified inventory management with enhanced data synchronization across systems
*   Supplier onboarding improvements with new collaboration features
*   Redesigned promotions management with stackable promotions for added flexibility
*   Expanded bulk operations for product catalogs to update and publish at scale


# November 2023



## November 3, 2023

<div style={{ display: "table", width: "auto" }}>
  <div style={{ display: "table-row", width: "auto" }}>
    <Snippet file="chips/spaces.mdx" />

    <div
      style={{
       float: "left",
       display: "table-column",
       paddingLeft: "30px",
       width: "calc(80% - 30px)",
      }}
    >
      **Release Stage: Public Preview**

      Today, we are releasing fabric Store Fulfillment to Public Preview to help retailers manage their store fulfillment operations more efficiently. With the iOS and Web Apps, retailers can offer convenient and flexible fulfillment options with pick-up in store and ship from store, increase revenue & sell-through by selling inventory from stores, and control order splitting and routing rules between stores and warehouses with fabric Order Fulfillment Logic.
    </div>
  </div>
</div>

### New Features

| Interface             | Feature                                  | Description                                                                                                                                                                                                          |
| --------------------- | ---------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Login                 | SSO Integration                          | The ability for a merchant to log into the app with their preferred SSO provider                                                                                                                                     |
| Home                  | User Profile                             | The ability for the user to see their name, store name or location, and associate ID                                                                                                                                 |
| Home                  | L1 Navigation                            | The ability for the user to see and select different logistics operation modes: Fulfillments, Pickups                                                                                                                |
| Fulfillments          | Fulfillments List Page                   | The ability for the user to see orders queues sorted and grouped by Service Level.                                                                                                                                   |
| Pick                  | Pickup Shipping Method                   | Ability to manage Pick Up (Click and Collect or BOPIS).                                                                                                                                                              |
| Pick                  | Item Tiles                               | See details of each SKU during the picking process.                                                                                                                                                                  |
| Pick                  | Device Camera Scan (Pick Scan)           | Pick items across the store or shelves via camera scan of the barcode or any integrated hardware scanner                                                                                                             |
| Pick                  | Manual Pick with SKU entry               | Type barcode manually in case a barcode scan fails                                                                                                                                                                   |
| Pick                  | Reject with Reason Codes (Scratch Items) | Enter different reason codes if the item isn't available.                                                                                                                                                            |
| Pack                  | Select Packaging                         | Display a drop-down option to select a box from a list of available boxes.                                                                                                                                           |
| Pack                  | Device Camera Scan (Pack Scan)           | Perform a secondary barcode scan at the packing station, as a validation mechanism ensuring that the right items are put in the box.                                                                                 |
| Pack                  | Gifting and Value Added Services         | Ability to perform Value Added Service actions (such as Gift Wrapping or Personalized Messages).                                                                                                                     |
| Pick                  | Packing Slip                             | Ability on the app the print packing slips.                                                                                                                                                                          |
| Ship                  | Shipping Label Generation and Printing   | Auto-select a shipping label per order based on the Service Level of the order and supported carriers for the user. Allows for re-printing of labels.                                                                |
| Ship                  | Pickup label printing                    | Print another label type for BOPIS/Curbside orders based on the order type with a QR code (PX labels) Allows for re-printing of labels Also, prints packing slip per order at the same time (to be added to the box) |
| Order Lookup (Search) | Packing Slip Scan                        | Scan a barcode on packing slips to pull order details.                                                                                                                                                               |
| Order Lookup (Search) | Customer Order Search                    | Ability to search by name and order number.                                                                                                                                                                          |
| Handoffs              | Pickup signature                         | Confirm that the proof of identity was verified                                                                                                                                                                      |