minmaxkey

Use it

Use it

Two ways to do the same actions — the dashboard for point-and-click, the mmk-admin CLI for scripted automation. Everything the dashboard does, the CLI can do, and vice versa.

The dashboard (manual, point-and-click)

A small web UI at /admin on your server. No terminal, no API keys — log in with the password you set as MMK_ADMIN_PASSWORD when deploying.

Two levels:

  • Products (/admin) — everything you sell, at a glance: license types, licenses issued, active licenses, bound devices.
  • Product page — one product in detail, in three tabs:
  • Licenses — the list, 50 at a time. Above it: the issue license form (license type + optional customer email + button). Per license: reset seats (the "customer reinstalled Windows" button — frees every binding, key stays active) and revoke (kills the key; existing offline tokens keep working until the client next checks in).
  • License types — kinds, seats, durations; create form at the top.
  • Integrations — webhooks (endpoint URL, generated secret, delivery log, "send test event" button) and Payments — Stripe (webhook signing secret, the license type issued on checkout, price → license type mappings, plus test payment and test email buttons to verify the whole loop before a single real purchase).

Your first license in three steps: create a product → create a license type → issue a license key. The key appears on the page; give it to your customer.

The CLI (scripted)

mmk-admin wraps the admin API with Python's standard library. Set two env vars (server-side — never in client apps), then every dashboard action has a command:

alias mmk-admin="python scripts/mmk-admin.py"
export MMK_URL=http://localhost:8080
export MMK_ADMIN_TOKEN=<your MMK_ADMIN_TOKEN>
mmk-admin products create "PixelForge Pro" pixelforge-pro
mmk-admin license-types create 1 pro-monthly subscription --max-seats 1 --days 30
mmk-admin licenses issue 1 1 --email [email protected]
# 9TMC-5TS9-0MKQ-VS8A-87Q0
mmk-admin licenses list 1
# #1  9TMC-5TS9-0MKQ-VS8A-87Q0  active  seats=0/1  [email protected]
mmk-admin licenses revoke 1
mmk-admin webhook set 1 https://your-server.dev/hook
mmk-admin mail test --to [email protected]    # verify key email without a purchase

Recipes — the reason to script:

  • Issue a license when a payment arrives (in your Stripe webhook handler): mmk-admin licenses issue 1 1 --email <customer_email>
  • Revoke on a refund: mmk-admin licenses revoke <id>
  • Audit before shipping a release: mmk-admin licenses list 1 | grep -c revoked

The CLI is a thin wrapper — the server is the source of truth. Anything it doesn't cover, the raw API reference does.