Files
webshop/.brain/licserver-api.md
DanielS 3a090b7664
All checks were successful
Staging Build / build (push) Successful in 2m59s
docs: document licserver management api
2026-07-15 16:18:30 +02:00

4.5 KiB

LicServer API Spezifikation (v1)

Dokumentation der REST-Schnittstellen des CASPOS Lizenzservers.

1. Endpunkte (Port 9981 - Activation API)

Activation (Aktivierung)

POST /v1/activate

Aktiviert eine neue Lizenz.

Request Body (application/json):

{
  "productId": "string",
  "productVersion": "string",
  "activationCode": "string",
  "hardwareBindingType": "string",
  "hardwareBindingId": "string"
}

Response 200 OK (application/json):

{
  "licenseData": {
    "id": "string",
    "serialNumber": "string",
    "productId": "string",
    "filename": "string",
    "content": "string" // Base64 Byte-Inhalt
  },
  "apiKey": "string",
  "secret": "string"
}

Response Headers:

  • ETag (string): Der ETag-Wert der Lizenz.

POST /v1/activate-existing

Aktiviert eine bereits vorhandene Lizenz erneut.

Request Body (application/json):

{
  "productId": "string",
  "productVersion": "string",
  "serialNumber": "string",
  "proofOfPossessionHash": "string",
  "salt": "string",
  "hardwareBindingType": "string",
  "hardwareBindingId": "string"
}

Response 200 OK (application/json): Gleiche Struktur wie bei /v1/activate.


Licenses (Lizenzen)

GET /v1/licenses/{id}

Holt die Lizenz-Details zu einer bestimmten Lizenz-ID.

Request Parameters:

  • id (path, string, required): Die UUID der Lizenz.
  • If-None-Match (header, string, optional): ETag zur Cache-Validierung.

Response 200 OK (application/json):

{
  "id": "string",
  "serialNumber": "string",
  "productId": "string",
  "filename": "string",
  "content": "string" // Base64 Byte-Inhalt
}

Response 304 Not Modified: Falls die Lizenz nicht verändert wurde.

Response 404 Not Found / 403 Forbidden: Standard Fehlerobjekt ProblemDetails.


2. Endpunkte (Port 9980 - Management API)

Alle Anfragen an die Management-API müssen authentifiziert sein.

  • Header-Format: X-Api-Key: <Schlüssel>

Partners (Partner)

GET /api-v1/partners

Gibt eine paginierte Liste aller Partner zurück.

Request Parameters (Query):

  • search (string, optional): Filtert nach Name/E-Mail.
  • page (integer, default: 1)
  • pageSize (integer, default: 20)

Response 200 OK (application/json):

{
  "page": 1,
  "pageSize": 20,
  "totalCount": 1,
  "totalPages": 1,
  "hasNextPage": false,
  "hasPreviousPage": false,
  "items": [
    {
      "id": "string (UUID)",
      "name": "string",
      "email": "string",
      "erpId": "string"
    }
  ]
}

GET /api-v1/partners/{id}

Holt Partner-Details zu einer bestimmten ID.

Response 200 OK (application/json):

{
  "id": "string (UUID)",
  "name": "string",
  "email": "string",
  "erpId": "string"
}

Customers (Kunden von Partnern)

GET /api-v1/partners/{partnerId}/customers

Gibt eine paginierte Liste aller Kunden eines bestimmten Partners zurück.

Request Parameters (Query):

  • search (string, optional): Filtert nach Name/E-Mail.
  • page (integer, default: 1)
  • pageSize (integer, default: 20)

Response 200 OK (application/json):

{
  "page": 1,
  "pageSize": 20,
  "totalCount": 1,
  "totalPages": 1,
  "hasNextPage": false,
  "hasPreviousPage": false,
  "items": [
    {
      "id": "string (UUID)",
      "name": "string",
      "street": "string",
      "houseNumber": "string",
      "houseNumberAddon": "string",
      "zipCode": "string",
      "city": "string",
      "countryCode": "string",
      "email": "string",
      "partnerId": "string (UUID)",
      "erpId": "string"
    }
  ]
}

GET /api-v1/partners/{partnerId}/customers/{customerId}

Holt detaillierte Kundeninformationen.

Response 200 OK (application/json):

{
  "id": "string (UUID)",
  "name": "string",
  "street": "string",
  "houseNumber": "string",
  "houseNumberAddon": "string",
  "zipCode": "string",
  "city": "string",
  "countryCode": "string",
  "email": "string",
  "partnerId": "string (UUID)",
  "erpId": "string",
  "partnerName": "string",
  "taxNumber": "string",
  "vatIdNumber": "string",
  "notes": "string",
  "locations": []
}

3. Typen & Schemas

LicenseData

{
  "id": "string",
  "serialNumber": "string",
  "productId": "string",
  "filename": "string",
  "content": "string" // Base64 Byte-Inhalt
}

ProblemDetails

{
  "type": "string",
  "title": "string",
  "status": 0,
  "detail": "string",
  "instance": "string"
}