API de recherche par code-barres
Scannez ou tapez un code-barres, obtenez le produit. Résolvez n'importe quel code EAN-13 ou UPC en fiche alimentaire — marque, catégorie, Nutri-Score et résumé nutritionnel — en une seule requête. Conçue pour les applis de scan.
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
}
} Vous préférez cliquer ? Essayez l'explorateur de produits ou le bac à sable photo.
Ce que vous obtenez
name_default / brand
Nom du produit et marque du code scanné.
name / lang
Ensemble complet des noms multilingues quand l'étiquette en porte plusieurs ; ajoutez ?lang= (en, fr, es, de, it, bg) pour les champs de catégorie et d'allergènes localisés.
barcode
Le code-barres tel que stocké dans le catalogue — les variantes avec zéros de remplissage (UPC-12, EAN-13, GTIN-14) d'un même code y mènent toutes.
nutriscore
Note Nutri-Score (a–e) quand elle est disponible.
nutrition_summary
Macros principales : énergie, sucres, protéines, lipides.
image_url
Image du produit quand elle est disponible.
Inclus dans le forfait gratuit — 100 requêtes/jour, sans carte bancaire. Voir les forfaits →
Exemples de code
La même requête en curl, JavaScript et Python. Remplacez YOUR_API_KEY par une clé de votre tableau de bord.
curl "https://foodbase.dev/v1/foods/barcode/5449000000996" \
-H "X-API-Key: YOUR_API_KEY"
const res = await fetch("https://foodbase.dev/v1/foods/barcode/5449000000996", {
headers: { "X-API-Key": "YOUR_API_KEY" },
});
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
import requests
res = requests.get(
"https://foodbase.dev/v1/foods/barcode/5449000000996",
headers={"X-API-Key": "YOUR_API_KEY"},
timeout=30,
)
res.raise_for_status()
data = res.json()
Comment ça marche
Ce que fait une recherche
Envoyez GET /v1/foods/barcode/{code} avec votre clé dans l'en-tête X-API-Key. Le code va du GTIN-8 au GTIN-14, 20 caractères au maximum. FoodBase essaie d'abord une correspondance exacte avec le code-barres stocké, puis les équivalents avec zéros de remplissage du même nombre : un UPC-A à 12 chiffres trouve ainsi la fiche stockée sous forme d'EAN à 13 chiffres.
Pour 5449000000996, la fiche revient avec barcode 5449000000996 et id 62ea12b8-b260-c288-5c38-3a4906f5d6dd. Cet id est stable d'une réimportation à l'autre : stockez-le comme clé étrangère plutôt que la chaîne du code-barres.
Quand plusieurs lignes du catalogue portent le même code-barres, la plus populaire l'emporte et le choix est déterministe : le même code renvoie le même produit à chaque appel.
- Le barcode renvoyé est la forme stockée, pas forcément celle que vous avez envoyée.
Lire la fiche
Le corps du 200 est la même fiche alimentaire complète que celle que renvoie l'API de base de données alimentaire par id : analysez-la une fois et réutilisez le parseur. Pour 5449000000996, cela donne source openfoodfacts, name_default Original Taste avec des entrées bg et fr dans le tableau name, nutriscore e, nova_group 4 et ecoscore_grade not-applicable. Les textes d'étiquette comme serving_size_raw (1 can (330 ml)) et quantity (0kg sur cette fiche, une erreur de contributeur) sont renvoyés tels que saisis depuis l'emballage : traitez-les comme une indication, pas comme un nombre.
- categories_tags est la taxonomie lisible par machine (en:colas) ; category est le même chemin sous forme de chaîne d'affichage jointe par des virgules.
- allergens et traces valent null quand la source n'en mentionne aucun, ce qui ne veut pas dire sans allergènes.
- image_url pointe vers images.openfoodfacts.org et peut changer quand des contributeurs mettent le produit à jour.
Localisation et nutrition
Ajoutez ?lang=bg (ou en, fr, es, de, it) pour remplir category_localized, category_segments_localized et allergens_localized à partir des dictionnaires de traduction. Quand aucune traduction n'existe, le champ vaut null plutôt qu'un repli en anglais : gardez donc category et allergens dans votre chaîne de repli. lang ne touche ni name ni ingredients.
nutrition_summary a six clés : energy_kcal, proteins_g, carbs_g, fat_g, sugars_g, fiber_g. Chacune peut être null, et l'objet entier vaut null quand la source n'a enregistré aucune donnée nutritionnelle. Pour le tableau complet pour 100 g, plus de 40 nutriments quand la source les fournit, appelez l'API de nutrition avec l'id que vous venez de recevoir.
Flux de scan, cache et échecs
En cas de 200, affichez la carte à partir de name_default, brand, image_url et nutrition_summary, et gardez l'id. En cas de 404, le code n'est pas dans le catalogue : basculez vers l'API de reconnaissance d'images alimentaires avec une photo de la face avant, ou proposez une recherche textuelle. Ne réessayez pas un 404 ; il ne changera pas tant que le catalogue n'est pas mis à jour.
Les réponses 200 portent Cache-Control: public, max-age=300, et les 404 peuvent être mis en cache 60 secondes. Respectez-les dans tout cache placé entre vos utilisateurs et FoodBase. Chaque réponse porte aussi X-RateLimit-Second-Remaining et les en-têtes de quota quotidien ; régulez votre débit grâce à eux avant de recevoir un 429.
La couverture est meilleure pour les produits de grande distribution européens et américains, car le catalogue est construit à partir d'Open Food Facts et d'USDA FoodData Central, complétés par GS1 Bulgaria et Metro Bulgaria. Les marques de distributeur et les produits très récents sont les absences les plus fréquentes.
Ce que vous pouvez créer
Scanners de codes-barres
Transformez un scan à la caméra du téléphone en données produit et nutritionnelles instantanées.
Applis de garde-manger et de courses
Laissez les utilisateurs ajouter des articles en scannant le code-barres de l'emballage.
Commerce et passage en caisse
Enrichissez un panier d'attributs alimentaires à partir du code-barres.
Limites par forfait
| Free | 100 requêtes/jour partagées entre tous les endpoints et toutes les clés, 1 requête/s avec une rafale de 5. |
|---|---|
| Starter | 5 000 requêtes/jour, 5/s avec une rafale de 25. |
| Pro | 25 000 requêtes/jour, 20/s avec une rafale de 100. |
| Enterprise | 100 000 requêtes/jour, 50/s avec une rafale de 250. |
Chaque réponse contient des en-têtes X-RateLimit-* indiquant le budget restant ; chaque 429 contient Retry-After . Comparer les forfaits →
Erreurs et comment les gérer
404 — Aucune ligne du catalogue ne correspond au code ni à une variante avec zéros de remplissage. Corps : {"error":"Not found","message":"No food with this barcode"}.
Proposez l'identification par photo ou une recherche textuelle ; mettez l'échec en cache pendant les 60 s autorisées.
401 — L'en-tête X-API-Key est absent ou la clé n'est pas valide.
Vérifiez le nom de l'en-tête et la clé dans votre tableau de bord ; faites passer l'appel par votre backend plutôt que d'embarquer la clé dans une appli mobile.
429 — Rafale par seconde dépassée pour cette clé, ou quota quotidien du compte épuisé.
Attendez les secondes indiquées dans Retry-After, puis réessayez une fois.
Comparaison avec d'autres API
La plupart des API de codes-barres répondent par un nom, une marque et parfois une image ; FoodBase répond par la fiche alimentaire complète, si bien qu'un seul scan vous donne ingrédients, allergènes, Nutri-Score et résumé nutritionnel sans second appel. Le catalogue combine Open Food Facts, USDA FoodData Central, GS1 et Metro Bulgaria : il est solide pour les produits d'épicerie européens et américains, plus faible en dehors de ces marchés. Les zéros de remplissage GTIN sont gérés côté serveur, vous n'avez donc besoin d'aucune couche de normalisation. Rien ne garantit que chaque code existe : prévoyez le cas 404.
Voir la comparaison complète des API de données alimentaires →
Questions fréquentes
Dois-je convertir un code UPC-A en EAN-13 avant l'appel ? +
Non. Envoyez les chiffres produits par votre scanner. FoodBase essaie d'abord la chaîne exacte puis les équivalents avec zéros de remplissage : un UPC-A à 12 chiffres trouve la forme EAN-13 à 13 chiffres, et 0000080042556 trouve le produit stocké sous 80042556. Le champ barcode de la réponse montre la forme stockée.
Que se passe-t-il si deux produits partagent le même code-barres ? +
La ligne la plus populaire du catalogue l'emporte et le choix est déterministe : des recherches répétées renvoient le même produit. Si vous avez besoin des alternatives, cherchez plutôt par nom avec l'API de recherche alimentaire.
La réponse est-elle la même que lorsqu'on récupère le produit par id ? +
Oui. C'est la fiche que l'API de base de données alimentaire renvoie pour GET /v1/foods/{id}, avec nutrition_summary, categories_tags et les tableaux multilingues name et ingredients.
Comment afficher le nom du produit dans la langue de l'utilisateur ? +
Lisez le tableau name et choisissez l'entrée dont la lang correspond ; l'exemple contient bg (Кока-Кола), fr (Coca-Cola en canette), de, it, es et d'autres. Repliez-vous sur name_default, qui est l'entrée lang main. Le paramètre ?lang= ne localise que la catégorie et les allergènes.
Puis-je mettre en cache les résultats de code-barres de mon côté ? +
Oui, et c'est recommandé. Les réponses trouvées arrivent avec Cache-Control: public, max-age=300 et les échecs peuvent être mis en cache 60 secondes. Un cache partagé devant votre backend évite que des scans répétés du même code n'entament votre quota quotidien.
Pourquoi un vrai produit renvoie-t-il 404 ? +
La couverture suit les sources : Open Food Facts, USDA FoodData Central, GS1 Bulgaria et Metro Bulgaria, si bien que les produits de grande distribution européens et américains sont les mieux couverts. Les marques de distributeur et les produits récemment lancés sont les lacunes habituelles ; basculez vers l'API de reconnaissance d'images alimentaires ou une recherche textuelle.
Découvrez d'autres endpoints
API de reconnaissance d'images alimentaires
Transformez une photo en données alimentaires. Quatre endpoints de vision couvrent tout le parcours caméra : décoder un code-barres, identifier un produit par sa face avant, lire l'étiquette nutritionnelle et les ingrédients, ou analyser une assiette avec des estimations de portions — avec correspondance parmi 6,1 M de produits, en six langues dont le cyrillique.
En savoir plus →API de nutrition
Allez au-delà des macros principales. Obtenez le détail de plus de 40 nutriments par produit — énergie, protéines, glucides, lipides, sucres, fibres, sodium, vitamines et minéraux — tous pour 100 g, pour n'importe quel aliment par ID.
En savoir plus →API de recherche alimentaire
Recherche plein texte dans 6,1 millions de produits alimentaires par nom, marque ou catégorie — classée par pertinence, paginée et rapide. Cherchez dans la langue imprimée sur l'étiquette (cyrillique compris) et passez lang=en|fr|es|de|it|bg pour obtenir les noms, catégories et allergènes localisés. Une seule requête GET renvoie un JSON propre que votre application peut afficher immédiatement.
En savoir plus →Commencez à développer avec l'API de recherche par code-barres
Gratuit pour démarrer. Sans carte bancaire.
Obtenir une clé API Aller au tableau de bord