План Free

API за хранителни стойности

Отиди отвъд основните макроси. Вземи подробна разбивка на над 40 хранителни вещества на продукт — енергия, протеини, въглехидрати, мазнини, захари, фибри, натрий, витамини и минерали — всичко на 100 g, за всяка храна по ID.

200 OK
GET /v1/foods/{id}/nutrients
curl -H "X-API-Key: food_•••" \
  "https://foodbase.dev/v1/foods/62ea12b8.../nutrients"

{
  "food_id": "62ea12b8...",
  "macros": {
    "energy_kcal": 42,
    "proteins_g": 0,
    "carbs_g": 10.6,
    "sugars_g": 10.6,
    "fat_g": 0,
    "fiber_g": null
  },
  "fats": { "saturated_fat_g": 0 },
  "minerals": { "sodium_mg": 0, "salt_g": 0 },
  "other": { "added_sugars_g": 5.3 }
}

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

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

Макроси

Енергия, протеини, въглехидрати, захари, мазнини, наситени мазнини, фибри.

Минерали

Натрий, калций, желязо, калий, магнезий, цинк и други.

Витамини

A, C, D, E и витамините от група B, където са отчетени.

На 100 g

Единна основа, за да мащабираш към всеки размер на порция.

Над 40 полета

Един обект с всяко хранително вещество, което източникът предоставя.

Включено в безплатния план — 25 разбивки на хранителни вещества/ден, без кредитна карта; неограничено от Starter. Виж плановете →

Примерен код

Същата заявка на curl, JavaScript и Python. Замени YOUR_API_KEY с ключ от таблото си.


              curl "https://foodbase.dev/v1/foods/62ea12b8-b260-c288-5c38-3a4906f5d6dd/nutrients" \
  -H "X-API-Key: YOUR_API_KEY"
            

Как работи

Една заявка, пет групи, на 100 g

GET /v1/foods/{id}/nutrients приема UUID на храната в пътя и нищо друго: няма параметри на заявката, няма тяло, няма lang. Id е същото, което връщат всички други крайни точки, така че резултат от API за търсене на храни или API за търсене по баркод става пълна разбивка с още едно извикване. Id-тата са детерминирани при повторен внос, така че можеш да ги пазиш и да продължиш да викаш същия URL.

Отговорът е плосък обект с food_id плюс пет фиксирани групи: macros, fats, minerals, vitamins и other. Всеки ключ винаги присъства и всяка стойност е число или null. Преброяването на ключовете в текущата схема дава 41 полета за хранителни вещества, откъдето идва числото „над 40“. Мерните единици са в името на ключа (energy_kcal, sodium_mg, selenium_mcg, vitamin_a_iu), така че не ти трябва отделна таблица с единици.

Всички стойности са на 100 g от продукта, както се продава. За да покажеш порция, умножи по грамовете, разделени на 100. serving_size_raw в записа на храната е текст от етикета (за примерния запис на Coca-Cola е „1 can (330 ml)“), така че преобразуването от този текст в грамове е твоя работа.

  • macros (10 ключа) покрива енергия в kcal и kJ, протеини, въглехидрати, мазнини, захари, фибри, алкохол, скорбяла и полиоли; fats (7) добавя наситени, транс-, мононаситени и полиненаситени мазнини, omega3, omega6 и cholesterol_mg
  • minerals (12) върви от sodium_mg и salt_g до selenium_mcg и iodine_mcg; vitamins (11) отчита A и D в IU, B9 и B12 в mcg, останалите в mg; other съдържа added_sugars_g

Как да четеш правилно null и нули

Примерният отговор за храна 62ea12b8-b260-c288-5c38-3a4906f5d6dd показва типичния модел на Open Food Facts: energy_kcal 42, energy_kj 180.2, carbs_g 10.6, sugars_g 10.6, added_sugars_g 5.3, изрични нули за proteins_g, fat_g, saturated_fat_g, sodium_mg и salt_g и null за всичко останало, от fiber_g до цялата група vitamins.

Третирай двете състояния по различен начин. 0 е стойност, отчетена от източника; null означава, че хранителното вещество не е на етикета или не е в източника. Никога не превръщай null в 0, преди да сумираш дневния прием, иначе хранене от частично етикетирани продукти тихо ще отчете по-малко витамини и минерали. Показвай тире или „не е отчетено“.

