Free-Tarif

Barcode-Abfrage API

Barcode scannen oder eintippen, Produkt erhalten. Löse jeden EAN-13- oder UPC-Code in einer einzigen Anfrage zu einem Lebensmitteldatensatz auf — mit Marke, Kategorie, Nutri-Score und Nährwert-Zusammenfassung. Gebaut für Apps mit Scanner.

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

{
  "name_default": "Original Taste",
  "brand": "Coca-Cola",
  "barcode": "5449000000996",
  "nutriscore": "e",
  "nutrition_summary": {
    "energy_kcal": 42,
    "sugars_g": 10.6,
    "proteins_g": 0,
    "fat_g": 0
  }
}

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

Was du zurückbekommst

name_default / brand

Produktname und Marke zum gescannten Code.

name / lang

Vollständiger mehrsprachiger Namenssatz, wenn das Etikett mehrere Sprachen trägt; hänge ?lang= (en, fr, es, de, it, bg) an für lokalisierte Kategorie- und Allergenfelder.

barcode

Der Barcode, wie er im Katalog gespeichert ist — Varianten desselben Codes mit führenden Nullen (UPC-12, EAN-13, GTIN-14) lösen alle zu ihm auf.

nutriscore

Nutri-Score-Note (a–e), sofern verfügbar.

nutrition_summary

Die wichtigsten Makros: Energie, Zucker, Eiweiß, Fett.

image_url

Produktbild, sofern verfügbar.

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/foods/barcode/5449000000996" \
  -H "X-API-Key: YOUR_API_KEY"
            

So funktioniert's

Was eine Abfrage macht

Sende GET /v1/foods/barcode/{code} mit deinem Schlüssel im X-API-Key-Header. Der Code ist GTIN-8 bis GTIN-14, höchstens 20 Zeichen. FoodBase versucht zuerst eine exakte Übereinstimmung mit dem gespeicherten Barcode, dann die Äquivalente derselben Nummer mit führenden Nullen, sodass ein 12-stelliger UPC-A den Datensatz findet, der als 13-stellige EAN gespeichert ist.

Für 5449000000996 kommt der Datensatz mit barcode 5449000000996 und id 62ea12b8-b260-c288-5c38-3a4906f5d6dd zurück. Diese id bleibt über Reimporte hinweg stabil, speichere sie also als Fremdschlüssel statt des Barcode-Strings.

Tragen mehrere Katalogzeilen denselben Barcode, gewinnt die beliebteste Zeile, und die Wahl ist deterministisch: Derselbe Code liefert bei jedem Aufruf dasselbe Produkt.

  • Der zurückgegebene barcode ist die gespeicherte Form, nicht unbedingt die Form, die du gesendet hast.

Den Datensatz lesen

Der 200-Body ist derselbe vollständige Lebensmitteldatensatz, den die Lebensmittel-Datenbank-API per id liefert — parse ihn also einmal und verwende den Parser weiter. Für 5449000000996 bedeutet das: source openfoodfacts, name_default Original Taste mit bg- und fr-Einträgen im name-Array, nutriscore e, nova_group 4 und ecoscore_grade not-applicable. Etikettentext wie serving_size_raw (1 can (330 ml)) und quantity (0kg bei diesem Datensatz, ein Fehler der Mitwirkenden) kommt so zurück, wie er auf der Verpackung getippt wurde — behandle ihn also als Hinweis, nicht als Zahl.

  • categories_tags ist die maschinenlesbare Taxonomie (en:colas); category ist derselbe Pfad als kommagetrennter Anzeige-String.
  • allergens und traces sind null, wenn die Quelle keine nennt — das ist nicht dasselbe wie allergenfrei.
  • image_url zeigt auf images.openfoodfacts.org und kann sich ändern, wenn Mitwirkende das Produkt aktualisieren.

Lokalisierung und Nährwerte

Hänge ?lang=bg (oder en, fr, es, de, it) an, um category_localized, category_segments_localized und allergens_localized aus den Übersetzungswörterbüchern zu füllen. Wo es keine Übersetzung gibt, ist das Feld null statt eines englischen Fallbacks — halte category und allergens also in deiner Fallback-Kette. lang betrifft weder name noch ingredients.

nutrition_summary hat sechs Schlüssel: energy_kcal, proteins_g, carbs_g, fat_g, sugars_g, fiber_g. Jeder kann null sein, und das ganze Objekt ist null, wenn die Quelle keine Nährwerte erfasst hat. Für die vollständige Tabelle pro 100 g, 40+ Nährstoffe, wo die Quelle sie hat, rufe die Nährwert-API mit der soeben erhaltenen id auf.

Scanner-Ablauf, Caching und Fehlschläge

Bei 200 rendere die Karte aus name_default, brand, image_url und nutrition_summary und behalte die id. Bei 404 ist der Code nicht im Katalog: Weiche auf die Lebensmittel-Bilderkennung-API mit einem Foto der Packungsvorderseite aus, oder biete eine Textsuche an. Wiederhole kein 404; es ändert sich nicht, bis der Katalog aktualisiert wird.

200-Antworten tragen Cache-Control: public, max-age=300, und 404er sind 60 Sekunden cachebar. Halte dich in jedem Cache zwischen deinen Nutzern und FoodBase daran. Jede Antwort trägt außerdem X-RateLimit-Second-Remaining und die Header für das Tageskontingent; drossle anhand davon, bevor du ein 429 siehst.

