Apps & key types
An app is one thing you sell. A key type is a variant of that app — typically differing on activation limit, duration, or price. Every license belongs to exactly one app and one key type.
Each app has:
| Field | Notes |
|---|---|
displayName | Shown in checkout and on the dashboard |
productId | URL-safe slug, derived from the key prefix |
keyPrefix | 4 uppercase alphanumerics; appears at the start of every license key |
brandColor | Used in the paywall and the hosted checkout success page |
The key prefix is globally unique across all Keylight accounts — pick something distinctive. Typical choices: ACME, GEMS, BRY7.
Adding an app
Section titled “Adding an app”From the dashboard go to Apps → Add app, fill in a display name and a 4-character key prefix, and submit. If the prefix is already taken (globally), the form returns immediately — pick another.
If you’ve linked Stripe Connect, Keylight also creates a matching Stripe product on your connected account so checkout sessions can reference it.
Plan limits
Section titled “Plan limits”Your Keylight plan caps the number of apps per account:
| Plan | Apps |
|---|---|
| Free | 1 |
| Starter | 3 |
| Pro | 10 |
| Enterprise | Custom |
See Billing & plans.
Key types
Section titled “Key types”A new app starts with a single key type named Default (3 activations, no expiry). Most apps are fine with just that. Add more when you want to sell:
- A time-limited version (e.g. 1-year vs lifetime).
- A device-limited version (e.g. Single vs Family pack).
- A free trial key type with reduced features (enforce in your app — Keylight just issues the key).
Trial length and free tier
Section titled “Trial length and free tier”The Access card carries the two settings that decide what someone gets before they buy:
- Free tier — let customers use the app without a purchase.
- Trial length — how long a new install runs before it needs a licence.
Both are delivered to your app by the SDK, on calls it already makes, so a change reaches installs on their next check with no release. 0 means trials are off, and is a real setting — different from never having set one, which leaves whatever length your app was built with in charge.
Two things worth knowing before you change it on a shipped app:
- It applies to new installs. Devices that already started a trial keep their original start date; changing the number never restarts or extends a trial in progress.
- Turning trials on later gives nothing to old installs. The window is measured from the device’s first launch, so an install older than the length you set gets a trial that has already expired. Set a length that covers their age if you want them to get one.
The control is switched off for apps integrated over the API rather than an SDK — those settings only travel on the SDK surface, and an API integration runs its own pre-purchase policy.
Fields
Section titled “Fields”| Field | Required | Notes |
|---|---|---|
| Display name | yes | Shown on checkout and the dashboard |
| Activation limit | yes | Max concurrent devices per license |
| Duration | no | Empty = lifetime; otherwise license expires after the selected number of days, weeks, months, or years |
| Price | no | Only relevant if you sell via Stripe Connect |
| Currency | no | usd, eur, gbp |
| App flags / entitlements | no | Comma-separated flags your app can read from the SDK |
When you set a price and currency, Keylight creates a corresponding Stripe price on your connected account. Editing a price archives the old Stripe price and creates a new one — existing active subscriptions aren’t affected.
Adding / editing / deleting
Section titled “Adding / editing / deleting”Go to Apps → [app name] → Key types.
- Add: click Add key type, fill in the form, save. The key type ID (used in URLs and API calls) is derived from the display name.
- Edit: inline on each card.
- Delete: inline delete button with confirmation. Deletion is permanent. Licenses already minted against this key type keep working, but no new ones can be issued.
How the SDK picks a key type
Section titled “How the SDK picks a key type”The SDK doesn’t select a key type. Key types are a server-side concept — the license record carries its key type config, and /activate enforces the activation limit and duration directly from the record.
If you want your app to behave differently for different key types, add App flags / entitlements such as beta, early_access, or team. The Swift SDK exposes those flags through LicenseManager.hasEntitlement(_:), so your app can show badges or unlock features without parsing license keys.
Related
Section titled “Related”- Minting licenses — issuing keys by hand.
- App status — active, testing, and deactivated states.
- Key types — deeper dive on what they represent.
- Connect onboarding — how pricing flows into Stripe checkout.