DE · AT · CHAnleitung

Lieferantenbestände anbinden: Feeds, API und Aktualität

Aktualisiert:

Gilt für: Shops, die Bestand, Preis und Lieferzeit vom Lieferanten übernehmen; Preisangabe gegenüber Verbrauchern und Aufbewahrung sind nicht Teil des Artikels

Kurz gesagt

Bestand und Preis kommen über zwei getrennte Wege: eine Katalog- oder Preisanbindung als Datei oder API und ein kurzer Abruf für den aktuellen Bestand. CSV nach RFC 4180 beschreibt Zeilenaufbau und Anführungszeichen, nicht die Bedeutung der Felder. BMEcat 2005.2 überträgt Preise, Einheiten und Lieferzeiten, aber keine Lagermenge. Den Abruftakt rechnen Sie aus Absatzrate, Puffer und Nachlieferzeit aus.

Das Wichtigste

  • BMEcat 2005.2 (Version vom 1. Oktober 2022) überträgt Katalogdaten; ein Element für eine Bestandsmenge enthält das Schema nicht.
  • BMEcat kennt drei Transaktionen: T_NEW_CATALOG, T_UPDATE_PRODUCTS und T_UPDATE_PRICES, sodass Änderungen ohne Gesamtkatalog übertragbar sind.
  • Innerhalb derselben BMEcat-Katalogversion zählt prev_version die vorausgegangenen Aktualisierungen, beginnt nach jedem T_NEW_CATALOG bei 0 und steigt je Aktualisierung um 1; die CATALOG_VERSION bleibt über Aktualisierungen gleich.
  • RFC 4180 beschreibt für CSV Zeilenaufbau, Komma als Trennzeichen und Anführungszeichen, aber keine Feldbedeutung; Zeichensatz und Dezimaltrennzeichen vereinbaren Sie.
  • Für den Bestand gilt: Abruftakt in Stunden höchstens Puffer geteilt durch Absatz je Stunde minus Nachlieferzeit in Stunden.
  • Die GTIN kennzeichnet die Handelseinheit; GS1-Regeln binden über Vertrag oder Kanalvorgabe, nicht als staatliche Vorschrift.

Katalogdaten ändern sich aus Anlass: ein neuer Preis, ein geändertes Sortiment, eine andere Lieferzeit. Bestände ändern sich mit jedem Verkauf und jeder Lieferung. Wer beides in einen Weg und einen Takt zwingt, überträgt zu viel oder erfährt eine Änderung zu spät. Der Ablauf trennt beide Wege und leitet den Abruftakt aus Ihren Zahlen ab.

Was Sie vorab brauchen

  • je Lieferant Format (CSV, XML, API), Übertragungsweg, zugesagte Grenzen (Datensätze je Abruf, Abrufe je Zeiteinheit, Antwortzeit) und eine Person für Störungen
  • die Feldliste des Lieferanten mit Bezeichnung und Bedeutung jedes Feldes
  • eine eigene Artikelnummer je Lieferantenartikel und, soweit vorhanden, die GTIN des Herstellers
  • ein Testkonto oder eine Testdatei vor der ersten echten Lieferung
  • Absatz je Artikel und Stunde, Nachlieferzeit und der Bestand, den Sie anzeigen wollen

Welches Format welchen Teil trägt

Die Tabelle stellt die Wege gegenüber, über die Lieferanten Bestand, Preis und Lieferzeit bereitstellen. Die letzte Spalte nennt den Punkt, an dem die Anbindung scheitert.

