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

# Einen Produktkatalog mit der Product Recommendation API in Kameleoon importieren

> Importieren Sie einen Produktkatalog mit der Product Recommendation API in Kameleoon, einschließlich Kategorien, Produkten und Verfügbarkeitsupdates.

Die Product Recommendation API ist die bevorzugte Methode für Katalogimporte mit mehr als 50.000 Produkten. Verwenden Sie diesen Endpoint anstelle täglicher vollständiger Katalog-Re-Importe.

Dieses Tutorial beschreibt die Schritte und häufigen Fallstricke beim Importieren eines Produktkatalogs mit der Product Recommendation API in Kameleoon.

Die Product Recommendation API folgt RESTful-Prinzipien.

Der Importprozess umfasst die folgenden aufeinander folgenden Schritte:

* **[Import Categories](../all-endpoints/Import/import-categories)**: Senden Sie eine `POST`-Anfrage, um sicherzustellen, dass alle Kategorien aktuell sind, bevor Sie Produkte hochladen.
* **[Import and Update Products](../all-endpoints/Import/import-product)**: Senden Sie eine `PUT`-Anfrage, um den Produktkatalog in das Kameleoon-Konto zu importieren.
* **[Update available products](../all-endpoints/Import/update-products)**: `PATCH`-Anfrage zum Aktualisieren der Verfügbarkeit von Produkten.

<Note>
  Die API bietet auch einen speziellen Endpoint zum Ändern der Verfügbarkeit bestehender Produkte in Kameleoon, der einen leichteren Ansatz darstellt.
</Note>

## Daten

* **Shop ID** `eehj3eu84299kg5ghw5a6743r8` & **Shop Secret** `pmd5362597thrgq8k256ep01t0`
  * Sie finden diese in **Recommendations** > **Settings** > **Store settings** in der Kameleoon App. Kontaktieren Sie den Customer Success Manager, falls erforderlich, um den Schlüssel zu erhalten.

