> ## Documentation Index
> Fetch the complete documentation index at: https://dokumentation.websale.de/llms.txt
> Use this file to discover all available pages before exploring further.

# API-Referenz Log Manager

> Shop-Logs über die Admin Interface API abrufen, nach Schweregrad, Subshop oder Zeitstempel filtern und eigene Log-Gruppen verwalten.

Die Schnittstelle unter dem Endpunkt `logmanager/` bietet Zugriff auf die im Shopsystem erfassten Logs. Sie ermöglicht das Abrufen einzelner Logs oder ganzer Log-Listen sowie die gezielte Analyse durch Filterung nach Parametern wie Schweregrad, Subshop oder Zeitstempel.

Zusätzlich können Log-Gruppen erstellt und verwaltet werden, um spezifische Filterkriterien zu speichern und Benachrichtigungen bei neuen relevanten Einträgen zu erhalten.

Die API unterstützt damit sowohl die manuelle Analyse als auch eine automatisierte Überwachung von Systemereignissen.

Zur Nutzung der Schnittstellen sind entsprechende Zugriffsrechte erforderlich.

***

## Unterstützte Methoden

Angabe aller unterstützten Methoden.

| **Befehl/Info**        | **Endpunkte**         | **GET**               | **POST**              | **PUT**               | **DELETE**            |
| ---------------------- | --------------------- | --------------------- | --------------------- | --------------------- | --------------------- |
| **Logs**               | logmanager/logs       | <Icon icon="check" /> | <Icon icon="ban" />   | <Icon icon="ban" />   | <Icon icon="ban" />   |
| **Log-Gruppen**        | logmanager/groups     | <Icon icon="check" /> | <Icon icon="check" /> | <Icon icon="check" /> | <Icon icon="check" /> |
| **Benachrichtigungen** | <Icon icon="check" /> | <Icon icon="ban" />   | <Icon icon="check" /> | <Icon icon="ban" />   |                       |

## Ressourcen: Felder in Logs

### Wichtige Datenfelder in Logs

Logs im System basieren auf Daten aus *Elasticsearch* und unterliegen daher keiner starren Struktur. Dennoch gibt es zentrale Felder, die in nahezu allen Log-Einträgen vorkommen und für Filter, Sortierung oder Auswertung genutzt werden können.

Die folgende Übersicht listet die wichtigsten dieser Felder:

| **Name**                 | **Typ** | **Verwendung**                                                                                  |
| ------------------------ | ------- | ----------------------------------------------------------------------------------------------- |
| **@timestamp**           | String  | Zeitpunkt der Erstellung                                                                        |
| **\_id**                 | String  | Eindeutige ID des Logs                                                                          |
| **app**                  | String  | Name des Programms, das das Log generiert hat (z.B. `reastapi`, `shop`, `statisticAggregator`)  |
| **logger**               | String  | Name des Loggers, der der Kategorisierung dient (z.B. `restapi.controllers.customers`)          |
| **msg**                  | String  | Die Nachricht des Logs                                                                          |
| **sessionId (optional)** | String  | Eindeutige ID der Sitzung, in der das Log generiert wurde                                       |
| **severity**             | String  | Schweregrad des Logs, der der Kategorisierung dient.  Mögliche Werte:  `debuginfowarnerrorcrit` |
| **shopId**               | String  | Der technische Name des Shops                                                                   |
| **stageId (optional)**   | String  | Stage, auf der das Log generierte wurde                                                         |
| **subshopId (optional)** | String  | Subshop, in dem das Log generiert wurde                                                         |

**Hinweis:** Weitere Felder können abhängig vom Ursprung und Kontext des Logs vorhanden sein. Die tatsächliche Struktur einzelner Log-Einträge kann abweichen.

#### Beispiel