Format Was es trägt Was es nicht festlegt Woran es scheitert
CSV-Datei Listen mit allen Artikeln eines Lieferanten, auch Bestand und Preis, im Feldaufbau, den beide Seiten vereinbaren Feldbedeutung und -reihenfolge, Trennzeichen, Dezimaltrennzeichen, Zeichensatz, Datumsformat; RFC 4180 hält in Abschnitt 2 selbst fest, dass keine formale Spezifikation existiert eine Spalte, die der Lieferant umbenennt oder umstellt
XML-Katalog nach BMEcat 2005.2 Preise mit Preistyp und Gültigkeitszeitraum, Steuerfaktor, Mengeneinheiten, Klassifikation, Lieferzeiten und die GTIN als internationale Artikelnummer (INTERNATIONAL_PID mit dem Typ ean) keine Bestandsmenge: Im Schemabestand von BMEcat 2005.2 gibt es kein Element für eine Lagermenge; der Wert stock in PRODUCT_CATEGORY besagt, dass ein Produkt lagermäßig geführt wird, ohne Menge eine Aktualisierung, deren prev_version die erwartete Kette bricht (Wiederholung oder Lücke)
Verfügbarkeits- oder Preisanfrage im IPP-Modul zu BMEcat 2005 den aktuellen Bestand und Preis zu einer Liste von Produkten; die Antwort kommt synchron innerhalb der vereinbarten Antwortzeit keine Übertragung des Gesamtkatalogs; Einschränkungen wie Lieferzeit und Verbindlichkeitsgrad muss die Antwort mitführen Kennungen, die nicht zum Artikelstamm passen
Abruf über eine HTTP-API mit JSON einzelne Artikel und Änderungslisten; JSON ist nach RFC 8259 Abschnitt 8.1 UTF-8, eine Implementierung darf Umfang und Genauigkeit von Zahlen begrenzen (Abschnitt 9) Feldbedeutung, Authentifizierung, Seitenaufteilung und Mengengrenzen; das liefert die Beschreibung des Lieferanten Abrufe in kurzem Takt ohne bedingte Anfrage; Preise als gerundete Gleitkommazahl

Schritt für Schritt: Lieferantendaten anbinden

Schritt 1: Datenarten trennen

Legen Sie vier Datenarten fest und je Datenart eine Quelle: Stammdaten (Bezeichnung, Einheit, Verpackung), Preis, Bestand und Lieferzeit. BMEcat trennt sie inhaltlich: Ein Preis trägt einen Preistyp und einen Gültigkeitszeitraum, die Lieferzeit steht mit der Vorlaufzeit in Werktagen, und der Bestand kommt nicht als Menge vor. Ergebnis: eine Zeile je Datenart mit Quelle, Format und Verantwortlichem.

Schritt 2: Die Feldbelegung schriftlich festhalten

Weil CSV die Feldbedeutung nicht regelt, hält Ihre Vereinbarung fest, welche Spalte welche Größe trägt, mit welchem Trennzeichen, in welchem Zeichensatz, in welcher Einheit und mit welchem Zeitstempel samt Zeitzonenversatz (RFC 3339 Abschnitt 5.6). Klären Sie außerdem, was ein leeres Feld bedeutet: null Stück, unbekannt oder nicht lieferbar. Drei Sachverhalte, drei Folgen für die Anzeige. Ergebnis: ein Felddokument, das beide Seiten als aktuell bestätigen.

Schritt 3: Artikel ohne Namen zuordnen

Ordnen Sie über Kennungen zu, nie über den Produktnamen. Nehmen Sie die GTIN, wenn der Hersteller eine vergeben hat: Nach den GS1 General Specifications kennzeichnet sie die Handelseinheit und kommt in vier Längen vor (Abschnitt 1.3.1). GS1 ist ein Standardverband; seine Regeln binden über Vertrag oder Kanalvorgabe und nicht als staatliche Vorschrift. In BMEcat steht sie in INTERNATIONAL_PID mit dem Typ ean. Fehlt sie, bleibt die Lieferantenkennung der Schlüssel. Ergebnis: je eigener Artikelnummer ein Eintrag mit Lieferantenkennung.

Schritt 4: Die Erstlieferung gegen die Lieferantenliste prüfen

Vergleichen Sie vor dem ersten Import Datensatzzahl, Summen und Kennungen. Ein fehlender und ein doppelter Datensatz mit gleichem Betrag heben sich in Anzahl und Summe auf und bleiben unentdeckt, wenn Sie nur addieren. Ein Katalogdokument trägt eine Katalogkennung und eine Katalogversion; ein Update trägt zusätzlich prev_version, die Zahl der vorausgegangenen Aktualisierungen innerhalb derselben Katalogversion. Dieselbe Kombination aus Katalogversion und prev_version wie beim letzten Import bedeutet eine Wiederholung. Wie Sie Übergaben laufend abgleichen, steht unter Datensynchronisation zwischen Systemen.

Schritt 5: Bestand nicht eins zu eins übernehmen

Zeigen Sie nicht die Zahl aus dem Feed, sondern diese Zahl minus Puffer; der Puffer deckt den Absatz zwischen zwei Abrufen und während der Nachlieferung. Unterstellung dabei: Der Feed nennt den Bestand im Zeitpunkt des Abrufs, der Lieferant reserviert nichts für Ihren Shop, und die Nachlieferzeit ist die zugesagte. Der Puffer deckt nur Ihren eigenen Absatz und ist keine Reservierung beim Lieferanten; verkauft der Lieferant aus demselben, nicht reservierten Bestand auch an andere Abnehmer, kann die Anzeige trotz Puffer zu hoch sein. Trifft eine Annahme nicht zu, ist der Puffer zu klein.

