> For the complete documentation index, see [llms.txt](https://docs.licensespring.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.licensespring.com/floating-server/floating-server-v1/best-practices/floating-features.md).

# Floating Features

### Floating Features

* Floating feature registration using `/featureRegister` and `/check_license_feature`
* Floating feature release using `/featureRelease` and `/feature_release`
* Releasing all floating feature registrations using `/featureRelease/all` and `/feature_release/all`

### Offline Floating Feature

Starting from release v1.4.11, the floating server supports offline floating features. This allows customers to add offline floating features to a product and licenses built for that product. These can then be imported into the floating server, enabling registration and release of users entirely offline on premises.

To add these features to a product, navigate to the product within the vendor platform, select the "Features" tab, and click "Add Product Feature". In the popup window, after specifying the feature's name, code, and other details, check the "Offline Floating Feature" checkbox.

![Offline Floating Feature option in the feature creation form](https://api.archbee.com/api/optimize/IJdHyjBlO9LOXOrDnWJTx/vvWokL6xPVPadp6mSukXN_image.png)

The API endpoints associated with floating features are described below.

***

### Feature Register

Registers a user to a specific feature of a license on the Floating Server. Requires a username, product code, and feature code.

Endpoint POST <http://localhost:8080/api/v4/featureRegister>

Examples

{% tabs %}
{% tab title="javascript" %}
{% code title="featureRegister (JS)" %}

```javascript
var myHeaders = new Headers();
myHeaders.append("Accept", "application/json");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "product": "test",
  "feature": "testingFeature",
  "user": "testUser",
  "os_hostname": "",
  "ip_local": "0.1.1.1",
  "user_info": "",
  "registered_at": "2024-08-26T12:21:59.776731-07:00",
  "borrowed_until": "0001-01-01T00:00:00Z"
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("http://localhost:8080/api/v4/featureRegister", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

{% endcode %}
{% endtab %}

{% tab title="curl" %}
{% code title="featureRegister (curl)" %}

```bash
curl -X POST "http://localhost:8080/api/v4/featureRegister" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
  "product": "test",
  "feature": "testingFeature",
  "user": "testUser",
  "os_hostname": "",
  "ip_local": "0.1.1.1",
  "user_info": "",
  "registered_at": "2024-08-26T12:21:59.776731-07:00",
  "borrowed_until": "0001-01-01T00:00:00Z"
}'
```

{% endcode %}
{% endtab %}
{% endtabs %}

Possible responses

* 200 (example payload)

```json
{
  "product": "test",
  "feature": "testingFeature",
  "user": "testUser",
  "os_hostname": "",
  "ip_local": "0.1.1.1",
  "user_info": "",
  "registered_at": "2024-08-26T12:21:59.776731-07:00",
  "borrowed_until": "0001-01-01T00:00:00Z"
}
```

* 400 (feature not found)

```json
{
  "code": "feature_not_found",
  "message": "Feature color not found for product test",
  "status": 400
}
```

Request body parameters

* product (required, String) — product code of the target product
* feature (required, string) — feature code of the target feature
* user (required, string) — name or id of the user to be registered
* os\_hostname (required, string)
* ip\_local (required, string)
* user\_info (required, string)
* registered\_at (required, string)
* borrowed\_until (required, string)

***

### Feature Release

Releases a user who has been registered to a specific feature of a license.

Endpoint POST <http://localhost:8080/api/v4/featureRelease>

Examples

{% tabs %}
{% tab title="javascript" %}
{% code title="featureRelease (JS)" %}

```javascript
var myHeaders = new Headers();
myHeaders.append("Accept", "application/json");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "product": "test",
  "feature": "testingFeature",
  "user": "testUser",
  "os_hostname": "",
  "ip_local": "0.1.1.1",
  "user_info": "",
  "registered_at": "2024-08-26T12:21:59.776731-07:00",
  "borrowed_until": "0001-01-01T00:00:00Z"
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("http://localhost:8080/api/v4/featureRelease", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

{% endcode %}
{% endtab %}

{% tab title="curl" %}
{% code title="featureRelease (curl)" %}

```bash
curl -X POST "http://localhost:8080/api/v4/featureRelease" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
  "product": "test",
  "feature": "testingFeature",
  "user": "testUser",
  "os_hostname": "",
  "ip_local": "0.1.1.1",
  "user_info": "",
  "registered_at": "2024-08-26T12:21:59.776731-07:00",
  "borrowed_until": "0001-01-01T00:00:00Z"
}'
```

{% endcode %}
{% endtab %}
{% endtabs %}

Possible responses

* 200

```
"feature_released"
```

* 400 (feature not found)

```json
{
  "code": "feature_not_found",
  "message": "Feature color not found for product test",
  "status": 400
}
```

Request body parameters

* product (required, String) — product code of the target product
* feature (required, string) — feature code of the target feature
* user (required, string) — name or id of the user to be released
* os\_hostname (required, string)
* ip\_local (required, string)
* user\_info (required, string)
* registered\_at (required, string)
* borrowed\_until (required, string)

***

### Release All

Releases all users registered to all features across all licenses.

Endpoint GET <http://localhost:8080/api/v4/featureRelease/all>

Examples

{% tabs %}
{% tab title="javascript" %}
{% code title="featureRelease/all (JS)" %}

```javascript
var myHeaders = new Headers();
myHeaders.append("Accept", "application/json");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({});

var requestOptions = {
  method: 'GET',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("http://localhost:8080/api/v4/featureRelease/all", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

{% endcode %}
{% endtab %}

{% tab title="curl" %}
{% code title="featureRelease/all (curl)" %}

```bash
curl -X POST "http://localhost:8080/api/v4/featureRelease/all" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{}'
```

{% endcode %}
{% endtab %}
{% endtabs %}

Possible responses

* 200 (empty string)

```
""
```

***

### LicenseSpring-Compatible Floating Endpoints (since v1.6.2)

To align with LicenseSpring’s API, three endpoints were added with equivalent behavior but LicenseSpring-style routes.

* /check\_license\_feature — equivalent to /featureRegister (register user to a feature)
* /feature\_release — equivalent to /featureRelease (release a registered user)
* /feature\_release/all — equivalent to /featureRelease/all (release all registrations)

#### Feature Register (LicenseSpring-compatible)

Endpoint POST <http://localhost:8080/api/v4/check\\_license\\_feature>

Examples

{% tabs %}
{% tab title="javascript" %}
{% code title="check\_license\_feature (JS)" %}

```javascript
var myHeaders = new Headers();
myHeaders.append("Accept", "application/json");
myHeaders.append("Content-Type", "application/json");

var raw = JSON.stringify({
  "product": "test",
  "feature": "testingFeature",
  "user": "testUser",
  "os_hostname": "",
  "ip_local": "0.1.1.1",
  "user_info": "",
  "registered_at": "2024-08-26T12:21:59.776731-07:00",
  "borrowed_until": "0001-01-01T00:00:00Z"
});

var requestOptions = {
  method: 'POST',
  headers: myHeaders,
  body: raw,
  redirect: 'follow'
};

fetch("http://localhost:8080/api/v4/check_license_feature", requestOptions)
  .then(response => response.text())
  .then(result => console.log(result))
  .catch(error => console.log('error', error));
```

{% endcode %}
{% endtab %}

{% tab title="curl" %}
{% code title="check\_license\_feature (curl)" %}

```bash
curl -X POST "http://localhost:8080/api/v4/check_license_feature" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
  "product": "test",
  "feature": "testingFeature",
  "user": "testUser",
  "os_hostname": "",
  "ip_local": "0.1.1.1",
  "user_info": "",
  "registered_at": "2024-08-26T12:21:59.776731-07:00",
  "borrowed_until": "0001-01-01T00:00:00Z"
}'
```

{% endcode %}
{% endtab %}
{% endtabs %}

Responses and request parameters are the same as /featureRegister.

#### Feature Release (LicenseSpring-compatible)

Endpoint POST <http://localhost:8080/api/v4/feature\\_release>

Examples

{% tabs %}
{% tab title="javascript" %}
{% code title="feature\_release (JS)" %}

```javascript
/* Example request body is identical to /featureRelease; same request flow */
```

{% endcode %}
{% endtab %}

{% tab title="curl" %}
{% code title="feature\_release (curl)" %}

```bash
curl -X POST "http://localhost:8080/api/v4/feature_release" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{
  "product": "test",
  "feature": "testingFeature",
  "user": "testUser",
  "os_hostname": "",
  "ip_local": "0.1.1.1",
  "user_info": "",
  "registered_at": "2024-08-26T12:21:59.776731-07:00",
  "borrowed_until": "0001-01-01T00:00:00Z"
}'
```

{% endcode %}
{% endtab %}
{% endtabs %}

Responses and request parameters are the same as /featureRelease.

#### Release All Features (LicenseSpring-compatible)

Endpoint GET <http://localhost:8080/api/v4/feature\\_release/all>

Examples

{% tabs %}
{% tab title="javascript" %}
{% code title="feature\_release/all (JS)" %}

```javascript
/* Same behavior as /featureRelease/all; releases all floating feature registrations */
```

{% endcode %}
{% endtab %}

{% tab title="curl" %}
{% code title="feature\_release/all (curl)" %}

```bash
curl -X POST "http://localhost:8080/api/v4/feature_release/all" \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{}'
```

{% endcode %}
{% endtab %}
{% endtabs %}

Responses are the same as /featureRelease/all.

***

If you need the examples in another language or format added as tabs, tell me which language(s) and I'll add them.


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.licensespring.com/floating-server/floating-server-v1/best-practices/floating-features.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
