План Free

API за търсене по баркод

Сканирай или въведи баркод и получи продукта. Разреши всеки EAN-13 или UPC код до запис за храна — марка, категория, Nutri-Score и обобщение на хранителните стойности — с една заявка. Създадено за приложения със скенер.

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
  }
}

Предпочиташ да кликаш? Пробвай търсачката на продукти или фото площадката.

Какво получаваш

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"
            

Как работи

Какво прави едно търсене

Изпрати 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.

Виж пълното сравнение на API за хранителни данни →

Често задавани въпроси

Трябва ли да преобразувам 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 ключ Към таблото