Choicera Integration
Vertrag v1, Stand 14. August 2026

Produktdaten liefern

Wir empfehlen nur Produkte, deren Inhaltsstoffe und Dosierung wir kennen. Dazu holen wir deine Produktdaten regelmäßig selbst ab. Du musst uns keine Änderungen melden.

Was zu tun ist

  1. Schick uns eine URL: einen Produkt-Feed, eine Sitemap oder deine Shop-Domain. Welche Variante für dein Shopsystem passt, steht unter Vorhandenes Format nutzen. Fertig, wenn die URL öffentlich über HTTPS erreichbar ist, oder du uns Benutzer und Passwort für den Zugriff genannt hast.
  2. Stelle sicher, dass die Pflichtfelder vorhanden sind: Artikelnummer, Name, Preis als Zahl, Verfügbarkeit, Produktbeschreibung als HTML. Fertig, wenn der Selbsttest unten keine Zeile ausgibt.
  3. Prüfe, ob Zutaten und Nährwerte als echte Tabelle in der Beschreibung stehen, nicht als Bild. Fertig, wenn die Tabelle eine Kopfzeile mit einer Mengenspalte hat, siehe Beschreibung, Nährwerte, Dosierung.

JSON-Feed nach unserem Schema

Der genauste Weg, und der mit den wenigsten Rückfragen. Ein HTTPS-Endpunkt liefert alle Produkte in einem Dokument.

Von direine Feed-URL über HTTPS
Produkt-Schlüsselproduct_number
Warenkorb-Schlüsselvariants[].sku, Muster ^[A-Za-z0-9-]+$
Schemajson-feed.schema.json
Beispieljson-feed.sample.json

Felder je Produkt

FeldTypPflichtBedeutung
product_numberString, nicht leerjaArtikelnummer, unser Schlüssel für das Produkt. Muss über Feed-Generierungen hinweg stabil bleiben.
titleString, nicht leerjaAnzeigename.
health_claims.statusFeste Werte, siehe untenjaSteuert, ob das Produkt in der Beratung erscheinen darf.
variantsArray, min. 1jaAuch ein Produkt ohne Varianten hat genau einen Eintrag.
body_htmlString mit HTMLjaBeschreibung wie auf der Detailseite, mit Zutaten, Nährwerttabelle und Verzehrempfehlung.
urlAbsolute HTTPS-URLjaProduktdetailseite auf der Domain, die du uns genannt hast.
imageHTTPS-URLempfohlenEin Titelbild. Die Liste images allein genügt nicht.
darreichungsformStringempfohlenKapseln, Tabletten, Pulver, Tropfen, Spray, Sachets, Set, Testkit.
images, tags, vendorArray, Array, StringoptionalWeitere Bilder, Kategorien und Markenname.

Felder je Variante

FeldTypPflichtBedeutung
skuString, nur A-Z a-z 0-9 und BindestrichjaEindeutig je Variante. Diesen Wert senden wir im Warenkorb-Link zurück.
priceZahl, Punkt als Dezimaltrenner, bruttoja24.9, nicht "24,90" und nicht "24.90".
availableBooleanjatrue oder false, nicht "true" und nicht 1.
titleStringempfohlenGrößenbezeichnung, etwa 120 Kapseln oder 500 g.
servings_per_containerZahlempfohlenPortionen je Packung. Ohne dieses Feld lesen wir die Zahl aus dem Produkttitel, was bei Pulvern scheitert.
serving_size, net_quantity, gtinString, Objekt, StringoptionalPortionsgröße, Füllmenge und EAN. Machen den Preisvergleich je Portion genauer.
idStringoptionalInterne ID deines Shops, falls vorhanden.

Werte für health_claims.status

WertBedeutungFolge
doneNahrungsergänzung, Health-Claims geprüftwird empfohlen
keine_claimsNahrungsergänzung ohne Health-Claimswird empfohlen
bundleSet aus mehreren Produktenim Katalog, eigene Behandlung
kein_nemKein Nahrungsergänzungsmittel: Testkits, Zubehör, Kosmetikbleibt aus der Beratung

