1 month free dropshipping trial — then €39/month · Wholesale min €500
cosmeticwholesale

Cosmetic Wholesale

Katalog-Feed

Den Produktkatalog importieren und Bestand und Preise aus Ihrem eigenen System aktuell halten.

Die Order API beschreibt, wie Sie uns eine Bestellung senden. Diese Seite behandelt die andere Hälfte: wie die Produkte in Ihren Shop gelangen und dort aktuell bleiben.

Es gibt keinen "Import"-Endpunkt. Wir veröffentlichen den Katalog als eine einzelne Datei, die Sie regelmäßig abrufen — Sie behalten die Kopie, Sie entscheiden, was damit geschieht. Das ist Absicht: Wir schreiben niemals in Ihren Shop.

1. Der Endpunkt

GET /api/v1/feeds/catalog.csv
GET /api/v1/feeds/catalog.json
Authorization: Bearer YOUR_ACCOUNT_TOKEN

Dasselbe Token wie bei der Order API. Die Response ist immer gzip-komprimiert (Content-Encoding: gzip) — der Katalog ist groß, daher ist das nicht optional.

ResponseBedeutung
200Der aktuelle Katalog. Die Header ETag und X-CW-Feed-Rows nennen Ihnen die Version und die Zeilenanzahl.
304Ihr If-None-Match hat übereingestimmt — seit Ihrem letzten Abruf hat sich nichts geändert. Zählt nicht gegen das Anfragelimit.
403Token fehlt, ist ungültig oder widerrufen.
429Anfragelimit: 30 vollständige Downloads pro Stunde je Token. Retry-After: 3600.
503feed_empty — es ist noch kein Katalog veröffentlicht. Behalten Sie Ihre letzte Kopie und versuchen Sie es später erneut.

2. CSV-Format

Kopfzeile, CRLF-Zeilenenden, UTF-8:

ean,title,stock,price,processing_time,image_url
"6291107455365","Lattafa EDP Qaed Al Fursan 90 ml",42,18.40,"2-3","https://…/6291107455365.jpg"
SpalteBedeutung
eanDer Produktschlüssel. Immer in Anführungszeichen — behandeln Sie ihn als Zeichenkette, niemals als Zahl (führende Nullen sind relevant).
titleProdukttitel.
stockDie Einheiten, die Ihnen aktuell zur Verfügung stehen.
priceIhr Einkaufspreis, in EUR, ohne Umsatzsteuer. Kein Verkaufspreis.
processing_timeBearbeitungszeit in Werktagen, wie vom Lager veröffentlicht.
image_urlProduktbild. Anders als bei unseren Plugins steht Ihnen die Verwendung frei.

Die JSON-Variante bettet dieselben Zeilen in einen Rahmen ein, der die Bedingungen ausdrücklich benennt:

{
  "channel": "DROPSHIPPING",
  "currency": "EUR",
  "tax": "ex_vat",
  "priceSource": "ds_channel_list",
  "generatedAt": "2026-09-07T09:00:00.000Z",
  "rowCount": 67412,
  "truncated": false,
  "rows": [ … ]
}

3. Erster Import

Rufen Sie den Feed einmal ab und legen Sie Ihre Produkte an, mit der EAN als Schlüssel.

Schreiben Sie die EAN in Ihr eigenes SKU-Feld. Bestellpositionen werden über die EAN zugeordnet — steht auf Ihrer Seite etwas anderes in der SKU, erkennt die Bestellübermittlung die Position nicht und sie entfällt. Genau aus diesem Grund schreibt unsere Shopify-App die EAN sowohl in die SKU als auch in den Barcode.

Ein realistischer erster Import umfasst Zehntausende von Zeilen. Führen Sie ihn als Hintergrundjob aus, nicht innerhalb einer Web-Anfrage, und machen Sie ihn fortsetzbar — speichern Sie Ihre Position, damit ein Abbruch nicht bei null neu beginnt.

4. Stündliche Aktualisierung

Rufen Sie einmal pro Stunde ab und senden Sie Ihr letztes ETag mit:

GET /api/v1/feeds/catalog.csv
Authorization: Bearer YOUR_ACCOUNT_TOKEN
If-None-Match: "a3f19c…"

304 bedeutet, dass sich nichts geändert hat — hören Sie dort auf. Ein 200 bedeutet, dass eine neue Version vorliegt: Aktualisieren Sie Bestand und Preis für die EANs, die Sie bereits haben.

Regeln, die das sicher machen:

  • Nur aktualisieren. Legen Sie im stündlichen Lauf keine Produkte an, und löschen Sie keine.
  • Ein fehlgeschlagener Abruf ist kein leerer Katalog. Behalten Sie bei 429, 503, einem Timeout oder einem abgebrochenen Download Ihre bisherigen Daten und versuchen Sie es später erneut. Setzen Sie niemals den Bestand Ihres gesamten Katalogs auf null, weil eine Anfrage fehlgeschlagen ist — das ist der schädlichste Fehler in dieser Integration.
  • stock: 0 ist eine echte Zeile, keine fehlende. Produkte gehen auf null und kommen zurück.
  • Eine ausgelistete EAN bleibt mindestens 14 Tage mit stock: 0 im Feed, bevor sie verschwindet. Werten Sie "nicht im Feed" also erst dann als "wird nicht mehr verkauft", wenn sie längere Zeit fehlt — und ziehen Sie selbst dann das Ausblenden dem Löschen vor, damit Ihre Bestellhistorie intakt bleibt.
  • Rufen Sie nicht öfter als ein paar Mal pro Stunde ab. Das Limit liegt bei 30 vollständigen Downloads pro Stunde; 304- Responses sind kostenlos.

5. Marge und Ihr Verkaufspreis

Wir hinterlegen für Sie keine Marge. Der Feed liefert Ihnen den Einkaufspreis; was Sie Ihrem Kunden berechnen, ist Ihre Sache, und nichts davon wird auf unserer Seite konfiguriert.

Unsere Plugins wenden diese Formel an, und wir empfehlen sie aus Gründen der Übereinstimmung — falls Sie einen Shop einmal zwischen dem Plugin und Ihrem eigenen System migrieren, springen die Preise dann nicht:

retail_price = round(cost × (1 + margin_percent / 100) + margin_fixed, 2)

Beide Werte wählen Sie selbst. 0 und 0 verkauft zu unserem Einkaufspreis. Hinterlegen Sie sie in Ihren eigenen Einstellungen.

Zwei Punkte, die Sie beim Festlegen im Blick behalten sollten:

  • price versteht sich ohne Umsatzsteuer. Rechnen Sie die Umsatzsteuer entsprechend Ihrer eigenen Registrierung und dem Land des Kunden hinzu.
  • Der Versand wird separat berechnet und ist nicht im Feed enthalten.

6. Checkliste vor dem Go-live

  • Die EAN ist als Text gespeichert und ist Ihre SKU
  • Der erste Import läuft vollständig durch und ist fortsetzbar
  • Der stündliche Job sendet If-None-Match und verarbeitet 304
  • Ein fehlgeschlagener oder limitierter Abruf lässt Ihren Katalog unangetastet
  • Der stündliche Job legt niemals Produkte an und löscht niemals Produkte
  • stock: 0 blendet das Produkt aus, statt es zu löschen
  • Ihre Margenformel entspricht der bisherigen, geprüft anhand von zehn bekannten EANs
  • Der Verkaufspreis rechnet die Umsatzsteuer auf den Einkaufspreis aus dem Feed auf