Покритието следва произхода. Редовете със source usda_foundation или usda_sr_legacy са лабораторни анализи на USDA и попълват групите за витамини и минерали, така че повечето ключове са числа. Редовете със source usda (USDA Branded Foods) и редовете от Open Food Facts са преписани от опаковката, така че са надеждни за задължителните хранителни вещества на етикета и често са null извън тях. Полето source в записа на храната ти казва в кой случай си, преди да визуализираш таблицата.

  • Показвай null като неизвестно, не като нула; агрегирай само ключове, които са различни от null във всеки продукт на храненето.
  • sodium_mg и salt_g съществуват и двата, защото етикетите се различават по региони; използвай този, който аудиторията ти очаква, и се връщай към другия.

Кога наистина ти трябва това извикване

Всеки запис за храна от API за база данни с храни и всяко съвпадение по баркод вече включва nutrition_summary с шест основни стойности: energy_kcal, proteins_g, carbs_g, fat_g, sugars_g и fiber_g. Редовете от търсенето са по-леки и го нямат. За резултат от скенер, карта с детайли или бързо записване на калории този обект обикновено е достатъчен и не струва разбивка на хранителни вещества.

Запази /nutrients за екрана с детайли или за момента, в който потребителят попита за натрий, наситени мазнини, холестерол или конкретен витамин. Търси или сканирай, покажи обобщението, дръпни разбивката при докосване. В плана Free това е и начинът да останеш в рамките на лимита от 25 на ден, докато разработваш.

Заснетите заглавки на отговора не носят Cache-Control, така че кеширането е твоя работа. Id-тата са стабилни и стойностите се променят само когато продуктът бъде внесен повторно, така че кеш с ключ food_id и срок от часове или дни е безопасен.

Лимитът на плана Free, заглавка по заглавка

В плана Free всяка успешна разбивка намалява отделен дневен брояч от 25, отчитан във всеки отговор като X-RateLimit-Nutrients-Limit, X-RateLimit-Nutrients-Remaining и X-RateLimit-Nutrients-Reset. Чети Remaining преди серия от заявки за детайли и можеш да преминеш към nutrition_summary, вместо да се удариш в стената по средата на сесия.

При нула крайната точка връща 429 с error „Nutrients daily allowance exceeded“, upgrade_url в тялото и Retry-After със секундите до полунощ UTC. Отхвърлено извикване не изразходва нито разбивка, нито дневна заявка и не измества нулирането. Платените планове нямат такъв брояч; техните извиквания за хранителни вещества са ограничени само от дневната квота заявки на плана (споделена между всички ключове на акаунта) и от лимита за секунда на ключ.

Ако си на Starter или по-горе и обработваш голям каталог, първо вземи базовите записи през API за групово търсене на храни и викай /nutrients само за id-тата, за които обобщението не е достатъчно.

Какво можеш да изградиш

Калорийни и макро тракери

Записвай точни хранителни стойности на порция с едно търсене.

Планиране на хранения и диети

Изграждай планове, които покриват целите за макро- и микроелементи.

Здравни и клинични инструменти

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

Лимити по план

Free 25 разбивки на хранителни вещества/ден (заглавки X-RateLimit-Nutrients-*), в рамките на 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 — Няма ред с хранителни вещества за това id: храната може да не съществува или да съществува без никакви хранителни данни (nutrition_summary е null). Тялото гласи „No nutrient data for this food“.

Не повтаряй. Покажи храната без разбивка; ако id идва от стар кеш, разреши го отново по баркод или търсене, защото 404 тук не е временна.

422 — Id в пътя не е UUID, например баркод или съкратено id, копирано от пример.

Подай полето id от търсене, баркод или запис за храна; първо разрешавай баркодовете през API за търсене по баркод.

429 — Само в плана Free: тялото съдържа error „Nutrients daily allowance exceeded“, а X-RateLimit-Nutrients-Remaining е 0. Не е изразходвана разбивка.

Спазвай Retry-After (секунди до полунощ UTC), преминавай към nutrition_summary до края на деня и покажи upgrade_url от тялото, ако потребителят има нужда от пълни разбивки веднага.