<Frame>
  ![](https://storage.googleapis.com/kameleoon-storage-documentation/developers/images/api-tutorial/store-key.jpg)
</Frame>

* **Webhooks** `http://www.webhook.com/importCategoriesApiResponses/` & `http://www.webhook.com/importProductsApiResponses/`
  * Webhooks stellen den Abschluss des Schritts **Import Categories** vor dem Katalogimport sicher und überprüfen den Abschluss der **Import Products**-Anfrage.
* **Aktueller Produktkatalog in Kameleoon:**

```json theme={null}
[
{
    "id": "PD1", // String (max 64). Required
    "group_id": "Shoe", // String (max 64). Optional
    "name": "Sneaker", // String (max 255). Required
    "price": "1", // Float (positive). Required
    "oldprice": "2", // Float (positive). Optional
    "currency": "USD", // Currency code: USD, EUR. Required.
    "url": "https://example.com/product", // String (URL). Required
    "picture": "https://example.com/product/image.png", // String (URL). Required
    "available": true, // Boolean (true, false). Required
    "categories": ["shoeID"], // Array of categories IDs. Required.
    "locations": [ 
    {
        "location": "USA",
        "delivery_types": {
            "store": 10,
            "stock": 50  }
    },
    {
        "location": "CAN",
        "price": 60
    }
    ]
},
{
    "id": "PD2", // String (max 64). Required
    "group_id": "Glass", // String (max 64). Optional
    "name": "Sunglasses", // String (max 255). Required
    "price": "1", // Float (positive). Required
    "oldprice": "2", // Float (positive). Optional
    "currency": "USD", // Currency code: USD, EUR. Required.
    "url": "https://example.com/product", // String (URL). Required
    "picture": "https://example.com/product/image.png", // String (URL). Required
    "available": true, // Boolean (true, false). Required
    "categories": ["glassID"], // Array of categories IDs. Required.
    "locations": [ 
    {
        "location": "USA",
        "delivery_types": {
            "store": 10,
            "stock": 50  }
    },
    {
        "location": "CAN",
        "price": 60
    }
    ]
}
]
```

* **Aktuelle Kategorien in Kameleoon:**

```json theme={null}
[ {{
            "id": "glassID",
            "name": "Glass"
        },
        {
            "id": "shoesID",
            "name": "shoes",
        },
}]
```

* **In Kameleoon zu importierende Produkte:**
  * Der Preis von PD2 (Glass) wurde auf drei geändert und es gibt ein neues Produkt mit einer neuen Kategorie (`"id": "BootID", "name": "Boot")`

```json theme={null}
{
    "id": "PD3", // String (max 64). Required
    "group_id": "Boot", // String (max 64). Optional
    "name": "Standard Boot", // String (max 255). Required
    "price": "1", // Float (positive). Required
    "oldprice": "2", // Float (positive). Optional
    "currency": "USD", // Currency code: USD, EUR. Required.
    "url": "https://example.com/product", // String (URL). Required
    "picture": "https://example.com/product/image.png", // String (URL). Required
    "available": true, // Boolean (true, false). Required
    "categories": ["bootID"], // Array of categories IDs. Required.
    "locations": [ 
    {
        "location": "USA",
        "delivery_types": {
            "store": 10,
            "stock": 50  }
    },
    {
        "location": "CAN",
        "price": 60
    }
    ]
}
```

## Kategorien importieren

Verwenden Sie für diesen Schritt den [Import categories-Endpoint](../all-endpoints/Import/import-categories).

<Important>
  Vor dem Hochladen von Produkten müssen Sie eine aktuelle Liste der Kategorien in unsere Datenbank hochladen.
</Important>

Die Daten werden als JSON-String innerhalb des Anfragetexts gesendet. **Senden Sie alle Kategorien in einer einzigen `POST`-Anfrage.**

Das folgende Beispiel sendet alle Kategorien – sowohl bestehende als auch neue –, um den Import neuer Produkte zu ermöglichen:

```bash theme={null}
curl -X POST -L 'https://api.products.kameleoon.com/import/categories' \
             -H 'Content-Type: application/json' \
             -d '{
   "shop_id":"eehj3eu84299kg5ghw5a6743r8",
   "shop_secret":"pmd5362597thrgq8k256ep01t0",
   "items":[
      {
         "id":"slassID",
         "name":"Glass"
      },
      {
         "id":"shoesID",
         "name":"shoes"
      },
      {
         "id":"bootID",
         "name":"boots"
      }
   ],
   "webhook":"http://www.webhook.com/importCategoriesApiResponses/"
}'
```

<Note>
  Der `webhook` benachrichtigt den Entwickler nach Abschluss der Anfrage. Wenn alle angegebenen Kategorien importiert und verfügbar sind, wird eine `POST`-Anfrage an den festgelegten Webhook gesendet.

  Verwenden Sie den `webhook` für große Kategorieimporte, da die Verarbeitung mehrere Minuten dauern kann.

  Wenn Sie Produkte über den [Endpoint zum Importieren von Produkten](../all-endpoints/Import/import-product) importieren, stellt der Webhook sicher, dass alle Kategorien verarbeitet sind, bevor mit dem Produktimport begonnen wird. Produkte ohne bekannte Kategorie werden während des Imports ignoriert.

  **Beispiel für eine erfolgreiche Anfrage:**

  ```json theme={null}
  { "status": "success"}
  ```

  Beispiel für eine erfolglose Anfrage:

  ```json theme={null}
  { "status": "error",  "message": "MESSAGE"}
  ```
</Note>

## Produkte importieren und aktualisieren

Verwenden Sie für diesen Schritt den [Import Products-Endpoint](../all-endpoints/Import/import-product#liste-der-parameter-für-das-items-objekt).
Das API-Limit beträgt 40 Anfragen pro Minute, mit maximal einer Anfrage alle 1,5 Sekunden.
Das Anfragegewichtslimit beträgt 35 Megabyte.

<Important>
  Um bestimmte Produkte zu aktualisieren, geben Sie für jedes Produkt in der Anfrage alle obligatorischen Parameter an. Das Auslassen obligatorischer Eigenschaften führt dazu, dass der Import diese Produkte ignoriert und die Datenbank unverändert lässt. Beispielsweise erfordert die Aktualisierung eines Produktpreises die Einbeziehung aller obligatorischen Parameter wie category, name, picture und tags.

  Ausgelassene Werte für nicht obligatorische Eigenschaften werden aus der Datenbank entfernt.

  Die obligatorischen Felder finden Sie in der [Endpoint-Dokumentation](../all-endpoints/Import/import-product#liste-der-parameter-für-das-items-objekt).
</Important>

Das folgende Beispiel sendet das aktualisierte Produkt `PD2` mit geänderten Feldern `price` und `oldprice` sowie das neue Produkt `PD3`. Das Produkt `PD1` wird weggelassen, da es unverändert bleibt.

```bash theme={null}
# !!! IMPORTANT: Wait for a successful POST request to the webhook endpoint
# (http://www.webhook.com/importCategoriesApiResponses)
# from the Import Categories step before making this call.

#Check that all required fields are filled for each product

curl -X PUT -L 'https://api.products.kameleoon.com/import/products' \
             -H 'Content-Type: application/json' \
             -d '{
   "shop_id":"eehj3eu84299kg5ghw5a6743r8",
   "shop_secret":"pmd5362597thrgq8k256ep01t0",
   "items":[
{
    "id": "PD3", // String (max 64). Required
    "group_id": "Boot", // String (max 64). Optional
    "name": "StandardBoot", // String (max 255). Required
    "price": "1", // Float (positive). Required
    "oldprice": "2", // Float (positive). Optional
    "currency": "USD", // Currency code: USD, EUR. Required.
    "url": "https://example.com/product", // String (URL). Required
    "picture": "https://example.com/product/image.png", // String (URL). Required
    "available": true, // Boolean (true, false). Required
    "categories": ["bootID"], // Array of categories IDs. Required.
    "locations": [ 
    {
        "location": "USA",
        "delivery_types": {
            "store": 10,
            "stock": 50  }
    },
    {
        "location": "CAN",
        "price": 60
    }
    ]
},
{
    "id": "PD2", // String (max 64). Required
    "group_id": "Glass", // String (max 64). Optional
    "name": "Sunglasses", // String (max 255). Required
    "price": "3", // Float (positive). Required
    "oldprice": "1", // Float (positive). Optional
    "currency": "USD", // Currency code: USD, EUR. Required.
    "url": "https://example.com/product", // String (URL). Required
    "picture": "https://example.com/product/image.png", // String (URL). Required
    "available": true, // Boolean (true, false). Required
    "categories": ["glassID"], // Array of categories IDs. Required.
    "locations": [ 
    {
        "location": "USA",
        "delivery_types": {
            "store": 10,
            "stock": 50  }
    },
    {
        "location": "CAN",
        "price": 60
    }
    ]
}
   ],
   "webhook":"http://www.webhook.com/importProductsApiResponses/"
}'

# check for the result of the request, which will be sent 
# to the provided webhook http://www.webhook.com/importProductsApiResponses/
```

## Verfügbare Produkte aktualisieren

Verwenden Sie den [Update available products-Endpoint](../all-endpoints/Import/update-products), um den Lagerstatus zu verwalten.

Dieser Endpoint aktualisiert die Liste der verfügbaren Produkte anhand ihrer IDs.

In diesem Szenario wird das Produkt `PD1` als nicht verfügbar markiert, indem IDs für `PD2` und `PD3` angegeben und die ID für `PD1` weggelassen werden.

```bash theme={null}
curl -X PATCH -L 'https://api.products.kameleoon.com/import/products' \
             -H 'Content-Type: application/json' \
             -d '{
   "shop_id":"eehj3eu84299kg5ghw5a6743r8",
   "shop_secret":"pmd5362597thrgq8k256ep01t0",
   "items":["PD2","PD3"],
}'
```

## Wichtige Empfehlungen

1. **Workflow-Reihenfolge**\
   Importieren Sie Kategorien immer vor Produkten

2. **Vollständigkeit der Daten**\
   Produktimporte erfordern alle obligatorischen Felder

3. **Webhook-Strategie**\
   Wesentlich für die Überwachung großer Imports

4. **Leistungstipps**

   * Produkte in Batches ≤35 MB
   * Ratenbegrenzung: 40 Anfragen/Minute
   * Verwenden Sie nur den Update available products-Endpoint, um die Verfügbarkeit eines Produkts zu ändern.

5. **Fehlerbehandlung**

   * Überprüfen Sie die Kategorie-IDs
   * Überprüfen Sie die Feldformate
   * Überwachen Sie die Webhook-Antworten
