API за търсене по баркод
Сканирай или въведи баркод и получи продукта. Разреши всеки EAN-13 или UPC код до запис за храна — марка, категория, Nutri-Score и обобщение на хранителните стойности — с една заявка. Създадено за приложения със скенер.
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
}
} Предпочиташ да кликаш? Пробвай търсачката на продукти или фото площадката.
Какво получаваш
name_default / brand
Име и марка на продукта за сканирания код.
name / lang
Пълен многоезичен набор от имена, когато етикетът носи няколко езика; добави ?lang= (en, fr, es, de, it, bg) за локализирани полета за категория и алергени.
barcode
Баркодът, както е записан в каталога — всички варианти с водещи нули (UPC-12, EAN-13, GTIN-14) на един и същ код се разрешават до него.
nutriscore
Оценка Nutri-Score (a–e), когато е налична.
nutrition_summary
Основни макроси: енергия, захари, протеини, мазнини.
image_url
Изображение на продукта, когато е налично.
Включено в безплатния план — 100 заявки/ден, без кредитна карта. Виж плановете →
Примерен код
Същата заявка на curl, JavaScript и Python. Замени YOUR_API_KEY с ключ от таблото си.
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()
Как работи
Какво прави едно търсене
Изпрати GET /v1/foods/barcode/{code} с ключа си в заглавката X-API-Key. Кодът е от GTIN-8 до GTIN-14, най-много 20 символа. FoodBase първо опитва точно съвпадение със съхранения баркод, после еквивалентите му с водещи нули, така че 12-цифров UPC-A намира записа, съхранен като 13-цифров EAN.
За 5449000000996 записът се връща с barcode 5449000000996 и id 62ea12b8-b260-c288-5c38-3a4906f5d6dd. Това id е стабилно при повторен внос, затова го пази като външен ключ вместо низа на баркода.
Когато няколко реда в каталога носят един и същ баркод, печели най-популярният и изборът е детерминиран: един и същ код връща един и същ продукт при всяко извикване.
- Върнатият barcode е съхранената форма, не непременно формата, която си изпратил.
Четене на записа
Тялото на 200 е същият пълен запис за храна, който API за база данни с храни връща по id, така че го парсвай веднъж и преизползвай парсера. За 5449000000996 това означава source openfoodfacts, name_default Original Taste с вписвания bg и fr в масива name, nutriscore e, nova_group 4 и ecoscore_grade not-applicable. Текст от етикета като serving_size_raw (1 can (330 ml)) и quantity (0kg в този запис — грешка на контрибутор) се връща, както е въведен на опаковката, затова го третирай като подсказка, а не като число.
- categories_tags е машинночетимата таксономия (en:colas); category е същият път като низ със запетаи за показване.
- allergens и traces са null, когато източникът не изброява такива, което не е същото като без алергени.
- image_url сочи към images.openfoodfacts.org и може да се промени, когато контрибутори обновят продукта.
Локализация и хранителни стойности
Добави ?lang=bg (или en, fr, es, de, it), за да се попълнят category_localized, category_segments_localized и allergens_localized от речниците за превод. Където няма превод, полето е null, а не английски вариант, затова дръж category и allergens във веригата си от резервни стойности. lang не засяга name или ingredients.
nutrition_summary има шест ключа: energy_kcal, proteins_g, carbs_g, fat_g, sugars_g, fiber_g. Всеки от тях може да е null, а целият обект е null, когато източникът не е записал хранителни данни. За пълната таблица на 100 g, над 40 хранителни вещества, където източникът ги има, извикай API за хранителни стойности с id, което току-що получи.
Поток със скенер, кеширане и пропуски
При 200 визуализирай картата от name_default, brand, image_url и nutrition_summary и запази id. При 404 кодът не е в каталога: премини към API за разпознаване на храни от снимка със снимка на предната страна на опаковката или дай на потребителя текстово търсене. Не повтаряй 404; няма да се промени, докато каталогът не бъде обновен.
Отговорите 200 носят Cache-Control: public, max-age=300, а 404 могат да се кешират 60 секунди. Спазвай ги във всеки кеш между потребителите ти и FoodBase. Всеки отговор носи и X-RateLimit-Second-Remaining и заглавките за дневната квота; ограничавай скоростта по тях, преди да видиш 429.
Покритието е най-добро за европейски и американски търговски продукти, защото каталогът е изграден от Open Food Facts и USDA FoodData Central, с GS1 България и Metro България отгоре. Най-честите пропуски са продукти с търговска марка на веригата (private label) и много нови продукти.
Какво можеш да изградиш
Скенери за баркод
Превърни сканиране с камерата на телефона в незабавни данни за продукта и храненето.
Приложения за килер и пазаруване
Позволи на потребителите да добавят продукти, като сканират баркода на опаковката.
Търговия и каса
Обогати кошница с хранителни атрибути по баркод.
Лимити по план
| Free | 100 заявки/ден, споделени между всички крайни точки и ключове, 1 заявка/с с burst 5. |
|---|---|
| Starter | 5 000 заявки/ден, 5/с с burst 25. |
| Pro | 25 000 заявки/ден, 20/с с burst 100. |
| Enterprise | 100 000 заявки/ден, 50/с с burst 250. |
Всеки отговор съдържа хедъри X-RateLimit-* с оставащия бюджет; всеки 429 съдържа Retry-After . Сравни плановете →
Грешки и как да ги обработиш
404 — Нито един ред в каталога не съвпада с кода или с вариант с водещи нули. Тяло: {"error":"Not found","message":"No food with this barcode"}.
Предложи идентификация по снимка или текстово търсене; кеширай пропуска за позволените 60 s.
401 — Заглавката X-API-Key липсва или ключът е невалиден.
Провери името на заглавката и ключа в таблото; прокарай извикването през бекенда си, вместо да вграждаш ключа в мобилно приложение.
429 — Надвишен burst за секунда за този ключ или дневната квота на акаунта е изразходвана.
Изчакай секундите от Retry-After, после опитай веднъж.
В сравнение с други API
Повечето API за баркод отговарят с име, марка и може би изображение; FoodBase отговаря с пълния запис за храна, така че едно сканиране ти дава съставки, алергени, Nutri-Score и обобщение на хранителните стойности без второ извикване. Каталогът е Open Food Facts плюс USDA FoodData Central плюс GS1 и Metro България, което го прави силен за европейски и американски хранителни стоки и по-слаб извън тези пазари. Допълването на GTIN с водещи нули се обработва на сървъра, така че не ти трябва слой за нормализиране. Няма гаранция, че всеки код съществува; планирай пътя при 404.
Често задавани въпроси
Трябва ли да преобразувам UPC-A код в EAN-13 преди извикване? +
Не. Изпрати цифрите, които скенерът ти е произвел. FoodBase първо опитва точния низ, после еквивалентите с водещи нули, така че 12-цифров UPC-A намира 13-цифровата форма EAN-13, а 0000080042556 намира продукта, съхранен като 80042556. Полето barcode в отговора показва съхранената форма.
Какво става, ако два продукта имат един и същ баркод? +
Печели най-популярният ред в каталога и изборът е детерминиран, така че повторните търсения връщат същия продукт. Ако ти трябват алтернативите, търси по име с API за търсене на храни.
Отговорът същият ли е като при извличане на продукта по id? +
Да. Това е записът, който API за база данни с храни връща за GET /v1/foods/{id}, включително nutrition_summary, categories_tags и многоезичните масиви name и ingredients.
Как да покажа името на продукта на езика на потребителя? +
Прочети масива name и избери вписването, чийто lang съвпада; примерът носи bg (Кока-Кола), fr (Coca-Cola en canette), de, it, es и други. Върни се към name_default, което е основното вписване (lang main). Параметърът ?lang= локализира само категорията и алергените.
Мога ли да кеширам резултатите от търсене по баркод при себе си? +
Да, и трябва. Успешните отговори идват с Cache-Control: public, max-age=300, а пропуските могат да се кешират 60 секунди. Споделен кеш пред бекенда ти означава, че повторни сканирания на един и същ код не засягат дневната ти квота.
Защо реален продукт връща 404? +
Покритието следва източниците: Open Food Facts, USDA FoodData Central, GS1 България и Metro България, така че европейските и американските търговски продукти са най-добре покрити. Продуктите с търговска марка на веригата и наскоро пуснатите продукти са обичайните пропуски; премини към API за разпознаване на храни от снимка или към текстово търсене.
Разгледай още endpoint-и
API за разпознаване на храни от снимка
Превърни снимка в данни за храна. Четири vision крайни точки покриват целия поток с камерата: декодирай баркод, разпознай продукт по предната му страна, прочети етикета с хранителните стойности и съставките или анализирай чиния с храна с оценки на порциите — съпоставено с 6,1 млн. продукта, на шест езика, включително кирилица.
Научи повече →API за хранителни стойности
Отиди отвъд основните макроси. Вземи подробна разбивка на над 40 хранителни вещества на продукт — енергия, протеини, въглехидрати, мазнини, захари, фибри, натрий, витамини и минерали — всичко на 100 g, за всяка храна по ID.
Научи повече →API за търсене на храни
Пълнотекстово търсене сред 6,1 милиона хранителни продукта по име, марка или категория — подредени по релевантност, със странициране и бързо. Търси на всеки език, на който е отпечатан етикетът (включително кирилица), и подай lang=en|fr|es|de|it|bg за локализирани имена, категории и алергени. Една GET заявка връща чист JSON, който приложението ти може да визуализира веднага.
Научи повече →Започни да създаваш с API за търсене по баркод
Безплатно за начало. Без кредитна карта.
Вземи API ключ Към таблото