> ## 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 Datenfeeds

> Produktdatenfeeds für externe Plattformen wie Suchmaschinen über die Admin Interface API anlegen, bearbeiten, planen, exportieren und löschen.

Datenfeeds ermöglichen es, Produktdaten aus einem WEBSALE Shop für externe Systeme wie Suchmaschinen, Suchdienstleister etc. bereitzustellen. Der Endpunkt `datafeeds/` ermöglicht es Ihnen, Ihre Datenfeeds zu verwalten. Mit dieser Schnittstelle können Sie bereits erstellte Feeds aktualisieren und löschen oder neue Datenfeeds erstellen.

***

## Unterstützte Methoden

Angabe aller unterstützten Methoden.

| **Befehl/Info**        | **Endpunkte**       | **GET**               | **POST**              | **PUT**               | **DELETE**            |
| ---------------------- | ------------------- | --------------------- | --------------------- | --------------------- | --------------------- |
| **Datenfeeds**         | datafeeds/          | <Icon icon="check" /> | <Icon icon="check" /> | <Icon icon="check" /> | <Icon icon="check" /> |
| **Datenfeed-Vorlagen** | datafeeds/templates | <Icon icon="check" /> | <Icon icon="check" /> | <Icon icon="check" /> | <Icon icon="check" /> |
| **Generierung**        | datafeeds/build     | <Icon icon="check" /> | <Icon icon="check" /> | <Icon icon="ban" />   | <Icon icon="ban" />   |

## Datenfelder eines Datenfeeds

| **Name**                                  | **Typ** | **Verwendung**                                                                                                   |
| ----------------------------------------- | ------- | ---------------------------------------------------------------------------------------------------------------- |
| **active**                                | Boolean | Gibt an, ob der Datenfeed für den Export aktiviert ist                                                           |
| **createdAt**                             | String  | Zeitpunkt, zu dem der Datenfeed angelegt wurde (ISO 8601-Format, UTC).                                           |
| **exportPlanOptions.exportAfterImport**   | Boolean | Gibt an, ob der Datenfeed nach einem Importvorgang automatisch exportiert wird.                                  |
| **exportPlanOptions.exportPlan**          | Array   | Liste Stunden, zu denen ein Export geplant ist.                                                                  |
| **exportStatus**                          | String  | Status des letzten Exports:   `"idle""starting""running""finished""error"`                                       |
| **externalOutputTarget.host**             | String  | Hostname oder IP-Adresse des externen Zielsystems                                                                |
| **externalOutputTarget.password**         | String  | Passwort für Zugriff auf das Zielsystem                                                                          |
| **externalOutputTarget.port**             | Integer | Portnummer des externen Zielsystems (z. B. 21 für FTP)                                                           |
| **externalOutputTarget.remotePath**       | String  | Zielverzeichnis auf dem externen Server                                                                          |
| **externalOutputTarget.type**             | String  | Typ des Zielsystems (z. B. „ftp“, „sftp“, „none“)                                                                |
| **externalOutputTarget.user**             | String  | Benutzername für das Zielsystem.                                                                                 |
| **fileName**                              | String  | Name der Datei, die beim Export erzeugt wird.                                                                    |
| **id**                                    | Integer | Eindeutige ID des Datenfeeds.                                                                                    |
| **lastExportFinished**                    | String  | Zeitpunkt des Abschlusses des letzten erfolgreichen Exports (ISO 8601-Format, UTC).                              |
| **lastExportStarted**                     | String  | Zeitpunkt des Starts des letzten Exports (ISO 8601-Format, UTC).                                                 |
| **name**                                  | String  | Name des Datenfeeds.                                                                                             |
| **options.exportCharset**                 | String  | Zeichensatz für die exportierte Datei (z. B. „utf-8“)                                                            |
| **options.webhookTrigger**                | String  | Webhook, der nach Export ausgelöst wird (optional)                                                               |
| **options.webhookTriggerOptions**         | Object  | Optionen für den Webhook-Trigger (optional)                                                                      |
| **options.webhookTriggerOptions.headers** | Object  | HTTP-Header-Parameter als Schlüssel-Wert-Paare                                                                   |
| **options.webhookTriggerOptions.type**    | String  | Typ des Webhooks                                                                                                 |
| **options.zipType**                       | String  | Kompressionstyp für Exportdatei (`"none"`, `"zip"`, `"gzip"`)                                                    |
| **saveTarget**                            | String  | Speicherziel des Exports:   `“contentData”` – öffentlich abrufbar   `“system”` – nicht öffentlich abrufbar       |
| **subshopIds**                            | Array   | Liste der Subshops, für die der Datenfeed aktiv ist.                                                             |
| **targetDirectory**                       | String  | Zielverzeichnis, in dem die exportierte Datei gespeichert wird (überschreibt ggf. das Standardziel der Vorlage). |
| **templateId**                            | Integer | ID der Vorlage, auf der der Datenfeed basiert.                                                                   |
| **templateName**                          | String  | Name der Vorlage des Datenfeeds. Wird nur in der Listenansicht (GET datafeeds) zurückgegeben.                    |
| **updatedAt**                             | String  | Zeitpunkt der letzten Aktualisierung des Datenfeeds (ISO 8601-Format, UTC).                                      |

