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

# Preparing Products for the Store

> What makes a product appear in the portal Store, and how to control its badge, short description, per-line quantity limit, and category placement.

## Overview

A product does not appear in the Store just because it exists. It has to be active, sellable, visible to the portal, and priced — and a few extra fields control how its tile looks. This page covers each requirement and each optional touch.

## What a Product Needs to Appear

The Store and the Product page apply the **same** eligibility test, so a product reachable by a direct link is always one the grid would also show. Every condition below must hold.

| Requirement | Field |
| - | - |
| The product is active | `Product2.IsActive = true` |
| It is a fusionCore product | **Used By FusionCore** (`FCORE_PAY__Used_By_FusionCore__c`) is checked |
| It is not a tax product | **Is Tax** (`FCORE_PAY__Is_Tax__c`) is unchecked |
| It is visible to the portal | **Product Visibility** (`FCORE_PAY__Product_Visibility__c`) is `Portal` or `Staff and Portal` |
| It has a UUID | **Product UUID** (`FCORE_PAY__Product_UUID__c`) is populated |
| It has an active price on the standard price book | An active `PricebookEntry` on the standard price book |
| Its business unit is in scope | Its **Business Unit** is listed in **Product Business Unit Ids**, or that setting is blank |
| Its price matches the shopper's currency | On multi-currency orgs, a price book entry in the selected currency |

> [!NOTE]
>
> The Store loads at most 1,000 eligible price book entries. A catalogue larger than that needs the business-unit filter in [Store Settings](https://docs.fusioncore.us/end-user-guides/portal/store/setting-up-store-settings.md), or a custom **Store Data Provider Class**.

## Set Product Visibility

**Product Visibility** uses the `Visibility Settings` global value set:

| Value | Meaning |
| - | - |
| `Staff` | Staff can sell it; it does **not** appear in the Store. This is the default |
| `Portal` | Appears in the Store only |
| `Staff and Portal` | Appears in the Store and is available to staff |
| `Disabled` | Not available anywhere |

> [!WARNING]
>
> `Staff` is the default on every product, so a newly created product is invisible to the Store until you change it. This is deliberate — nothing reaches your storefront by accident.

## Product UUID

The Store addresses products by **Product UUID** (`FCORE_PAY__Product_UUID__c`), not by Salesforce Id, so storefront links stay stable and reveal nothing about your org. A product with a blank UUID is filtered out of the Store entirely.

> [!TIP]
>
> If products you expect are missing and everything else checks out, check the UUID first — it is the least obvious of the requirements.

## Dress the Tile

These fields are optional and affect only presentation.

| Field | Effect |
| - | - |
| **Short Description** (`FCORE_PAY__Short_Description__c`) | The text under the product name **on the tile**. Rich text, up to 256 characters |
| **Description** (standard `Product2.Description`) | The longer text on the **Product page** |
| **Store Image Badge** (`FS_PORTAL_Store_Image_Badge__c`) | Badge text over the tile image, for example `MEMBER PICK`. Leave blank for no badge |
| **Store Image Badge Color** (`FS_PORTAL_Store_Image_Badge_Color__c`) | Badge color: `Gold`, `Navy`, or `Red`. Applies only when badge text is set |
| **Image URL** (`FCORE_PAY__Image_URL__c`) | The tile and detail-page image |

> [!NOTE]
>
> **Store Image Badge** doubles as a translation key: if a Custom Label exists whose name exactly matches the badge text, the label's translated value is shown instead of the raw text. That is how you get translated badges without per-language product records.

## Limit Quantity Per Line

**Max Quantity Per Item** (`FCORE_PAY__Max_Quantity_Per_Item__c`) caps how many units may sit on a single line item.

* Set it to `1` to sell one unit per line — the cart then shows a remove button rather than a quantity stepper.
* Leave it blank for no limit.
* Set it to a number, and a shopper who adds more than that gets **additional lines**, each capped at the same limit. Ten units with a limit of four become lines of 4, 4, and 2.

> [!WARNING]
>
> This field is currently honored by the portal Store only. Staff-side order entry does not enforce it.

## Categories

Shoppers filter the Store by category, and the Product page can show which categories a product belongs to.

**1. Make the category visible to the portal**

On each `FCORE_PAY__Product_Category__c` record, set **Product Category Visibility** (`FCORE_PAY__Product_Category_Visibility__c`) using the same `Visibility Settings` values — `Portal` or `Staff and Portal` for a category shoppers should see.

**2. Add products to it**

Link products to the category with Product Category Item records, as you would for any other use of categories.

**3. Check the pill count**

The Store page shows category pills inline up to **Max Visible Category Pills** on the component (default 4, maximum 8); the rest collapse into a **More** dropdown.

Only portal-visible categories appear in the filter and in the Product page's categories line — a category set to `Staff` is invisible to shoppers even when its products are on sale.

## Products That Need a Choice First

Some products cannot go straight into the cart — a subscription needs a plan chosen. fusionCore resolves what to ask by the product's **System Category**, reading the **Product Configurator Class** on the matching `FCORE_PORTAL__Portal_Product_Config__mdt` record. See [Product Config Metadata Fields](https://docs.fusioncore.us/end-user-guides/products/product-system-category/product-config-metadata-fields.md).

Behavior follows from how many options exist:

| Options available | What the shopper gets |
| - | - |
| More than one | **Add to Cart** on the tile opens the Product page so they can choose |
| Exactly one | The single option is selected silently and the product is added straight to the cart |
| None needed | Added straight to the cart |

> [!NOTE]
>
> Subscriptions added from the Store do not ask the shopper for a start date. The [Subscription Start Date Updater](https://docs.fusioncore.us/end-user-guides/subscriptions/subscription-start-date-updater.md) sets it.

## Limitations and Common Pitfalls with Store Products

* **A new product defaults to `Staff`** and will not appear in the Store until **Product Visibility** is changed.
* **A blank Product UUID silently hides a product**, from both the grid and its own detail page.
* **The price must be on the standard price book** and active. A product priced only on a custom price book does not appear, even though staff can sell it.
* **Tax products never appear**, regardless of visibility.
* **Short Description and Description are not interchangeable** — Short Description is the tile, Description is the detail page. Filling only one leaves the other surface bare.
* **Badge color without badge text does nothing.** The color applies only when text is set.
* **Max Quantity Per Item splits lines rather than blocking the shopper.** If you meant to cap the total a shopper may buy, this field does not do that.
* **A category set to `Staff` disappears from the filter** even when its products are on sale, so shoppers can reach those products only by search.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.