LicenPro
DocumentationQuick start

Quick start

LicenPro is a closed loop: you configure products and licenses in the vendor dashboard, you distribute signed license.bin files and license keys to customers, and your shipped app enforces entitlements with the .NET SDK (public-key verification plus optional calls to the hosted REST API). This page follows that loop in the same order the dashboard and SDK expect—organization first, then product, keys, license, and code.

Mental model

Organization is your tenant boundary—members, invitations, and product ownership. Product is the anchor for releases, RSA signing, API credentials, entitlements, and every license. The dashboard signs licenses with a server-side private key; the SDK only needs the product public key, the customer license key, and license.bin. Online validation and automation use https://licenpro.runasp.net/api (or your self-hosted API base)—always with the /api suffix.

End-to-end vendor workflow

The path below matches System overview and the live dashboard at app.licenpro.tech. Complete each phase before the next; skipping RSA keys or a software release blocks license issuance.

  1. Account & organization — sign in and create or join a tenant.
  2. Product & initial release — define the app you license and its first version line.
  3. RSA keys — generate signing material per product (mandatory before licenses).
  4. Licenses — issue keys, export license.bin, set seats, type, and entitlements.
  5. SDK bootstrap — point the client at your API, load settings, validate in the app.
  6. Optional runtime — activations, sessions, webhooks, and REST automation.

1. Sign in and create an organization

Register or sign in at app.licenpro.tech, then create or join an organization—your tenant for members, products, and licenses. If a teammate already invited you, accept that invite instead of creating a second org.

Full walkthrough (Identity & Branding wizard, workspace tabs, roles, invitations, API): Create your first organization. Platform reference: Organizations · Organizations API.

2. Create your first product and release

A product is the application you license. Every RSA key pair, API credential, release line, entitlement, and license belongs to one product id. From the sidebar open ProductsCreate Product, or create from the organization Products tab.

  • Product name (required) — unique label in your account.
  • Initial version (required on create) — first software release (semver, build number, or custom format). Licenses and update checks target a softwareReleaseId.
  • Release channel — e.g. Stable, Beta, Alpha, RC—so you can separate production and preview builds.
  • Product access typeAssociated (licenses tied to specific organizations) or Opened (any valid license holder).
  • Description & image (optional) — internal documentation and branding.

After save you enter the product workspace (overview, features, entitlements, releases, licenses, users, access matrix, audit). Field-level walkthrough: Create your first product · Products · Releases.

3. Generate RSA keys (before any license)

Each product has its own signing identity. From the product workspace open Settings / keys and generate an RSA key pair. LicenPro keeps the private key on the server to sign license.bin; your app and SDK embed only the public key for verification.

Do not ship the private key

Never paste the private key into customer binaries, config files, or source control. Rotation requires re-issuing licenses signed with the new pair.

Full guide: RSA keys & signing · REST: POST /api/Products/{id}/keys/generate · GET .../keys/public.

4. Copy product API credentials

Runtime calls from your SDK or backend (for example POST /api/Licenses/validate) use the product X-API-KEY header—not your personal login JWT. Create or copy this key from the product’s API / credentials area in the dashboard (or account pages that list product keys). Store it in server config or a vault; only embed it in end-user apps when you intentionally allow anonymous product API calls from the client.

See Credentials at a glance on the system overview and Licenses API.

5. Issue a license and distribute artifacts

Open the product → LicensesCreate License. Pick the software release, license model (perpetual, trial, subscription, floating, node-locked), seats, expiry, and optional entitlements.

After saving, distribute to customers:

  • license.bin — signed payload; download from license details (SDK offline path).
  • License key — human-readable key (e.g. LP-…) for activation UI.
  • Public key — PEM or Base64 export from product keys (SDK verification).

Step-by-step: Generate your first license. Model-specific rules: sidebar License models · Licenses (vendor).

6. Configure the SDK (before validation)

Settings resolve in this order:

  1. Explicit SdkConfiguration.Initialize(...) if you call it in code.
  2. Otherwise the first file found in the app directory: licenpro.settings.json, then appsettings.json (optional nested LicenPro section).
  3. Defaults apply if nothing is found—override ServerBaseEndpoint for staging or self-hosting.
// Typical explicit bootstrap (any host)
using LicenPro.Models.Utils;
using LicenPro.SDK;

var settings = new SdkSettings {
    // Absolute URL ending with /api
    ServerBaseEndpoint = "https://licenpro.runasp.net/api"
};
SdkConfiguration.Initialize(settings);
Common mistake

Omitting /api or pointing at a marketing domain instead of the API host breaks validation, sessions, and update checks. Match the URL to your deployment.

7. Desktop bootstrap and validation

For WinForms, WPF, or other desktop hosts, call SdkBootstrap.OnApplicationStartup() once at process entry (before Application.Run). It loads default JSON settings and applies any staged product update from a prior run.

using LicenPro.SDK.AppHosting;

ApplicationConfiguration.Initialize();
SdkBootstrap.OnApplicationStartup();
Application.Run(new MainForm());

Use LicenseClient with LicenseClientOptions: paths to license.bin, public key, license key, optional expected type, optional product id for updates, and expiry-warning tuning. Successful validation can populate an on-disk license cache for LicenseClient.TryAutoValidateAsync on the next launch.

Deep dive: .NET SDK · Configuration & bootstrap · LicenseClient lifecycle · WinForms · WPF.

8. Optional: activations, sessions, automation

When the SDK registers activations or sessions, dashboard Activations and Sessions reflect seat usage—important for floating licenses, compliance, and support. Webhooks push license lifecycle events to your backend; the REST API provisions or retires licenses from CI or billing with your operator JWT where RBAC allows.

Sessions & activations · Webhooks · REST API overview · Hosted API

Continue learning