#### Beispiel

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "active": true,
    "createdAt": "2025-03-24 16:34:58",
    "exportPlanOptions": {
        "exportAfterImport": true,
        "exportPlan": [
            0,
            1,
            2,
            3,
            4,
            5,
            6,
            7,
            8,
            9,
            10,
            11,
            12,
            13,
            14,
            15,
            16,
            17,
            18,
            19,
            20,
            21,
            22,
            23
        ]
    },
    "exportStatus": "finished",
    "externalOutputTarget": {
        "host": "",
        "password": "",
        "port": 21,
        "remotePath": "",
        "type": "none",
        "user": ""
    },
    "fileName": "test",
    "id": 226,
    "lastExportFinished": "2025-04-09 11:31:51",
    "lastExportStarted": "2025-04-09 11:31:46",
    "name": "test",
    "options": {
        "exportCharset": "utf-8",
        "webhookTrigger": "",
        "webhookTriggerOptions": {
            "headers": {},
            "type": ""
        },
        "zipType": "zip"
    },
    "saveTarget": "contentData",
    "subshopIds": [
        "deutsch"
    ],
    "targetDirectory": "/test",
    "templateId": 226,
    "updatedAt": "2025-03-25 11:21:56"
}
```

### Datenfeed-Vorlagen

| **Name**      | **Typ** | **Verwendung**                                                                                                                      |
| ------------- | ------- | ----------------------------------------------------------------------------------------------------------------------------------- |
| **id**        | Integer | Eindeutige ID der Datenfeed-Vorlage                                                                                                 |
| **name**      | String  | Name der Datenfeed-Vorlage                                                                                                          |
| **content**   | String  | Der Inhalt der Vorlage. Hier darf die Template-Sprache verwendet werden.                                                            |
| **createdAt** | String  | Zeitpunkt der Erstellung                                                                                                            |
| **updatedAt** | String  | Zeitpunkt der letzten Aktualisierung                                                                                                |
| **usedBy**    | Array   | Liste der Namen von Datenfeeds, die diese Vorlage verwenden. Wird nur in der Listenansicht (GET datafeeds/templates) zurückgegeben. |

#### Beispiel

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "content": "<products>\n{{ \n  var $product = true;\n  while($product);\n  $product = $wsProducts.loadNext() }}<product>\n   <id>{{= $product.id }}</id>\n   <name>{{= $product.name }}</name>\n   <url>{{= $wsViews.url('Product', {productId: $product.id}, 'absolute') }}</url>\n  </product>{{ /while }}\n</products>",
    "createdAt": "2025-04-30 14:28:58",
    "id": 4,
    "name": "productsAsXML",
    "updatedAt": "2025-04-30 14:41:14"
}
```

## Methoden für Datenfeeds

In diesem Abschnitt werden alle Endpunkte zur Verwaltung von Datenfeeds im Shopsystem beschrieben. Über die Schnittstelle können Datenfeeds erstellt, abgerufen, aktualisiert, gelöscht und geplant exportiert werden.

### GET datafeeds

Diese Methode liefert eine paginierte Liste aller im System vorhandenen Datenfeeds.\
Standardmäßig werden 100 Einträge pro Anfrage zurückgegeben.

Über den optionalen Parameter `size` kann die Anzahl der zurückgelieferten Datensätze angepasst werden – bis zu einem maximalen Wert von 300. Der `size`-Wert darf beliebig zwischen 1 und 300 gewählt werden.\
Die Ergebnisliste kann über definierte Filter- und Sortierparameter gezielt eingeschränkt und geordnet werden.

Für den Zugriff ist eine Leseberechtigung für Datenfeeds erforderlich.