Der folgende Log-Eintrag stammt aus dem System und zeigt typische Felder, wie sie von Elasticsearch geliefert werden. Optional enthaltene Felder wie `agent`, `host` oder `tags` können je nach Ursprung des Logs variieren.

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "@timestamp": "2025-05-07T06:51:15.148Z",
    "@version": "1",
    "_id": "KJGDqZYBCZfVknTATek6",
    "agent": {
        "ephemeral_id": "166b1b26-3479-44a0-abd5-01eb97dfde6a",
        "hostname": "849eec2f201d",
        "id": "1bac5950-93cd-45c0-83ef-96f0f835523b",
        "name": "849eec2f201d",
        "type": "filebeat",
        "version": "7.17.3"
    },
    "app": "restapi",
    "ecs": {
        "version": "1.12.0"
    },
    "host": {
        "name": "849eec2f201d"
    },
    "hostname": "db762f83481f",
    "input": {
        "type": "log"
    },
    "log": {
        "file": {
            "path": "/opt/ws/v9-logs/restapi/2025_05_07.log"
        },
        "offset": 4746
    },
    "logger": "restapi.controller.statistics",
    "msg": "Failed to get yesterday's active visitors: {\"error\":{\"root_cause\":[{\"type\":\"index_not_found_exception\",\"reason\":\"no such index [visitors]\",\"resource.type\":\"index_or_alias\",\"resource.id\":\"visitors\",\"index_uuid\":\"_na_\",\"index\":\"visitors\"}],\"type\":\"index_not_found_exception\",\"reason\":\"no such index [visitors]\",\"resource.type\":\"index_or_alias\",\"resource.id\":\"visitors\",\"index_uuid\":\"_na_\",\"index\":\"visitors\"},\"status\":404}",
    "severity": "err",
    "shopId": "myshop",
    "tags": [
        "v9",
        "beats_input_raw_event"
    ]
}
```

### Programme, die Logs erzeugen

Das Feld `app` in einem Logeintrag gibt an, welches Programm oder welcher Dienst das Log erzeugt hat. Die folgende Übersicht listet die möglichen Programme auf, die in der Praxis als `app`-Wert erscheinen können – inklusive einer kurzen Beschreibung ihrer Aufgabe innerhalb des Shop-Systems.

| **Werte A - Z (app)**       | **Beschreibung**                                                                                                                                                                                     |
| --------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `admin`                     | Backend-Interface für die Shop-Verwaltung                                                                                                                                                            |
| `appAutomation`             | Automatisierungsprozesse im Shop-System                                                                                                                                                              |
| `asse`                      | Automatischer Dienst zur Ausführung und Zustellung serverseitiger HTTP-Benachrichtigungen (Asynchronous Server Side Events)                                                                          |
| `backInStock`               | Verwaltung von Benachrichtigungen bei wieder verfügbaren Artikeln                                                                                                                                    |
| `cache`                     | Aktualisieren vom Cache                                                                                                                                                                              |
| `captureExecutor`           | Verarbeitet automatisch Zahlungs-Capture-Dateien für Bestellungen, führt bei Bedarf Zahlungsaufforderungen an den Zahlungsanbieter durch und verwaltet Wiederholungsversuche sowie Fehlerbehandlung. |
| `categoryProductsRebuilder` | Prozess, der Produkte Kategorien mit regelbasierter Produktzuweisung automatisch zuordnet.                                                                                                           |
| `configUpdater`             | Interner Dienst, der auf die Aktualisierung von Konfigurationsdaten reagiert                                                                                                                         |
| `feedBuilder`               | Erstellung von Datenfeeds für Exporte und von Sitemaps                                                                                                                                               |
| `garbageCollector`          | Automatische Bereinigung nicht mehr benötigter Daten                                                                                                                                                 |
| `heartbeatChecker`          | Überwachung von Hintergrundprogrammen                                                                                                                                                                |
| `html2mime`                 | Umwandlung von HTML in E-Mails                                                                                                                                                                       |
| `imageChecker`              | Prüft, ob es ungenutzte Produktbilder gibt und ob referenzierte Bilder existieren.                                                                                                                   |
| `imageconverter`            | Konvertiert Bilder in andere Formate                                                                                                                                                                 |
| `importer`                  | Import von Daten wie Produkten, Kundendaten etc.                                                                                                                                                     |
| `mailbackup`                | Sicherung versendeter E-Mails                                                                                                                                                                        |
| `mailer`                    | Versand von E-Mails aus dem System heraus                                                                                                                                                            |
| `newsletterSubscribeHelper` | Prozess, der Double-Opt-In-E-Mails mit einer Einladung zur Newsletter-Anmeldung versendet.                                                                                                           |
| `notificator`               | Benachrichtigungsdienst für die App                                                                                                                                                                  |
| `productRatingBackend`      | Versand von Bewertungsanfragen                                                                                                                                                                       |
| `restapi`                   | Logs aus der REST-API                                                                                                                                                                                |
| `searchindexer`             | Indizierung von Produkten für die Shopsuche                                                                                                                                                          |
| `shop`                      | Allgemeiner Shop-Prozess (z. B. Warenkorb, Checkout, Navigation)                                                                                                                                     |
| `spChecker`                 | Mo­ni­to­ring der System-Points-Nutzung                                                                                                                                                              |
| `statisticAggregator`       | Aggregation und Aufbereitung statistischer Daten                                                                                                                                                     |
| `templateCompiler`          | Kompiliert Templates, kann über die REST API gestartet werden                                                                                                                                        |

## Methoden für Logs

Über die nachfolgenden Endpunkte lassen sich Log-Einträge aus dem System abrufen. Die Logs enthalten detaillierte Informationen zu Ereignissen im Shop, wie z. B. Fehlermeldungen, Debug-Ausgaben oder sicherheitsrelevante Hinweise.

Einträge können gefiltert und sortiert sowie einzeln nach ihrer ID geladen werden.

Für den Zugriff auf diese Daten sind entsprechende Leseberechtigungen erforderlich.

### GET logmanager/logs

Über diesen Endpunkt kann eine Liste mit Logeinträgen abgefragt werden.

Die Ergebnisse lassen sich nach Zeitstempel, Schweregrad (`severity`), Shop, Subshop, Logger, Session-ID oder weiteren Feldern filtern und sortieren. Standardmäßig wird nach dem Feld `@timestamp` sortiert. Für die Abfrage kann ein Zeitraum mit `filter_gte[createdAt]` und `filter_lte[createdAt]` angegeben werden. Der Zugriff ist auf maximal 300 Einträge pro Anfrage begrenzt, eine Paginierung erfolgt über `nextPageToken`.

Die maximale Anzahl an Ergebnissen beträgt 10.000 - auch bei Paginierung. Darüber hinausgehende Daten können nicht abgerufen werden.

Zur Verfügung stehen Logs verschiedener Anwendungen (z. B. `shop`, `restapi`) und Quellen (z. B. `filebeat`). Sie enthalten strukturierte Metadaten und Fehlermeldungen, die zur Analyse von Prozessen oder Fehlern im Shop dienen. Um die tatsächlichen Logdateien oder Pfade zu ermitteln, kann das Feld `log.file.path` genutzt werden.

#### Beispiel

Zugriff auf bis zu 100 Logs aller Art im Zeitraum 2025.03.24–2025.04.24

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/logs?size=100&sort=@timestamp:asc&filter_eq[severity]=debug&filter_eq[severity]=info&filter_eq[severity]=warning&filter_eq[severity]=err&filter_eq[severity]=crit&filter_gte[createdAt]=2025-03-24T00:00:00.371Z&filter_lte[createdAt]=2025-04-23T23:59:59.371Z&filter_eq[subshopId]=deutsch
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "endReached": false,
    "items": [
        {
            "@timestamp": "2025-04-04T13:41:51.097Z",
            "@version": "1",
            "_id": "9e2uHpYBZKNjyb2oXatY",
            "agent": {
                "ephemeral_id": "70e334c2-f5ac-4599-aa32-dd5dc7d7551d",
                "hostname": "9f46d9c66ba8",
                "id": "1bac5950-93cd-45c0-83ef-96f0f835523b",
                "name": "9f46d9c66ba8",
                "type": "filebeat",
                "version": "7.17.3"
            },
            "app": "shop",
            "ecs": {
                "version": "1.12.0"
            },
            "host": {
                "name": "9f46d9c66ba8"
            },
            "hostname": "f87daf6dd2fe",
            "input": {
                "type": "log"
            },
            "log": {
                "file": {
                    "path": "/opt/ws/v9-logs/shop/2025_04_04.log"
                },
                "offset": 5825
            },
            "logger": "form",
            "msg": "Missing recaptcha parameters:\nverifyUrl='https://www.google.com/re...",
            "sessionId": "973dda5db818b2a57942baed66f27f0939f78ee162b6bb65490e8fea3772791e",
            "severity": "crit",
            "shopId": "myshop",
            "stageId": "3",
            "subshopId": "deutsch",
            "tags": [
                "v9",
                "beats_input_raw_event"
            ]
        },
        {
            "@timestamp": "2025-04-09T13:17:57.461Z",
            "@version": "1",
            "_id": "iu7LHpYBZKNjyb2o-KEm",
            "agent": {
                "ephemeral_id": "70e334c2-f5ac-4599-aa32-dd5dc7d7551d",
                "hostname": "9f46d9c66ba8",
                "id": "1bac5950-93cd-45c0-83ef-96f0f835523b",
                "name": "9f46d9c66ba8",
                "type": "filebeat",
                "version": "7.17.3"
            },
            "app": "shop",
            "ecs": {
                "version": "1.12.0"
            },
            "host": {
                "name": "9f46d9c66ba8"
            },
            "hostname": "f87daf6dd2fe",
            "input": {
                "type": "log"
            },
            "log": {
                "file": {
                    "path": "/opt/ws/v9-logs/shop/2025_04_09.log"
                },
                "offset": 85186
            },
            "logger": "product",
            "msg": "Meta title field of the product is not a string",
            "sessionId": "269300aab23352c10324f82817bcb12aaf433e325425753b3c89018cee7fc0fd",
            "severity": "err",
            "shopId": "myshop",
            "stageId": "3",
            "subshopId": "deutsch",
            "tags": [
                "v9",
                "beats_input_raw_event"
            ]
        },
        {
            "@timestamp": "2025-04-03T07:41:46.882Z",
            "@version": "1",
            "_id": "Hd7LYZYBUuEsdVP_P_eb",
            "agent": {
                "ephemeral_id": "71484722-483c-4c99-9436-b470708d50c7",
                "hostname": "0d81d1bd24c9",
                "id": "1bac5950-93cd-45c0-83ef-96f0f835523b",
                "name": "0d81d1bd24c9",
                "type": "filebeat",
                "version": "7.17.3"
            },
            "app": "restapi",
            "ecs": {
                "version": "1.12.0"
            },
            "host": {
                "name": "0d81d1bd24c9"
            },
            "hostname": "2d3c543a9bfd",
            "input": {
                "type": "log"
            },
            "log": {
                "file": {
                    "path": "/opt/ws/v9-logs/restapi/2025_04_03.log"
                },
                "offset": 93145
            },
            "logger": "data.products.repository",
            "msg": "Generating XML for combination",
            "severity": "info",
            "shopId": "myshop",
            "stageId": "3",
            "subshopId": "deutsch",
            "tags": [
                "v9",
                "beats_input_raw_event"
            ]
        }
    ],
    "nextPageToken": "MTAw",
    "totalCount": 10000
}
```

