How It Works
Create a license product
In your store dashboard, create a product with type Software License. Configure the lock type, max activations, and pricing plans.
Customer purchases
When a customer buys the product, a license key is automatically generated and delivered (e.g.,
MYAPP-XXXX-XXXX-XXXX-XXXX).Your software verifies
Your application calls the RMZ license verification API with the key. The API validates the key and auto-activates the device.
Reference Repository
Full working examples in Python, PHP, JavaScript, and Lua (FiveM) are available at:Step 1: Create a License Product
In your store dashboard, go to Products > New Product and configure:| Setting | Description |
|---|---|
| Type | Software License |
| Key prefix | A short prefix for generated keys (e.g., MYAPP produces MYAPP-XXXX-XXXX-XXXX-XXXX) |
| Lock type | How keys are bound to devices (see below) |
| Max activations | How many devices can use a single key (0 = unlimited) |
| Plans | Duration-based pricing tiers (monthly, yearly, lifetime, etc.) |
| E2EE | Optional end-to-end encryption for API responses |
Lock Types
none
Key-only verification. No device binding. Any device can use the key. Best for simple products.
hwid
Locks to a hardware ID (machine fingerprint). Each unique HWID uses an activation slot. Best for desktop software.
ip
Locks to the caller’s IP address. Each unique IP uses a slot. Best for server-side applications.
Step 2: Implement Verification
The verification endpoint validates the key and auto-activates the device in a single call.Request
| Field | Type | Required | Description |
|---|---|---|---|
product_id | integer | Yes | Your product ID from the dashboard |
license_key | string | Yes | The customer’s license key |
hwid | string | Conditional | Required when lock type is hwid |
Implementation Examples
Success Response
Error Codes
| Code | HTTP Status | Description |
|---|---|---|
LICENSE_NOT_FOUND | 404 | Key does not exist for this product |
LICENSE_EXPIRED | 403 | License has passed its expiry date |
LICENSE_REVOKED | 403 | Permanently revoked by the store owner |
LICENSE_SUSPENDED | 403 | Temporarily suspended |
HWID_REQUIRED | 403 | Lock type is hwid but no hwid was provided |
ACTIVATION_LIMIT | 429 | All device activation slots are used |
Step 3: Generate Hardware IDs
Forhwid lock type, generate a consistent machine fingerprint by combining hardware-specific values:
Step 4: Handle E2EE (Optional)
When E2EE is enabled on your license product, all API responses are encrypted with AES-256-GCM. This prevents response tampering and man-in-the-middle spoofing.Encrypted Response Format
Decryption
Best Practices
Verification Frequency
- Verify the license once on application startup
- Optionally re-verify periodically (e.g., every 24 hours) for subscription products
- Cache the verification result locally to handle temporary network outages
- Rate limit: The API allows 60 requests per minute per IP
Security Recommendations
- Use HWID lock type for desktop applications to prevent key sharing
- Enable E2EE to prevent response tampering (someone injecting
"success": truevia a local proxy) - Obfuscate your code to make it harder to find and bypass the verification logic
- Embed verification deep in your application flow, not in a single easily-patchable function
- Combine with integrity checks to detect binary modification
- Do not store the encryption key as a visible string literal
Graceful Degradation
Handle network failures gracefully:Managing Licenses in the Dashboard
From your store dashboard under License Keys, you can:- View all issued licenses with search and filters
- Create manual licenses (for testing, promotional use)
- Revoke, suspend, or reactivate individual licenses
- Reset device activations (frees all slots)
- View activation history and verification logs
License Lifecycle
| Event | Effect |
|---|---|
| Customer purchases | Key auto-generated and delivered |
| Order completed | License activated, expiry set from plan |
| Order cancelled | All order licenses revoked |
| Order refunded | All order licenses revoked |
| Expiry date passes | Marked expired (checked hourly) |
For complete API reference details, see the Licensing documentation.