Jeder andere Wert und ein fehlendes Feld werden wie kein_nem behandelt. Setz den Status also auch dann, wenn er keine_claims lautet. Testkits und Zubehör dürfen im Feed bleiben, sie sind dann für die Beratung ausgeschlossen.

Betrieb des Feeds

  • HTTPS und öffentlich abrufbar. Basic Auth ist möglich, nenn uns dann Benutzer und Passwort.
  • Ein Dokument mit allen Produkten, keine Seitennummerierung.
  • Antwort in unter 20 Sekunden. Bei großen Katalogen vorgeneriert ausliefern.
  • generated_at als ISO-8601-Zeitstempel, damit wir die Frische sehen.
  • product_number und sku dürfen sich nicht bei jeder Generierung ändern.

Vier Regeln, an denen Produkte verloren gehen

  1. Kein product_number oder kein title Das Produkt wird verworfen.
  2. Keine Variante mit positivem price Das Produkt wird verworfen. Der Preis ist als JSON-Zahl zu liefern; zur Sicherheit nehmen wir auch Zeichenketten der Formen "3.95" und "3,95" an. Alles andere (Währungszeichen, Tausendertrenner, 0) zählt als kein Preis. Das ist der häufigste Grund, warum ein Feed formal in Ordnung aussieht und bei uns null Produkte ankommen.
  3. Unbekannter health_claims.status Das Produkt liegt im Katalog, ist in der Beratung aber unsichtbar.
  4. Punkt, Unterstrich, Leerzeichen oder Schrägstrich in der sku Das Produkt ist empfehlbar, fällt aber aus dem Warenkorb-Link, ohne Fehlermeldung. Die Kundin sieht dann einen unvollständigen Warenkorb.

Liegt die url nicht auf der Domain, die du uns genannt hast, verwerfen wir den Produktlink. Vor dem Start heißt das: keine Testshop-Domains im Feed.

Beschreibung, Nährwerte, Dosierung

Gilt für alle Wege. Aus der HTML-Beschreibung lesen wir Inhaltsstoffe und Dosierung, die Grundlage jeder Empfehlung.

  • Echte <table>-Auszeichnung mit Kopfzeile und mindestens zwei Spalten. Tabellen als Bild oder als div-Raster können wir nicht lesen.
  • Erste Spalte: Name des Nährstoffs. Unterzeilen beginnen mit davon oder einem Bindestrich.
  • Mengenspalte: die Kopfzelle muss eines der Wörter Tagesdosis, Menge oder je enthalten. Erkannt werden etwa pro Tagesdosis (3 Kapseln), je Portion (10 g) und Menge pro Kapsel. Eine Spalte je 100 g überspringen wir, weil wir den Bezug auf die Portion brauchen.
  • NRV-Spalte, optional: Kopfzelle enthält NRV oder % RM.
  • Verzehrempfehlung unter einer Zwischenüberschrift <h3>Verzehrempfehlung</h3>, hinter der Tabelle.
<table>
  <tr><th>Nährstoff</th><th>pro Tagesdosis (3 Kapseln)</th><th>% NRV</th></tr>
  <tr><td>Magnesium</td><td>300 mg</td><td>80</td></tr>
  <tr><td>davon aus Magnesiumcitrat</td><td>1875 mg</td><td>-</td></tr>
</table>
<h3>Verzehrempfehlung</h3>
<p>3 Kapseln täglich mit reichlich Wasser zu einer Mahlzeit.</p>

Kannst du Zutaten und Nährwerte strukturiert ausgeben, also Name, Menge, Einheit und Prozent NRV je Zeile, nehmen wir das lieber als HTML. Dann entfällt das Auslesen der Tabelle.

Vorhandenes Format nutzen