#### Filterfelder

`logger` (wenn nicht spezifiziert - alle), `createdAt` (statt `@timestamp`), weitere Felder eines Logs wie `subshopId`, `severity`, `app`

#### Sortierfelder

Es ist möglich, Logs nach unterschiedlichen Feldern zu sortieren (z.B. nach `sessionId.keyword`), aber standardmäßig wird nur die Sortierung nach `@timestamp` genutzt.

#### Fehlercodes

| **Fehler**              | **Typ**             | **Grund**                                                                                                            |
| ----------------------- | ------------------- | -------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized        |                     | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs . |
| 400 Bad Request         | "invalidValue"      |                                                                                                                      |
| 400 Bad Request         | "invalidCharacters" | `size` ist keine Ganzzahl.<br />Ein Filterwert ist ungültig.                                                         |
| 400 Bad Request         | "unknownDataField"  | Ein Filter- oder Sortierfeld ist ungültig.                                                                           |
| 400 Bad Request         | "unknownOperation"  | Ein Filtertyp ist ungültig.                                                                                          |
| 400 Bad Request         | "syntaxError"       | `sort` enthält mehr als einen oder keinen ":".                                                                       |
| 503 Service Unavailable | "internalError"     | Logs konnten nicht geladen werden.                                                                                   |

