Licensing built for Python & C++ developers

Protect your software
in 60 seconds.

vshll is a modern licensing platform for Python and C++ apps. Generate keys, lock to hardware, manage activations — all from a beautiful dashboard.

license_check.py
import requests

r = requests.post("https://vshll.lol/api/public/v1/validate", json={
    "api_key": "app_xxxxxxxxxxxxxx",
    "license_key": "XXXX-XXXX-XXXX-XXXX-XXXX",
    "hwid": "machine-fingerprint",
})

if r.json()["valid"]:
    print("✓ License active")
else:
    exit("Invalid license.")

Everything you need to ship licensed software.

Stop hacking together your own auth server. vshll handles it.

License keys

Generate cryptographically random keys with expirations and seat limits.

Hardware locking

Bind licenses to machine HWIDs. Stop key sharing dead in its tracks.

Real-time activations

Watch which machines come online. Ban or reset with one click.

Blazing fast API

Sub-50ms validation from anywhere on the planet. Edge-deployed.

Secure by default

Per-app API keys, RLS-isolated data, signed validation responses.

Python & C++ ready

Drop-in snippets for both languages. No SDK install required.

Three steps to launch.

01

Create an app

Register your Python or C++ project. Get a unique API key instantly.

02

Issue licenses

Generate one key or a thousand. Set expirations and HWID limits.

03

Validate in code

Drop our snippet into your build. Done.

Integrate anywhere.

PythonPOST /api/public/v1/validate
import requests

r = requests.post(
    "https://vshll.lol/api/public/v1/validate",
    json={
        "api_key": "YOUR_APP_API_KEY",
        "license_key": user_key,
        "hwid": get_hwid(),
    },
    timeout=5,
)
data = r.json()
if not data["valid"]:
    raise SystemExit(data["error"])
C++POST /api/public/v1/validate
#include <cpr/cpr.h>
#include <nlohmann/json.hpp>

auto r = cpr::Post(
  cpr::Url{"https://vshll.lol/api/public/v1/validate"},
  cpr::Header{{"Content-Type","application/json"}},
  cpr::Body{nlohmann::json({
    {"api_key","YOUR_APP_API_KEY"},
    {"license_key", userKey},
    {"hwid", getHwid()}
  }).dump()}
);
auto j = nlohmann::json::parse(r.text);
if (!j["valid"]) std::exit(1);