#### Beispiel

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

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "endReached": true,
    "items": [
        {
            "active": true,
            "createdAt": "2025-02-17 10:30:40",
            ...
            "templateName": "myTemplate",
            ...
        },
        ...
    ],
    "nextPageToken": "MA",
    "totalCount": 1
}
```

#### Filterfelder

`id`, `active`, `name`, `fileName`, `templateId`, `subshopIds`, `targetDirectory`, `exportStatus`, `lastExportStarted`, `lastExportFinished`, `createdAt`, `updatedAt`

#### Sortierfelder

`id`, `active`, `name`, `fileName`, `templateId`, `subshopIds`, `exportStatus`, `lastExportStarted`, `lastExportFinished`, `createdAt`, `updatedAt`

#### Fehlercodes

| **Fehler**       | **Typ**             | **Grund**                                                                                                                 |
| ---------------- | ------------------- | ------------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                     | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Datenfeeds. |
| 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 datafeeds/\{id}

Diese Methode ruft die vollständigen Details eines einzelnen Datenfeeds anhand seiner eindeutigen ID ab.

Der Endpunkt liefert alle konfigurierten Eigenschaften des Datenfeeds, einschließlich Name, Exportoptionen, Verzeichnisangaben und Statusinformationen. Der Zugriff erfordert die entsprechende Leseberechtigung für Datenfeeds.

#### Beispiel

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

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "active": true,
    "createdAt": "2025-02-17 10:30:40",
    "exportPlanOptions": {
        "exportAfterImport": false,
        "exportPlan": []
    },
    "exportStatus": "idle",
    "externalOutputTarget": {
        "host": "",
        "password": "",
        "port": 21,
        "remotePath": "",
        "type": "none",
        "user": ""
    },
    "fileName": "foo",
    "id": 1,
    "lastExportFinished": "0000-00-00 00:00:00",
    "lastExportStarted": "0000-00-00 00:00:00",
    "name": "myDataFeed",
    "options": {
        "exportCharset": "utf-8",
        "webhookTrigger": "",
        "webhookTriggerOptions": {
            "headers": {},
            "type": ""
        },
        "zipType": "zip"
    },
    "saveTarget": "system",
    "subshopIds": [
        "deutsch",
        "english"
    ],
    "targetDirectory": "/bar",
    "templateId": 1,
    "updatedAt": "2025-02-17 10:30:40"
}
```

#### Fehlercodes

| **Fehler**       | **Typ**        | **Grund**                                                                                                                 |
| ---------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Datenfeeds. |
| 400 Bad Request  | "invalidValue" | `id` ist ungültig.                                                                                                        |
| 404 Not Found    |                | Datenfeed mit `id`=`{id}` wurde nicht gefunden.                                                                           |

### PUT datafeeds/\{id}

Diese Methode aktualisiert einen bestehenden Datenfeed anhand seiner eindeutigen ID. Daten bleiben bis zur Generierung unverändert.

Im Request-Body können verschiedene Eigenschaften des Datenfeeds geändert werden, darunter Name, Status, Dateiname, Exportoptionen und Zielverzeichnisse. Die Felder`createdAt`, `updatedAt`, `lastExportStarted`, `lastExportFinished` und `exportStatus` können übergeben werden, werden jedoch vom System ignoriert und nicht überschrieben.

Der aktualisierte Datenfeed wird als JSON-Objekt im Response zurückgegeben.

Für die Ausführung sind Schreibberechtigungen erforderlich.

#### Beispiel

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