### GET logmanager/logs/\{id}

Diese Methode lädt ein einzelnes Log-Ereignis anhand seiner ID.

Es werden alle zugehörigen Felder wie Zeitstempel, Quelle, Schweregrad, Nachricht und Kontextinformationen zurückgegeben.

Für die Nutzung dieser Methode müssen entsprechende Leserechte für Logs vorhanden sein.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/logs/4-yUHpYBZKNjyb2okM3P
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "@timestamp": "2025-04-01T15:38:07.934Z",
    "@version": "1",
    "agent": {
        "ephemeral_id": "70e334c2-f5ac-4599-aa32-dd5dc7d7551d",
        "hostname": "9f46d9c66ba8",
        "id": "1bac5950-93cd-45c0-83ef-96f0f835523b",
        "name": "9f46d9c66ba8",
        "type": "filebeat",
        "version": "7.17.3"
    },
    "app": "shop",
    "ecs": {
        "version": "1.12.0"
    },
    "host": {
        "name": "9f46d9c66ba8"
    },
    "hostname": "f87daf6dd2fe",
    "input": {
        "type": "log"
    },
    "log": {
        "file": {
            "path": "/opt/ws/v9-logs/shop/2025_04_01.log"
        },
        "offset": 0
    },
    "logger": "router",
    "msg": "Path '/favicon.ico' not known",
    "sessionId": "8fd2e99fb7fe7da9c35f0685b8381f0ab6ac05ff159a0767e2f3b2e899d7aadf",
    "severity": "info",
    "shopId": "myshop",
    "stageId": "3",
    "subshopId": "deutsch",
    "tags": [
        "v9",
        "beats_input_raw_event"
    ]
}
```

#### Fehlercodes

| **Fehler**              | **Typ**         | **Grund**                                                                                                           |
| ----------------------- | --------------- | ------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized        |                 | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs. |
| 404 Not Found           |                 | Das Log wurde nicht gefunden.                                                                                       |
| 503 Service Unavailable | "internalError" | Das Log konnte nicht geladen werden.                                                                                |

## Methoden für Log-Gruppen

Über die folgenden Endpunkte lassen sich Log-Gruppen im Shop-System erstellen, abrufen, aktualisieren und löschen. Log-Gruppen definieren, welche Arten von Logs beobachtet werden sollen – z. B. nach Schweregrad, Subshop oder Quelle – und bilden damit die Grundlage für gezielte Auswertungen und Benachrichtigungen.

Zusätzlich können Benachrichtigungseinstellungen einer Gruppe konfiguriert werden, um über neue Log-Einträge regelmäßig informiert zu werden.

Zur Nutzung der Schnittstellen sind entsprechende Rechte zum Verwalten von Logs erforderlich.

### GET logmanager/groups

Mit diesem Endpunkt lassen sich Log-Gruppen abfragen. Eine Log-Gruppe bündelt bestimmte Log-Einträge anhand eines konfigurierbaren Filters, z. B. nach Schweregrad oder Zeitraum. Die Ergebnisliste kann über Filter- und Sortierparameter gezielt eingeschränkt werden.

Für den Zugriff auf diese Daten sind entsprechende Leseberechtigungen erforderlich.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups?size=100
&filter_gte[createdAt]=2025-03-25T00:00:00.913Z
&filter_lte[createdAt]=2025-04-25T23:59:59.913Z
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "endReached": true,
    "items": [
        {
            "createdAt": "2025-04-23T16:03:37.000Z",
            "description": "myDescription",
            "filter": {
                "or": []
            },
            "id": 4,
            "name": "myGroup",
            "notificationEnabled": false,
            "notificationId": 3
        }
    ],
    "nextPageToken": "MA",
    "totalCount": 1
}
```

