REST API: Artikeltexte (name1/description/technicalData) per PUT aktualisieren – Endpunkt liefert Status 200, aber keine Änderung

Hallo zusammen,

ich versuche über die REST API die Texte eines Artikels (name1, description, technicalData, keywords) zu aktualisieren und stoße auf folgendes Problem:

Was ich erwarte laut Doku:
Laut Tutorial „Item data: tutorial road map“ sollen Artikeltexte über folgenden Endpunkt verwaltet werden:

POST/PUT /rest/items/{itemId}/variations/{variationId}/descriptions

Was tatsächlich passiert:

  1. PUT /rest/items/{itemId} mit einem texts-Array im Body:
    → Status 200, aber updatedAt und alle Textfelder bleiben unverändert. Kein Fehler, aber auch keine Änderung.

  2. POST /rest/items/{itemId}/variations/{variationId}/descriptions mit {"lang": "de", "name": "..."}:
    → Status 500 mit folgender Fehlermeldung:

    SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry 
    '{itemId}-de' for key 'article_id' (SQL: insert into 
    plenty_article_description (lang, name, article_id) values (de, ..., {itemId}))
    

    → Das deutet darauf hin, dass für diesen Artikel/diese Sprache bereits ein Eintrag existiert und POST hier ungeeignet ist.

  3. PUT /rest/items/{itemId}/variations/{variationId}/descriptions mit demselben Payload:
    → Status 200, leere Antwort {}, aber wieder keine Änderung an den Daten (verifiziert über erneutes GET).

Meine Fragen:

  • Wie lautet der aktuell korrekte Endpunkt und die korrekte HTTP-Methode, um name1, name2, name3, description, technicalData und keywords eines Artikels per REST API zu setzen/aktualisieren?
  • Hat sich der Endpunkt seit dem 2017er-Tutorial geändert?
  • Wird eventuell ein zusätzliches Pflichtfeld im Payload erwartet, das bei mir fehlt (z. B. eine ID für den bestehenden Text-Eintrag)?

Mein Setup:

  • PlentyONE REST API, Authentifizierung per Login-Token (funktioniert für andere Endpunkte wie Maße, Gewicht, Barcodes, Verkaufspreise einwandfrei)
  • Getestete Payload-Varianten: texts-Array am Item, direkter name/name1-Key, mit und ohne vollständigen Datensatz

Ergänzung: Ich habe im Forum einen ähnlichen Fall gefunden („Wareneingang per API buchen“ – PUT liefert 200 OK, aber nichts ändert sich). Scheint also kein Einzelfall bei mir zu sein, sondern ein wiederkehrendes Muster bei bestimmten PUT-Endpunkten. Falls jemand weiß, woran das grundsätzlich liegt (Caching? Fehlendes Pflichtfeld, das stillschweigend ignoriert wird? Berechtigungsproblem, das nicht als Fehler zurückgegeben wird?), wäre ich auch über diesen generellen Hinweis dankbar.

Vielen Dank für jeden Hinweis!


Lösung gefunden – zur Ergänzung im Forenthread

Kurz-Zusammenfassung für andere Leser:

Problem war: PUT /items/{id} mit texts-Array → Status 200, aber keine Änderung (stilles Scheitern).

Lösung:

PUT /rest/items/{itemId}/variations/{variationId}/descriptions/{lang}

Wichtig dabei:

  • Die Sprache muss in der URL stehen (z. B. .../descriptions/de), nicht nur im Body
  • Body als einzelnes Objekt, KEINE JSON-Liste
  • itemId muss im Body zusätzlich mitgeschickt werden

Beispiel-Body:

{
  "itemId": 312201050,
  "lang": "de",
  "name": "Mein Titel",
  "description": "Meine HTML-Beschreibung",
  "technicalData": "Meine technischen Daten",
  "keywords": "suchwort1 suchwort2"
}

Danke an die Community (Thread „REST API Export von Artikeldaten“) – genau dort stand die Lösung schon, nur unter einem anderen Threadnamen als ich gesucht hatte.