#### Request Body

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "name": "newName",
    "active": true,
    "templateId": 1,
    "saveTarget": "system",
    "fileName": "foo",
    "targetDirectory": "/bar",
    "subshopIds": [
        "deutsch",
        "english"
    ],
    "options": {
        "zipType": "zip"
    },
    "exportPlanOptions": {
        "exportAfterImport": false,
        "exportPlan": []
    },
    "externalOutputTarget": {
        "type": "none",
        "host": "",
        "port": 21,
        "user": "",
        "password": "",
        "remotePath": ""
    }
}
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "active": true,
    "createdAt": "2025-02-17 10:30:40",
    "exportPlanOptions": {
        "exportAfterImport": false,
        "exportPlan": []
    },
    "exportStatus": "finished",
    "externalOutputTarget": {
        "host": "",
        "password": "",
        "port": 21,
        "remotePath": "",
        "type": "none",
        "user": ""
    },
    "fileName": "foo",
    "id": 1,
    "lastExportFinished": "2025-02-17 14:31:57",
    "lastExportStarted": "2025-02-17 14:31:52",
    "name": "newName",
    "options": {
        "exportCharset": "utf-8",
        "webhookTrigger": "",
        "webhookTriggerOptions": {
            "headers": {},
            "type": ""
        },
        "zipType": "zip"
    },
    "saveTarget": "system",
    "subshopIds": [
        "deutsch",
        "english"
    ],
    "targetDirectory": "/bar",
    "templateId": 1,
    "updatedAt": "2025-05-02 09:54:52"
}
```

#### Fehlercodes

| **Fehler**       | **Typ**              | **Grund**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ---------------- | -------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                      | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Schreiben von Datenfeeds.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| 400 Bad Request  |                      | Request body konnte nicht geladen werden.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 400 Bad Request  | "invalidCombination" | Wenn `active=true` gilt, kann `templateId` nicht 0 sein (Standard-Wert).                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
| 400 Bad Request  |                      |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 400 Bad Request  | "invalidCharacters"  | `fileName` enthält `/`, `\` oder `:`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| 400 Bad Request  | "invalidFormat"      | `name`, `fileName`, `targetDirectory` oder `saveTarget` sind keine Strings<br />`active` ist kein Boolean<br />`templateId` ist keine Ganzzahl<br />`subshopIds` ist kein Array von Strings<br />`options` ist kein Objekt<br />`options.zipType`, `options.exportCharset` oder `options.webhookTrigger` sind keine Strings<br />`options.webhookTriggerOptions` ist kein Objekt<br />`options.webhookTriggerOptions.type` ist kein String<br />`options.webhookTriggerOptions.headerParams` ist kein Array<br />Ein Element von `options.webhookTriggerOptions.headerParams` ist kein Objekt, oder `key` bzw. `value` darin ist kein String<br />`externalOutputTarget` ist kein Objekt<br />`externalOutputTarget.type`, `externalOutputTarget.host`, `externalOutputTarget.user`, `externalOutputTarget.password` oder `externalOutputTarget.remotePath` sind keine Strings<br />`externalOutputTarget.port` ist keine Zahl<br />`exportPlanOptions` ist kein Objekt<br />`exportPlanOptions.exportAfterImport` ist kein Boolean<br />`exportPlanOptions.exportPlan` ist kein Array. |
| 400 Bad Request  | "unknownDataField"   | `options` enthält etwas außer `zipType`, `exportCharset`, `webhookTrigger` oder `webhookTriggerOptions`.<br />`options.webhookTriggerOptions` enthält etwas außer `type` oder `headerParams`.<br />Ein Element von `options.webhookTriggerOptions.headerParams` enthält etwas außer `key` oder `value`.<br />`externalOutputTarget` enthält etwas außer `type`, `host`, `port`, `user`, `password` oder `remotePath`.<br />`exportPlanOptions` enthält etwas außer `exportAfterImport` oder `exportPlan`.<br />Request Body enthält ein unbekanntes Feld.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 404 Not Found    |                      | Datenfeed mit `id`=`{id}` wurde nicht gefunden.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 409 Conflict     |                      | Das Aktualisieren ist fehlgeschlagen.<br />Der Dateipfad wird bereits verwendet.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        |

### POST datafeeds

Diese Methode erstellt einen neuen Datenfeed.

Die Eigenschaften des Datenfeeds, wie Name, Status, Dateiname, Exportoptionen und Zielverzeichnisse, werden über den Request-Body definiert. Die Felder `createdAt`, `updatedAt`, `lastExportStarted`, `lastExportFinished` und `exportStatus` können zwar übergeben werden, werden jedoch vom System ignoriert und automatisch gesetzt.

Nach erfolgreicher Erstellung wird der vollständige Datenfeed als JSON-Objekt zurückgegeben.

Die Ausführung setzt Erstellberechtigungen voraus.

#### Beispiel

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

#### Request Body

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "name": "myFeed",
    "active": true,
    "templateId": 4,
    "saveTarget": "system",
    "fileName": "myFeed.csv",
    "targetDirectory": "/abc",
    "subshopIds": [
        "deutsch",
        "english"
    ],
    "options": {
        "zipType": "zip"
    },
    "exportPlanOptions": {
        "exportAfterImport": false,
        "exportPlan": []
    },
    "externalOutputTarget": {
        "type": "none",
        "host": "",
        "port": 21,
        "user": "",
        "password": "",
        "remotePath": ""
    }
}
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "active": true,
    "createdAt": "2025-04-30 14:28:59",
    "exportPlanOptions": {
        "exportAfterImport": false,
        "exportPlan": []
    },
    "exportStatus": "idle",
    "externalOutputTarget": {
        "host": "",
        "password": "",
        "port": 21,
        "remotePath": "",
        "type": "none",
        "user": ""
    },
    "fileName": "myFeed.csv",
    "id": 5,
    "lastExportFinished": "0000-00-00 00:00:00",
    "lastExportStarted": "0000-00-00 00:00:00",
    "name": "myFeed",
    "options": {
        "exportCharset": "utf-8",
        "webhookTrigger": "",
        "webhookTriggerOptions": {
            "headers": {},
            "type": ""
        },
        "zipType": "zip"
    },
    "saveTarget": "system",
    "subshopIds": [
        "deutsch",
        "english"
    ],
    "targetDirectory": "/abc",
    "templateId": 4,
    "updatedAt": "2025-04-30 14:28:59"
}
```

#### Fehlercodes