#### Filterfelder

`id`, `name`, `description`, `notificationId`, `filter`, `createdAt`

#### Sortierfelder

`id`, `name`, `description`, `createdAt`

#### Fehlercodes

| **Fehler**       | **Typ**             | **Grund**                                                                                                           |
| ---------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                     | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs. |
| 400 Bad Request  | "invalidValue"      |                                                                                                                     |
| 400 Bad Request  | "invalidCharacters" | `size` ist keine Ganzzahl.<br />Ein Filterwert ist ungültig.                                                        |
| 400 Bad Request  | "unknownDataField"  | Ein Filter- oder Sortierfeld ist ungültig.                                                                          |
| 400 Bad Request  | "unknownOperation"  | Ein Filtertyp ist ungültig.                                                                                         |
| 400 Bad Request  | "syntaxError"       | `sort` enthält mehr als einen oder keinen ":".                                                                      |

### GET logmanager/groups/\{id}

Mit diesem Endpunkt kann eine einzelne Log-Gruppe anhand ihrer ID abgerufen werden.

Die Log-Gruppe enthält Metadaten wie Name, Beschreibung, Erstellungszeitpunkt, Filter und einen optionalen Verweis auf eine Benachrichtigungskonfiguration.

Für den Zugriff sind entsprechende Leseberechtigungen erforderlich.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups/4
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "createdAt": "2025-04-23T16:03:37.000Z",
    "description": "myDescription",
    "filter": {
        "or": []
    },
    "id": 4,
    "name": "myGroup",
    "notificationId": 3
}
```

#### Fehlercodes

| **Fehler**       | **Typ**        | **Grund**                                                                                                           |
| ---------------- | -------------- | ------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs. |
| 400 Bad Request  | "invalidValue" | `id` fehlt oder ist ungültig.                                                                                       |
| 404 Not Found    |                | Die Log-Gruppe wurde nicht gefunden.                                                                                |

### GET logmanager/groups/\{id}/logs

Mit diesem Endpunkt kann eine Liste von Logs abgerufen werden, die zu einer bestimmten Log-Gruppe gehören. Die ID der Log-Gruppe muss in der URL übergeben werden.

Die Abfrage unterstützt Filterung, Sortierung sowie die Paginierung über die Parameter `size`, `sort` und `pageToken`.

Für den Zugriff müssen entsprechende Leseberechtigungen vorhanden sein.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups/3/logs?size=100
&filter_gte[createdAt]=2025-03-24T00:00:00.186Z
&filter_lte[createdAt]=2025-04-25T23:59:59.186Z
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "endReached": false,
    "items": [
        {
            "@timestamp": "2025-04-11T09:35:24.646Z",
            "@version": "1",
            "_id": "6ckRXZYBlnEc1Y7xhdd4",
            "agent": {
                "ephemeral_id": "823e4491-dab9-468c-98d4-d5303323ee16",
                "hostname": "0d81d1bd24c9",
                "id": "1bac5950-93cd-45c0-83ef-96f0f835523b",
                "name": "0d81d1bd24c9",
                "type": "filebeat",
                "version": "7.17.3"
            },
            "app": "shop",
            "ecs": {
                "version": "1.12.0"
            },
            "host": {
                "name": "0d81d1bd24c9"
            },
            "hostname": "391a58954768",
            "input": {
                "type": "log"
            },
            "log": {
                "file": {
                    "path": "/opt/ws/v9-logs/shop/2025_04_11.log"
                },
                "offset": 94691
            },
            "logger": "shop.parseView",
            "msg": "RenderView Time 72703 us",
            "sessionId": "b831971cb73728321b979bdd49906512fdc48efd4be5022011abecd4bec9da89",
            "severity": "debug",
            "shopId": "myshop",
            "tags": [
                "v9",
                "beats_input_raw_event"
            ]
        },
        ...
    ],
    "nextPageToken": "MTAw",
    "totalCount": 10000
}
```