Schritt 6: Abrufe sparsam machen

Nutzen Sie Änderungslisten statt Vollabrufe, wo der Lieferant sie anbietet; BMEcat sieht dafür T_UPDATE_PRODUCTS und T_UPDATE_PRICES neben der Vollübertragung T_NEW_CATALOG vor. Bei einer HTTP-API können Sie häufiger fragen, ohne mehr Daten zu übertragen: Mit dem ETag-Wert der letzten Antwort im Feld If-None-Match antwortet der Server mit 304, wenn sich nichts geändert hat (RFC 9110 Abschnitt 13.1.2, RFC 9111 Abschnitt 4.3).

Schritt 7: Einen fehlenden Lauf erkennen

Ein Lauf, der nicht startet, hinterlässt keine Fehlermeldung. Notieren Sie je Abruf den Zeitpunkt, die Katalogversion mit prev_version oder den jüngsten Änderungszeitstempel aus der Antwort und die Zahl der Datensätze. Bleibt die erwartete prev_version aus oder wiederholt sich, prüfen Sie, ob die Übergabe steht. Alarmwerte und Protokollfelder beschreibt Datensynchronisation zwischen Systemen.

Wie oft Sie aktualisieren

Zwei Größen bestimmen den Takt: die Absatzrate je Stunde und die Menge, die veralten darf. Zuerst der Puffer, dann der Takt.

  • Puffer in Stück ≥ Absatz je Stunde × (Abruftakt in Stunden + Nachlieferzeit in Stunden)
  • Abruftakt in Stunden ≤ Puffer ÷ Absatz je Stunde − Nachlieferzeit in Stunden

Die zweite Formel ist nur anwendbar, solange sie einen positiven Takt ergibt; wird sie null oder negativ, ist der Puffer für die Nachlieferzeit zu klein.

Beispielrechnung mit erfundenen Zahlen: Ein Artikel verkauft sich zweimal je Stunde; im Feed stehen 60 Stück; Sie rufen alle sechs Stunden ab; der Lieferant braucht vier Stunden bis zum Versand. Der Puffer ist dann 2 × (6 + 4) = 20 Stück, und Ihr Shop zeigt 60 − 20 = 40 Stück an. Nach der zweiten Formel ist der Takt mit 20 ÷ 2 − 4 = 6 Stunden gerade ausgeschöpft; ein längerer Takt ließe die Anzeige vor dem nächsten Abruf zu hoch werden. Die 20 Stück Puffer sind Ihr eigener Absatz in den zehn Stunden bis zur Lieferung und keine Reservierung beim Lieferanten: Verkauft der Lieferant aus demselben, nicht reservierten Bestand auch an andere, kann selbst die gekürzte Anzeige zu hoch sein.

Die Beispielwerte sind redaktionell; die geöffneten Quellen nennen keinen Takt für Shops.

Datenart Wovon der Takt abhängt Beispielwert
Bestand Absatzrate im gleichen Zeitraum und Puffer (siehe Rechnung) 4 bis 12 Stunden
Preis wie lange ein alter Preis stehen bleiben darf, gemessen an den Preisänderungen des Lieferanten anlassbezogen, mindestens täglich
Lieferzeit und Verfügbarkeit Nachlieferzeit: bei Lieferzeit in Werktagen zählt der Takt weniger einmal täglich
Stammdaten, Einheiten, Klassifikation, GTIN Sortimentswechsel oder Änderung der Handelseinheit anlassbezogen

Die BMEcat-Spezifikation nennt in Abschnitt 3.1 als Beispiel einen Lieferanten mit Gesamtkatalog einmal pro Jahr, Sortimentsaktualisierung alle drei Monate und Preisänderungen bei Eintritt. Für den Bestand ist der Takt dagegen an der Absatzrate zu messen.

