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

# Avalex Portal: Create and Configure Software Products

> Create and configure software products in the Avalex portal. Set license requirements, subscription billing periods, and default IP and HWID slot limits.

Products are the foundation of your Avalex licensing setup. Each product you create defines the rules that govern how licenses for that product behave — including whether a license is required at all, whether it renews on a recurring basis, and how many IP addresses or hardware devices a single license can cover. The values you set on a product become the defaults whenever you issue a new license for it, though you can always override them at the individual license level.

<Note>
  You need the **`products:write`** permission to create or edit products in the portal.
</Note>

## Creating a Product

<Steps>
  <Step title="Navigate to Products">
    Select **Products** from the left-hand sidebar to open the product list.
  </Step>

  <Step title="Click Create Product">
    Click the **Create Product** button in the top-right corner of the page.
  </Step>

  <Step title="Fill in the product details">
    Provide a **Name**, select a **Product Type** (e.g., `software`), enter a **Description**, and set the **Price**.
  </Step>

  <Step title="Configure license requirements">
    Toggle **Requires License** on if customers must hold a valid license to use this product. Leave it off for products that do not require license validation.
  </Step>

  <Step title="Configure subscription settings">
    If this product is sold on a recurring basis, enable **Is Subscription** and enter the **Recurring Period Days** — for example, `365` for an annual subscription.
  </Step>

  <Step title="Set slot limits">
    Enter values for **Max IPs** and **Max HWIDs** to cap how many IP addresses and hardware devices a license may cover. Leave either field blank to allow unlimited bindings.
  </Step>

  <Step title="Save the product">
    Click **Save**. The new product will appear in your product list immediately.
  </Step>
</Steps>

## Product Fields

| Field                 | Type            | Description                                                                                                   |
| --------------------- | --------------- | ------------------------------------------------------------------------------------------------------------- |
| `name`                | string          | The display name of the product.                                                                              |
| `productType`         | string          | The category of the product (e.g., `software`).                                                               |
| `description`         | string          | A human-readable description shown to staff and in orders.                                                    |
| `price`               | number          | The base price of the product.                                                                                |
| `requiresLicense`     | boolean         | Whether customers must hold a valid license to use this product.                                              |
| `isSubscription`      | boolean         | Whether this product is billed on a recurring schedule.                                                       |
| `recurringPeriodDays` | integer         | The length of each billing period in days (e.g., `30`, `365`). Only relevant when `isSubscription` is `true`. |
| `maxIps`              | integer or null | The maximum number of IP addresses a license for this product may bind. `null` means unlimited.               |
| `maxHwids`            | integer or null | The maximum number of hardware devices a license for this product may bind. `null` means unlimited.           |

<Note>
  The `maxIps` and `maxHwids` values you set on a product become the **default values** when you issue a license for that product. You can override them on any individual license without affecting the product defaults or other licenses.
</Note>

## Product Schema

```json theme={null}
{
  "id": "prod_123",
  "name": "Enterprise Suite",
  "productType": "software",
  "description": "Full desktop application",
  "price": 299.99,
  "requiresLicense": true,
  "isSubscription": true,
  "recurringPeriodDays": 365,
  "maxIps": 5,
  "maxHwids": 2,
  "createdAtEpochMillis": 1723140000000
}
```
