API pentru dezvoltatori

Interogați datele nutriționale de referință ale Food Info în mod programatic. Un REST API mic, versionat, doar pentru citire. Gratuit la început: creați un cont, generați o cheie și primiți 100 de cereri pe zi. Cererile se autentifică cu o cheie API în antetul X-Api-Key.

Prezentare generală

Versionat sub /api/v1, doar JSON, server-to-server (fără CORS în browser). Utilizează aceleași date de referință pe care rulează site-ul. Creați o cheie în "Cheile dvs. API" de mai jos; un cont gratuit este suficient pentru a obține una.

URL de bază
https://api.food-info.org/api/v1
Format
JSON
Autentificare
X-Api-Keyantet
Plan
Nivel gratuit sau Practitioner pentru limite mai mari

Descrierea completă OpenAPI 3 este publicată la https://api.food-info.org/api/v1/openapi.json, astfel încât o puteți importa în Postman sau Insomnia, sau puteți genera un client tipizat, în loc să îl scrieți manual.

Autentificare

Trimiteți cheia secretă în antetul X-Api-Key la fiecare cerere. Cheile sunt legate de contul dvs.; păstrați-le pe server și nu le expuneți niciodată într-un browser sau aplicație mobilă. O cheie lipsă, invalidă sau revocată returnează 401.

curl -H "X-Api-Key: YOUR_KEY" \
  "https://api.food-info.org/api/v1/nutrients"

Limite de rată

Două niveluri. Fiecare endpoint de citire de mai jos funcționează pe ambele; planul plătit cumpără debit, nu acces. Limitele sunt contorizate per cont, nu per cheie, deci generarea de chei suplimentare nu vă crește cota.

PlanPe minutPe ziEndpointuri rețete
Gratuit10100Nu (403)
Practitioner6010,000Da

Fiecare răspuns conține X-RateLimit-Limit-Minute, X-RateLimit-Limit-Day și X-RateLimit-Tier, astfel încât puteți citi alocația curentă în-band în loc să o descoperiți la un 429. Depășirea unei limite returnează 429 cu un antet Retry-After în secunde, astfel încât vă puteți retrage precis.

Endpoint-uri

Două puncte la început marchează un parametru de cale (ex. :id). Acolo unde este indicat: limit este 1-100 (implicit 25); home_nation este un cod de țară ISO (ex. GB) care prioritizează alimentele de referință din țara respectivă.

GET/nutrients

Catalogul de nutrienți, id, name, unit, categorie, pentru a descoperi valorile nutrientId acceptate de endpoint-urile de căutare inversă.

GET/foods/search

Căutați alimente după nume (subșir fără distincție majuscule/minuscule). Parametri: q (obligatoriu, ≤200 caractere), home_nation, limit. Returnează id, description, ndbNumber.

curl -H "X-Api-Key: YOUR_KEY" \
  "https://api.food-info.org/api/v1/foods/search?q=oats&limit=5"

GET/foods/:id

Un singur aliment după id-ul FoodData Central: id, description, ndbNumber, dataType, publicationDate. 404 dacă nu este găsit.

GET/foods/:id/panel

Panou complet de nutrienți: valori grupate per 100 g + per porție și % aport de referință. Parametri: portionId (opțional), source ("UK RI" / "FDA 2016"; implicit UK RI). 404 dacă nu este găsit.

GET/nutrients/:nutrientId/top-foods

Căutare inversă: alimentele de referință cele mai bogate într-un nutrient per 100 g, în ordine descrescătoare. Parametri: home_nation, limit.

curl -H "X-Api-Key: YOUR_KEY" \
  "https://api.food-info.org/api/v1/nutrients/1089/top-foods?limit=3"

Răspuns (id-urile/cantitățile alimentelor sunt ilustrative):

{
  "Nutrient": { "Id": 1089, "Name": "Iron, Fe", "Unit": "MG" },
  "Results": [
    { "FoodId": 170554, "Description": "Spices, thyme, dried", "Amount": 123.6 },
    { "FoodId": 169966, "Description": "Seeds, sesame flour",  "Amount": 14.6 }
  ]
}

GET/nutrients/:nutrientId/bottom-foods

Inversul top-foods: alimentele de referință cu cea mai mică cantitate dintr-un nutrient per 100 g. Aceiași parametri și același format de răspuns.

Endpoint-uri rețete (Practitioner)

Cele două endpoint-uri de mai jos necesită o cheie Practitioner. O cheie gratuită le accesează, dar primește 403 cu nivelul necesar și cel curent indicate în corp. Ambele sunt POST și acceptă JSON.

POST/recipes/parse

Analizează liniile brute de ingrediente în cantitate structurată, unitate și denumire aliment. Procesare deterministă a textului, fără căutare în baza de date și fără potrivire aliment, deci este apelul ieftin de utilizat când aveți nevoie doar de structură. Corp: { "lines": ["2 tbsp olive oil", "200g plain flour"] }.

curl -H "X-Api-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"lines":["2 tbsp olive oil","200g plain flour"]}' \
  "https://api.food-info.org/api/v1/recipes/parse"

POST/recipes/analyze

Analiză completă: rezolvă fiecare linie la un aliment, apoi returnează valorile nutriționale per porție și per 100 g, cu atribuirea sursei și marcaje de revizuire pentru liniile incerte. Corpul acceptă lines (obligatoriu), region (cod de țară ISO, orientează potrivirea spre alimentele de referință ale țării respective) și servings.

Returnează ingredients, perServing, per100g, totalGrams, servings, sources, reviewFlags și nutrientGroups. Fiecare rând de nutrient conține nutrientId, name, unit, perServing, per100g, percentDailyValue și referenceAmount. Verificați reviewFlags înainte de a afișa un rezultat ca fiind autoritar.

curl -H "X-Api-Key: YOUR_KEY" -H "Content-Type: application/json" \
  -d '{"lines":["2 eggs","100ml milk"],"region":"GB","servings":2}' \
  "https://api.food-info.org/api/v1/recipes/analyze"

Erori

StatusSemnificație
400Date de intrare invalide, ex. q gol sau un nutrientId non-pozitiv. Corpul răspunsului este un obiect JSON cu un mesaj error.
401 / 403Cheie lipsă, invalidă sau revocată (401), sau un endpoint exclusiv Practitioner apelat cu o cheie gratuită (403). Corpul răspunsului 403 indică nivelul necesar și nivelul deținut.
404Niciun aliment sau nutrient cu acel id.
429Limită de rată depășită, consultați Retry-After.

Cheile dvs. API

Conectați-vă pentru a genera o cheie API. Un cont gratuit este suficient pentru a începe: 100 de cereri pe zi.

Creați un cont gratuit