> ## 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.

# Resellers

> Let trusted partners buy your products at wholesale prices and pay from a prepaid balance.

A reseller is a customer who buys your products at a discount and sells them on. You set the
discount tiers and choose which products they may buy — pricing stays global, never negotiated
per partner.

Find it in the dashboard under **Customers → Resellers**.

## How the money works

Resellers do not check out with a card. They keep a **prepaid balance** in your shop, top it up
themselves, and every wholesale order is charged against that balance instantly. Nothing is
invoiced, nothing is on credit, and an order that exceeds the balance is simply rejected.

Two consequences worth knowing up front:

* A reseller order settles immediately, so their codes or files are delivered right away.
* Reseller top-ups earn **no** wallet bonuses or reward credits, even if you run a top-up bonus
  campaign. A bonus on money that is spent at a discount would be a discount twice.

## Setting the program up

The Overview tab shows a three-step checklist until you finish it.

<Steps>
  <Step title="Enable the program">
    Go to the **Settings** tab and switch **Reseller Program** on. While it is off, existing
    resellers keep their status but cannot place wholesale orders or use the reseller API.

    Then pick an **Enrollment Mode**:

    * **Manual** — only you invite resellers. Customers cannot request access.
    * **Application** — customers apply from their account and you approve or reject each request.
      You can add an **Application Message** explaining what you expect, and require applicants to
      write a note.
    * **Open** — any customer becomes a reseller instantly and lands in your default tier.

    Open enrollment requires a **Default Tier**, because nobody reviews the signup — the price the
    new reseller gets has to be decided in advance. The dashboard blocks the switch until you set
    one.
  </Step>

  <Step title="Create a tier">
    A tier holds the wholesale discount. On the **Tiers** tab, choose **Create Tier** and set a
    **Name** and a **Discount Percent** — the percentage off your regular price on every enrolled
    product.

    Optionally set **Auto-Advance**: a **Lifetime Revenue** and/or **Completed Orders** threshold
    that promotes resellers into this tier as they grow. By default hitting *either* threshold is
    enough; tick "Require both thresholds instead of either one" to demand both.

    Tiers are ordered from entry level to top tier. When an order pushes a reseller past several
    thresholds at once, they land in the **highest tier they qualify for** — not the next one up.

    Need an exception for a single product? Use **Overrides** on the tier row. An override replaces
    the tier discount for one product, or for one specific variant.
  </Step>

  <Step title="Enroll products">
    On the **Products** tab, flip the **Enrolled** switch for every product resellers may buy.
    Enrolled products are the wholesale catalog; everything else is invisible to them.

    This page never sets a separate reseller price. Resellers always pay your regular price minus
    their tier discount, so a price change on the product flows through automatically.

    **Disable Volume Discount** on a row stops your normal quantity discounts from stacking on top
    of the wholesale discount for that product.
  </Step>
</Steps>

## Bringing resellers in

**Invite Reseller** (top right of the page) takes an email and an optional tier. If that email
is new to your shop, the customer account is created for you. Without a tier the reseller pays
your regular price until you assign one, so pick one unless you have a reason not to.

The invitation email carries a link that expires after **14 days**. Until it is accepted the
relationship sits in **Invited**.

In Application mode, requests land on the **Applications** tab. Each shows the applicant's note
and the date. **Approve** lets you pick the tier they start in; **Reject** takes an optional
reason for your own records — it is not emailed automatically. A rejected applicant keeps their
customer account and can apply again later.

Every relationship is in exactly one state: **Invited**, **Applied**, **Active**, **Suspended**,
or **Rejected**. You can suspend an active reseller and reinstate them later — suspending pauses
wholesale pricing and their API access but keeps their order history. Relationships are never
deleted; only an unaccepted invitation can be withdrawn.

## What your resellers see

In the customer portal of your shop, an approved reseller gets a **Reseller** tab with:

* their tier, lifetime revenue, lifetime orders, and balance, with **Add funds** to top up
* the **Wholesale catalog** — your enrolled products at their tier prices, with a running order
  summary that shows the total, the saving versus retail, and their balance after the order
* **Reseller orders** — past wholesale purchases with the delivered keys and a **Copy all** button
* **API keys** — up to 5 active keys for ordering from their own system

The API keys are for the [Reseller API](/api-reference/reseller-api), which lets a reseller
automate catalog reads, balance checks, and ordering. You do not have to do anything to enable
it; it works for every active reseller.

## Dynamic Delivery: reselling someone else's stock

The relationship also works in the other direction. If **you** are an active reseller in another
Shoppex shop, you can sell that shop's products in your own store without holding any stock:
when a customer buys, Shoppex buys the item from your supplier automatically and hands the
supplier's codes straight to your buyer.

Set it up per product, in the product editor's **Supplier source** section:

1. Save the product first, then pick the **Supplier** — only shops where you are an active
   reseller with an enabled program are listed.
2. Pick the **Supplier product** it should be bought from, and a **Supplier variant** if the
   supplier's product has variants (or leave it on "Whole product").
3. Check the margin readout — **Your price**, **Purchase price**, **Margin**. It warns you when
   you would sell below the wholesale price you pay.
4. Leave **Automatic fulfilment** on. Turning it off pauses supplier purchases for that product
   without losing the configuration.

<Note>
  A product can have a supplier source **or** a dynamic webhook delivery URL, not both — only one
  automatic fulfilment mechanism can own a delivery. Remove the webhook URL under Delivery & Stock
  first.
</Note>

The purchase is paid from your reseller balance at the supplier, so keep that balance funded.
If the supplier cannot deliver — out of stock, program disabled, your account suspended, your
balance too low — Shoppex refunds your buyer for that line automatically and reports it. Watch
the `reseller:supplier_order.delivered` and `reseller:supplier_order.failed`
[webhooks](/api-reference/webhooks/events) if you want to be alerted.

Supply chains are allowed to nest — your supplier may itself be reselling — but only three shops
deep, and a shop can never be its own supplier.

## Reading the numbers

The **Overview** tab tracks the program: total, active, invited and applied counts,
**Revenue · 30d** and **Revenue · All Time** from completed wholesale orders with refunds
excluded, the spread of resellers across tiers, and your five biggest active accounts by
lifetime revenue. Suspended and rejected accounts are deliberately kept out of the leaderboard.

## Automating it

Everything on the enrollment side is available in the Developer API — list resellers, invite,
suspend, reinstate, read and update the program settings. See
[Resellers](/api-reference/resellers). Tier authoring and product enrollment stay in the
dashboard on purpose, so the price cascade has one source of truth.
