License API
The license verification API your app calls for you — a reference
The SDK calls this API for you when the app starts. You'll rarely call it directly — this page is here for when you're curious about what happens under the hood.
Endpoint
Base URL: https://api.actuallyworks.net
POST /api/license/verify
Verifies the license at app startup. (Called automatically by the SDK — no need to call it yourself.)
Request
{
"licenseKey": "string",
"packageName": "com.yourcompany.app",
"appSignatureHash": "SHA-256-hash",
"deviceId": "unique-device-id"
}Response (success)
{
"isValid": true,
"tier": "standard",
"licenseType": "production",
"expiresAt": "2027-01-01T00:00:00Z",
"features": ["qr_scan", "push_notifications", "camera_gallery", "gps_location", "biometric"]
}tier = the plan you're on
tier is your current plan — one of "basic" · "standard" · "pro". This is exactly the "plan" the rest of the docs talk about.
Response (failure)
{
"isValid": false,
"errorCode": "LICENSE_EXPIRED",
"message": "License has expired"
}Reading the features field
features lists the capabilities unlocked by this license, using server-side identifiers (slightly longer names like qr_scan, push_notifications).
Server names differ from the names you use in the app
This features array is something the server returns for reference. Don't parse it directly to decide whether a feature is on inside your app (JavaScript). These are simpler:
unveilyBridge.app.getInfo()→ read the current plan fromtierunveilyBridge.modules.isEnabled("...")→ check whether a module (e.g.sideDrawer,bottomTabs) is onunveilyBridge.modules.getEnabledModules()→ the list of enabled modules
In short: the server's features describes "what this contract includes," while deciding what's actually active on screen is best left to the bridge calls above.
Error Codes
| Code | What it means |
|---|---|
LICENSE_NOT_FOUND | The license key wasn't found |
LICENSE_EXPIRED | The license period has ended |
LICENSE_INACTIVE | Not activated yet |
PACKAGE_MISMATCH | The package name differs from what's registered |
SIGNATURE_MISMATCH | The app signature hash differs from what's registered |
INVALID_SIGNATURE | HMAC signature verification failed |
How to fix each one is in the Error Codes page.