Overview
What this API does
It verifies a submitted license key for a selected software product and confirms whether the submitted domain matches the registered installation domain.
What your software should do
Your software should send the required fields, read the JSON response, allow access on success, and show the returned message or renewal action on failure.
Endpoint
| Method | POST |
|---|---|
| URL | https://apiserver.blenddoit.com/api/verify-license.php |
| Request Type | application/x-www-form-urlencoded |
| Response Type | application/json |
Response First
Before integrating the API into your software, first understand what your application will receive after making the request.
Successful response example
{
"status": "success",
"message": "License verified successfully.",
"data": {
"software_name": "Example Product",
"license_key": "ABCDEF1234567890",
"domain": "example.com",
"status": "active",
"expiry_date": "2026-05-01",
"source": "license-system",
"activated_at": "2026-04-01 10:20:00",
"last_verified_at": "2026-04-01 10:25:12",
"current_plan_id": 1,
"current_plan_name": "Monthly Plan",
"current_duration_value": 1,
"current_duration_unit": "month",
"renewed_at": null
}
}
Expired response example
{
"status": "error",
"message": "License has expired, please renew now.",
"data": {
"status": "expired",
"expiry_date": "2026-03-01",
"payment_page_url": "https://apiserver.blenddoit.com/renew.php?software_id=1",
"current_plan_id": 1,
"current_plan_name": "Monthly Plan",
"current_duration_value": 1,
"current_duration_unit": "month"
}
}
Request Parameters
Send the following fields in the request body.
| Parameter | Type | Required | Description |
|---|---|---|---|
| software_id | Integer | Yes | The ID of the software product that the customer is trying to activate or verify. |
| license_key | String | Yes | The license key provided to the customer. |
| domain | String | Yes | The installation domain, for example example.com. |
Accepted domain input
The API accepts common domain formats and normalizes them before verification.
- example.com
- www.example.com
- https://example.com
- http://www.example.com/path
Integration Guide
Follow this order so your software integration stays simple, user-friendly, and predictable.
Recommended software behavior
- Show a loading state while verification is in progress.
- Store the verified result only after a successful response.
- Show user-friendly error messages directly from the API response.
- Redirect to renewal only when the API explicitly returns renewal information.
Success Response
When the license is valid and active, the API returns a success response like this:
{
"status": "success",
"message": "License verified successfully.",
"data": {
"software_name": "Example Product",
"license_key": "ABCDEF1234567890",
"domain": "example.com",
"status": "active",
"expiry_date": "2026-05-01",
"source": "license-system",
"activated_at": "2026-04-01 10:20:00",
"last_verified_at": "2026-04-01 10:25:12",
"current_plan_id": 1,
"current_plan_name": "Monthly Plan",
"current_duration_value": 1,
"current_duration_unit": "month",
"renewed_at": null
}
}
Returned data fields
| Field | Meaning |
|---|---|
| software_name | Name of the software product. |
| license_key | The verified license key. |
| domain | The registered or verified installation domain. |
| status | Current license state, normally active on success. |
| expiry_date | The date until which the license remains valid. |
| source | Internal reference label from the verification system. Client applications usually do not need to use this field for UI logic. |
| activated_at | License activation time, if available. |
| last_verified_at | Last successful verification timestamp. |
| current_plan_id, current_plan_name, current_duration_value, current_duration_unit | Current plan or subscription details linked to the license. |
| renewed_at | Last renewal time, if available. |
Error Responses
If verification fails, the API returns a clear error message and additional data when needed.
Missing required parameters
{
"status": "error",
"message": "Missing required parameters.",
"data": []
}
Invalid domain format
{
"status": "error",
"message": "Invalid domain format.",
"data": []
}
Invalid software ID
{
"status": "error",
"message": "Invalid software ID.",
"data": []
}
Invalid license format
{
"status": "error",
"message": "Invalid license format.",
"data": []
}
License not registered for this domain
{
"status": "error",
"message": "License is not registered for this domain.",
"data": {
"registered_domain": "oldsite.com",
"requested_domain": "newsite.com"
}
}
License not active
{
"status": "error",
"message": "License is not active.",
"data": {
"status": "inactive"
}
}
Expired license
{
"status": "error",
"message": "License has expired, please renew now.",
"data": {
"status": "expired",
"expiry_date": "2026-03-01",
"payment_page_url": "https://apiserver.blenddoit.com/renew.php?software_id=1",
"current_plan_id": 1,
"current_plan_name": "Monthly Plan",
"current_duration_value": 1,
"current_duration_unit": "month"
}
}
General server-side failure
{
"status": "error",
"message": "Server error.",
"data": []
}
Request Examples
cURL Example
curl -X POST "https://apiserver.blenddoit.com/api/verify-license.php" \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "software_id=1" \
-d "license_key=ABCDEF1234567890" \
-d "domain=example.com"
JavaScript Fetch Example
fetch('https://apiserver.blenddoit.com/api/verify-license.php', {
method: 'POST',
headers: {
'Content-Type': 'application/x-www-form-urlencoded'
},
body: new URLSearchParams({
software_id: '1',
license_key: 'ABCDEF1234567890',
domain: 'example.com'
})
})
.then(res => res.json())
.then(data => {
if (data.status === 'success') {
console.log('Verified:', data.data);
} else {
console.log('Verification failed:', data.message, data.data);
}
})
.catch(err => {
console.error('Request failed:', err);
});
PHP cURL Example
<?php
$apiUrl = 'https://apiserver.blenddoit.com/api/verify-license.php';
$postData = [
'software_id' => 1,
'license_key' => 'ABCDEF1234567890',
'domain' => 'example.com'
];
$ch = curl_init($apiUrl);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => http_build_query($postData),
CURLOPT_TIMEOUT => 20
]);
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
if (($result['status'] ?? '') === 'success') {
echo 'License verified successfully';
} else {
echo $result['message'] ?? 'Verification failed';
}
Try API
Use the form below to test the endpoint directly and preview the JSON response live.
{
"status": "info",
"message": "Send a request to preview the API response.",
"data": []
}
Postman Collection
Use the buttons below to download or copy a ready-to-import Postman collection for this API.
{
"info": {
"name": "Blenddoit License Verification API",
"_postman_id": "blenddoit-license-api-collection",
"description": "Postman collection for Blenddoit license verification endpoint.",
"schema": "https://schema.getpostman.com/json/collection/v2.1.0/collection.json"
},
"item": [
{
"name": "Verify License",
"request": {
"method": "POST",
"header": [
{
"key": "Content-Type",
"value": "application/x-www-form-urlencoded"
}
],
"body": {
"mode": "urlencoded",
"urlencoded": [
{ "key": "software_id", "value": "1", "type": "text" },
{ "key": "license_key", "value": "ABCDEF1234567890", "type": "text" },
{ "key": "domain", "value": "example.com", "type": "text" }
]
},
"url": {
"raw": "https://apiserver.blenddoit.com/api/verify-license.php",
"protocol": "https",
"host": ["apiserver", "blenddoit", "com"],
"path": ["api", "verify-license.php"]
}
},
"response": []
}
]
}
Renewal Flow
If a license has expired, the API returns a renewal-ready response. Your software should use that response to guide the customer to payment or renewal.
When renewal is required
If the returned message says the license has expired, your software should stop activation and move the customer to the renewal step.
What your software should do
Read the payment_page_url field from the response and redirect the customer to that page.
Important Notes
- Always send all required fields: software_id, license_key, and domain.
- The API always returns JSON with status, message, and data.
- Your software should rely on the API response instead of trying to guess license state locally.
- Use the response message for user-facing notifications.
- On expired licenses, your software should present or redirect to the renewal flow immediately.
- On domain mismatch, show the returned message clearly to the customer.