Licenses & HWID

How keys are created, redeemed, bound to hardware, and reset — the full lifecycle of a Quark license from generation to the moment a buyer runs the script.

A license (also called a key) is the credential a buyer pastes into their executor as script_key. It is the thing the loader authenticates against every time the script runs. Licenses live in the website database — the single source of truth — so whether you create, pause, or ban a key from the software, the dashboard, or the Discord bot, the change syncs to all three instantly.

Every license belongs to exactly one key system. A key generated under one key system is meaningless to another. If you run multiple products, each has its own pool of licenses, its own bot, and its own loader URL.

Creating licenses

Open the Key System tab in the Quark software, select the key system you want to issue keys for, and use one of three creation methods depending on how you sell.

Random single key

Generate one license with a randomly-generated value. This is the fastest path when you have just made a sale and want to hand a fresh key to a single buyer. Set its status and expiry at creation, then copy it out.

Manual key

Add a key with a value you choose yourself. Use this when you want human-readable or branded keys (for example a fixed prefix per reseller), or when you are migrating keys in from a system you ran previously. The value must be unique within the key system.

Bulk generation

Generate thousands of licenses at once. This is built for reseller drops, giveaways, and marketplace stock where you need a large batch of unused keys up front. Each generated key is independent — binding, banning, or resetting one never touches the others.

Bulk-generated keys are real, live licenses the moment they exist. Treat the exported list like cash: anyone holding a value can redeem it until you pause or ban it.

Lifetime vs expiring

Quark sells at $2/month or $5 lifetime, and licenses mirror that model:

The lifetime-vs-monthly distinction also affects the Account Manager: monthly-key users are capped at 5 saved Roblox accounts, while lifetime and staff accounts are unlimited.

License statuses

Every license is always in exactly one of four states. The loader only returns the real script for an active key; the other three all block delivery.

StatusLoader behaviorMeaning & typical use
activeAuthenticates and returns the scriptThe normal working state. A valid buyer with a matching HWID gets their obfuscated script.
pausedRejected — temporarilyA reversible hold. Use it for a chargeback under review, a suspected sharer you are still investigating, or a buyer between billing cycles. Flip it back to active to restore access with the HWID bind intact.
bannedRejected — permanentlyA punitive, permanent block for abuse, key-sharing, or fraud. The key is dead but kept on record so the value can never be reused.
expiredRejected — time is upAn expiring key whose date has passed. Re-issue or extend it to bring the buyer back.

Redeeming a key through the bot

When a buyer has a raw key value, they claim it in your Discord server with the bot. This is what ties the license to a person and gives them access to everything they are entitled to.

1
The buyer runs /redeem in your server and provides their key value.
2
The bot validates the key against the website API and links it to their Discord account, so you always know which user owns which license.
3
The bot grants the buyer role you configured for the key system, unlocking your customer channels.
4
The bot returns the buyer's personalized loader — the two-line snippet with their key already filled in, ready to paste into an executor.

Redeeming is a link-and-unlock step, not the same thing as HWID binding. The hardware bind happens later, on the first actual execution of the script.

Buyers are always whitelisted. A valid active key is a whitelist entry — there is no separate approval queue to babysit. The bot also exposes /whitelist, /unwhitelist, and /whitelisted-users if you ever need to manage entries manually.

The loader a buyer pastes

After redeeming, the buyer's loader looks like this (their real key value replaces the placeholder, and the id is your key system's published loader id):

script_key = "THEIR-LICENSE-KEY"
loadstring(game:HttpGet("https://quarkexploits.com/raw/ID.lua"))()

The loader stub reads the global script_key and aborts immediately if it is missing. It then collects the machine's HWID plus player, game, and hardware info and POSTs it all to /api/v1/loader/auth for validation. The real script source is never present in that public URL — the server only returns it after the key and HWID check out.

HWID binding on first run

HWID is a hardware identifier unique to the buyer's machine. Binding is what makes a Quark key personal rather than a password anyone can copy around.

This mismatch rejection is the anti key-sharing mechanism. A single key can only ever run on one machine at a time, so a leaked or resold key does not multiply into free copies of your product.

Resetting a HWID

Legitimate buyers replace hardware, reinstall Windows, or switch PCs. When that happens their key is still bound to the old machine and will reject the new one, so you clear the bind and let it re-bind on the next run.

There are two ways to reset:

/reset has a cooldown. This is deliberate: without it, a sharer could reset the bind on every run and defeat the hardware lock entirely. The cooldown keeps resets to the honest new-PC use case. If a buyer is genuinely stuck inside the cooldown window, a staff member can reset from the dashboard.

What blocks the script, at a glance

The loader returns the real script only when all of the following hold. Any single failure ends in a rejection and no source is delivered:

Every authentication also fires a Discord webhook server-side, so you get a log of who ran what without the webhook URL ever appearing in code the buyer can see. Combined with the HWID lock and server-gated delivery, that logging is the real security model — see the Loader & Delivery and Obfuscator pages for how the script itself is protected once it reaches the machine. To be honest about the limits: no protection running inside an executor is truly unbreakable — the point is to make sharing and dumping costly, not impossible.

Related bot commands

Several bot commands touch licenses directly. Toggle any of them in the software and the change auto-syncs to the running bot:

Next: read The Loader & Delivery to see exactly how /api/v1/loader/auth validates a run and streams back the obfuscated script.