Lizenzierungs-API
Die Lizenzierungs-API ermöglicht es dir, Lizenzrichtlinien zu erstellen, Schlüssel auszustellen, diese zur Laufzeit zu validieren, Plätze und Geräte zu verwalten und die Schlüsselausstellung über Zahlungs-Webhooks zu automatisieren. Sie unterstützt Online-Validierung, Offline-JWT-Fallback und hybride Modi.
Zwei Zielgruppen, zwei Authentifizierungsebenen:
| Zielgruppe | Authentifizierung | Endpunkte |
|---|---|---|
| Deine App / SDK (Laufzeit) | Kein Bearer-Token erforderlich | /validate, /activate, /deactivate, /usage, /revocation-list |
| Admin / Konsole (Verwaltung) | Bearer-Token + Berechtigung | Alle anderen |
Alle Endpunkte erfordern den x-tenant-Header.
Richtlinien
Richtlinien definieren, was eine Lizenz gewährt — Funktionen, Plätze, Geräte, Ablauf, Schlüsselformat und Validierungsmodus.
/api/licensing/policiesRequires: manage:license-policiesAlle Richtlinien für den aktuellen Mandanten auflisten. Unterstützt Paginierung und Suche.
Abfrageparameter
| Parameter | Typ | Beschreibung |
|---|---|---|
page | number | Seitennummer (Standard: 1) |
limit | number | Einträge pro Seite (Standard: 20) |
search | string | Nach Name oder Slug filtern |
Erfolgsantwort
{
"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-policiesEine neue Lizenzrichtlinie erstellen.
Anfragekörper
{
"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"
}
}
}| Feld | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
name | string | Ja | Anzeigename |
slug | string | Ja | Eindeutiger Slug (z. B. pro-plan) |
validationMode | ONLINE | HYBRID | OFFLINE | Nein | Standard: HYBRID |
dimensions | object | Nein | Konfiguration für Plätze, Geräte, Funktionen, Ablauf und Schlüsselformat |
offlineGraceDays | number | Nein | Tage, die ein Schlüssel offline gültig bleibt (Standard: 7) |
revocationTtlMin | number | Nein | Minuten bis zur Verbreitung des Widerrufs (Standard: 60) |
/api/licensing/policies/:idRequires: manage:license-policiesEine einzelne Richtlinie anhand der ID abrufen.
/api/licensing/policies/:idRequires: manage:license-policiesEine Richtlinie aktualisieren. Nur angegebene Felder werden geändert.
/api/licensing/policies/:idRequires: manage:license-policiesEine Richtlinie löschen. Schlägt fehl, wenn noch Schlüssel unter dieser Richtlinie ausgestellt sind.
Schlüssel
Schlüssel werden gegen eine Richtlinie ausgestellt und einem Lizenznehmer (Benutzer, Organisation oder Gerät) zugewiesen.
/api/licensing/keysRequires: manage:license-keysAlle Schlüssel auflisten. Filterbar nach Status und Richtlinie.
Abfrageparameter
| Parameter | Typ | Beschreibung |
|---|---|---|
page | number | Seitennummer |
limit | number | Einträge pro Seite |
policyId | string | Nach Richtlinie filtern |
status | ACTIVE | SUSPENDED | REVOKED | EXPIRED | Nach Status filtern |
/api/licensing/keysRequires: manage:license-keysEinen neuen Lizenzschlüssel ausstellen.
Anfragekörper
{
"policyId": "pol_abc123",
"licenseeType": "USER",
"licenseeId": "user_xyz789",
"notes": "Issued via Stripe checkout"
}Antwort enthält das vollständige Schlüsselobjekt mit key (die Lizenzzeichenkette) und jwtToken (für Offline-Validierung).
/api/licensing/keys/:idRequires: manage:license-keysEinen einzelnen Schlüssel anhand der ID abrufen, einschließlich zugehöriger Richtlinie, Plätze und Geräte.
/api/licensing/keys/:id/suspendRequires: manage:license-keysEinen Schlüssel sperren. Er kann später reaktiviert werden.
/api/licensing/keys/:id/revokeRequires: manage:license-keysEinen Schlüssel dauerhaft widerrufen.
/api/licensing/keys/:id/reissueRequires: manage:license-keysEinen Schlüssel mit aktualisierten Berechtigungen neu ausstellen. Der alte Schlüssel wird widerrufen und ein neuer generiert.
Optionaler Körper
{
"features": ["analytics", "export", "api-access"],
"seatMax": 10,
"deviceMax": 5,
"expiresAt": "2027-03-15T00:00:00Z"
}Plätze
/api/licensing/keys/:id/seatsRequires: manage:license-keysAlle Plätze (zugewiesene Benutzer) für einen Schlüssel auflisten.
/api/licensing/keys/:id/seatsRequires: manage:license-keysEinem Benutzer einen Platz zuweisen. Schlägt fehl, wenn das Platzlimit erreicht ist.
{ "userId": "user_abc" }/api/licensing/keys/:id/seats/:userIdRequires: manage:license-keysEinen Platz von einem Benutzer freigeben.
Geräte
/api/licensing/keys/:id/devicesRequires: manage:license-keysAlle aktivierten Geräte für einen Schlüssel auflisten.
/api/licensing/keys/:id/devices/:deviceIdRequires: manage:license-keysEin Gerät von einem Schlüssel entfernen.
Validierung (Öffentlich)
Diese Endpunkte werden von deiner Anwendung zur Laufzeit aufgerufen. Es ist kein Bearer-Token erforderlich.
/api/licensing/validateEinen Lizenzschlüssel online validieren. Gibt Gültigkeit, Funktionen, Platz-/Geräteanzahl und Ablauf zurück.
Anfragekörper
{ "key": "VIG-A8BC-D3EF-G4HJ-K5LM" }Erfolgsantwort
{
"valid": true,
"features": ["analytics", "export"],
"seats": { "used": 2, "max": 5 },
"devices": { "used": 1, "max": 3 },
"expiresAt": "2027-01-15T00:00:00Z"
}Antwort bei ungültigem Schlüssel
{
"valid": false,
"reason": "REVOKED"
}Mögliche reason-Werte: INVALID, EXPIRED, REVOKED, SUSPENDED, SEAT_LIMIT, DEVICE_LIMIT.
Geräteaktivierung (Öffentlich)
/api/licensing/activateEin Gerät gegen einen Lizenzschlüssel registrieren. Verwende dies beim ersten Start einer Desktop-/Mobilanwendung.
{
"key": "VIG-A8BC-D3EF-G4HJ-K5LM",
"fingerprint": "a1b2c3d4e5f6",
"name": "John's MacBook Pro"
}Gibt 200 bei Erfolg zurück. Wirft 409, wenn das Gerätelimit erreicht ist.
/api/licensing/deactivateEin Gerät von einem Schlüssel entfernen. Verwende dies, wenn sich der Benutzer abmeldet oder die App deinstalliert.
{
"key": "VIG-A8BC-D3EF-G4HJ-K5LM",
"fingerprint": "a1b2c3d4e5f6"
}Nutzungsverfolgung (Öffentlich)
/api/licensing/usageEine Nutzungsmetrik gegen einen Schlüssel erfassen. Nützlich für verbrauchsbasierte Lizenzierung.
{
"key": "VIG-A8BC-D3EF-G4HJ-K5LM",
"metric": "api_calls",
"amount": 1
}/api/licensing/usage/:keyAktuelle Nutzungsdaten für einen Schlüssel über alle Metriken abrufen.
Widerrufsliste (Öffentlich)
/api/licensing/revocation-listGibt ein signiertes JWT zurück, das alle widerrufenen Schlüssel-JTIs enthält. Wird vom SDK zur Offline-Widerrufsprüfung verwendet.
Die Antwort ist application/jwt mit Cache-Control: public, max-age=3600. Das SDK ruft diese automatisch ab.
Automatisierungsregeln
Automatisierungsregeln verbinden Zahlungsereignisse (Stripe, PayPal) mit Lizenzaktionen (Ausstellen, Aktivieren, Sperren, Widerrufen).
/api/licensing/automationRequires: manage:license-policiesAlle Automatisierungsregeln auflisten.
/api/licensing/automationRequires: manage:license-policiesEine neue Automatisierungsregel erstellen.
{
"name": "Stripe checkout → issue key",
"provider": "stripe",
"triggerEvent": "checkout.session.completed",
"action": "issue_key",
"policyId": "pol_abc123",
"isActive": true
}| Anbieter | Auslösende Ereignisse |
|---|---|
stripe | checkout.session.completed, invoice.paid, payment_intent.succeeded |
paypal | PAYMENT.CAPTURE.COMPLETED |
manual | manual_trigger |
| Aktion | Beschreibung |
|---|---|
issue_key | Einen neuen Schlüssel unter der verknüpften Richtlinie ausstellen |
activate_key | Einen vorhandenen Schlüssel aktivieren |
suspend_key | Einen Schlüssel sperren |
revoke_key | Einen Schlüssel widerrufen |
/api/licensing/automation/:idRequires: manage:license-policiesEine einzelne Automatisierungsregel abrufen.
/api/licensing/automation/:idRequires: manage:license-policiesEine Automatisierungsregel aktualisieren.
/api/licensing/automation/:idRequires: manage:license-policiesEine Automatisierungsregel löschen.
Webhooks
Diese Endpunkte empfangen Ereignisse von Zahlungsanbietern. Sie werden per Signatur verifiziert und erfordern kein Bearer-Token.
/api/licensing/webhooks/stripeEmpfängt Stripe-Webhook-Ereignisse. Verifizierung über den stripe-signature-Header. Setze STRIPE_LICENSING_WEBHOOK_SECRET in deiner Umgebung.
/api/licensing/webhooks/paypalEmpfängt PayPal-Webhook-Ereignisse. Verifizierung über HMAC-SHA256. Setze PAYPAL_LICENSING_WEBHOOK_SECRET und PAYPAL_LICENSING_WEBHOOK_ID in deiner Umgebung.
Statistiken
/api/licensing/statsRequires: view:license-statsGibt aggregierte Lizenzierungsstatistiken zurück.
{
"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": []
}
}