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

# Products & Variants

> How products, variants, stock and visibility work on Komerza

Everything you sell on Komerza is a **product**, and every product contains one or more **variants** - the options a customer actually buys, such as editions, tiers or durations. A product with a single variant appears as a simple product on your storefront; a product with several variants shows a picker so the customer chooses one.

Products are managed in the dashboard under **Products → Products**.

<Note>
  Delivery, pricing and stock are configured **per variant**, not per product. A
  product on its own cannot be purchased - it needs at least one variant with a
  price and a delivery configuration.
</Note>

## Product settings

| Setting              | Rules                                                           |
| -------------------- | --------------------------------------------------------------- |
| **Name**             | 3-64 characters                                                 |
| **Slug**             | 1-72 characters, lowercase, unique within your store            |
| **Description**      | Markdown, up to 16,384 characters                               |
| **Meta description** | Separate short description used for SEO                         |
| **Images**           | PNG, JPG, WebP or GIF, under 30 MB each                         |
| **Badges**           | Optional labels shown on the storefront                         |
| **Bestseller**       | Optional flag for highlighting a product                        |
| **Hide stock**       | Hides stock counts and the out-of-stock badge on the storefront |

Products can be grouped into **Categories** (**Products → Categories**), each with its own slug, image and custom product ordering.

### The product editor

The editor is split into tabs:

<CardGroup cols={2}>
  <Card title="General" icon="sliders">
    Name, slug, description, SEO, badges and visibility.
  </Card>

  <Card title="Images" icon="image">
    Product imagery and ordering.
  </Card>

  <Card title="Variants" icon="layer-group">
    Purchasable options, pricing, stock and quantity limits.
  </Card>

  <Card title="Delivery" icon="truck-fast">
    What the customer receives - configured per variant.
  </Card>

  <Card title="Payment" icon="credit-card">
    Block specific gateways for this product, or add per-gateway fees.
  </Card>

  <Card title="Affiliate" icon="handshake">
    Use the store default affiliate discount, override it, or disable it.
  </Card>

  <Card title="Security" icon="shield-halved">
    Block VPN and proxy connections for this product.
  </Card>

  <Card title="Discord" icon="discord">
    Grant a Discord role on delivery.
  </Card>
</CardGroup>

If a product cannot currently be purchased - it is On Hold, has zero stock, or has no delivery items - the editor shows a banner explaining why, with a button that jumps to the tab that fixes it.

## Visibility

Each product is in one of four states:

<ResponseField name="Public">
  Visible on the store page, searchable, and accessible to all visitors.
</ResponseField>

<ResponseField name="Unlisted">
  Hidden from the store page, but reachable and purchasable via its direct URL.
</ResponseField>

<ResponseField name="Private">
  Hidden from the storefront entirely and not purchasable.
</ResponseField>

<ResponseField name="On Hold">
  Visible but blocked from purchase. Customers see: "This product is marked as
  on hold, try again later."
</ResponseField>

The Products list has quick-filter tabs for each state, plus search and a low-stock filter.

## Variants

Each variant carries its own configuration:

* **Name** - 3-128 characters, with an optional description up to 4,096 characters
* **Cost** - 0 to 100,000 in your store currency
* **Minimum and maximum quantity** per order (minimum at least 1; maximum can be unlimited)
* **Stock mode** - Calculated, Ignored or Fixed (see below)
* **Type** - a one-time purchase, or a subscription with a billing interval
* Its own images, custom fields, volume discounts and optional Discord role

<Warning>
  A variant is rejected if its price multiplied by its minimum quantity falls
  below one minor currency unit (for example, one cent). The error message tells
  you the minimum quantity required - raise either the price or the minimum
  quantity.
</Warning>

## Stock modes

<ResponseField name="Calculated">
  Stock equals the number of delivery items (license keys) loaded on the
  variant. The stock field is read-only - you change stock by adding or removing
  keys on the **Delivery** tab. The displayed count re-syncs periodically, so it
  can briefly lag reality.
</ResponseField>

<ResponseField name="Ignored">
  Stock is not tracked or displayed, and the variant never goes out of stock.
  The right choice for file downloads and dynamic delivery.
</ResponseField>

<ResponseField name="Fixed">
  A number you set and maintain manually. Checkout rejects quantities above it:
  "Sorry, `{name}` cannot be purchased due to a lack of stock."
</ResponseField>

**Hide stock** (product level) hides counts on the storefront but does not disable stock checks - customers still cannot buy more than exists.

### Stock reservations

While a payment is still being confirmed - most commonly cryptocurrency - the items for that order are reserved so another customer cannot take them. Storefront availability drops at that moment, before the order completes. If the payment fails or expires, the items return to inventory automatically.

<Tip>
  When a Calculated variant drops to 5 or fewer remaining keys, you receive a
  "Product nearly out of stock" email linking to the product's delivery page.
  The Products list also has a low-stock filter.
</Tip>

### When stock runs out after payment

If a paid order needs more license keys than a Calculated variant has, the order is marked **Undeliverable** and the customer receives a "We couldn't deliver your order" email. Restock the variant on the **Delivery** tab, then use **Deliver** on the order page. See [Managing Orders](/guides/orders).

## Plan limits

|          | Free | Premium | Business  |
| -------- | ---- | ------- | --------- |
| Products | 15   | 1,000   | Unlimited |
| Stores   | 1    | 5       | Unlimited |
| Coupons  | 5    | 1,000   | Unlimited |

Creating a product past your plan's cap returns an upgrade-required error.

## Duplicating and deleting

**Duplicating** a product or variant creates a fully independent copy - its own images, delivery files, license keys, custom fields, volume discounts, fees and settings. The copy needs a unique name, and editing or deleting it never affects the original.

<Warning>
  Deleting a product also deletes its variants, custom fields, volume discounts,
  images and **reviews**. Files already delivered to customers are retained, so
  past buyers keep access to their downloads.
</Warning>

## Bulk editing

From the Products list you can update many products at once: visibility, VPN blocking, gateway blacklist, description, delivery message (applied to all variants), bestseller flag, affiliate discount, custom fields, Discord settings and role, and randomised key delivery.

<Note>
  Bulk-applied custom fields **replace** the existing custom fields on all
  variants of the selected products.
</Note>

## Next steps

<CardGroup cols={2}>
  <Card title="How Delivery Works" icon="truck-fast" href="/guides/delivery/introduction">
    Configure what each variant delivers after payment.
  </Card>

  <Card title="Coupons & Discounts" icon="tag" href="/guides/coupons-and-discounts">
    Discount codes, volume pricing and pop-up offers.
  </Card>

  <Card title="Managing Orders" icon="receipt" href="/guides/orders">
    Statuses, manual delivery, refunds and exports.
  </Card>

  <Card title="Products API" icon="code" href="/api-reference/endpoint/products/create">
    Create and manage products programmatically.
  </Card>
</CardGroup>