Die Abdeckung ist bei europäischen und US-Handelsprodukten am besten, weil der Katalog aus Open Food Facts und USDA FoodData Central aufgebaut ist, ergänzt um GS1 Bulgarien und Metro Bulgarien. Eigenmarken und ganz neue Produkte sind die häufigsten Fehlschläge.

Was du damit baust

Barcode-Scanner

Mach aus einem Kamera-Scan sofort Produkt- und Nährwertdaten.

Vorrats- & Einkaufs-Apps

Lass Nutzer Artikel hinzufügen, indem sie den Barcode der Verpackung scannen.

Handel & Kasse

Reichere einen Warenkorb mit Lebensmittelattributen an, über den Barcode als Schlüssel.

Limits pro Tarif

Free 100 Anfragen/Tag, geteilt über alle Endpunkte und Schlüssel, 1 Anfrage/s mit Burst 5.
Starter 5.000 Anfragen/Tag, 5/s mit Burst 25.
Pro 25.000 Anfragen/Tag, 20/s mit Burst 100.
Enterprise 100.000 Anfragen/Tag, 50/s mit 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

404 — Keine Katalogzeile passt zum Code oder zu einer Variante mit führenden Nullen. Body: {"error":"Not found","message":"No food with this barcode"}.

Biete Foto-Erkennung oder eine Textsuche an; cache den Fehlschlag für die erlaubten 60 s.

401 — Der X-API-Key-Header fehlt oder der Schlüssel ist ungültig.

Prüfe den Header-Namen und den Schlüssel in deinem Dashboard; leite den Aufruf über dein Backend, statt den Schlüssel in einer Mobile-App auszuliefern.

429 — Sekunden-Burst für diesen Schlüssel überschritten oder das Tageskontingent des Kontos ist verbraucht.

Warte die in Retry-After genannten Sekunden ab und versuche es dann einmal erneut.

Im Vergleich zu anderen APIs

Die meisten Barcode-APIs antworten mit Name, Marke und vielleicht einem Bild; FoodBase antwortet mit dem vollständigen Lebensmitteldatensatz, sodass ein Scan dir Zutaten, Allergene, Nutri-Score und eine Nährwert-Zusammenfassung ohne zweiten Aufruf liefert. Der Katalog besteht aus Open Food Facts plus USDA FoodData Central plus GS1 und Metro Bulgarien, was ihn bei europäischen und US-Lebensmitteln stark und außerhalb dieser Märkte schwächer macht. Die GTIN-Auffüllung mit Nullen übernimmt der Server, du brauchst also keine Normalisierungsschicht. Es gibt keine Garantie, dass jeder Code existiert; plane den 404-Pfad ein.

Zum vollständigen Vergleich der Lebensmitteldaten-APIs →

Häufige Fragen

Muss ich einen UPC-A-Code vor dem Aufruf in EAN-13 umwandeln? +

Nein. Sende die Ziffern, die dein Scanner geliefert hat. FoodBase versucht zuerst den exakten String und dann die Äquivalente mit führenden Nullen, sodass ein 12-stelliger UPC-A die 13-stellige EAN-13-Form findet und 0000080042556 das als 80042556 gespeicherte Produkt. Das Feld barcode in der Antwort zeigt die gespeicherte Form.

Was passiert, wenn zwei Produkte denselben Barcode haben? +

Die beliebteste Katalogzeile gewinnt und die Wahl ist deterministisch, wiederholte Abfragen liefern also dasselbe Produkt. Brauchst du die Alternativen, suche stattdessen per Name mit der Lebensmittel-Suche-API.

Ist die Antwort dieselbe wie beim Abruf des Produkts per id? +

Ja. Es ist der Datensatz, den die Lebensmittel-Datenbank-API für GET /v1/foods/{id} liefert, einschließlich nutrition_summary, categories_tags und der mehrsprachigen name- und ingredients-Arrays.

Wie zeige ich den Produktnamen in der Sprache der Nutzerin an? +

Lies das name-Array und wähle den Eintrag, dessen lang passt; das Beispiel trägt bg (Кока-Кола), fr (Coca-Cola en canette), de, it, es und weitere. Falle auf name_default zurück, den Haupteintrag von lang. Der Parameter ?lang= lokalisiert nur Kategorie und Allergene.

Kann ich Barcode-Ergebnisse auf meiner Seite cachen? +

Ja, und das solltest du. Treffer kommen mit Cache-Control: public, max-age=300, und Fehlschläge sind 60 Sekunden cachebar. Ein gemeinsamer Cache vor deinem Backend sorgt dafür, dass wiederholte Scans desselben Codes dein Tageskontingent nicht berühren.

Warum liefert ein echtes Produkt ein 404? +

Die Abdeckung folgt den Quellen: Open Food Facts, USDA FoodData Central, GS1 Bulgarien und Metro Bulgarien, daher sind europäische und US-Handelsprodukte am besten abgedeckt. Eigenmarken und frisch eingeführte Produkte sind die üblichen Lücken; weiche auf die Lebensmittel-Bilderkennung-API oder eine Textsuche aus.

Leg jetzt los mit der Barcode-Abfrage API

Kostenlos starten. Keine Kreditkarte nötig.

API-Schlüssel holen Zum Dashboard