Designed by developers for developers: Integration in minutes
Powerful analytics to understand your business better
No forced large packages. Start small, scale as you grow with our pay-as-you-go model
Two simple steps to protect your software
// License key provided by your end user
const userLicenseKey = getUserLicenseKey();
const productName = 'Your Product Name';
const instanceId = generateInstanceId();
fetch('https://api.licenflow.com/api/v1/validate-license', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
license_key: userLicenseKey,
product: productName,
instance_id: instanceId,
feature_used: 'Core Application' // Optional: Track which feature is being used
})
})
.then(res => res.json())
.then(data => {
if (data.valid) {
// License is valid - start your application
startApplication();
} else {
// Show error to user
showLicenseError(data.message);
}
});
const axios = require('axios');
// Get license key from your end user
const userLicenseKey = getUserLicenseKey();
const productName = 'Your Product Name';
const instanceId = generateInstanceId();
const response = await axios.post(
'https://api.licenflow.com/api/v1/validate-license',
{
license_key: userLicenseKey,
product: productName,
instance_id: instanceId,
feature_used: 'Core Application' // Optional: Track which feature is being used
}
);
if (response.data.valid) {
// License is valid - start your application
startApplication();
} else {
// Show error to user
showLicenseError(response.data.message);
}
// Get license key from your end user
$userLicenseKey = getUserLicenseKey();
$productName = 'Your Product Name';
$instanceId = generateInstanceId();
$data = [
'license_key' => $userLicenseKey,
'product' => $productName,
'instance_id' => $instanceId,
'feature_used' => 'Core Application' // Optional: Track which feature is being used
];
$ch = curl_init('https://api.licenflow.com/api/v1/validate-license');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']);
$response = curl_exec($ch);
$result = json_decode($response, true);
if ($result['valid']) {
// License is valid - start your application
startApplication();
} else {
// Show error to user
showLicenseError($result['message']);
}
import requests
# Get license key from your end user
user_license_key = get_user_license_key()
product_name = 'Your Product Name'
instance_id = generate_instance_id()
data = {
'license_key': user_license_key,
'product': product_name,
'instance_id': instance_id,
'feature_used': 'Core Application' # Optional: Track which feature is being used
}
response = requests.post(
'https://api.licenflow.com/api/v1/validate-license',
json=data
)
result = response.json()
if result['valid']:
# License is valid - start your application
start_application()
else:
# Show error to user
show_license_error(result['message'])
import (
"bytes"
"encoding/json"
"net/http"
)
// Get license key from your end user
userLicenseKey := getUserLicenseKey()
data := map[string]string{
"license_key": userLicenseKey,
"product": "Your Product Name",
"instance_id": generateInstanceId(),
"feature_used": "Core Application", // Optional: Track which feature is being used
}
jsonData, _ := json.Marshal(data)
resp, err := http.Post(
"https://api.licenflow.com/api/v1/validate-license",
"application/json",
bytes.NewBuffer(jsonData),
)
defer resp.Body.Close()
var result map[string]interface{}
json.NewDecoder(resp.Body).Decode(&result)
if result["valid"].(bool) {
// License is valid - start your application
startApplication()
} else {
// Show error to user
showLicenseError(result["message"].(string))
}
import java.net.http.*;
import java.net.URI;
import org.json.JSONObject;
// Get license key from your end user
String userLicenseKey = getUserLicenseKey();
JSONObject data = new JSONObject();
data.put("license_key", userLicenseKey);
data.put("product", "Your Product Name");
data.put("instance_id", generateInstanceId());
data.put("feature_used", "Core Application"); // Optional: Track which feature is being used
HttpClient client = HttpClient.newHttpClient();
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create("https://api.licenflow.com/api/v1/validate-license"))
.header("Content-Type", "application/json")
.POST(HttpRequest.BodyPublishers.ofString(data.toString()))
.build();
HttpResponse<String> response = client.send(request,
HttpResponse.BodyHandlers.ofString());
JSONObject result = new JSONObject(response.body());
if (result.getBoolean("valid")) {
// License is valid - start your application
startApplication();
} else {
// Show error to user
showLicenseError(result.getString("message"));
}
Understanding the complete license validation flow:
// ═══════════════════════════════════════════════════════
// COMPLETE LICENSE VALIDATION FLOW
// ═══════════════════════════════════════════════════════
// 1. End user purchases a license
// ↳ Receives: "ABCD-1234-EFGH-5678"
// 2. End user installs your software
// ↳ Software prompts: "Enter your license key"
// 3. User enters: "ABCD-1234-EFGH-5678"
// ↳ getUserLicenseKey() returns this value
// 4. Your software validates the license:
POST https://api.licenflow.com/api/v1/validate-license
Request Body:
{
"license_key": "ABCD-1234-EFGH-5678", ← from end user
"product": "SuperCRM", ← hardcoded in your software
"instance_id": "PC-JohnDoe-12345" ← auto-generated from system
}
// 5. LicenFlow API responds:
Response (Success):
{
"valid": true,
"expires_at": "2025-12-31T23:59:59Z",
"activations": {
"current": 1,
"maximum": 5
}
}
// 6. Your software checks the response:
if (response.valid === true) {
// ✅ License is valid
// → Start application normally
// → User can use all features
startApplication();
} else {
// ❌ License is invalid
// → Show error message to user
// → Don't start application
showLicenseError(response.message);
}
// ═══════════════════════════════════════════════════════
// IMPORTANT SECURITY NOTES
// ═══════════════════════════════════════════════════════
// ✅ INCLUDED in your distributed software:
// • Validation endpoint URL (it's public)
// • Your product name (it's public)
// • Logic to prompt user for license key
// ❌ NEVER include in your distributed software:
// • Your LicenFlow API keys
// • Authentication tokens
// • Customer management credentials
// ═══════════════════════════════════════════════════════
// ACTIVATION LIMITS EXAMPLE
// ═══════════════════════════════════════════════════════
// Same license key used on different devices:
// Device 1 (PC-JohnDoe-12345):
// → First activation → activations: 1/5 ✅
// Device 2 (LAPTOP-JohnDoe-67890):
// → Second activation → activations: 2/5 ✅
// Device 6 (TABLET-JohnDoe-99999):
// → Exceeds limit → activations: 6/5 ❌
// → Response: { "valid": false, "message": "Activation limit exceeded" }
# Simple one-line license validation
curl -X POST "https://api.licenflow.com/api/v1/validate-license" \
-H "Content-Type: application/json" \
-d '{"license_key":"ABCD-1234-EFGH-5678","product":"YourProduct","instance_id":"device-001","feature_used":"Core Application"}'
# Success response:
{
"valid": true,
"expires_at": "2025-12-31T23:59:59Z",
"activations": {
"current": 1,
"maximum": 5
},
"status_code": 200
}
# Error response:
{
"valid": false,
"message": "License key has expired",
"status_code": 400
}
Unify all your licenses in one place. Simplify the administration, tracking, and renewal of licenses for your applications, whether they are IoT, servers, or desktop.
| User | Creation Date | Expiration | License Type | Status | Actions | |
|---|---|---|---|---|---|---|
|
|
Juan Perez | 2024-01-15 | - |
Perpetual
|
Active
|
|
|
|
Tony Stark | 2024-02-01 | 2025-08-01 |
Subscription
|
About to Expire
|
|
|
|
Bruce Wayne | 2023-12-10 | 2026-12-10 |
Subscription
|
Active
|
|
Automating licensing tasks and activation controls will help you reduce costs and improve software license management efficiency.
*Disclaimer: Results may vary depending on the specific implementation and current client infrastructure. The 80% time reduction is an estimated potential based on typical use cases and may not be universally applicable to all organizations.
Generate detailed reports on license usage, expiration, and costs. Obtain valuable insights to optimize your license management strategy.
Analyze and visualize data to make informed decisions
Prevent unauthorized software usage.
⇀Define risk-free trial periods.
⇀Automated license key management.
⇀Compatible with multiple platforms.
⇀Meets quality and security standards.
⇀Discover how our flexible and robust architecture allows you to easily integrate our license service into any environment, offering customized and scalable solutions for your business.
LicenFlow simplifies license management, allowing your developers to focus on innovation.
Automate the creation, renewal, and tracking of licenses.
Minimize manual errors and ensure regulatory compliance.
Get a complete overview of all your licenses in one place.
Boost the monetization of your software with our robust and secure API, designed for automated and hassle-free license management. Additionally, our intuitive portal gives you total control for manual actions when you need them.
Start managing your licenses in four simple steps and maintain total control of your software
When the license is activated for the user, upon logging in, a request is made to our server through an API call, where the license status is verified. If the license is valid, it is returned as activated and the user can continue using the application without interruptions. These are that can be assigned to your end users from day 1.
To further optimize the process and improve user experience, we implement additional methods:
Access an easy-to-use portal to manage your licenses, users, and settings.
Our system helps you reduce costs by optimizing license management and usage.
Quick and automatic license activation process through our API.
AES-256 encryption to protect your license keys, complying with security standards.
Easy integration with plugins for WordPress, Chrome, and other platforms.
Integrations with different back-office systems
By exchanging license data through a secure API connection, you can do so from desktop, server, IoT, or mobile devices.
Integrate license management into your back-office through our API.
Manage all your licenses from a single dashboard.
Our software can be used for license management in IoT devices.
Choose the plan that fits every stage of your software.
All plans include the free demo licenses trial.
15 days moneyback guarantee
Ideal for testing our system
For small and medium businesses
Scalable solution for growing businesses
For large enterprises and organizations
Monthly payment option available with a 20% increase over the annual rate.
We accept a variety of payment methods, including PayPal, bank transfer. We also offer bank transfer payment option for businesses.
If you are not satisfied with our service, you can request a refund within 15 days. Consult our refund policy for more details.
If a customer does not pay for license renewal, their access to the software will be automatically suspended. We will send reminders before the due date to avoid interruptions.
Yes, we offer discounts for large license volumes. Contact us for more information about our plans and pricing.
Our system is compatible with a wide range of technologies, including PHP, Java, JS, Wordpress plugins, Google Chrome extensions, etc. Additionally, we offer APIs and SDKs for easy integration with your software.
We adapt our protection solutions to each type of software. We use techniques such as encryption and active validation of license status on the server to ensure the security of your application in any environment.
We have a simple and secure key recovery system. The customer can request a new key through the portal and will receive it shortly.
Our control panel allows you to define the duration of trial licenses and automate the renewal process. You can send reminders to customers and manage renewals efficiently.
You can change a customer's license type at any time from the control panel. The change will be applied immediately and reflected in the customer's software access.
You can contact our technical support through Support. We are available to help you with any questions or issues you may have.