Floating licenses
Let a team share a fixed number of seats across any number of machines. Check out a seat, keep it with a heartbeat and give it back when you close.
A floating license lets a group of people share a fixed number of seats. Ten seats can serve forty employees, as long as no more than ten use the app at the same moment. Nobody has to register machines in advance or free them by hand: a seat is taken when the app opens and returned when it closes.
When to use them
- Teams where people use the software at different times or on shared machines.
- Labs, classrooms and render farms where machines change often.
- A one device rule without device management: one seat means one running copy, and if a laptop is lost the seat comes back on its own.
If each customer uses the software on their own machines, the ordinary device limit described in Activating licenses is simpler.
Set up the plan
In the plan settings, set License Model to Floating (concurrent). Two other settings then take a new meaning:
| Setting | For a floating plan |
|---|---|
| Max Activations | How many seats can be in use at the same time. |
| Floating Timeout (minutes) | How long a seat stays taken without a heartbeat. The default is 30 minutes. |
The session lifecycle
- The app starts and checks out a seat. If one is free, it gets a session that lasts for the timeout.
- While the app runs, it sends a heartbeat every few minutes to extend the session.
- When the app closes, it checks the seat back in.
- If the app crashes or the machine goes offline, the heartbeats stop and the seat frees itself when the timeout passes.
Check out a seat
curl -X POST https://licenses.example.com/api/v1/license/floating/checkout \
-H "Content-Type: application/json" \
-d '{"license_key":"KG-ABCD2345-EFGH6789-JKLM2345-NPQR6789",
"identifier":"workstation-014","label":"Workstation 14"}'{
"success": true,
"data": {
"session_id": "a1f3c9d2-6b7e-4c1a-8f2d-3e5b9c0a7d46",
"expires_at": "2026-10-04T10:30:00Z",
"active_sessions": 7,
"max_sessions": 10
}
}When every seat is taken, the answer is 409 FLOATING_LIMIT. Tell the user the license is fully in use and offer to try again. Checking out again with the same identifier refreshes the existing session instead of taking a second seat.
Keep it with a heartbeat
curl -X POST https://licenses.example.com/api/v1/license/floating/heartbeat \
-H "Content-Type: application/json" \
-d '{"license_key":"KG-ABCD2345-EFGH6789-JKLM2345-NPQR6789","identifier":"workstation-014"}'Send it at about a third of the timeout, every ten minutes with the default, so one missed heartbeat does not cost the seat. If the session has already expired, the heartbeat answers 404; check out again to get a new one.
Give it back
curl -X POST https://licenses.example.com/api/v1/license/floating/checkin \
-H "Content-Type: application/json" \
-d '{"license_key":"KG-ABCD2345-EFGH6789-JKLM2345-NPQR6789","identifier":"workstation-014"}'Call it when the app quits. It is not a disaster if this never arrives, since the timeout catches it, but the seat is free for someone else straight away when it does.
Things to know
- Floating licenses need a network connection while the app runs, because the heartbeat holds the seat. For apps that spend long stretches offline, a device limit with offline tokens fits better.
- Checkout is atomic. Ten machines asking for the last seat at the same moment get exactly one yes.
- Floating combines with any license type, including a perpetual license with an update period. The seat is about who is using the app right now; the update period is about which versions the license covers. They do not affect each other.
Last updated October 4, 2026