#### Fehlercodes

| **Fehler**              | **Typ**             | **Grund**                                                                                                           |
| ----------------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized        |                     | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs. |
| 400 Bad Request         | "invalidValue"      |                                                                                                                     |
| 400 Bad Request         | "invalidCharacters" | `size` ist keine Ganzzahl.<br />Ein Filterwert ist ungültig.                                                        |
| 400 Bad Request         | "unknownDataField"  | Ein Filter- oder Sortierfeld ist ungültig.                                                                          |
| 400 Bad Request         | "unknownOperation"  | Ein Filtertyp ist ungültig.                                                                                         |
| 400 Bad Request         | "syntaxError"       | `sort` enthält mehr als einen oder keinen ":".                                                                      |
| 404 Not Found           |                     | Die Log-Gruppe wurde nicht gefunden.                                                                                |
| 503 Service Unavailable | "internalError"     | Logs konnten nicht geladen werden.                                                                                  |

### GET logmanager/groups/\{id}/notifications

Mit diesem Endpunkt können die Benachrichtigungseinstellungen einer bestimmten Log-Gruppe abgerufen werden. Dazu gehören u. a. die Empfänger, der Benachrichtigungszeitraum und der Zeitpunkt des letzten Versands. Die ID der Log-Gruppe muss in der URL übergeben werden.

Für den Zugriff sind entsprechende Leseberechtigungen erforderlich.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups/3/notifications
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "createdAt": "2025-04-23T15:08:56.000Z",
    "creator": 1,
    "enabled": true,
    "filter": {
        "or": []
    },
    "id": 2,
    "lastSentTimestamp": "2025-04-23T15:08:17.000Z",
    "logGroupId": 3,
    "notificationPeriod": 1440,
    "recipients": {
        "accounts": [
            {
                "enabled": true,
                "id": 1
            }
        ],
        "emails": []
    },
    "startDate": "2025-04-23T15:08:17.000Z",
    "subject": "asdf"
}
```

#### Fehlercodes

| **Fehler**       | **Typ**        | **Grund**                                                                                                           |
| ---------------- | -------------- | ------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Logs. |
| 400 Bad Request  | "invalidValue" | `id` fehlt oder ist ungültig.                                                                                       |
| 404 Not Found    |                | Die Log-Gruppe wurde nicht gefunden.                                                                                |

### POST logmanager/groups

Mit diesem Endpunkt kann eine neue Log-Gruppe erstellt werden.

Pflichtfelder sind `name` und `filter`; das Feld `description` ist optional. Der Filter legt fest, welche Logs der Gruppe zugeordnet werden sollen. Die Filter bestehen aus geschachtelten logischen Bedingungen (z. B. `or`, `and`, `eq`).

Für die Nutzung des Endpunkts müssen die erforderlichen Rechte zum Erstellen von Log-Gruppen vorhanden sein.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups
```

