📚 Developer Documentation

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.

Base URL
https://auxoramarket.auxorasystems.com/api/v1
⚠️ Rate Limits: All endpoints are rate-limited to 60 requests per minute per IP. Plan your heartbeat interval accordingly (recommended: 24 hours).
POST /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" }
POST /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
}
POST /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"
}
GET /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"
}
GET /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

Error Meaning HTTP
invalid_key License key does not exist 404
license_active License is suspended or inactive 403
license_revoked License revoked (refund/chargeback) 403
expired Subscription period expired 403
product_mismatch License not for this product 403
activation_limit_reached No activation slots available 403
invalid_token Token expired or invalid 401
rate_limited Too many requests 429

🔒 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.
💬

Need integration help?

Our developer support team can help you integrate the License API.

Contact Developer Support →