Documentation menu▾

Licensing models

How to sell your software with Keygate: subscriptions, perpetual licenses with or without a maintenance period, free trials, device limits and team seats.

A product can be sold in more than one way at the same time. You might offer a monthly subscription, a yearly one and a perpetual license side by side, each with its own price and limits. In Keygate each of these is a plan.

Plans

Create plans under Plans in the dashboard. The settings that matter most:

SettingWhat it controls
License Typesubscription, perpetual or trial. The sections below explain each.
Billing IntervalMonthly or yearly, for subscriptions.
Max ActivationsHow many devices or users one license can be active on at once.
Max SeatsHow many team members a license can hold, for team products.
Grace DaysHow long a license keeps working after its end date, to give a late renewal time to arrive.
Check in intervalHow many days your app may run offline before it must check in again.
Stripe priceThe Stripe price a customer pays for this plan.
FeaturesWhat the plan unlocks. See Features and usage limits.

Every plan also gets a checkout link of its own, which is how customers buy it. The Stripe guide covers that part.

Subscriptions

The customer pays every month or every year, and the license stays valid as long as they do. Keygate follows the subscription in Stripe: a renewal moves the license's end date forward, a failed payment marks it past due, and a cancellation lets it run to the end of the period already paid for.

Your app does not need to know about any of this. It asks whether the license is valid and gets a yes or a no, along with the date the license currently runs to.

Perpetual licenses

The customer pays once and owns the license for good. It has no end date and never needs renewing. This suits apps people buy the way they used to buy boxed software.

Perpetual with an update period

This is the model JetBrains made familiar. The customer pays once and keeps the version they have forever, but new releases are only included for a period, typically a year. After that the app keeps working; it just stops receiving updates until the customer renews.

To set it up on a perpetual plan:

  • Set Updates Included (days) to the length of the update period that comes with a purchase, for example 365.
  • Set Renewal Length (days) and a Stripe Renewal Price ID, a one time price, so customers can extend the period from the customer portal.

Each license then carries an updates_until date. Keygate's update feeds and download endpoint only offer releases published before it, and the signed token your app receives carries the same date, so the app can enforce it too.

Trials

A trial plan gives full access for a set number of days, then stops. There are two ways to use it.

  • Free trial without payment. Issue trial licenses from the dashboard or from your backend through the admin API. When the days run out, the license expires and your app sees it.
  • Trial that turns into a subscription. Sell the plan through Stripe with a trial period. The customer starts on the trial, Stripe charges the card when it ends, and the license becomes an active subscription. If the charge fails, the license goes past due like any other subscription.

A trial that expired can be given more time: set a new end date on the license in the dashboard and it starts working again.

Devices and seats

Not sure which limit fits your product? Node locked vs floating compares the options.

Device limits

Max activations caps how many devices can use one license at the same time. Activating a device the license already knows does not use another slot. When all slots are taken, a new activation is refused, and the customer frees one by deactivating an old device, either from your app or from the customer portal.

Floating licenses

If people share a pool of seats across many machines, use a floating license instead: any machine can take a seat, and the seat comes back when the app closes or stops checking in. See Floating licenses.

Team seats

For products sold to teams, max seats sets how many people a license can hold. The customer adds and removes members in the customer portal, and invited members receive an email to join. The product type decides which limit applies: desktop products count devices, SaaS products count seats, and hybrid products count both.

License status

Every license has a status. Your app mostly cares whether the license works, and the table says when it does.

StatusMeaningWorks?
activePaid for or issued, and in use.Yes
trialingOn a trial.Yes
past_dueA subscription payment failed and Stripe is retrying it.Yes, while reminders go out
canceledThe subscription was canceled.Until the end of the paid period
expiredThe end date and the grace days have passed.No
suspendedPaused by an admin, or the subscription was paused in Stripe.No, until reinstated
revokedSwitched off for good, for example after a full refund.No

Active, trialing and past due licenses keep working for the plan's grace days after their end date. A canceled license stops exactly at its end date, since the customer chose to leave.

Changing plans

Customers who pay through Stripe change plans in the customer portal, for example from monthly to yearly. Stripe works out the difference and Keygate moves the license to the new plan.

For licenses that are not billed by Stripe, an admin can change the plan from the license page in the dashboard. Licenses billed by a Stripe subscription can only be changed through Stripe, so the two never disagree about what the customer is paying for.

Last updated October 4, 2026