| **Fehler**       | **Typ**             | **Grund**                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| ---------------- | ------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                     | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Erstellen von Datenfeeds.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
| 400 Bad Request  |                     | Request body konnte nicht geladen werden.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 400 Bad Request  | "invalidValue"      |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
| 400 Bad Request  | "invalidCharacters" | `fileName` enthält `/`, `\` oder `:`.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
| 400 Bad Request  | "invalidFormat"     | `name`, `fileName`, `targetDirectory` oder `saveTarget` sind keine Strings<br />`active` ist kein Boolean<br />`templateId` ist keine Ganzzahl<br />`subshopIds` ist kein Array von Strings<br />`options` ist kein Objekt<br />`options.zipType`, `options.exportCharset` oder `options.webhookTrigger` sind keine Strings<br />`options.webhookTriggerOptions` ist kein Objekt<br />`options.webhookTriggerOptions.type` ist kein String<br />`options.webhookTriggerOptions.headerParams` ist kein Array<br />Ein Element von `options.webhookTriggerOptions.headerParams` ist kein Objekt, oder `key` bzw. `value` darin ist kein String<br />`externalOutputTarget` ist kein Objekt<br />`externalOutputTarget.type`, `externalOutputTarget.host`, `externalOutputTarget.user`, `externalOutputTarget.password` oder `externalOutputTarget.remotePath` sind keine Strings<br />`externalOutputTarget.port` ist keine Zahl<br />`exportPlanOptions` ist kein Objekt<br />`exportPlanOptions.exportAfterImport` ist kein Boolean<br />`exportPlanOptions.exportPlan` ist kein Array. |
| 400 Bad Request  | "unknownDataField"  | `options` enthält etwas außer `zipType`, `exportCharset`, `webhookTrigger` oder `webhookTriggerOptions`.<br />`options.webhookTriggerOptions` enthält etwas außer `type` oder `headerParams`.<br />Ein Element von `options.webhookTriggerOptions.headerParams` enthält etwas außer `key` oder `value`.<br />`externalOutputTarget` enthält etwas außer `type`, `host`, `port`, `user`, `password` oder `remotePath`.<br />`exportPlanOptions` enthält etwas außer `exportAfterImport` oder `exportPlan`.<br />Request Body enthält ein unbekanntes Feld.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               |
| 409 Conflict     |                     | Das Erstellen ist fehlgeschlagen.                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |

### DELETE datafeeds/\{id}

Diese Methode löscht einen bestehenden Datenfeed dauerhaft anhand seiner eindeutigen ID.

Der Zugriff auf diesen Endpunkt setzt Löschberechtigungen voraus.

#### Beispiel

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

#### 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 Datenfeeds. |
| 400 Bad Request  | "invalidValue" | `id` ist ungültig.                                                                                                          |
| 404 Not Found    |                | Datenfeed mit `id`=`{id}` wurde nicht gefunden.                                                                             |

## Methoden für Templates der Datenfeeds

In diesem Abschnitt werden die Endpunkte zur Verwaltung von Templates für Datenfeeds beschrieben. Templates definieren die Struktur und die enthaltenen Felder eines Datenfeeds, wie Produktdaten, Kategoriedaten oder weitere Informationen.

Vor der Erstellung eines Datenfeeds muss ein passendes Template angelegt werden, da dieses die Grundlage für den späteren Export bildet.

### GET datafeeds/templates

Diese Methode liefert eine paginierte Liste aller im System vorhandenen Datenfeed-Templates.

Über Filter- und Sortierparameter kann die Ergebnisliste eingeschränkt und sortiert werden. Die Templates bilden die Grundlage für die spätere Erstellung von Datenfeeds.

Der Zugriff auf diesen Endpunkt erfordert Leseberechtigungen für Datenfeeds.

#### Beispiel

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

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "endReached": true,
    "items": [
        {
            "content": "tre",
            "createdAt": "2025-02-14 11:11:53",
            "id": 1,
            "name": "myTemplate",
            "updatedAt": "2025-02-14 11:11:53",
            "usedBy": [
                "myDataFeed"
            ]
        },
        ...
    ],
    "nextPageToken": "MA",
    "totalCount": 1
}
```

#### Filterfelder

`id`, `name`, `content`, `createdAt`, `updatedAt`

#### Sortierfelder

`id`, `name`, `content`, `createdAt`, `updatedAt`

#### Fehlercodes

| **Fehler**       | **Typ**             | **Grund**                                                                       |                                                |   |
| ---------------- | ------------------- | ------------------------------------------------------------------------------- | ---------------------------------------------- | - |
| 401 Unauthorized |                     | Man ist kein Administrator und hat keine Berechtigung zum Lesen von Datenfeeds. |                                                |   |
| 400 Bad Request  | "invalidValue"      | `size` ∉ \[1;300]                                                               | `pageToken` ist keine Zahl oder kleiner als 0. |   |
| 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 datafeeds/templates/\{id}

