API Licenze
Le API Licenze permettono di creare policy di licenza, emettere chiavi, validarle a runtime, gestire postazioni e dispositivi, e automatizzare l’emissione delle chiavi tramite webhook di pagamento. Supportano validazione online, fallback JWT offline e modalità ibride.
Due destinatari, due livelli di autenticazione:
| Destinatario | Autenticazione | Endpoint |
|---|---|---|
| La tua app / SDK (runtime) | Nessun Bearer token necessario | /validate, /activate, /deactivate, /usage, /revocation-list |
| Admin / Console (gestione) | Bearer token + permesso | Tutti gli altri |
Tutti gli endpoint richiedono l’header x-tenant.
Policy
Le policy definiscono cosa concede una licenza — funzionalità, postazioni, dispositivi, scadenza, formato chiave e modalità di validazione.
/api/licensing/policiesRequires: manage:license-policiesElenca tutte le policy per il tenant corrente. Supporta paginazione e ricerca.
Parametri query
| Parametro | Tipo | Descrizione |
|---|---|---|
page | number | Numero di pagina (predefinito: 1) |
limit | number | Elementi per pagina (predefinito: 20) |
search | string | Filtra per nome o slug |
Risposta di successo
{
"success": true,
"data": [
{
"id": "pol_abc123",
"name": "Pro Plan",
"slug": "pro-plan",
"validationMode": "HYBRID",
"isActive": true,
"offlineGraceDays": 7,
"revocationTtlMin": 60,
"dimensions": {
"seats": { "enabled": true, "defaultMax": 5 },
"devices": { "enabled": true, "defaultMax": 3 },
"expiry": { "enabled": true, "defaultDays": 365 },
"features": { "enabled": true, "available": ["analytics", "export", "api-access"] },
"keyFormat": {
"prefix": "VIG",
"segments": 4,
"segmentLength": 4,
"separator": "-",
"charset": "BASE32"
}
},
"createdAt": "2026-01-15T10:00:00Z"
}
],
"pagination": { "page": 1, "limit": 20, "total": 3, "pages": 1 }
}/api/licensing/policiesRequires: manage:license-policiesCrea una nuova policy di licenza.
Corpo della richiesta
{
"name": "Pro Plan",
"slug": "pro-plan",
"validationMode": "HYBRID",
"dimensions": {
"seats": { "enabled": true, "defaultMax": 5 },
"devices": { "enabled": true, "defaultMax": 3 },
"expiry": { "enabled": true, "defaultDays": 365 },
"features": { "enabled": true, "available": ["analytics", "export"] },
"keyFormat": {
"prefix": "VIG",
"segments": 4,
"segmentLength": 4,
"separator": "-",
"charset": "BASE32"
}
}
}| Campo | Tipo | Obbligatorio | Descrizione |
|---|---|---|---|
name | string | Sì | Nome visualizzato |
slug | string | Sì | Slug univoco (es. pro-plan) |
validationMode | ONLINE | HYBRID | OFFLINE | No | Predefinito: HYBRID |
dimensions | object | No | Configurazione postazioni, dispositivi, funzionalità, scadenza, formato chiave |
offlineGraceDays | number | No | Giorni di validità offline della chiave (predefinito: 7) |
revocationTtlMin | number | No | Minuti prima della propagazione della revoca (predefinito: 60) |
/api/licensing/policies/:idRequires: manage:license-policiesOttieni una singola policy per ID.
/api/licensing/policies/:idRequires: manage:license-policiesAggiorna una policy. Solo i campi forniti vengono modificati.
/api/licensing/policies/:idRequires: manage:license-policiesElimina una policy. Fallisce se ci sono chiavi ancora emesse sotto di essa.
Chiavi
Le chiavi vengono emesse in base a una policy e assegnate a un licenziatario (utente, organizzazione o dispositivo).
/api/licensing/keysRequires: manage:license-keysElenca tutte le chiavi. Filtrabile per stato e policy.
Parametri query
| Parametro | Tipo | Descrizione |
|---|---|---|
page | number | Numero di pagina |
limit | number | Elementi per pagina |
policyId | string | Filtra per policy |
status | ACTIVE | SUSPENDED | REVOKED | EXPIRED | Filtra per stato |
/api/licensing/keysRequires: manage:license-keysEmetti una nuova chiave di licenza.
Corpo della richiesta
{
"policyId": "pol_abc123",
"licenseeType": "USER",
"licenseeId": "user_xyz789",
"notes": "Issued via Stripe checkout"
}La risposta include l’oggetto chiave completo con key (la stringa di licenza) e jwtToken (per la validazione offline).
/api/licensing/keys/:idRequires: manage:license-keysOttieni una singola chiave per ID, inclusi policy, postazioni e dispositivi correlati.
/api/licensing/keys/:id/suspendRequires: manage:license-keysSospendi una chiave. Può essere riattivata successivamente.
/api/licensing/keys/:id/revokeRequires: manage:license-keysRevoca permanentemente una chiave.
/api/licensing/keys/:id/reissueRequires: manage:license-keysRiemetti una chiave con diritti aggiornati. La vecchia chiave viene revocata e ne viene generata una nuova.
Corpo opzionale
{
"features": ["analytics", "export", "api-access"],
"seatMax": 10,
"deviceMax": 5,
"expiresAt": "2027-03-15T00:00:00Z"
}Postazioni
/api/licensing/keys/:id/seatsRequires: manage:license-keysElenca tutte le postazioni (utenti assegnati) per una chiave.
/api/licensing/keys/:id/seatsRequires: manage:license-keysAssegna una postazione a un utente. Fallisce se il limite di postazioni è stato raggiunto.
{ "userId": "user_abc" }/api/licensing/keys/:id/seats/:userIdRequires: manage:license-keysRilascia la postazione di un utente.
Dispositivi
/api/licensing/keys/:id/devicesRequires: manage:license-keysElenca tutti i dispositivi attivati per una chiave.
/api/licensing/keys/:id/devices/:deviceIdRequires: manage:license-keysRimuovi un dispositivo da una chiave.
Validazione (Pubblica)
Questi endpoint vengono chiamati dalla tua applicazione a runtime. Non è richiesto alcun Bearer token.
/api/licensing/validateValida una chiave di licenza online. Restituisce validità, funzionalità, conteggio postazioni/dispositivi e scadenza.
Corpo della richiesta
{ "key": "VIG-A8BC-D3EF-G4HJ-K5LM" }Risposta di successo
{
"valid": true,
"features": ["analytics", "export"],
"seats": { "used": 2, "max": 5 },
"devices": { "used": 1, "max": 3 },
"expiresAt": "2027-01-15T00:00:00Z"
}Risposta chiave non valida
{
"valid": false,
"reason": "REVOKED"
}Possibili valori di reason: INVALID, EXPIRED, REVOKED, SUSPENDED, SEAT_LIMIT, DEVICE_LIMIT.
Attivazione Dispositivo (Pubblica)
/api/licensing/activateRegistra un dispositivo associato a una chiave di licenza. Utilizzalo al primo avvio di un’app desktop/mobile.
{
"key": "VIG-A8BC-D3EF-G4HJ-K5LM",
"fingerprint": "a1b2c3d4e5f6",
"name": "John's MacBook Pro"
}Restituisce 200 in caso di successo. Restituisce 409 se il limite di dispositivi è stato raggiunto.
/api/licensing/deactivateRimuovi un dispositivo da una chiave. Utilizzalo quando l’utente esce o disinstalla.
{
"key": "VIG-A8BC-D3EF-G4HJ-K5LM",
"fingerprint": "a1b2c3d4e5f6"
}Tracciamento Utilizzo (Pubblico)
/api/licensing/usageRegistra una metrica di utilizzo per una chiave. Utile per licenze a consumo/metriche.
{
"key": "VIG-A8BC-D3EF-G4HJ-K5LM",
"metric": "api_calls",
"amount": 1
}/api/licensing/usage/:keyOttieni i dati di utilizzo correnti per una chiave su tutte le metriche.
Lista di Revoca (Pubblica)
/api/licensing/revocation-listRestituisce un JWT firmato contenente tutti i JTI delle chiavi revocate. Utilizzato dall’SDK per il controllo della revoca offline.
La risposta è application/jwt con Cache-Control: public, max-age=3600. L’SDK lo recupera automaticamente.
Regole di Automazione
Le regole di automazione collegano eventi di pagamento (Stripe, PayPal) ad azioni sulle licenze (emissione, attivazione, sospensione, revoca).
/api/licensing/automationRequires: manage:license-policiesElenca tutte le regole di automazione.
/api/licensing/automationRequires: manage:license-policiesCrea una nuova regola di automazione.
{
"name": "Stripe checkout → issue key",
"provider": "stripe",
"triggerEvent": "checkout.session.completed",
"action": "issue_key",
"policyId": "pol_abc123",
"isActive": true
}| Provider | Eventi Trigger |
|---|---|
stripe | checkout.session.completed, invoice.paid, payment_intent.succeeded |
paypal | PAYMENT.CAPTURE.COMPLETED |
manual | manual_trigger |
| Azione | Descrizione |
|---|---|
issue_key | Emette una nuova chiave sotto la policy collegata |
activate_key | Attiva una chiave esistente |
suspend_key | Sospende una chiave |
revoke_key | Revoca una chiave |
/api/licensing/automation/:idRequires: manage:license-policiesOttieni una singola regola di automazione.
/api/licensing/automation/:idRequires: manage:license-policiesAggiorna una regola di automazione.
/api/licensing/automation/:idRequires: manage:license-policiesElimina una regola di automazione.
Webhook
Questi endpoint ricevono eventi dai provider di pagamento. Vengono verificati tramite firma e non richiedono Bearer token.
/api/licensing/webhooks/stripeRiceve eventi webhook Stripe. Verificato tramite header stripe-signature. Imposta STRIPE_LICENSING_WEBHOOK_SECRET nel tuo ambiente.
/api/licensing/webhooks/paypalRiceve eventi webhook PayPal. Verificato tramite HMAC-SHA256. Imposta PAYPAL_LICENSING_WEBHOOK_SECRET e PAYPAL_LICENSING_WEBHOOK_ID nel tuo ambiente.
Statistiche
/api/licensing/statsRequires: view:license-statsRestituisce statistiche aggregate sulle licenze.
{
"success": true,
"data": {
"totalPolicies": 3,
"totalKeys": 142,
"activeKeys": 98,
"revokedKeys": 12,
"suspendedKeys": 5,
"expiredKeys": 27,
"policyDistribution": [
{ "policyId": "pol_abc", "policyName": "Pro Plan", "count": 80 }
],
"recentKeys": []
}
}