perek.us Вести дневник
API для разработчиков

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

Ключ за пару минут

  1. ВойдитеПо почте, через Telegram или MAX, как в дневник питания. Если аккаунта ещё нет, он появится при входе
  2. Выпустите ключВ личном кабинете одной кнопкой. Там же видно, сколько запросов осталось на сегодня
  3. Отправьте запросПередайте ключ в заголовке X-Api-Key, и ответ придёт в JSON

Получить ключ

Что в базе

Запросы

  • Адрес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?ids=

    Несколько карточек сразу До 20 id через запятую, например весь дневник за день. Каких нет, придут списком в missing
  • GET/barcode/{ean}

    КБЖУ по штрихкоду Коды EAN-13 и EAN-8. Если цифр по коду нет, API ответит 404, а если сам товар нам известен, назовёт его в product
  • marketru или kz оставит товары одной страны
  • typefood оставит обычные продукты, branded товары брендов, chain блюда сетей. Можно несколько через запятую
  • brandТолько этот бренд или сеть, по brand.id из ответа: ?q=бургер&brand=burger-king
  • fullfull=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Не меняется, его можно хранить у себя. Даже переименованный продукт найдётся по старому id
  • per100Калории и БЖУ на 100 г. Если в unit стоит «мл», то на 100 мл
  • servingsПорции и их вес в граммах, если они известны
  • similarСтоит true, когда точного совпадения нет и API нашёл похожее: на «Вареники с капустой» ответит другими варениками
  • moreСтоит true, когда ответов больше: следующие отдаст offset
  • urlСтраница продукта на perek.us, на неё ведёт ссылка «Данные: perek.us»
  • licenseЛицензия открытой базы, если цифры взяты оттуда

Тарифы и лимиты

Бесплатно
0 ₽
  • 1 000 запросов в сутки
  • 100 разных продуктов в сутки
  • 20 запросов в минуту
  • 3 ключа и 3 перевыпуска в сутки
Получить ключ
В 9 раз больше
Premium
299 ₽ в месяц
  • 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. Если вы зашли гостем, сначала привяжите почту или мессенджер, без них ключ не выдаётся

Попробуйте на своих запросах

Ключ бесплатный и выдаётся сразу после входа

Получить ключ

Для чего ключ?

Так мы поймём, какие продукты и данные добавлять первыми

Дальше вход как в дневник: по почте, через Telegram или MAX. Ключ появится сразу после входа