Skip to main content

POST https://license.rmz.gg/verify

Verifies a license key and auto-activates the device in a single call. No separate activation step is needed.

Request

Send a JSON body with the following fields:
FieldTypeRequiredDescription
product_idintegerYesYour product ID from the dashboard
license_keystringYesThe customer’s license key
hwidstringNoHardware ID — required if lock type is hwid
curl -X POST https://license.rmz.gg/verify \
  -H "Content-Type: application/json" \
  -d '{
    "product_id": 123,
    "license_key": "MYAPP-XXXX-XXXX-XXXX-XXXX",
    "hwid": "a1b2c3d4e5f6a1b2c3d4e5f6a1b2c3d4"
  }'

Success Response (200)

{
  "success": true,
  "data": {
    "status": "active",
    "lock_type": "hwid",
    "product": {
      "id": 123,
      "name": "My Script Pro"
    },
    "plan": {
      "duration": "annually",
      "duration_label": "سنه",
      "start_date": "2026-03-23 12:00:00",
      "end_date": "2027-03-23 12:00:00",
      "is_active": true
    },
    "expires_at": "2027-03-23T12:00:00+00:00",
    "expires_in_days": 365,
    "activations": {
      "current": 1,
      "max": 3,
      "remaining": 2
    },
    "metadata": null
  }
}

Response Field Reference

FieldTypeDescription
successbooleantrue if the license is valid
data.statusstringactive, expired, suspended, or revoked
data.lock_typestringnone, hwid, or ip
data.product.idintegerProduct ID
data.product.namestringProduct display name
data.planobject | nullSubscription plan details (null if no plan)
data.plan.durationstringRaw duration key: monthly, quarterly, semiAnnual, annually, biennial, quinquennial, decennial
data.plan.duration_labelstringArabic display name for the duration
data.plan.start_datestringPlan start date (YYYY-MM-DD HH:MM:SS format)
data.plan.end_datestringPlan end date (YYYY-MM-DD HH:MM:SS format)
data.plan.is_activebooleanWhether the subscription is currently active
data.expires_atstring | nullISO 8601 expiry date (e.g., 2027-03-23T12:00:00+00:00). null means lifetime license
data.expires_in_daysinteger | nullDays remaining until expiry. null means lifetime
data.activations.currentintegerNumber of devices currently activated
data.activations.maxinteger | nullMaximum allowed activations. null means unlimited
data.activations.remaininginteger | nullActivation slots remaining. null means unlimited
data.metadataobject | nullCustom JSON data from product settings

Error Response

{
  "success": false,
  "error": "LICENSE_NOT_FOUND",
  "message": "License not found"
}
See Error Codes for the full list of error codes, messages, and their HTTP status codes.
When E2EE is enabled on the product, both success and error responses are AES-256-GCM encrypted. The response structure changes to:
{
  "encrypted": true,
  "payload": "base64-encoded-ciphertext",
  "nonce": "base64-encoded-nonce",
  "tag": "base64-encoded-tag"
}
Decrypt the payload using AES-256-GCM with your product’s encryption key, the nonce, and the tag to get the original JSON response.