API калорийности и КБЖУ продуктов
Бесплатный API с базой КБЖУ для вашего приложения, бота или сайта. Ищите продукт по названию или штрихкоду, а API вернёт калории, белки, жиры и углеводы в JSON. В базе 39 842 продукта: от гречки и творога до воппера и шоколадки с полки магазина
- Бесплатно до 1 000 запросов в сутки
- Вход как в дневник, без отдельной регистрации
$ curl -H "X-Api-Key: ваш_ключ" \ "perek.us/api/v1/foods/search?q=воппер" { "name": "Воппер", "brand": { "name": "Бургер Кинг" }, "per100": { "kcal": 262.77, "protein": 9.85, "fat": 16.06, "carbs": 19.34 }, "servings": [{ "label": "Порция", "grams": 274 }] }
Ключ за пару минут
- ВойдитеПо почте, через Telegram или MAX, как в дневник питания. Если аккаунта ещё нет, он появится при входе
- Выпустите ключВ личном кабинете одной кнопкой. Там же видно, сколько запросов осталось на сегодня
- Отправьте запросПередайте ключ в заголовке
X-Api-Key, и ответ придёт в JSON
Что в базе
- 38 335товаров от 4 032 брендов
- 45 119штрихкодов EAN
- 1 133позиции из меню 8 сетей
- 32 654товара с составом с упаковки
- 374продукта и блюда без бренда
- 418позиций с витаминами и минералами
- 3 212товаров из Казахстана, у них
market: "kz" - Откуда цифрыИсточник у каждой позиции указан в поле
sources
Запросы
- Адрес
https://perek.us/api/v1/foods - Ключв заголовке
X-Api-Key - ОтветJSON, числа на 100 г, а у напитков на 100 мл
-
GET
Поиск По названию, бренду, сети или штрихкоду. Понимает названия блюд целиком, как их пишут люди и нейросети: «Плов с курицей и овощами», «Авокадо (половина)»./search?q=limitзадаёт число ответов от 1 до 20 (по умолчанию 10), аoffsetлистает дальше -
GET
Подсказки при наборе Для строки поиска, которая подсказывает по буквам: на «моро» предложит мороженое, а не смородину, и назовёт подходящие бренды в/suggest?q=brands. Отдаёт толькоidи названия, поэтому лимит разных продуктов не тратит. Цифры придут в карточке того, что выбрал человек -
GET
Карточка продукта Всё о продукте по/{id}idиз поиска: состав с упаковки, штрихкоды, витамины и минералы, источник цифр -
GET
Несколько карточек сразу До 20?ids=idчерез запятую, например весь дневник за день. Каких нет, придут списком вmissing -
GET
КБЖУ по штрихкоду Коды EAN-13 и EAN-8. Если цифр по коду нет, API ответит 404, а если сам товар нам известен, назовёт его в/barcode/{ean}product
marketruилиkzоставит товары одной страныtypefoodоставит обычные продукты,brandedтовары брендов,chainблюда сетей. Можно несколько через запятуюbrandТолько этот бренд или сеть, поbrand.idиз ответа:?q=бургер&brand=burger-kingfullfull=trueвернёт в поиске карточки целиком, и второй запрос за составом не понадобится
curl -H "X-Api-Key: ваш_ключ" \ "https://perek.us/api/v1/foods/search?q=гречка&limit=5" # карточка продукта и поиск по штрихкоду curl -H "X-Api-Key: ваш_ключ" "https://perek.us/api/v1/foods/burger-king/vopper" curl -H "X-Api-Key: ваш_ключ" "https://perek.us/api/v1/foods/barcode/4606068171360"
import requests r = requests.get( "https://perek.us/api/v1/foods/search", params={"q": "гречка", "limit": 5}, headers={"X-Api-Key": "ваш_ключ"}, timeout=10, ) for food in r.json()["foods"]: print(food["name"], food["per100"]["kcal"], "ккал")
// Node.js 18 и новее: ключ живёт на сервере const url = new URL("https://perek.us/api/v1/foods/search"); url.searchParams.set("q", "гречка"); url.searchParams.set("limit", "5"); const res = await fetch(url, { headers: { "X-Api-Key": process.env.PEREK_API_KEY }, }); const { foods } = await res.json(); for (const food of foods) { console.log(food.name, food.per100.kcal, "ккал"); }
{
"query": "воппер",
"similar": false,
"offset": 0,
"more": true,
"foods": [{
"id": "burger-king/vopper",
"name": "Воппер",
"type": "chain",
"brand": {"id": "burger-king", "name": "Бургер Кинг", "kind": "chain"},
"per100": {"kcal": 262.77, "protein": 9.85, "fat": 16.06, "carbs": 19.34},
"servings": [{"label": "Порция", "grams": 274.0}],
"unit": "г",
"market": "ru",
"url": "https://perek.us/food/burger-king/vopper",
"license": null
}]
}
idНе меняется, его можно хранить у себя. Даже переименованный продукт найдётся по старомуidper100Калории и БЖУ на 100 г. Если вunitстоит «мл», то на 100 млservingsПорции и их вес в граммах, если они известныsimilarСтоитtrue, когда точного совпадения нет и API нашёл похожее: на «Вареники с капустой» ответит другими вареникамиmoreСтоитtrue, когда ответов больше: следующие отдастoffseturlСтраница продукта на perek.us, на неё ведёт ссылка «Данные: perek.us»licenseЛицензия открытой базы, если цифры взяты оттуда
Тарифы и лимиты
- 1 000 запросов в сутки
- 100 разных продуктов в сутки
- 20 запросов в минуту
- 3 ключа и 3 перевыпуска в сутки
- 10 000 запросов в сутки
- 1 500 разных продуктов в сутки
- 180 запросов в минуту
- 10 ключей и 20 перевыпусков в сутки
- И всё, что даёт Premium в дневнике питания
Если проекту мало и Premium, напишите нам. Расскажите, что за проект и сколько запросов в сутки ему нужно, и мы подберём лимит
Написать- Сутки по UTCСчётчики обнуляются в 00:00 UTC, это 03:00 по Москве
- Повторы не считаютсяПродукт, который уже приходил вам сегодня, не тратит лимит разных продуктов. Приложению, где люди едят одно и то же, его хватит с запасом
- Остаток в заголовках
X-RateLimit-Remaining,X-RateLimit-Remaining-DayиX-Foods-Remaining-Day. Когда лимит кончится, придёт ответ429, аRetry-Afterподскажет, когда повторить - Общий потолок адресаС одного IP можно сделать 2 000 запросов в сутки, а с Premium 20 000. Если запросы похожи на выкачивание справочника, лимиты аккаунта урезаются на сутки
Условия
- Ссылка на насРядом с цифрами из API покажите ссылку «Данные: perek.us» на страницу продукта из поля
url. Это нужно на любом тарифе - Ключ только на сервереИз мобильного приложения или кода страницы его достанут за минуту, и вашими лимитами начнут пользоваться чужие
- Без выкачиванияСправочник нельзя собирать целиком, раздавать или продавать как свою базу. Если ключ используют так, мы его отзываем
- Открытые базыЕсли поле
licenseзаполнено, позицию можно распространять на условиях этой лицензии: ODbL у Open Food Facts, CC BY 4.0 у финской Fineli и научных статей, NLOD 2.0 у норвежской Matvaretabellen - Источник у каждой цифрыОткуда взяты цифры и когда их сверили, показывают поля
sources,checkedиverified - Есть вопрос или поправка?Напишите на ekinin.k@skybots.ru
Вопросы
Есть ли бесплатный API калорийности продуктов?
Да, ключ к API perek.us бесплатный. На бесплатном тарифе доступно 1 000 запросов и 100 разных продуктов в сутки. Если этого мало, с Premium за 299 ₽ в месяц лимиты в 9 раз выше: 10 000 запросов и 1 500 продуктов в сутки. А если проекту нужно ещё больше, напишите нам на почту
Как узнать КБЖУ продукта по штрихкоду через API?
Отправьте запрос на https://perek.us/api/v1/foods/barcode/<код>, а ключ передайте в заголовке X-Api-Key. Подойдут коды EAN-13 и EAN-8, всего в базе 45 119 штрихкодов. Если кода в базе нет, API ответит 404, и тогда продукт можно найти по названию с упаковки
Что API отдаёт о продукте?
Калории, белки, жиры и углеводы на 100 г или 100 мл и вес порций в граммах. У товаров есть ещё штрихкоды, производитель, состав и аллергены с упаковки, а у части продуктов клетчатка, сахар, соль, витамины и минералы. У каждой позиции указано, откуда взяты цифры и когда их сверили
Можно ли скачать базу КБЖУ продуктов целиком?
Нет, целиком базу мы не раздаём. Каждый продукт открыт по отдельности, через API и на страницах perek.us/food, но выкачивать справочник и выдавать его за свою базу нельзя. Если проекту нужен большой объём данных, напишите нам на почту и расскажите, что за проект и сколько продуктов нужно
Чем это отличается от FatSecret API и Open Food Facts?
Справочник собран под русский язык: поиск понимает опечатки, неправильную раскладку и транслит. В базе есть меню российских сетей и товары 4 032 брендов России и Казахстана с составом с упаковки
Нужна ли регистрация, чтобы получить ключ?
Отдельная регистрация не нужна. Ключ выпускается в обычном аккаунте perek.us, а войти в него можно так же, как в дневник питания: по почте, через Telegram или MAX. Если вы зашли гостем, сначала привяжите почту или мессенджер, без них ключ не выдаётся
Попробуйте на своих запросах
Ключ бесплатный и выдаётся сразу после входа