429 — При всеки план: изчерпан е лимитът за секунда на ключ или дневната квота заявки на целия акаунт; X-RateLimit-Second-Remaining и X-RateLimit-Daily-Remaining показват кой от двата.

Изчакай секундите от Retry-After. Слагай заявките за детайли на опашка, вместо да ги пускаш паралелно; при достигнат дневен лимит спри до X-RateLimit-Daily-Reset.

В сравнение с други API

Повечето API за хранителни данни или връщат таблица на порция, която не можеш да преизчислиш, или разпръскват хранителните вещества в редове име/стойност/единица, които трябва да нормализираш сам. FoodBase връща фиксиран, типизиран обект на 100 g с единицата във всеки ключ, така че клиент, написан веднъж по схемата, пасва на всеки продукт. Компромисът е честността за пропуските: ред от Open Food Facts, извлечен от етикета, има null там, където ред на USDA има числа, и API го отчита, вместо да попълва приблизителни стойности. Ако ти трябват само основните макроси, записът за храната вече ги носи и тази крайна точка не е задължителна.

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

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

Стойностите на порция ли са, или на 100 g? +

Винаги на 100 g, за всеки план и всеки източник. serving_size_raw в записа на храната е текст от етикета като „1 can (330 ml)“, така че преобразуването му в грамове и мащабирането стават в твоя код. Така два продукта остават сравними, без да знаеш как всяка марка определя порцията.

Какво означава null стойност и с какво се различава от 0? +

Null означава, че хранителното вещество не е на етикета или не е в източника; 0 означава, че източникът е отчел нула. В примерния отговор за Coca-Cola fat_g е 0, докато fiber_g е null. Никога не третирай двете еднакво, когато сумираш хранене.

Защо храна от USDA има попълнени витамини, а продукт от супермаркет — не? +

Редовете USDA Foundation и SR Legacy (source usda_foundation, usda_sr_legacy) идват от лабораторен анализ и обикновено попълват групите за витамини и минерали. Редовете USDA Branded (source usda) и Open Food Facts са преписани от опаковката, която в повечето региони изисква само основните хранителни вещества. Провери полето source в записа на храната, за да знаеш какъв ред имаш.

Трябва ли ми тази крайна точка, ако вече имам nutrition_summary? +

Често не. nutrition_summary в записа на храната вече дава energy_kcal, proteins_g, carbs_g, fat_g, sugars_g и fiber_g. Извикай /nutrients, когато ти трябва останалото, като наситени мазнини, натрий, холестерол или който и да е витамин или минерал, което обикновено е само на екран с детайли.

Как лимитът от 25 разбивки в плана Free се отнася към 100-те заявки на ден? +

25-те са отделен брояч, отчитан в заглавките X-RateLimit-Nutrients-* и нулиран в полунощ UTC; 100-те са квотата заявки на целия акаунт. Успешната разбивка се отчита и в двата. 429 за лимита на хранителните вещества не изразходва нито един, но продължава да се връща до нулирането, така че спри да викаш дотогава.

Коя крайна точка ми дава id, което да подам тук? +

Всяка от тях. API за търсене на храни връща id-та за текстови заявки, а API за търсене по баркод разрешава GTIN до един запис. Примерното food_id 62ea12b8-b260-c288-5c38-3a4906f5d6dd е записът зад баркод 5449000000996.

Разгледай още endpoint-и

API за AI анализ на храни

Едно извикване превръща суровите данни за продукта в нещо, което можеш да покажеш на потребителя: резюме от две изречения, добри страни и предупреждения, изчислени от хранителните данни с публикувани прагове, декларираните алергени, съвместимост с диети, която казва откъде идва всеки отговор, и нивото на обработка — на шест езика, стриктно основано на данните от етикета на продукта.

Научи повече →

API за търсене на храни

Пълнотекстово търсене сред 6,1 милиона хранителни продукта по име, марка или категория — подредени по релевантност, със странициране и бързо. Търси на всеки език, на който е отпечатан етикетът (включително кирилица), и подай lang=en|fr|es|de|it|bg за локализирани имена, категории и алергени. Една GET заявка връща чист JSON, който приложението ти може да визуализира веднага.

Научи повече →

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

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

Научи повече →

Започни да създаваш с API за хранителни стойности

Безплатно за начало. Без кредитна карта.

Вземи API ключ Към таблото