License Activation API
Integrate Auxora Market license verification into your software. This API enables activation, verification, updates check, and deactivation for all purchased products.
Overview
The Auxora License API provides endpoints for software installations to authenticate, verify, and receive updates. Every licensed product must call these endpoints to remain compliant.
https://auxoramarket.auxorasystems.com/api/v1
/activate
Activate a license key on a specific domain. Called once during software installation. Returns a signed token valid for 7 days.
Request Body
{
"license_key": "AUX-XXXX-XXXX-XXXX-XXXX", // required
"domain": "yourdomain.com", // required
"product_slug": "SkyCRM", // required
"version": "1.0.0", // optional
"fingerprint": "server-unique-id" // optional
}
cURL Example
curl -X POST https://auxoramarket.auxorasystems.com/api/v1/activate \
-H "Content-Type: application/json" \
-d '{
"license_key": "AUX-XXXX-XXXX-XXXX-XXXX",
"domain": "yourdomain.com",
"product_slug": "SkyCRM",
"version": "1.0.0"
}'
Success Response (200)
{
"valid": true,
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"expires_in": 604800,
"license": {
"type": "extended",
"support_expires_at": "2027-10-08T00:00:00+00:00",
"updates_expires_at": "2027-10-08T00:00:00+00:00",
"max_activations": 5,
"current_activations": 1
}
}
Error Responses
// 404 — License not found
{ "valid": false, "error": "invalid_key" }
// 403 — License inactive/revoked
{ "valid": false, "error": "license_revoked" }
// 403 — Activation limit reached
{
"valid": false,
"error": "activation_limit_reached",
"activations_used": 5,
"activation_limit": 5
}
// 403 — Product mismatch
{ "valid": false, "error": "product_mismatch" }
/verify
Daily heartbeat. Confirms the license is still valid. Recommended: once every 24 hours. If API is unreachable, apply a 7-day grace period.
{
"license_key": "AUX-XXXX-XXXX-XXXX-XXXX",
"domain": "yourdomain.com",
"token": "eyJhbGci..."
}
// Success
{
"valid": true,
"grace_period_days": 7
}
/deactivate
Free up an activation slot. Called before migrating to a new domain or uninstalling.
{
"license_key": "AUX-XXXX-XXXX-XXXX-XXXX",
"domain": "yourdomain.com"
}
/updates/check
Check if a newer version is available. Requires active updates subscription.
curl "https://auxoramarket.auxorasystems.com/api/v1/updates/check?license_key=AUX-XXXX&product_slug=SkyCRM¤t_version=1.0.0"
// Update available
{
"valid": true,
"updates_allowed": true,
"has_update": true,
"latest_version": "1.2.0",
"changelog": "Bug fixes and performance improvements...",
"download_url": "https://auxoramarket.auxorasystems.com/api/v1/updates/download/AUX-XXXX-XXXX/42"
}
// No update
{
"valid": true,
"updates_allowed": true,
"has_update": false,
"latest_version": "1.0.0"
}
// Updates expired
{
"valid": true,
"updates_allowed": false,
"reason": "updates_expired",
"updates_expires_at": "2026-10-08T00:00:00+00:00"
}
/updates/download/{licenseKey}/{releaseId}
Download a specific release package. Requires valid updates subscription.
🔧 Integration Examples
Laravel (Recommended)
<?php
namespace App\Services;
use Illuminate\Support\Facades\Http;
class LicenseService
{
const API = 'https://auxoramarket.auxorasystems.com/api/v1';
public static function activate(string $key, string $domain): array
{
$response = Http::timeout(15)->post(self::API . '/activate', [
'license_key' => $key,
'domain' => $domain,
'product_slug' => config('app.name'),
'version' => config('app.version', '1.0.0'),
'fingerprint' => gethostname(),
]);
$data = $response->json();
if ($data['valid'] ?? false) {
// Store token securely
file_put_contents(
storage_path('license.json'),
json_encode([
'key' => $key,
'domain' => $domain,
'token' => $data['token'],
'expires_at' => now()->addDays(7)->toIso8601String(),
])
);
}
return $data;
}
public static function verify(): bool
{
$license = json_decode(file_get_contents(storage_path('license.json')), true);
if (!$license) return false;
$response = Http::timeout(10)->post(self::API . '/verify', [
'license_key' => $license['key'],
'domain' => $license['domain'],
'token' => $license['token'],
]);
return $response->successful() && ($response->json()['valid'] ?? false);
}
public static function checkUpdates(string $currentVersion): array
{
$license = json_decode(file_get_contents(storage_path('license.json')), true);
return Http::timeout(10)->get(self::API . '/updates/check', [
'license_key' => $license['key'],
'product_slug' => config('app.name'),
'current_version' => $currentVersion,
])->json();
}
}
Plain PHP
<?php
function activateLicense($key, $domain) {
$ch = curl_init('https://auxoramarket.auxorasystems.com/api/v1/activate');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => json_encode([
'license_key' => $key,
'domain' => $domain,
'product_slug' => 'MyProduct',
'version' => '1.0.0',
]),
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 15,
]);
$response = json_decode(curl_exec($ch), true);
curl_close($ch);
return $response;
}
Node.js
const axios = require('axios');
async function activateLicense(key, domain) {
const response = await axios.post('https://auxoramarket.auxorasystems.com/api/v1/activate', {
license_key: key,
domain: domain,
product_slug: 'MyProduct',
version: '1.0.0',
}, { timeout: 15000 });
return response.data;
}
// Usage
activateLicense('AUX-XXXX-XXXX-XXXX-XXXX', 'example.com')
.then(data => {
if (data.valid) {
console.log('Activated:', data.token);
}
});
⚠️ Error Codes
🔒 Security Best Practices
- Never expose license keys in client-side code or public repositories.
- Store tokens securely — use encrypted storage (Laravel's
storage/directory, not public). - Use HTTPS for all API calls. Auxora Market rejects HTTP requests in production.
- Handle offline gracefully — if the API is unreachable, apply the 7-day grace period before locking features.
- Verify token expiration — tokens expire every 7 days; re-activate to refresh.
- Don't block user data — on license failure, keep customer data accessible (read-only mode).
- Check errors before locking — network issues should not lock the software.