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

# Products

> What you can sell on Shoppex, and how fulfillment works for each type.

Every product has a fulfillment mode that decides what the buyer receives the moment their payment clears. Pick the mode that matches what you are selling. Shoppex handles delivery automatically for every mode except Service.

Shoppex has six fulfillment modes:

* **File** — upload once. Shoppex delivers the same download link to every buyer.
* **Serials** — upload a pool of codes. Each buyer gets a unique one.
* **Subscription** — charge on a recurring schedule, with auto-renewal.
* **Service** — manual fulfillment. You get notified, then you deliver the order yourself.
* **Dynamic** — your own webhook returns the delivery payload for each order.
* **Info card** — information-only. Use it for listings, ads, or "request a quote" placeholders that need no automated delivery.

[Discord roles](/selling/discord-roles) are not a separate mode. You add them to a product that already uses one of the six modes, most often a Subscription product. Licenses work the same way. See [Serials and licenses](/selling/serials-and-licenses).

## File

The File fulfillment mode delivers a download link to every buyer immediately after payment. The buyer can access the download from their customer dashboard for as long as the order stays valid.

### Uploading

Open your product, go to the **Files** tab, and upload. If you want buyers to receive a bundle (for example, a ZIP, a PDF, and a license file), attach multiple files to the same product.

### File size

Product file uploads are capped at **50 MB per file** in the dashboard UI. The effective hard ceiling is **16 MB** at the API gateway, so anything larger fails the upload regardless of the UI cap.

For larger assets, host the file on your own storage (S3, Cloudflare R2, your CDN) and point the product at an external URL. Shoppex delivers the URL through the same protected delivery flow, so the buyer experience stays identical.

### Updating the file

Replace files at any time from the product's **Files** tab.

### Download protection

Downloads are gated by the buyer's logged-in customer dashboard session. Anyone who is not signed into the buyer's customer account cannot pull the file, and there is no public sharable URL that can leak.

If you suspect abuse on a specific order, for example one buyer's link shared widely, revoke the order from your dashboard. The buyer loses access immediately.

### Stock behavior

File products have unlimited stock. Shoppex delivers the same file to every buyer.

## Serials

Shoppex delivers a unique code from a pool you upload, one per buyer. See [Serials and licenses](/selling/serials-and-licenses) for setup, hardware-locked licenses, and the event audit trail.

### Stock behavior

Serials are inventoried. Shoppex tracks how many codes remain in your pool, and the listing automatically becomes "out of stock" when the pool hits zero.

## Subscription

Subscription mode charges the buyer on a recurring schedule, with auto-renewal. See [Subscriptions](/selling/subscriptions) for billing cycles, retries, and cancellation.

### Stock behavior

Subscription products are not inventoried. They do not run out.

## Service

Use Service mode when you deliver the product yourself, for example design work, game-boosting, account services, or custom orders. Shoppex collects payment and notifies you. The actual delivery happens off-platform.

### How an order moves

1. Buyer pays. The order is marked **Paid** but **pending fulfillment**.
2. You receive an email and a dashboard notification.
3. You do the work, outside Shoppex, on your own schedule.
4. Mark the order **fulfilled** from its detail page, optionally attaching a note or file for the buyer.
5. The buyer is emailed your completion message.

### Custom fields

Service products almost always need information from the buyer, for example a username, target server, game tag, or Discord ID. Add **custom fields** to the product, and Shoppex prompts the buyer at checkout. The submitted values appear on the order page when you open it.

Field types are **text**, **textarea**, **number**, **checkbox**, or **hidden**. Each field can be required or optional. You can also attach an optional **regex** pattern for client-side validation, for example to check emails, URL formats, or any custom shape you need.

### Communicating with the buyer

The order page has a built-in conversation thread between you and the buyer. Use it instead of moving the conversation to Discord or email. Every message stays attached to the order, and that message history becomes useful evidence if the buyer later disputes the charge.

### Dispute risk

Service products are the most dispute-prone category on Shoppex, because there is no automatic proof of delivery. To stay safe:

* Keep the conversation in the Shoppex order thread.
* Attach screenshots, videos, or logs of completed work to the order.
* Mark the order fulfilled only after the buyer has confirmed receipt.

When a dispute comes, Stripe and PayPal accept the full Shoppex order page as evidence. This includes buyer chat history, custom field values, and your fulfillment attachments.

### Stock behavior

Service products are not inventoried. They do not run out.

## Dynamic

Dynamic fulfillment lets you generate each buyer's delivery payload at order time, instead of pre-uploading a pool of files or codes. Use it when:

* The product is generated per-buyer (rendered PDFs, signed binaries, account credentials).
* You are sourcing from an external system you control (your own license server, a third-party API, a database of generated codes).
* Stock is effectively infinite, but you do not want to pre-upload anything.

### How it works

1. You configure a **dynamic delivery URL** on the product, an endpoint on your own backend.
2. When a buyer pays, Shoppex sends a request to that endpoint with the order details.
3. Your endpoint returns the delivery payload, for example text, a code, or a URL.
4. Shoppex stores that payload against the order and shows it to the buyer.

### Setting up the endpoint

You provide an HTTPS URL on your own infrastructure. Shoppex sends a signed `POST` request with the order data. You respond with the payload. The full request and response contract is documented in the [Dynamic delivery reference](/developers/dynamic-delivery).

### Failures

If your endpoint is down or returns an error, the order moves to a failed-fulfillment state. The buyer sees a "delivery pending" message, and you get a dashboard notification. Once you have fixed your endpoint, you can retry the delivery from the order detail page.

Dynamic delivery does not retry automatically. Shoppex cannot tell whether a 500 response from your endpoint is a temporary error or a sign that you are rate-limiting requests. You decide how to handle retries.

### When not to use Dynamic

If the same file or code works for every buyer, use **File** or **Serials** instead. Use Dynamic fulfillment only when the payload is different for each buyer.

### Stock behavior

Dynamic products are not inventoried. They do not run out.

## Info card

Info card mode is information-only. Use it for listings, ads, or "request a quote" placeholders that need no automated delivery. There is no download, code, or manual step attached to the order.

### Stock behavior

Info card products are not inventoried. They do not run out.

## Variants and pricing

A product can have variants, such as sizes, tiers, or region-specific versions. Each variant has its own price, stock, and fulfillment payload. Set one price for the whole product, or set a separate price for each variant.

## Bundles, addons, and quantity deals

On top of base products, you can configure:

* **Bundles** — sell multiple products as a single SKU at a bundle price.
* **Addons** — optional upsells shown on the checkout page.
* **Quantity deals** — automatic discount tiers. For example, set 10% off at 5 units and 20% off at 10 units.

Configure these from each product's detail page.

## Licenses (advanced)

If you sell software, the [Licenses system](/selling/serials-and-licenses#hardware-locked-licenses) goes further than serials. License objects have a status (active, suspended, revoked, or expired), HWID binding to prevent key sharing, IP locks, and a full event audit trail.