Diese Methode ruft die vollständigen Details einer einzelnen Datenfeed-Vorlage anhand ihrer eindeutigen ID ab. Die Antwort enthält die Stammdaten der Vorlage sowie deren inhaltliche Definition.

Der Zugriff auf diesen Endpunkt setzt Leseberechtigungen für Datenfeeds voraus.

#### Beispiel

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

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "content": "something",
    "createdAt": "2025-02-14 11:11:53",
    "id": 1,
    "name": "myTemplate",
    "updatedAt": "2025-02-14 11:11:53"
}
```

#### Fehlercodes

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

### PUT datafeeds/templates/\{id}

Diese Methode aktualisiert eine bestehende Datenfeed-Vorlage anhand ihrer eindeutigen ID.

Im Request-Body können der Name und der Inhalt (`content`) der Vorlage geändert werden. Die Felder `createdAt` und `updatedAt` können zwar übergeben werden, werden jedoch vom System automatisch verwaltet und nicht überschrieben.

Nach erfolgreicher Aktualisierung wird die vollständige Vorlage im Response zurückgegeben. Schreibberechtigungen sind erforderlich.

#### Beispiel

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

#### Request Body

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "name": "productsAsXML",
    "content": "<products>\n{{ \n  var $product = true;\n  while($product);\n  $product = $wsProducts.loadNext() }}<product>\n   <id>{{= $product.id }}</id>\n   <name>{{= $product.name }}</name>\n   <url>{{= $wsViews.url('Product', {productId: $product.id}, 'absolute') }}</url>\n  </product>{{ /while }}\n</products>"
}
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "content": "<products>\n{{ \n  var $product = true;\n  while($product);\n  $product = $wsProducts.loadNext() }}<product>\n   <id>{{= $product.id }}</id>\n   <name>{{= $product.name }}</name>\n   <url>{{= $wsViews.url('Product', {productId: $product.id}, 'absolute') }}</url>\n  </product>{{ /while }}\n</products>",
    "createdAt": "2025-04-30 14:28:58",
    "id": 4,
    "name": "productsAsXML",
    "updatedAt": "2025-04-30 14:41:14"
}
```

#### Fehlercodes

| **Fehler**       | **Typ**            | **Grund**                                                                                                                     |
| ---------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                    | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Schreiben von Datenfeeds. |
| 400 Bad Request  |                    | Request body konnte nicht geladen werden.                                                                                     |
| 400 Bad Request  | "invalidValue"     | `id` ist ungültig. `content` konnte nicht kompiliert werden.                                                                  |
| 400 Bad Request  | "invalidFormat"    | `name` oder `content` sind keine Strings                                                                                      |
| 400 Bad Request  | "unknownDataField" | Request Body enthält etwas außer `name`, `content`, `createdAt`, `updatedAt`.                                                 |
| 409 Conflict     |                    | Das Aktualisieren ist fehlgeschlagen.                                                                                         |
| 404 Not found    |                    | Die Vorlage wurde nicht gefunden.                                                                                             |

### POST datafeeds/templates

Diese Methode erstellt eine neue Datenfeed-Vorlage im System.

Im Request-Body müssen der Name der Vorlage sowie deren Inhalt (`content`) angegeben werden. Die Felder `createdAt` und `updatedAt` können übergeben werden, werden jedoch automatisch vom System gesetzt und nicht übernommen.

Nach erfolgreicher Erstellung wird die vollständige Vorlage mit allen zugehörigen Informationen als JSON-Objekt zurückgegeben.

Erstellberechtigungen sind erforderlich.

#### Beispiel

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