So prüfen Sie das Ergebnis

  • Je Datenart steht eine Quelle mit Format, Feldbelegung und Verantwortlichem fest.
  • Jeder Artikel lässt sich ohne Produktnamen zuordnen, über GTIN oder Lieferantenkennung.
  • Der Shop zeigt nicht die Rohmenge aus dem Feed, sondern die um den Puffer gekürzte Zahl, und die Frage der Reservierung beim Lieferanten ist geklärt.
  • Die Erstlieferung wurde über Datensatzzahl, Summe und Kennungen geprüft.
  • Ein ausgebliebener Abruf fällt über die erwartete prev_version oder den jüngsten Zeitstempel auf.
  • Erfundener Testfall: Sie stellen eine Datei mit doppelt enthaltenem Artikel ein und sehen, ob der Import ihn erkennt.

Wenn etwas nicht klappt

Symptom Mögliche Ursache Behebung
Artikel erscheinen doppelt Zuordnung über den Produktnamen oder geänderte Schreibweise auf GTIN und Lieferantenkennung umstellen, Dubletten zusammenführen
Umlaute kommen als Zeichenfolge an Zeichensatz in Datei und Import unterschiedlich Zeichensatz (etwa UTF-8) vereinbaren und überall einstellen
Preise zeigen erfundene Nachkommastellen in Gleitkomma gerundet statt in kleinster Währungseinheit gerechnet Beträge in Cent oder Rappen führen, erst zur Anzeige formatieren
Bestand fällt sprunghaft auf null leeres Feld bedeutet beim Lieferanten unbekannt, im Import null Leerwert, null und Sperre unterscheiden
Gestern Bestand, heute keiner der Abruf ist ausgefallen Alarm auf ausbleibende Läufe, nicht nur auf Fehlermeldungen

Wann Sie Hilfe holen sollten

Holen Sie Unterstützung, wenn ein Lieferant kein maschinenlesbares Format anbietet oder wenn niemand die Zuordnung pflegt. Welche technische Form zwischen zwei Systemen passt, steht unter Schnittstellen im Shop-Umfeld, welche Anforderungen Ihr Shopsystem mitbringen muss, unter Schnittstellen eines Shopsystems prüfen. Welche Preisangaben gegenüber Verbrauchern nötig sind, ist nicht Gegenstand dieses Artikels.

Häufige Fragen

Der Lieferant schickt nur eine CSV-Datei. Was muss ich schriftlich festhalten?

Reihenfolge und Bezeichnung der Spalten, Trennzeichen, Dezimaltrennzeichen, Zeichensatz, Datums- und Zeitformat, Bedeutung leerer Felder und die Frage, ob die Datei den vollen Bestand oder nur Änderungen enthält. Legen Sie außerdem fest, dass der Lieferant die Feldreihenfolge nur mit Vorlauf ändert. Prüfen Sie die Feldzahl je Datensatz nach dem Parsen, nicht je physischer Zeile: RFC 4180 erlaubt in Abschnitt 2 Zeilenumbrüche innerhalb von Anführungszeichen. Eine gleiche Feldzahl erkennt vertauschte Spalten nicht; dafür brauchen Sie einen Abgleich mit dem Felddokument und Stichproben.

Kann ich die Bestandsmenge des Lieferanten einfach so anzeigen?

Rechnen Sie den Puffer ab: Er deckt den Absatz aus Ihrem Shop zwischen zwei Abrufen und während der Nachlieferzeit. Ziehen Sie von der Menge im Feed den Verkauf ab, der bis zum nächsten Abruf plus Nachlieferzeit zusammenkommt. Diese Rechnung sichert nur gegen Ihren eigenen Absatz ab; sie setzt voraus, dass der Feed den Lieferantenbestand im Zeitpunkt des Abrufs nennt und der Lieferant nichts für Sie reserviert. Verkauft der Lieferant aus demselben, nicht reservierten Bestand auch an andere Abnehmer, kann selbst die gekürzte Menge zu hoch sein; klären Sie, ob er Bestand reserviert oder eine feste Menge zusagt. Bei Artikeln mit langer Nachlieferzeit zeigen Sie statt einer Menge besser die Lieferzeit aus dem Feed an und die Aussage, dass der Artikel beschafft wird.

Woran erkenne ich, dass eine Aktualisierungsdatei fehlt?

An der Zählung, nicht am Datum der Datei. BMEcat führt je Katalog eine Katalogkennung (CATALOG_ID) und eine Katalogversion (CATALOG_VERSION) mit; die CATALOG_VERSION ändert sich nur mit einem neuen Gesamtkatalog (T_NEW_CATALOG) und bleibt über Aktualisierungen gleich. Innerhalb derselben Katalogversion zählt das Attribut prev_version die vorausgegangenen Aktualisierungen: Es beginnt nach jedem T_NEW_CATALOG bei 0 und steigt bei jeder Aktualisierung um 1. Erwarten Sie nach dem letzten Import die vorige prev_version plus 1; wiederholt sich dieselbe Zahl, war die Datei eine Wiederholung, springt sie, fehlt eine Übergabe. Fehlt die Angabe, hilft nur ein Abgleich der Datensatz- und Kennungszahl.

