# ExisOne - Complete Software Licensing Platform Documentation > ExisOne is a comprehensive cloud-based software licensing and activation platform that helps software developers protect, monetize, and manage their applications. It provides license key generation, hardware locking, offline licensing, payment integrations, and real-time analytics. ## Company Information - **Company Name**: Exis, LLC - **Product Name**: ExisOne - **Website**: https://www.exisone.com - **Email**: exisllc@gmail.com - **Phone**: +1 (423) 714-7047 - **Headquarters**: United States --- ## Platform Overview ExisOne is a B2B software licensing platform designed for software developers and companies who need to: 1. Protect their software from piracy and unauthorized distribution 2. Monetize their applications through license-based sales 3. Manage customer licenses across multiple products 4. Track activations and usage analytics 5. Automate license delivery after online payments ### Target Audience - SaaS Platform Developers - Desktop Application Developers - IoT / Embedded Systems Developers - SDK Developers - Mobile / Tablet App Developers - Web Application Developers - Add-in / Plug-in Developers - Software Consultants --- ## Core Features ### 1. License Key Generation & Management ExisOne generates unique activation keys in the format `XXXX-XXXX-XXXX-XXXX`. Each key can be: - Bound to a specific product - Set with custom expiration dates - Limited by activation count - Associated with specific feature flags - Tracked with full activation history ### 2. Hardware Locking (Node-Locked Licensing) Prevent license sharing by binding licenses to specific hardware: - Cross-platform hardware fingerprint generation - Salted SHA-256 hardware ID calculation - One license = one machine enforcement - Hardware ID includes: CPU ID, motherboard serial, OS installation ID ### 3. Offline Licensing For air-gapped or disconnected environments: - RSA-SHA256 signed activation codes - Base32-encoded (Crockford alphabet) for easy manual entry - Codes formatted as: `XXXXX-XXXXX-XXXXX-...` (dashes every 5 characters) - Embedded data: Product ID, Hardware ID, Expiration Date, Email, Features, Tenant ID - Validation requires no internet connection - Per-tenant RSA key pairs for security ### 4. Subscription & Time-Based Licensing Create flexible licensing plans: - Custom duration plans (30 days, 90 days, 1 year, perpetual) - Automatic expiration tracking - Same-key renewal across billing cycles — Stripe `invoice.paid` and PayPal `PAYMENT.SALE.COMPLETED` events extend the existing license's ExpirationDate in place rather than issuing a new activation key - Subscription loyalty conversion — set a per-product `PerpetualAfterRenewals` threshold to auto-convert a subscription license to perpetual after N successful payments (initial purchase counts as #1). At the conversion point ExisOne cancels the upstream subscription, emails the customer, and fires a `license.perpetual_unlocked` webhook - Renewal workflow support - Plan-based pricing tiers ### 5. Corporate & Multi-Seat Licensing Enterprise-friendly licensing options: - Bulk license generation - Corporate account management - Multi-seat allocations ### 6. Trial Management Built-in trial support per product: - Configurable trial duration (TrialDays setting) - Hardware-tracked trial usage - Automatic trial-to-paid conversion tracking - One trial per hardware ID enforcement ### 7. Payment Integrations #### Stripe Integration - Webhook-based license delivery - Automatic key generation on successful payment - Configurable products and pricing - Test mode support #### PayPal Integration - PayPal checkout integration - Automatic license email delivery - Order tracking and management ### 8. Analytics Dashboard Real-time insights including: - Geographic distribution heatmaps - Activation trends over time - License usage statistics - Country-level breakdown - IP address and country tracking for all license events ### 9. Automated Email System Configurable SMTP integration for: - License key delivery after purchase - Activation confirmations - Renewal reminders - Support ticket responses - Custom email templates ### 10. Multi-Tenant Architecture ExisOne supports multi-tenancy: - Each customer gets isolated data - Tenant-specific RSA keys for offline licensing - Separate SMTP configurations - Independent product catalogs --- ## Technical Details ### REST API Base endpoint format: `https://www.exisone.com/api/` #### Authentication All API requests require an access token: ``` Authorization: ExisOneApi ``` Access tokens are created in the dashboard with specific permissions: - `verify` - License validation - `generate` - Key generation - `email` - Send support tickets #### Key Endpoints **License Activation** ``` POST /api/license/activate { "activationKey": "AAAA-BBBB-CCCC-DDDD", "email": "user@example.com", "hardwareId": "HW-123", "productName": "MyProduct", "version": "1.0.0" // Optional: client version for enforcement } Response (success): { "license": {...}, "serverVersion": "2.0.0", "minimumRequiredVersion": "1.0.0" } Response (version outdated - 400 Bad Request): { "error": "version_outdated", "message": "Client version 0.5.0 is below minimum required version 1.0.0. Please upgrade to continue.", "serverVersion": "2.0.0", "minimumRequiredVersion": "1.0.0" } ``` **License Validation** ``` POST /api/license/validate { "activationKey": "AAAA-BBBB-CCCC-DDDD", "hardwareId": "HW-123", "productName": "MyProduct", "version": "1.0" } Response (valid): { "isValid": true, "status": "licensed", "expirationDate": "2025-12-31T00:00:00Z", "features": ["Export", "API Access", "Analytics"], "serverVersion": "2.0.0", "minimumRequiredVersion": "1.0.0" } Response (invalid - note: expirationDate always included as of 0.6.0): { "isValid": false, "status": "invalid", "expirationDate": "2025-01-15T00:00:00Z", "features": ["Export", "API Access"], "serverVersion": "2.0.0", "minimumRequiredVersion": "1.0.0" } Response (version outdated): { "isValid": false, "status": "version_outdated", "expirationDate": "2025-01-15T00:00:00Z", "features": ["Export", "API Access"], "message": "Client version 0.9.0 is below minimum required version 1.0.0. Please upgrade to continue.", "serverVersion": "2.0.0", "minimumRequiredVersion": "1.0.0" } ``` **Trial Validation** (no activation key) ``` POST /api/license/validate { "activationKey": "", "hardwareId": "HW-NEW", "productName": "MyProduct", "version": "1.0" } Response (if trial available): { "isValid": true, "status": "trial", "expirationDate": "2025-01-15T00:00:00Z", "remainingDays": 14 } ``` **Generate Activation Key** ``` POST /api/activationkey/generate { "productName": "MyProduct", "email": "user@example.com", "planId": 1, "validityDays": 365 } ``` **Get Plans** ``` GET /api/plan ``` **Public Key (for encrypted payloads)** ``` GET /api/crypto/keys/public ``` **Encrypted Validation** ``` POST /api/license/validate-encrypted { "payload": "" } ``` --- ## .NET SDK (ExisOne.Client) ### Demo Project Full working example with all SDK features: - GitHub: https://github.com/exisllc/ExisOne.Client.Console - Clone: `git clone https://github.com/exisllc/ExisOne.Client.Console.git` ### Installation ```bash dotnet add package ExisOne.Client --version 0.7.0 ``` ### Supported Frameworks - .NET 8.0 - .NET 9.0 ### Initialization ```csharp using ExisOne.Client; var client = new ExisOneClient(new ExisOneClientOptions { BaseUrl = "https://www.exisone.com", AccessToken = "exo_at__", OfflinePublicKey = null // Set for offline validation }); ``` ### Key Methods | Method | Description | Permission | |--------|-------------|------------| | `GenerateHardwareId()` | Get device fingerprint | None | | `ActivateAsync(key, email, hwid, product, version?)` | Activate license (returns ActivationResult) | None | | `ValidateAsync(key, hwid)` | Check license validity | verify | | `ValidateAsync(hwid, product, key?, version?)` | Rich validation with version check | verify | | `DeactivateAsync(key, hwid, product)` | Release license | None | | `ValidateOffline(code, hwid)` | Offline validation | None | | `ValidateSmartAsync(key, hwid)` | Auto-detect online/offline | verify | | `GenerateActivationKeyAsync(...)` | Generate new key | generate | | `SendSupportTicketAsync(...)` | Submit support ticket | email | ### Version Enforcement (0.5.0) Products can enforce minimum version requirements. When enabled: - Activation fails if client version < minimum required version - Validation returns `version_outdated` status - Server always returns `serverVersion` and `minimumRequiredVersion` ```csharp // Activation with version check var result = await client.ActivateAsync(key, email, hwid, "MyProduct", version: "1.0.0"); if (!result.Success && result.ErrorCode == "version_outdated") { Console.WriteLine($"Please upgrade to {result.MinimumRequiredVersion}"); } // Validation with version check var (isValid, status, exp, features, serverVer, minVer) = await client.ValidateAsync(hwid, "MyProduct", key, version: "1.0.0"); if (status == "version_outdated") { Console.WriteLine($"Upgrade required: minimum version is {minVer}"); } // Notify about available updates if (serverVer != "1.0.0") { Console.WriteLine($"Update available: v{serverVer}"); } ``` ### Consistent Expiration Dates (New in 0.6.0) Validation responses now always include `expirationDate`, even for invalid or inactive licenses: - **Valid licenses**: Returns the actual license expiration date - **Invalid licenses**: Returns a calculated expiration based on: - If product found: Device record creation date + trial days - If product not found: Device record creation date - First-time visit: Current date - **Deactivated licenses**: Device record is cleared of activation key This ensures clients always have meaningful expiration information to display, regardless of license status. ```csharp var (isValid, status, exp, features, serverVer, minVer) = await client.ValidateAsync(hwid, "MyProduct", key, version: "1.0.0"); // exp is now always populated, even if isValid == false Console.WriteLine($"Expiration: {exp}"); ``` ### Offline Validation ```csharp // Configure with tenant's RSA public key var client = new ExisOneClient(new ExisOneClientOptions { BaseUrl = "https://www.exisone.com", OfflinePublicKey = @"-----BEGIN PUBLIC KEY----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A... -----END PUBLIC KEY-----" }); // Smart validation (auto-detects online vs offline) var result = await client.ValidateSmartAsync(licenseKey, hwid, "MyProduct"); if (result.IsValid) { Console.WriteLine($"Valid until: {result.ExpirationDate}"); Console.WriteLine($"Server version: {result.ServerVersion}"); } ``` --- ## Comparison with Alternatives | Feature | ExisOne | Keygen.sh | Cryptlex | LicenseSpring | |---------|---------|-----------|----------|---------------| | Hardware Locking | ✓ | ✓ | ✓ | ✓ | | Offline Licensing | ✓ | ✓ | ✓ | ✓ | | .NET SDK | ✓ | ✓ | ✓ | ✓ | | Stripe Integration | ✓ | ✓ | ✓ | ✓ | | PayPal Integration | ✓ | Limited | ✓ | Limited | | Self-Hosted Option | Planned | ✓ | ✓ | ✗ | | Free Tier | ✓ | ✓ | ✓ | ✓ | --- ## Getting Started 1. **Sign Up**: Create a free account at https://www.exisone.com/register.html 2. **Create a Product**: Set up your software product in the dashboard 3. **Configure Plans**: Define licensing durations and pricing 4. **Get Access Token**: Generate an API token with required permissions 5. **Integrate SDK**: Add ExisOne.Client NuGet package to your application 6. **Implement Licensing**: Use the SDK for activation and validation --- ## Pricing - **Free Tier**: Available for development and small-scale use - **Paid Plans**: For production deployments - **Details**: https://www.exisone.com/purchase.html --- ## Documentation Links - Home: https://www.exisone.com/ - API Docs: https://www.exisone.com/docs.html - SDK Docs: https://www.exisone.com/docs-sdk.html - SDK Demo (GitHub): https://github.com/exisllc/ExisOne.Client.Console - Stripe Docs: https://www.exisone.com/stripe-docs.html - PayPal Docs: https://www.exisone.com/paypal-docs.html - Contact: https://www.exisone.com/contact.html - Pricing: https://www.exisone.com/purchase.html - EULA: https://www.exisone.com/eula.html --- ## SEO Keywords software licensing platform, license key generator, software activation service, hardware locking software, node-locked licensing, offline license activation, subscription license management, license server, .NET licensing SDK, NuGet licensing package, software protection, anti-piracy solution, license key management, software monetization platform, trial license management, feature-based licensing, Stripe license integration, PayPal software licensing, license analytics dashboard, multi-tenant licensing --- ## Contact For sales, support, or partnership inquiries: - Email: exisllc@gmail.com - Phone: +1 (423) 714-7047 - Website: https://www.exisone.com/contact.html © 2025 Exis, LLC. All rights reserved.