#### Request Body

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "name": "myNewTemplate",
    "content": "id,name,url\n{{ var $product = true }}\n{{ while($product) }}\n{{ $product = $wsProducts.loadNext() }}\n{{= $product.id }}, {{= $product.name }}, {{= $wsViews.url('Product', {productId: $product.id}, 'absolute') }}\n{{ /while }}"
}
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "content": "id,name,url\n{{ var $product = true }}\n{{ while($product) }}\n{{ $product = $wsProducts.loadNext() }}\n{{= $product.id }}, {{= $product.name }}, {{= $wsViews.url('Product', {productId: $product.id}, 'absolute') }}\n{{ /while }}",
    "createdAt": "2025-04-30 14:28:58",
    "id": 4,
    "name": "myNewTemplate",
    "updatedAt": "2025-04-30 14:28:58"
}
```

#### Fehlercodes

| **Fehler**       | **Typ**            | **Grund**                                                                                                                     |
| ---------------- | ------------------ | ----------------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                    | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Erstellen von Datenfeeds. |
| 400 Bad Request  |                    | Request body konnte nicht geladen werden.                                                                                     |
| 400 Bad Request  | "invalidFormat"    | `name` oder `content` sind keine Strings.                                                                                     |
| 400 Bad Request  | "missing"          | `name` oder `content` fehlt.                                                                                                  |
| 400 Bad Request  | "unknownDataField" | Request Body enthält etwas außer `name`, `content`, `createdAt`, `updatedAt`.                                                 |
| 400 Bad Request  | "invalidValue"     | `name` oder `content` ist leer. `content` konnte nicht kompiliert werden.                                                     |
| 409 Conflict     |                    | Das Erstellen ist fehlgeschlagen.                                                                                             |

### POST datafeeds/templates/validate

Diese Methode prüft, ob der übergebene Inhalt (`content`) einer Datenfeed-Vorlage syntaktisch korrekt ist.

Dabei werden mögliche Formatierungsfehler oder Ungültigkeiten erkannt, bevor ein Template gespeichert oder verwendet wird. Der Request-Body muss das Feld `content` als String enthalten. Die Validierung speichert keine Daten, sondern dient ausschließlich der Überprüfung.

Leseberechtigungen für Datenfeeds sind erforderlich.

#### Beispiel

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

#### Request Body

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "content": "<products>\n{{ \n  var $product = true;\n  while($product);\n  $product = $wsProducts.loadNext() }}<product>\n   <id>{{= $product.id }}</id>\n   <name>{{= $product.name }}</name>\n   <url>{{= $wsViews.url('Product', {productId: $product.id}, 'absolute') }}</url>\n  </product>{{ /while }}\n</products>"
}
```

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
{
    "error": {
        "compilerErrors": [],
        "dependenciesError": false
    },
    "valid": true
}
```

#### Fehlercodes

| **Fehler**       | **Typ**            | **Grund**                                                                                                                 |
| ---------------- | ------------------ | ------------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                    | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Datenfeeds. |
| 400 Bad Request  |                    | Request body konnte nicht geladen werden.                                                                                 |
| 400 Bad Request  | "invalidFormat"    | `content` ist kein String.                                                                                                |
| 400 Bad Request  | "missing"          | `content` fehlt.                                                                                                          |
| 400 Bad Request  | "unknownDataField" | Der Request Body enthält ein unbekanntes Feld.                                                                            |

### DELETE datafeeds/templates/\{id}

Diese Methode löscht eine bestehende Datenfeed-Vorlage anhand ihrer eindeutigen ID.

Die erfolgreiche Löschung wird durch das JSON-Objekt `{"success": true}` und den Status-Code bestätigt. Eine Vorlage kann nur gelöscht werden, wenn sie nicht mehr in Verwendung ist.

Für den Zugriff auf diesen Endpunkt sind Löschberechtigungen erforderlich.

#### Beispiel

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

#### 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 Datenfeeds. |
| 400 Bad Request  | "invalidValue" | `id` ist ungültig.                                                                                                          |
| 409 Conflict     |                | Die Vorlage wird noch verwendet.                                                                                            |
| 404 Not Found    |                | Die Vorlage mit `id`=`{id}` wurde nicht gefunden.                                                                           |

## Methoden zur Erstellung (Build) von Datenfeeds

In diesem Abschnitt werden alle Endpunkte beschrieben, die den Build-Prozess von Datenfeeds steuern. Über die Schnittstelle können Build-Prozesse für einzelne oder alle Datenfeeds gestartet, der Status eines laufenden Builds abgefragt sowie zeit- oder importgesteuerte Builds vorbereitet werden.

Die Build-Prozesse sorgen dafür, dass aktuelle und vollständige Exportdateien auf Basis der vorhandenen Templates und Daten erzeugt werden.

### GET datafeeds/build/\{id}/status

Diese Methode liefert den aktuellen Status des Build-Prozesses eines Datenfeeds. Sie ermöglicht die Überwachung, ob ein Datenfeed derzeit erstellt wird, bereits abgeschlossen ist, oder, ob beim Erstellen Fehler aufgetreten sind.

Jedes Element der Antwort enthält `filePath` (relativer Dateipfad) und `status` (Statusinformationen). Zusätzlich wird das Feld `url` zurückgegeben, wenn `saveTarget` des Datenfeeds `"contentData"` ist.

Für den Zugriff sind Leseberechtigungen für Datenfeeds erforderlich.

#### Beispiel

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

#### Antwort

```json theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
[
    {
        "filePath": "/abc/deutsch_myFeed.csv.zip",
        "status": {
            "createdAt": "2025-04-30 14:28:59",
            "datafeedId": 5,
            "exportStatus": "finished",
            "id": 1,
            "lastExportError": "",
            "lastExportFinished": "2025-04-30 14:29:00",
            "lastExportStarted": "2025-04-30 14:28:59",
            "subshopId": "deutsch",
            "updatedAt": "2025-04-30 14:29:00"
        }
    },
    {
        "filePath": "/abc/english_myFeed.csv.zip",
        "status": {
            "createdAt": "2025-04-30 14:28:59",
            "datafeedId": 5,
            "exportStatus": "finished",
            "id": 2,
            "lastExportError": "",
            "lastExportFinished": "2025-04-30 14:28:59",
            "lastExportStarted": "2025-04-30 14:28:59",
            "subshopId": "english",
            "updatedAt": "2025-04-30 14:28:59"
        }
    }
]
```

#### Fehlercodes

| **Fehler**       | **Typ**        | **Grund**                                                                                                                 |
| ---------------- | -------------- | ------------------------------------------------------------------------------------------------------------------------- |
| 401 Unauthorized |                | Nicht autorisiert: Sie sind nicht angemeldet oder verfügen nicht über die erforderlichen Rechte zum Lesen von Datenfeeds. |
| 400 Bad Request  | "invalidValue" | `id` ist ungültig.                                                                                                        |
| 404 Not Found    |                | Datenfeed mit `id`=`{id}` wurde nicht gefunden.                                                                           |
| 400 Bad Request  |                | Die korrespondierende Vorlage konnte nicht gefunden werden.                                                               |

### POST datafeeds/build/all

Diese Methode startet den Build-Prozess für alle im System vorhandenen Datenfeeds. Dabei werden sämtliche definierten Datenfeeds neu erstellt. Die Ausführung erfolgt asynchron; der Endpunkt bestätigt lediglich das Starten des Prozesses.

Freigabeberechtigungen für Datenfeeds sind erforderlich.

#### Beispiel

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

#### Request Body

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

#### 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 Veröffentlichen von Datenfeeds. |
| 503 Service Unavailable | "serviceUnavailable" | `FeedBuilderUrl` existiert nicht, oder das Generieren ist fehlgeschlagen.                                                           |

### POST datafeeds/build/\{id}

Diese Methode startet den Build-Prozess für einen bestimmten Datenfeed anhand seiner eindeutigen ID. Dabei wird der ausgewählte Feed neu erstellt. Die Ausführung erfolgt asynchron; der Endpunkt bestätigt lediglich das Starten des Build-Prozesses.

Mit dem optionalen Query-Parameter `subshopId` (kann mehrfach angegeben werden) kann der Build auf bestimmte Subshops eingeschränkt werden.

Freigabeberechtigungen für Datenfeeds sind erforderlich.

#### Beispiel

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

#### Request Body

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

#### 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 Veröffentlichen von Datenfeeds. |
| 400 Bad Request         | "invalidValue"       | `id` ist ungültig.                                                                                                                  |
| 404 Not Found           |                      | Datenfeed mit `id`=`{id}` wurde nicht gefunden.                                                                                     |
| 503 Service Unavailable | "serviceUnavailable" | `FeedBuilderUrl` existiert nicht, oder das Generieren ist fehlgeschlagen.                                                           |

### POST datafeeds/build/hour/\{hour}

Diese Methode startet die Generierung von Datenfeeds, die zu einer bestimmten Stunde generiert werden müssen. Der Pfadparameter `{hour}` bestimmt die Stunde im 24-Stunden-Format (`0` bis `23`). Die Generierung erfolgt asynchron – das bedeutet, dass die Antwort keine fertige Datei zurückliefert, sondern lediglich den Start des Prozesses bestätigt.

Freigabeberechtigungen für Datenfeeds sind erforderlich.

#### Beispiel

```text theme={"theme":{"light":"github-light","dark":"github-dark"},"languages":{"custom":["/languages/websale.json"]}}
http://www.<ihr-shop>.de/admin/api/v1/datafeeds/build/hour/12
```

#### Request Body

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

#### 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 Veröffentlichen von Datenfeeds. |
| 404 Not Found           |                      | Der Parameter `hour` fehlt oder ist ungültig.                                                                                       |
| 503 Service Unavailable | "serviceUnavailable" | `FeedBuilderUrl` existiert nicht, oder die Generierung ist fehlgeschlagen.                                                          |

### POST datafeeds/build/import

Diese Methode startet den Build-Prozess für alle Datenfeeds, die nach einem Importvorgang automatisch generiert werden sollen. Die Erstellung der Feeds erfolgt asynchron.

Freigabeberechtigungen für Datenfeeds sind erforderlich.

#### Beispiel

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

#### Request Body

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

#### 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 Veröffentlichen von Datenfeeds. |
| 503 Service Unavailable | "serviceUnavailable" | `FeedBuilderUrl` existiert nicht, oder die Generierung ist fehlgeschlagen.                                                          |

## 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.