Reicht ein Abruf am Tag?

Nur für Daten, die sich nicht schneller ändern als Ihr Puffer. Rechnen Sie je Artikel: Absatz je Stunde mal die Summe aus Abruftakt und Nachlieferzeit ergibt die Menge, die zwischen zwei Abrufen und während der Nachlieferung verkauft werden kann. Ist dieser Wert größer als der Puffer, den Sie abziehen, wird die Anzeige vor dem nächsten Abruf zu hoch. Ein Abruf am Tag trägt also nur, solange Absatz je Stunde mal (24 plus Nachlieferzeit) nicht größer ist als der Puffer. Für Preisänderungen ist die Frage eine andere: Sie hängt davon ab, wie lange ein alter Preis stehen bleiben darf.

Muss ich Preise und Bestände je Land getrennt führen?

Ja, wenn Ihre Lieferantenpreise je Land oder Währung abweichen und Sie in mehreren Ländern verkaufen. BMEcat kann einen Preis über das optionale Element TERRITORY einem Gebiet nach ISO 3166 zuordnen und erlaubt je Produkt mehrere Preise; ein Territorium lässt sich auch als Vorgabe auf Katalogebene setzen und produktbezogen überschreiben. Ob der Lieferant diese Zuordnung nutzt und für welche Gebiete, steht in der Beschreibung des Feeds. Rechnen Sie den angezeigten Preis je Land in Ihrem Shop neu, statt den Wert des Lieferanten zu übernehmen.

Quellen

  1. Spezifikation BMEcat 2005.2, Version 2005.2 vom 1. Oktober 2022, Abschnitte 2.6, 3.1, 3.2, 4.1.4 sowie die Elemente PRODUCT_DETAILS, PRODUCT_PRICE, PRODUCT_PRICE_DETAILS, DELIVERY_TIMES, PRODUCT_CATEGORY, T_NEW_CATALOG, T_UPDATE_PRODUCTS und T_UPDATE_PRICES samt den Attributen CATALOG_VERSION und prev_versionBundesverband Materialwirtschaft, Einkauf und Logistik e.V. (BME) · abgerufen am
  2. BMEcat 2005.2 XML-Schema (XSD), ElementübersichtBundesverband Materialwirtschaft, Einkauf und Logistik e.V. (BME) · abgerufen am
  3. Spezifikation BMEcat 2005, Modul Integrated Procurement Point, Abschnitte 3 und 3.1.3 bis 3.1.5 sowie die Elemente IPP_DEFINITIONS und IPP_APPLICATIONBundesverband Materialwirtschaft, Einkauf und Logistik e.V. (BME) · abgerufen am
  4. BMEcat: Downloads und Versionsübersicht (aktuelle Version 2005.2)Bundesverband Materialwirtschaft, Einkauf und Logistik e.V. (BME) · abgerufen am
  5. RFC 4180: Common Format and MIME Type for CSV Files (informativ, Oktober 2005), Abschnitte 1 bis 3Internet Engineering Task Force (IETF), rfc-editor.org · abgerufen am
  6. RFC 8259: The JavaScript Object Notation (JSON) Data Interchange Format (Standards Track, Dezember 2017), Abschnitte 6, 8.1 und 9Internet Engineering Task Force (IETF), rfc-editor.org · abgerufen am
  7. RFC 9110: HTTP Semantics (STD 97, Juni 2022), Abschnitte 8.8 und 13.1.2Internet Engineering Task Force (IETF), rfc-editor.org · abgerufen am
  8. RFC 9111: HTTP Caching (Standards Track, Juni 2022), Abschnitt 4.3 (Validation)Internet Engineering Task Force (IETF), rfc-editor.org · abgerufen am
  9. RFC 3339: Date and Time on the Internet: Timestamps (Juli 2002), Abschnitt 5.6Internet Engineering Task Force (IETF), rfc-editor.org · abgerufen am
  10. GS1 General Specifications Standard, Release 26.0, Ratified January 2026, Abschnitte 1.3.1 und 4.2.5GS1 AISBL · abgerufen am