Skip to main content

Developer Quick Start

Integrate a licensed client with MyHoreca Licensing in under an hour.

1. Create product and key (Console)

  1. Open Vendor ConsoleProducts → create a product.
  2. Open the product → tab Keys → create a license and issue a key (plaintext is shown once).
  3. Optional: Product → Policy to review FeatureLimits; license detail to set custom data slots.
  4. Note the Management base URL and tenant from your deployment.

2. Choose an SDK

See the SDK matrix and SDK reference for language coverage.

Typical flow:

  1. Build a device identity: generate a fresh installation key on first run of each machine — never bake the private key into a golden image (Device Identity).
  2. Call activate / validate with the license key (or activation token).
  3. Cache the signed lease; refresh on heartbeat / expiry.
  4. Locally verify the lease via JWKS (next section) — ES256, not RSA-in-binary.
  5. Enforce entitlements (and optional custom data claims) from the verified payload — see Entitlements.

3. Local verify (JWKS)

Do not embed a Cryptolens-style RSA public key as the trust model. Fetch / cache Runtime JWKS, verify Compact JWS (MH-LEASE-V1), then enforce claims. Full narrative: Verify trust (JWKS).

StepAction
1Activate / refresh → receive leaseToken (Compact JWS)
2SDK loads JWKS from Runtime (cache TTL; one refresh on unknown kid; then fail closed)
3Call the SDK verify helper (VerifyLeaseAsync / verifyLease / …) with expected audience
4Only after isAccepted — read entitlements / optional custom data

Minimal .NET:

var verified = await client.VerifyLeaseAsync(
leaseToken,
new LeaseVerificationOptions { ExpectedAudience = "myhoreca.runtime" });
if (!verified.IsAccepted) { /* deny features */ }

Minimal TypeScript:

const verified = await client.verifyLease(leaseToken, {
expectedAudience: "myhoreca.runtime",
});
if (!verified.isAccepted) {
/* deny features */
}

Runnable samples already end with verify: SDK matrix → Examples.

4. Offline and floating (optional)

5. Next