Free-Tarif

Lebensmittel-Kategorien API

Durchstöbere jede Lebensmittelkategorie mit ihrer Produktzahl — das Rückgrat für Filter, Facetten und Navigation. Paginiertes JSON über den gesamten Katalog, ausgeliefert aus einer vorberechneten Ansicht, damit es schnell bleibt.

200 OK
GET /v1/categories
curl -H "X-API-Key: food_•••" \
  "https://foodbase.dev/v1/categories"

{
  "data": [
    { "category": "Popcorn, Peanuts, Seeds & Related Snacks", "product_count": 95496 },
    { "category": "Candy", "product_count": 92693 },
    { "category": "Cheese", "product_count": 85564 }
  ],
  "total": 306779
}

Lieber klicken? Probier den Produkt-Explorer oder die Foto-Spielwiese aus.

Was du zurückbekommst

category

Der Kategoriename.

product_count

Wie viele Produkte darunter fallen.

total

Anzahl der unterschiedlichen Kategorien.

Filterbereit

Kombiniere sie mit der Suche, um Ergebnisse nach Kategorie einzugrenzen.

Im kostenlosen Tarif enthalten — 100 Anfragen/Tag, keine Kreditkarte nötig. Tarife ansehen →

Codebeispiele

Dieselbe Anfrage in curl, JavaScript und Python. Ersetze YOUR_API_KEY durch einen Schlüssel aus deinem Dashboard.


              curl "https://foodbase.dev/v1/categories?q=chocolate&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"
            

So funktioniert's

Was eine Anfrage liefert

GET /v1/categories liest eine vorberechnete Tabelle mit jedem unterschiedlichen Kategorie-String im Katalog samt der Zahl der Produkte, die ihn tragen; Produkte ohne Kategorie sind ausgeschlossen. Die Zeilen sind nach product_count absteigend sortiert, ohne zweite Sortierung — verlass dich also nicht auf die Reihenfolge von Zeilen mit gleicher Zahl.

q ist ein Teilstring-Filter ohne Beachtung der Groß-/Kleinschreibung, kein Präfix: q=chocolate trifft „Chocolate“, „en:chocolates“ und „Beverages, Dairies, Dairy drinks, Flavoured milks, Chocolate milks“ gleichermaßen und engt die aufgezeichnete Antwort auf ein total von 11303 unterschiedlichen Strings ein. Leerraum wird getrimmt, % und _ sind wörtlich, und q ist auf 200 Zeichen begrenzt.

limit reicht von 1–100 (Standard 20) und offset von 0–10000, sodass du mit limit=100 höchstens die ersten 10.100 Zeilen erreichst; grenze lieber mit q ein, statt tiefer zu blättern. Antworten tragen Cache-Control: public, max-age=600, der Server cacht eine Stunde, und die Tabelle wird nur bei einem Bulk-Reimport neu aufgebaut — hole sie also einmal beim Start oder in einem Build-Schritt und speichere das Ergebnis.

Zwei Formen von Kategorie-Strings

Open-Food-Facts-Produkte tragen eine kommagetrennte Hierarchie, von allgemein bis spezifisch: „Snacks, Sweet snacks, Cocoa and its products, Chocolates, Dark chocolates“. Segmente können rohe Taxonomie-Tags mit einem zweistelligen Sprachpräfix sein („en:chocolate-candies“), in der Sprache des Etiketts stehen („Botanas, Snacks dulces, Cacao y sus productos, Chocolates, Chocolates negros“) und enden oft in einem Sammelbegriff wie en:groceries, der nicht die spezifischste Ebene ist.

USDA-Produkte tragen eine flache Handelskategorie, deren Name selbst Kommas enthalten kann („Chips, Pretzels & Snacks“); trenne sie nie. Zeilen enthalten hier keine source — brauchst du sie, hole mit der Lebensmittel-Datenbank-API ein Produkt aus der Kategorie und lies source neben category und categories_tags.

Eine Hierarchie kann als mehrere Zeilen erscheinen: Die aufgezeichnete Antwort listet „Snacks, Sweet snacks, Cocoa and its products, Chocolates, Dark chocolates“ (497 Produkte) und denselben Pfad ohne Leerzeichen nach den Kommas (339) getrennt. Führe über bereinigte Segmente zusammen, nicht über den rohen String.

Einen Browse-Baum oder eine Filter-UI bauen

Wende die Bereinigung an, die die Website nutzt: am Komma trennen, trimmen, ein führendes xx:-Tag entfernen, Bindestriche durch Leerzeichen ersetzen, den ersten Buchstaben großschreiben und wiederholte Segmente ohne Beachtung der Groß-/Kleinschreibung verwerfen. Das erste bereinigte Segment ist die Wurzel; das letzte, das kein Sammelbegriff ist (groceries, food, foods, products, unknown, none), ist das Blatt. Die Zahl eines Knotens ist die Summe von product_count über alle rohen Strings, die auf ihn abgebildet werden.

  • Wurzelknoten: nach erstem bereinigten Segment gruppieren („Snacks“, „Beverages“, „Botanas“).
  • Blatt-Chips: das letzte Segment, das kein Sammelbegriff ist („Dark chocolates“, „Chocolate milks“).
  • Flache USDA-Namen: der ganze String ist zugleich Wurzel und Blatt.
  • Sprache: Hierarchien in verschiedenen Sprachen bleiben getrennte Knoten; für Übersetzungen pro Produkt übergib lang= an die Lebensmittel-Suche-API und lies category_localized und category_segments_localized.
  • Der Browse-Baum der Website unter /categories/ wendet dieselben Bereinigungsregeln auf diese Daten an (und behält nur die größeren Blätter); nutze ihn, um deine Ausgabe zu prüfen.

