Serials (simple)
Use Serials fulfillment mode for Steam keys, gift codes, beta access codes, and other one-time codes buyers paste elsewhere.Uploading
Keys have their own page, not a tab on the product. Open the product, go to Delivery & Stock, and choose Manage keys. That takes you to/products/:id/serials, where the whole pool lives.
On that page:
- Add keys opens a box that takes one key per line.
- Import reads a
.txtor.csvfile and loads it into the same box, again one key per line.
Hand-out order
By default the pool goes out oldest key first: the first key you added is the first one a buyer gets. Key Hand-Out Order on the product’s Delivery & Stock tab changes this:
The setting governs both ways a key leaves the pool: the automatic hand-out when a payment completes, and a key you claim yourself. On the API the field is
serial_delivery_order, with the values FIRST, LAST, and RANDOM.
Replacements
If a buyer reports an invalid or already-used code, open the order and choose Issue Replacement from its actions menu. You can add a reason, which is kept with the order. The action is offered only when all three are true:- the order is
COMPLETED, - it holds exactly one product,
- and that product’s mode is Serials.
Taking a replacement back
Issued the wrong key, or issued one twice? For 30 minutes after issuing it, the delivered keys on the order carry an Undo Replacement button that takes it off the order again. It is refused once the buyer has actually seen the delivery — opened the keys on their order page, or downloaded them — because by then the undo would take back something the buyer already has. What the buyer has read is theirs. A key that came from the pool goes back into the pool, so it sells again. Two exceptions keep their distance from your stock:- A key that already went out in an email is removed from the order but not restocked. The email carries it verbatim and cannot be recalled.
- A hand-typed key is removed and nothing is restocked, because it never came from the pool.
Licenses (advanced)
The Licenses system goes far beyond serials. Each license is its own object with:- Status:
ACTIVE,SUSPENDED,REVOKED, orEXPIRED. Change it at any time. - HWID binding: bind a license to the first machine that activates it. Activations from other machines fail unless you reset the HWID.
- IP locks: restrict a license to a single IP or range.
- Expiration: licenses can be perpetual or expire on a date.
- Event audit trail: every license validation (successful or failed), HWID change, IP lock change, status change, and expiration extension is logged.
Where to find it
The full licensing UI lives at/licenses in the dashboard, separate from regular products.
Hardware-locked licenses
When a buyer activates a license through your software, your client sends the HWID toPOST /dev/v1/licenses/validate. Shoppex either:
- accepts and binds the HWID if the license is unbound, or
- accepts if the HWID matches the bound one, or
- rejects if the HWID does not match.