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

# Load inventory

> Add keys and codes to a product's inventory by pasting or uploading them, with duplicates caught automatically.

Inventory is the stock of keys and codes you have for a product. Loading inventory adds those keys so they are ready to sell. Each key is stored securely, stays masked, and is revealed only when a buyer collects it or you choose to reveal it.

<Info>
  Products and inventory are separate. A product is the listing; inventory is the actual keys behind it. If you have not created the product yet, start with [Add a product](/guides/products-inventory/add-a-product).
</Info>

## Add keys to a product

<Steps>
  <Step title="Open the product's inventory upload">
    Open **Products**, select the product, and choose **Manage Inventory** to open its keys page. Then choose **Add Inventory**. You can also reach the upload from the **Inventory** list using the **Add** action on a product's row.
  </Step>

  <Step title="Enter your keys">
    Use **Manual** to type or paste keys into the grid, one per row. Pasting a column of keys from a spreadsheet fills a row each, so a whole list lands as separate items rather than one. Switch to **Bulk** to paste a large list or drop a file.
  </Step>

  <Step title="Add expiry or notes if needed">
    Each key can carry an optional **expiry date**. In **Manual** mode you can set a **batch expiry** that fills the date on every row, then adjust individual rows. Account-type products also take an optional note per row.
  </Step>

  <Step title="Review and upload">
    The counter shows how many items you have entered. Choose **Upload N items** (for example, **Upload 25 items**) to add them. You will see how many were added and how many duplicates were skipped.
  </Step>
</Steps>

## Supported layout

* Keys go **one per row** (or one per line when you paste or upload a list).
* A file can be **.csv** or **.txt**. For a CSV, the columns are the key, an optional expiry, and an optional note.
* Expiry dates are recognized in a few common formats. Rows with an expiry that is not recognized are still imported, just with a blank expiry you can fill in later.
* **Account** products expect each entry as `email | password`. The upload flags any entry missing the separator before it is sent.

<Tip>
  On the upload screen you can download a sample CSV. It shows the header and the expiry and note columns, so it teaches the exact layout that is accepted.
</Tip>

## Bulk upload

For large batches, switch to the **Bulk** tab and drop a `.csv` or `.txt` file, or paste the list. You can then choose **Review in grid** to move the parsed rows into the manual grid, where you can check each key, its expiry, and any note before uploading.

## Import keys for many products at once

To load keys for several products in one go, open **Inventory** from the sidebar and choose **Import**. The **Import inventory** dialog takes a CSV with a `sku` column and a `value` column, plus optional `expiry_date` and `note` columns. Each key is added to the product whose SKU matches its row. You can download a sample file from the dialog. The same import is also available under **Settings**. See [Import data](/guides/settings/import-data).

## Duplicate detection

TokenSupply removes duplicate keys automatically. If a batch of keys contains repeats, or a key already exists in stock, the duplicate is skipped rather than stored twice. Before you upload, any values entered more than once in the batch are flagged so you can fix the list first. After upload, the result tells you how many items were added and how many duplicates were skipped.

## Masked storage and reveal

Every key is stored **masked**, so its full value never sits in plain view on the list. The real value is revealed only when it is needed:

* A **buyer** reveals their key when they collect their order through the delivery portal.
* **You** can reveal a key on demand from the product's key list. Each reveal is logged.

See [Key details](/guides/products-inventory/key-details) for how to reveal a key and what else you can do with one.

## Reserved keys

A key can be **reserved**, which holds it for a specific order so it is not sold to anyone else. Reserved keys show a **Reserved** status in your stock views. Most keys stay **Available** until they sell.

## Next steps

<CardGroup cols={2}>
  <Card title="Manage stock" icon="boxes-stacked" href="/guides/products-inventory/manage-stock">
    See stock levels, spot low stock, and reveal a key when you need it.
  </Card>

  <Card title="Receive keys from a vendor" icon="handshake" href="/guides/vendors-procurement/receive-keys">
    Approve a vendor's stock file so the keys land in inventory.
  </Card>
</CardGroup>