Von einer Kategorie zu ihren Produkten

Die Suche hat keinen Kategorie-Parameter. Die Lebensmittel-Suche-API gleicht zuerst Produktnamen und Marken ab und gleicht erst dann, wenn das nichts findet, die Wörter deiner Anfrage mit Kategorie-Strings ab. Sende ein vollständiges bereinigtes Segment, das selbst kein Produktname ist, als q, etwa „Seeds & Related Snacks“, und du erhältst die Produkte dieser Kategorie nach Beliebtheit sortiert.

Der Fallback arbeitet wortbasiert, sodass „Seeds & Related Snacks“ jeden Kategorie-String trifft, der diese Wörter in irgendeiner Sprache enthält, und ein Segment, das zugleich ein gängiges Produktwort ist („Chocolate“ oder „Dark chocolates“), ihn nie erreicht, weil Produktnamen zuerst treffen. Für eine strikte Auflistung filtere jedes Ergebnis nach seinem category-Feld, dem rohen String, den dieser Endpunkt zurückgegeben hat.

Was du damit baust

Filter & Facetten

Rendere Kategorienavigation mit aktuellen Produktzahlen.

Katalogübersichten

Zeige Nutzern die Form des Datenbestands, bevor sie suchen.

Analytics-Dashboards

Stelle grafisch dar, wie sich Produkte auf Kategorien verteilen.

Limits pro Tarif

Free 100 Anfragen/Tag, geteilt über alle Endpunkte, 1/s (Burst 5); genug, um einen gecachten Baum ein paar Mal am Tag zu aktualisieren.
Starter 5.000 Anfragen/Tag, 5/s (Burst 25).
Pro 25.000 Anfragen/Tag, 20/s (Burst 100).
Enterprise 100.000 Anfragen/Tag, 50/s (Burst 250).

Jede Antwort enthält Header X-RateLimit-* mit dem verbleibenden Budget; jede 429 enthält Retry-After . Tarife vergleichen →

Fehler und wie du sie behandelst

401 — X-API-Key fehlt, ist ungültig oder widerrufen.

Sende einen Schlüssel aus dem Dashboard; das error-Feld im Body sagt, welcher Fall vorliegt.

422 — limit außerhalb von 1–100, offset außerhalb von 0–10000 oder q über 200 Zeichen.

Begrenze Werte auf dem Client; die Validierung liefert hier 422, nicht 400.

429 — Das Sekundenlimit des Schlüssels oder das Tageskontingent des Kontos ist erschöpft.

Warte auf Retry-After und liefere in der Zwischenzeit deine gecachte Kopie aus.

Im Vergleich zu anderen APIs

Dies ist eine Auflistung von Kategorie-Strings, wie sie gespeichert sind, mit Zahlen — keine kuratierte Taxonomie. Open-Food-Facts-Mitwirkende und der USDA-Import liefern jeweils ihre eigene Form, Schreibweise, Sprache und Tags, und der Endpunkt führt sie nicht zusammen; die oben beschriebenen Bereinigungsregeln wendest du selbst an. Dafür stimmen die Zahlen exakt mit dem Katalog überein, und jeder String lässt sich direkt zurück in die Suche geben oder mit dem category-Feld eines Produkts vergleichen. Baue aus dieser Liste einen normalisierten Baum und cache ihn, denn die Daten ändern sich nur bei einem Reimport.

Zum vollständigen Vergleich der Lebensmitteldaten-APIs →

Häufige Fragen

Ist q ein Präfix- oder ein Teilstring-Abgleich? +

Teilstring, ohne Beachtung der Groß-/Kleinschreibung, an beliebiger Stelle im String; q=chocolate liefert „Beverages, Dairies, Dairy drinks, Flavoured milks, Chocolate milks“ ebenso wie „Chocolate“. Man kann ihn nicht am Anfang verankern.

Warum sehe ich dieselbe Hierarchie mehrfach? +

Die gespeicherten Strings unterscheiden sich in Abständen, Tagging („en:chocolates“ gegenüber „Chocolates“) oder Sprache, und der Endpunkt zählt pro rohem String. Führe über bereinigte Segmente zusammen, um sie zu vereinen.

Kann ich nur USDA- oder nur Open-Food-Facts-Kategorien auflisten? +

Nein: Es gibt keinen source-Filter, und Zeilen tragen keine source. Hole ein Produkt aus der Kategorie mit der Lebensmittel-Datenbank-API und lies sein source-Feld.

Kann ich die Suche nach Kategorie filtern? +

Nicht per Parameter. Sende das Segment als q an die Lebensmittel-Suche-API, die nur auf Kategorie-Abgleich zurückfällt, wenn kein Produktname oder keine Marke passt; filtere für eine exakte Übereinstimmung nach dem category-Feld jedes Ergebnisses.

Zählt total Produkte oder Kategorien? +

Unterschiedliche Kategorie-Strings, die zu q passen: In der aufgezeichneten Antwort ist total 11303 für q=chocolate, während die erste Zeile allein 46110 Produkte hält. Summiere product_count selbst für eine Produktgesamtzahl.

Leg jetzt los mit der Lebensmittel-Kategorien API

Kostenlos starten. Keine Kreditkarte nötig.

API-Schlüssel holen Zum Dashboard