#### Request Body

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "name": "asdf",
    "description": "fdsa",
    "filter": {
        "or": [
            {
                "and": [
                    {
                        "or": [
                            {
                                "eq": {
                                    "app": "restapi.cgi"
                                }
                            }
                        ]
                    },
                    {
                        "or": [
                            {
                                "eq": {
                                    "logger": "restapi.controllers.products"
                                }
                            }
                        ]
                    },
                    {
                        "or": [
                            {
                                "eq": {
                                    "severity": "error"
                                }
                            },
                            {
                                "eq": {
                                    "severity": "crit"
                                }
                            }
                        ]
                    },
                    {
                        "or": [
                            {
                                "eq": {
                                    "subshopId": "deutsch"
                                }
                            },
                            {
                                "eq": {
                                    "subshopId": "english"
                                }
                            }
                        ]
                    }
                ]
            }
        ]
    }
}
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "createdAt": "2025-04-23T16:03:37.000Z",
    "description": "fdsa",
    "filter": {
        "or": [
            {
                "and": [
                    {
                        "or": [
                            {
                                "eq": {
                                    "app": "restapi.cgi"
                                }
                            }
                        ]
                    },
                    {
                        "or": [
                            {
                                "eq": {
                                    "logger": "restapi.controllers.products"
                                }
                            }
                        ]
                    },
                    {
                        "or": [
                            {
                                "eq": {
                                    "severity": "error"
                                }
                            },
                            {
                                "eq": {
                                    "severity": "crit"
                                }
                            }
                        ]
                    },
                    {
                        "or": [
                            {
                                "eq": {
                                    "subshopId": "deutsch"
                                }
                            },
                            {
                                "eq": {
                                    "subshopId": "english"
                                }
                            }
                        ]
                    }
                ]
            }
        ]
    },
    "id": 1,
    "name": "asdf",
    "notificationId": 0
}
```

**Hinweis:** Eine neu erstellte Log-Gruppe hat stets `notificationId: 0`, da noch keine Benachrichtigungskonfiguration zugewiesen wurde. Diese kann anschließend über `PUT logmanager/groups/{id}/notifications` eingerichtet werden.

#### Fehlercodes

| **Fehler**              | **Typ**            | **Grund**                                                                                                               |
| ----------------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized        |                    | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Erstellen von Logs. |
| 400 Bad Request         |                    | Request body konnte nicht geladen werden.                                                                               |
| 400 Bad Request         | "unknownDataField" | Ein unbekanntes Feld wurde im Request Body übergeben.                                                                   |
| 400 Bad Request         | "invalidFormat"    | `name` oder `description` ist kein String.<br />`filter` ist kein Objekt.                                               |
| 400 Bad Request         | "invalidValue"     | `name` ist ein leerer String.                                                                                           |
| 400 Bad Request         | "missing"          | `name` oder `filter` wurden nicht übergeben.                                                                            |
| 503 Service Unavailable | "internalError"    | Die neu erstellte Log-Gruppe konnte nicht geladen werden.                                                               |

### PUT logmanager/groups/\{id}

Mit diesem Endpunkt kann eine bestehende Log-Gruppe anhand ihrer ID aktualisiert werden. Änderungen können z. B. den Namen, die Beschreibung oder das Filterobjekt der Gruppe betreffen. Wird ein Filter übergeben, muss dieser ein baumartiges Objekt sein.

Für die Nutzung des Endpunkts müssen die erforderlichen Rechte zum Bearbeiten von Log-Gruppen vorhanden sein.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups/4
```

#### Request Body

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "name": "myGroup",
    "description": "newDescription",
    "filter": {
        "or": []
    }
}
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "createdAt": "2025-04-23T16:03:37.000Z",
    "description": "newDescription",
    "filter": {
        "or": []
    },
    "id": 4,
    "name": "myGroup",
    "notificationId": 3
}
```

#### Fehlercodes

| **Fehler**       | **Typ**            | **Grund**                                                                                                               |
| ---------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                    | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Schreiben von Logs. |
| 400 Bad Request  |                    | Request body konnte nicht geladen werden.                                                                               |
| 400 Bad Request  | "unknownDataField" | Ein unbekanntes Feld wurde im Request Body übergeben.                                                                   |
| 400 Bad Request  | "invalidValue"     | `id` fehlt oder ist ungültig.                                                                                           |
| 400 Bad Request  | "invalidFormat"    | `name` oder `description` ist kein String.<br />`filter` ist kein Objekt.                                               |
| 404 Not Found    |                    | Die Log-Gruppe wurde nicht gefunden.                                                                                    |

### PUT logmanager/groups/\{id}/notifications

Mit diesem Endpunkt können die Benachrichtigungseinstellungen einer bestehenden Log-Gruppe anhand ihrer ID geändert werden. Dabei lassen sich z. B. Empfänger, Startzeitpunkt, Benachrichtigungsintervall sowie Betreff definieren oder anpassen.

Zur Nutzung sind die entsprechenden Schreibrechte für Log-Gruppen erforderlich.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups/3/notifications
```

