Implement License Validation in 5 Minutes

Two simple steps to protect your software

Vanilla REST API

Step 1

Get user's license key

// License key provided by your end user
                        const userLicenseKey = getUserLicenseKey(); 
                        const productName = 'Your Product Name';
                        const instanceId = generateInstanceId();
Step 2

Validate the license

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);
  }
});

Node.js

Step 1

Get user's license key

const axios = require('axios');

// Get license key from your end user
const userLicenseKey = getUserLicenseKey();
const productName = 'Your Product Name';
const instanceId = generateInstanceId();
Step 2

Validate the license

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);
}

PHP

Step 1

Prepare the request data

// 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
];
Step 2

Validate the license

$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']);
}

Python

Step 1

Prepare the request data

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
}
Step 2

Validate the license

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'])

Go

Step 1

Prepare the request

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
}
Step 2

Validate the license

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))
}

Java

Step 1

Prepare the request

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
Step 2

Validate the license

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"));
}

Complete Flow - Pseudo-code

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" }

Command Line / cURL

Step 1

Validate license with one command

# 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"}'
Step 2

Check the response

# 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
}

License Management Made Easy

Manage licenses from your web control panel — Or automate everything: Step 1: Create an API key, Step 2: Automate license creation and management via our REST API.

Centralized management of licenses

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.

AC
Acme Corp X
Filter
Export
+ New
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

💲Reduce License Management Time by up to 80%

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.

📊 Data for Decision Making

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

🔍 Visualization and Control

  • Intuitive dashboard for real-time monitoring.
  • Usage and activation charts.
  • Alerts for expired or at-risk licenses.

✓ Key Benefits

Total Protection

Prevent unauthorized software usage.

Trial Period

Define risk-free trial periods.

Simplified Renewals

Automated license key management.

Easy Integration

Compatible with multiple platforms.

Scalability and Security

Meets quality and security standards.

Versatile Applications

  • WordPress Plugins
  • Chrome Extensions
  • SaaS Software
  • Mobile Applications
  • Desktop Tools
  • APIs and Web Services
  • IoT
Software Licenses

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.

Security and Compliance

  • AES-256 Encryption: for secure key storage.
  • Multi-Factor Authentication (MFA): for enhanced protection.
  • GDPR Compliance: for proper handling of personal data.
  • Secure API with OAuth2: for robust user authentication.
  • Secure by Design: No access to your code or infrastructure is necessary for integration thanks to our architecture.

The Solution for Efficient Software License Management

LicenFlow simplifies license management, allowing your developers to focus on innovation.

License Automation

Automate the creation, renewal, and tracking of licenses.

Error Reduction

Minimize manual errors and ensure regulatory compliance.

Centralized Visibility

Get a complete overview of all your licenses in one place.

How Does It Work?

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.

Software Licenses

How to Get Started?

Start managing your licenses in four simple steps and maintain total control of your software

🔄 Functionality for the End User

final user usage

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.

🚀 Efficient Alternative Functionality

To further optimize the process and improve user experience, we implement additional methods:

  • Local Validation with JWT Tokens: Upon license activation, a digitally signed JWT token is generated and stored on the user's device. This allows license validation locally, reducing the need for constant server calls. Our systems support several thousand calls per minute, but on the other hand, reducing communications from the lean application design perspective in certain scenarios helps with lightweight usage on the user side.
  • License Cache with Validity Period: The JWT token includes a short expiration time, allowing the application to function efficiently even with limited connectivity, renewing the license only when necessary.
  • Real-Time Notifications via Webhooks: With webhooks, any changes in license status (renewals, revocations, or updates) are immediately notified to the application, ensuring the user always has the most up-to-date status.

Discover How Our SaaS with PayAsYouGo Revolutionizes License Management

Intuitive Management Portal

Access an easy-to-use portal to manage your licenses, users, and settings.

Reduce Operational Costs

Our system helps you reduce costs by optimizing license management and usage.

Simple Activation

Quick and automatic license activation process through our API.

Enterprise-Level Security

AES-256 encryption to protect your license keys, complying with security standards.

Plugin Support

Easy integration with plugins for WordPress, Chrome, and other platforms.

Integrations

Integrations with different back-office systems

Multi-platform

By exchanging license data through a secure API connection, you can do so from desktop, server, IoT, or mobile devices.

API

Integrate license management into your back-office through our API.

Centralized Management

Manage all your licenses from a single dashboard.

For IoT Use

Our software can be used for license management in IoT devices.

Pricing

Choose the plan that fits every stage of your software. All plans include the free demo licenses trial.
15 days moneyback guarantee


Demo

Ideal for testing our system

DEMO
  • 10 Demo Licenses
  • Demo integration project
  • No Credit Card Required
  • Limited to one demo account per company
Recommended

Developer

For small and medium businesses

$15/year/lic
  • 10 Demo Licenses
  • up to 1000 Lic
  • Technical Support

Professional

Scalable solution for growing businesses

$12/year/lic
  • 10 Demo Licenses
  • up to 10000 Lic
  • Priority Support

Business

For large enterprises and organizations

$8/year/lic
  • More than 10000
  • Dedicated Support

Frequently Asked Questions

Pricing
Is there an option to pay monthly?

Monthly payment option available with a 20% increase over the annual rate.

What payment methods do you accept?

We accept a variety of payment methods, including PayPal, bank transfer. We also offer bank transfer payment option for businesses.

How do refunds work?

If you are not satisfied with our service, you can request a refund within 15 days. Consult our refund policy for more details.

What happens if a customer does not pay for license renewal?

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.

Do you offer discounts for large license volumes?

Yes, we offer discounts for large license volumes. Contact us for more information about our plans and pricing.

Technology
What technologies and platforms is your license system compatible with?

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.

How does piracy protection work for different types of software (desktop, web, mobile)?

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.

General Frequently Asked Questions
What happens if a customer loses their license key?

We have a simple and secure key recovery system. The customer can request a new key through the portal and will receive it shortly.

How can I manage trial licenses and renewals?

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.

What happens if I need to change a customer's license type?

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.

How can I contact technical support?

You can contact our technical support through Support. We are available to help you with any questions or issues you may have.

Not answered here? Questions welcome. Support.