Vier Wege, für die dein Shop nichts Neues bauen muss.

Shopify

Wir lesen die öffentliche products.json. Von dir brauchen wir nur die Shop-Domain. Der Warenkorb läuft über Cart-Permalinks, der Gutschein über /discount/<code>.

WooCommerce, Feed im Google-Merchant-Format

Erzeugt dein Shop schon einen Feed für das Google Merchant Center, lesen wir denselben Feed. Diese Felder werten wir aus:

FeldPflichtHinweis
g:idjaProdukt-ID, nur Ziffern. Derselbe Wert muss im Warenkorb-Link funktionieren.
g:titlejaAnzeigename.
g:pricejaGenau Betrag Währung, etwa 24.90 EUR: Punkt als Dezimaltrenner, ein Leerzeichen, ISO-Währungscode. Anderes Format, und das Produkt fällt aus.
g:descriptionjaBeschreibung als HTML, mit Nährwerttabelle und Verzehrempfehlung.
g:linkjaProduktseite auf der Live-Domain.
g:availabilityjain_stock, out_of_stock, preorder oder backorder.
g:image_linkempfohlenTitelbild, weitere über g:additional_image_link.
g:product_typeempfohlenKategoriepfad mit >. Die letzte Stufe wird unsere Kategorie und entscheidet, ob ein Artikel als Nahrungsergänzung gilt.
g:sale_price, g:gtin, g:mpn, g:brandoptionalAktionspreis wird verwendet, wenn gesetzt. Die übrigen verbessern die Produktzuordnung.

JSON-LD auf den Produktseiten

Kein Feed nötig: wir folgen deiner Sitemap und lesen auf jeder Produktseite das schema.org-JSON-LD (Product oder DietarySupplement) mit sku, price und availability, dazu die Zutaten- und Nährwerttabelle aus dem Seiten-HTML. Voraussetzung: das JSON-LD steht auf jeder Produktseite und enthält die Artikelnummer.

PrestaShop-JSON

Wir lesen id_product, name, reference, price_current (ersatzweise price oder price_default), description_short, description_webshop_full, images und link_rewrite für den Produktlink.

Etwas anderes

Schick uns ein Beispiel deines Exports: eine Datei, eine URL oder eine Liste der Felder. Wir melden dir, ob wir es direkt lesen können oder was wir brauchen.

Selbst prüfen

Für den JSON-Feed. Jede Ausgabe ist ein Produkt, das bei uns nicht oder nur halb ankommt.

npx --yes -p ajv-cli -p ajv-formats ajv validate --spec=draft2020 -c ajv-formats \
  -s json-feed.schema.json -d feed.json --errors=text --all-errors

pipx run check-jsonschema --schemafile json-feed.schema.json feed.json

Ohne Installation, nur mit jq:

jq -r '.products[] | select((.product_number|type) != "string" or (.product_number|length) == 0
  or (.title|type) != "string" or (.title|length) == 0)
  | "VERWORFEN (product_number/title): \(.title // "?")"' feed.json

jq -r '.products[] | select([.variants[]?.price | select(type == "number")] | length == 0)
  | "VERWORFEN (kein numerischer Preis): \(.product_number)"' feed.json

jq -r '.products[] | .health_claims.status as $s
  | select((["done","keine_claims","bundle","kein_nem"] | index($s)) == null)
  | "UNSICHTBAR (health_claims.status): \(.product_number) = \($s|tostring)"' feed.json

jq -r '.products[] | .product_number as $p | .variants[]?
  | select((.sku // "") | test("^[A-Za-z0-9-]+$") | not)
  | "WARENKORB-VERLUST (sku): \($p) = \(.sku|tostring)"' feed.json

Keine Ausgabe heißt: der Feed geht vollständig durch. Schick uns die URL, dann prüfen wir gegen und melden Produktzahl und Auffälligkeiten.

Weiter mit Schritt 2: Warenkorb übergeben.