#### Request Body

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "enabled": true,
    "subject": "asdf",
    "recipients": {
        "accounts": [
            {
                "id": 1,
                "enabled": true
            }
        ]
    },
    "startDate": "2025-04-23T15:08:17.550Z",
    "notificationPeriod": 1440
}
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "createdAt": "2025-04-23T15:08:56.000Z",
    "creator": 1,
    "enabled": true,
    "filter": {
        "or": []
    },
    "id": 2,
    "lastSentTimestamp": "2025-04-23T15:08:17.000Z",
    "logGroupId": 3,
    "notificationPeriod": 1440,
    "recipients": {
        "accounts": [
            {
                "enabled": true,
                "id": 1
            }
        ],
        "emails": []
    },
    "startDate": "2025-04-23T15:08:17.000Z",
    "subject": "asdf"
}
```

#### Fehlercodes

| **Fehler**       | **Typ**            | **Grund**                                                                                                                                                                                                                                                                                     |
| ---------------- | ------------------ | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                    | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Schreiben von Logs.                                                                                                                                                                       |
| 400 Bad Request  |                    | Request body konnte nicht geladen werden.                                                                                                                                                                                                                                                     |
| 400 Bad Request  | "unknownDataField" | Ein unbekanntes Feld wurde im Request Body übergeben.                                                                                                                                                                                                                                         |
| 400 Bad Request  | "invalidValue"     |                                                                                                                                                                                                                                                                                               |
| 400 Bad Request  | "invalidFormat"    | `enabled` ist kein Boolean.<br />`subject` ist kein String.<br />`recipients` ist kein Objekt.<br />`notificationPeriod` ist keine positive Zahl.<br />`startDate` ist kein String.<br />`customSendTime` ist kein Boolean.<br />`sendDate` ist kein String.<br />`sendTime` ist kein String. |
| 400 Bad Request  | "missing"          | `sendDate` oder `sendTime` wurden nicht übergeben, obwohl `customSendTime` auf `true` gesetzt ist.                                                                                                                                                                                            |
| 404 Not Found    |                    | Die Log-Gruppe wurde nicht gefunden.                                                                                                                                                                                                                                                          |

### PUT logmanager/groups/\{id}/notifications/enabled

Mit diesem Endpunkt können die Benachrichtigungen einer bestehenden Log-Gruppe anhand ihrer ID de-/aktiviert werden. Existieren für die Log-Gruppe noch keine Benachrichtungseinstellungen, werden bei Aktivierung Default-Einstellungen erzeugt.

Zur Nutzung sind die entsprechenden Schreibrechte für Log-Gruppen erforderlich.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups/3/notifications/enabled
```

#### Request Body

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "enabled": true
}
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "success": true
}
```

#### Fehlercodes

| **Fehler**       | **Typ**        | **Grund**                                                                                                               |
| ---------------- | -------------- | ----------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Schreiben von Logs. |
| 400 Bad Request  |                | Request body konnte nicht geladen werden.                                                                               |
| 400 Bad Request  | "invalidValue" | Ungültiger Route Parameter `id` oder ungültiges `enabled` Feld in Request Body                                          |
| 404 Not Found    |                | Die Log-Gruppe wurde nicht gefunden.                                                                                    |

### DELETE logmanager/groups/\{id}

Mit diesem Endpunkt kann eine bestehende Log-Gruppe anhand ihrer ID gelöscht werden. Damit werden auch die zugehörigen Benachrichtigungseinstellungen entfernt.

Zur Ausführung sind entsprechende Löschrechte für Logs erforderlich.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
https://www.<ihr-shop>.de/admin/api/v1/logmanager/groups/2
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "success": true
}
```

#### Fehlercodes

| **Fehler**       | **Typ**        | **Grund**                                                                                                             |
| ---------------- | -------------- | --------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Löschen von Logs. |
| 400 Bad Request  | "invalidValue" | `id` fehlt oder ist ungültig.                                                                                         |
| 404 Not Found    |                | Die Log-Gruppe wurde nicht gefunden.                                                                                  |

## Support

Bei technischen Fragen und Hilfestellungen ist unser Support-Team für Sie erreichbar: [Zum Kundenportal](https://websale.atlassian.net/servicedesk/customer/portal/6)

Bitte senden Sie uns eine möglichst detaillierte Beschreibung sowie Screenshots, Requests/Antworten, damit wir Ihre Anfrage zeitnah und zielführend beantworten können.
