Sign in with ADMIN_EMAIL and the server's
ADMIN_PASSWORD (or ADMIN_TOKEN /
ADMIN_API_KEY). In production the
published default password is refused — set a strong ADMIN_PASSWORD before
going live. The ERP's public validation endpoints stay open; only management actions
require this login.
Support desk operator (tickets only)
Operators see ONLY the ticket queue — no licenses, keys, payments, SMTP secrets or audit trail. Created by the admin on the Email Identities tab.
Support desk
Ticket
When
License
From
Subject
Status
Loading…
Hatke License Server
Access control for Hatke ERP — keys · tenants · payments · piracy kill-switch
checking…
Total licenses
–
Active (live)
–
Expired
–
Revoked
–
+ Generate / Issue a license key
Payment confirmation — auto-issue key
Check if a key is live
Licenses
License
Customer
Agency
Tier
Seats
Domain
Expires
Status
Bound / heartbeat
Actions
Loading…
Public key (set as LICENSE_PUBLIC_KEY on the ERP)
–
Copy this into the ERP's LICENSE_PUBLIC_KEY. Keys issued here verify against it.
Plan management
Plans
–
Active in checkout
–
Hidden
–
Monthly price range
–
Catalog sync
–
This catalog is the single source of truth: every ERP workspace prices from the signed snapshot served at /api/catalog and re-syncs within the hour. Edits apply at runtime — no redeploy.
Plan
Slug
Monthly
Annual
Seats
Projects
Tier
Flags
Status
Actions
Loading…
Edit changes every field — prices, seats, tier, feature flags — and applies to new quotes instantly. To replace a plan, edit it in place, or create the new one and deactivate the old. Deactivating hides it from checkout without touching existing licenses.
Offers & coupons
Offers
–
Running now
–
Total redemptions
–
Coupons are validated server-side at order time — the ERP checkout only displays them. Scope an offer to specific plans or cycles; inactive or out-of-window offers are hidden from every buyer automatically.
Code
Value
Applies to
Window
Caps
Used
Status
Actions
Loading…
The edit form shows a live discounted-price preview per plan before you save. Deactivate to stop a coupon without deleting its redemption history.
Operations overview
Licenses (live)
–
Workspaces live
–
Suspended
–
Piracy flags
–
Revenue (collected)
–
MRR (paid cohort)
–
Watchdog (dead)
–
Keys pending delivery
–
Manual payments
–
SMTP
–
Attention
Loading…
Pulls every tab's data into one screen: license lifecycle counts, workspace liveness from the fleet probe, control-plane suspensions, revenue and the ops inbox state. Anything needing a decision (expired keys, dead heartbeats, pending payments) is listed under Attention.
ERP Control
Licenses
–
Suspended
–
With overrides
–
Pending commands
–
SUSPEND is the reversible kill-switch: the ERP gates with a signed SUSPENDED verdict on its next phone-home (data + remaining paid time are preserved) and RESUME restores service with no buyer-side action. Feature/seat overrides ride the signed verdict too — no key reissue needed. QUEUED commands are delivered exactly once and executed vendor-signed inside the ERP.
License / agency
Domain
Tier
State
Control state
Actions
Loading…
The control file lives in config/control.json next to licenses.json. Every mutation lands in the Audit Trail tab with the operator's IP.
Email Logs
When
To
Subject
Result
Loading…
Every outbound send attempt (keys, receipts, renewal reminders, dunning, tickets, announcements) — including failures with the full SMTP error. Config/email-delivery.log keeps the last 1,000 entries. The banner above shows live SMTP health; press “Send test email” to verify now.
Support Tickets
Ticket
When
License
From
Subject
Status
Loading…
Buyers file tickets from their ERP (Settings → License → Contact support) or POST /api/support/ticket with their license key. Every reply emails the buyer in the branded template; the heartbeat watchdog + SMTP health banner keep problems detectable before buyers report them.
📣 Announcements
Branded template, sequential sends (SMTP-friendly), full result + audit entry. Buyers without an email on file are skipped and counted. “Anyone” sends to the addresses you type; “Custom HTML” drops your markup into the branded shell (logo + footer kept).
Email identities — multi-purpose SMTP
Routing — which mailbox sends what
Purpose
Profile
From header
Verified
Source
Loading…
noreply = automated buyer mail (keys, receipts, reminders, dunning, key re-send) · support = ticket ack/reply AND the inbound poller's mailbox · admin = internal team alerts. No profile for a purpose → the legacy EMAIL_SMTP_* env profile sends it, so nothing changes until you add one.
SMTP profiles
Profile
Host
Login
IMAP
Status
Loading…
Inbound support mail
checking…
The poller reads the support profile's IMAP settings (the “Receiving (IMAP)” block in its form — or SUPPORT_IMAP_* env). A buyer reply containing a ticket id reopens that ticket; fresh mail becomes a new ticket with an auto-ack, and the team gets the internal alert.
Support operators
Name
Email
Status
Last login
Loading…
Operators sign in on the login screen (“Support desk operator”) and can ONLY see and answer tickets — never licenses, keys, payments, broadcasts, SMTP passwords or the audit trail. Disable or delete one and their access dies on their very next click.
Key re-send requests (public two-step flow)
When
Email
License
Status
Confirmed
Loading…
Buyers who lost the delivery email call POST /api/support/key-resend → a 6-digit code is emailed (noreply profile) → they confirm with the code → the key email is re-sent. Codes expire in 15 minutes, max 3 requests/hour/email, 5 wrong attempts burn the code. Responses never reveal whether an email is a customer (anti-enumeration).
Audit Trail
When
Action
IP
Detail
Loading…
Every admin mutation (issue / revoke / renew / suspend / overrides / catalog edits / manual-payment approvals) plus the heartbeat-watchdog state transitions. Config/admin-audit.jsonl keeps the last 1,000 entries.
Orders
–
Paid
–
Revenue (collected)
–
MRR (paid cohort)
–
Keys delivered
–
Keys pending
–
Orders by plan
–
Checkout orders
Order
Plan
Amount
Status
Key delivery
Buyer
Domain
Created
Paid
Loading…
Key delivery shows whether the HSK key was minted for a PAID order (via the ERP verify call or a gateway webhook) or is still pending. Use the eye button on the Licenses tab to reveal a full key.
Payments hub
Every rupee in one ledger — gateway, plan and rail. Buyers who paid by UPI / QR / bank transfer land here with their transaction reference. Verify against your statement, then Approve to mint + email the license key, or Reject.
Collected
–
Pending approval
–
Auto vs manual
–
Live gateways
–
Collect directly — UPI / QR / BANK
Scan to pay (UPI intent)
Configure a UPI ID on the gateways tab
Loading rails…
The QR encodes a UPI intent with the amount and payee filled in — the buyer scans it in any UPI app. The order id travels in the intent, so the UTR they submit can be matched back here. Rendered on this server: a third-party QR image service would learn the payee and the amount of every sale.
Collected by gateway
Gateway / rail
Settles
Orders
Paid
Collected
Loading…
Collected by plan
Plan
Orders
Paid
Collected
Loading…
Every payment
Order
Source
Plan
Amount
Status
Txn ref
Buyer
Paid
Actions
Loading…
Payment gateways
Turn each gateway on, paste its merchant credentials, and tick the plans it is offered for. Secrets are never sent back to this page — a saved field shows only a mask, and re-saving the form with the mask in place leaves the stored secret untouched.
Loading…
A gateway is live when it is enabled and has whatever its mode needs. Only Auto gateways mint a key with nobody in the loop; Hosted and Manual ones need a webhook or your confirmation, and the label says so.
Heartbeat Watchdog
Flags every ACTIVE license whose ERP stopped phone-homing. Thresholds scale with the ERP poll cadence (LICENSE_POLL_INTERVAL_MINUTES, default 30): warn >2x, stale >4x, dead >8x. State changes are audit-logged to config/admin-audit.jsonl.
OK
–
Warn (>2x)
–
Stale (>4x)
–
Dead (>8x)
–
License
Customer
Agency
Tier
Domain
Last heartbeat
Silent
State
Loading…
Tenants
–
Live / active
–
Trial
–
Paid payments
–
Revenue (collected)
–
Keys delivered
–
Registered workspaces — central registry
Company / contact
Plan
Status
Domain
Registered (activation)
Last sync
Live since
License
Payments
Loading…
Every workspace the ERP registers lands here (POST /api/v1/subscribers/register). Registered = activation time; the first deployment heartbeat flips the tenant LIVE. Paid checkouts attach payment rows; the minted HSK key is linked on delivery. Revoke its key on the Licenses tab to cut off access (piracy kill-switch).
Deployments
–
Workspaces live
–
Piracy flags
–
No ERP control
–
Fleet — deployed ERP instances (super admin)
One row per issued key. Workspace data comes live from each ERP through the vendor control channel. RESET deletes that domain workspace so the buyer can re-register fresh — the key and its domain binding are NEVER reset. DEACTIVATE removes the key and hard-locks the app (piracy kill-switch).
License / tier
Domain
Workspace (live from ERP)
Heartbeat
Signals
Actions
Loading…
Piracy signals: DOMAIN_MISMATCH = key running on a host it is not bound to · SURFACES n = key seen on n distinct machines in 24h (auto-revokes past the limit) · DEAD = no heartbeat beyond 8x poll cadence · NO-ERP = the ERP is unreachable or its LICENSE_ADMIN_TOKEN is missing/mismatched.