JSON API v1

Élelmiszer-értékelések az alkalmazásodhoz

Minden, amit a webhely mutat, JSON formátumban is elérhető. A kérésekhez a szerver API-kulcsa szükséges – küldd el X-API-Key fejlécként (vagy Authorization: Bearer <kulcs> formában). A válaszokat a köztes szerverek soha nem gyorsítótárazzák (Cache-Control: no-store), és bármely forrásból engedélyezik a CORS-t.

Végpontok

VégpontMire való
GET /api/v1Leíró dokumentum: engedélyezett források, végpontok, nyelvek és az osztályozó verziója.
GET /api/v1/search?q=…Keresés név vagy kategória szerint (előbb Dabas, aztán Open Food Facts). Ha a q vonalkód, a terméket közvetlenül lekérdezzük, és a válaszban adjuk vissza.
GET /api/v1/product/{gtin}Termék összetevőlistával, tápértékadatokkal, az összesített healthy értékeléssel, valamint a FODMAP-, keto-, GI- és feldolgozottsági értékeléssel. EAN-8, UPC-A, EAN-13 és GTIN-14 kódot is elfogad (a vezető nullákat normalizáljuk).

Példák

# termék vonalkód alapján
curl -H "X-API-Key: $API_KEY" "https://maxing.fitness/api/v1/product/3017624010701"

# szabad szöveges keresés, magyar nyelvű szövegekkel
curl -G -H "X-API-Key: $API_KEY" --data-urlencode "q=zabpehely" \
  "https://maxing.fitness/api/v1/search?lang=hu"

Nyelvek

Az összefoglalók és az indoklások alapértelmezés szerint angolul jelennek meg. Add hozzá a lang paramétert az alábbi kódok egyikével, ha másik uniós nyelven szeretnéd őket: bg, es, cs, da, de, et, el, en, fr, ga, hr, it, lv, lt, hu, mt, nl, pl, pt, ro, sk, sl, fi, sv. Az értékelések, a pontszámok, a szabályazonosítók és a missing kulcsai minden nyelven azonosak.

A válasz szerkezete

{
  "ok": true,
  "data": {
    "product":  { "gtin": "3017624010701", "name": "Nutella", "brand": "Ferrero", "ingredientsText": "…",
                  "nutrition": { "basis": "100g", "carbs": 57.5, "sugars": 56.3, … },
                  "novaGroup": 4, "images": { "front": "…" }, "sources": [ { "name": "off", … } ] },
    "verdicts": {
      "healthy":   { "rating": "red",    "summary": "Nutri-Score E, ultra-processed, high in sugar and saturated fat", … },
      "fodmap":    { "rating": "yellow", "summary": "…", "reasons": ["…"], "matches": [ … ] },
      "keto":      { "rating": "red",    … },
      "glycemic":  { "rating": "yellow", … },
      "processed": { "rating": "red",    … }
    },
    "ingredients": [ { "text": "socker", "depth": 0, "section": "main" }, … ],
    "traces": ["nötter"],
    "labels": [],
    "cache": { "status": "hit", "fetchedAt": "2026-08-26T18:00:00.000Z", "partial": false }
  },
  "meta": { "classifierVersion": 2, "cache": "hit", "sources": ["off"], "attribution": { … } }
}

Értékelések

Minden értékelésnek van egy rating mezője (green, yellow, red vagy unknown), egy egysoros összefoglalója (summary), ember által olvasható indoklásai (reasons) és matches elemei, amelyek a kiváltó összetevőkre mutatnak (az ingredients tömbbeli indexükkel). A missing azokat az adatokat sorolja fel, amelyek pontosítanák az értékelést. A healthy az összesített válasz: zöld a Kulcslyuk (Nyckelhålet) jelölésű termékeknél, egyébként a Nutri-Score (az Open Food Facts adatai szerint, vagy a 2023-as algoritmussal becsülve – ekkor a score tartalmazza a pontjait), ultrafeldolgozott élelmiszernél egy fokozattal rosszabb. A heurisztikák leírása a README-ben található; a lényeges változások növelik a meta.classifierVersion értékét (ezt az X-Classifier-Version fejléc is tartalmazza).

Hibák

{ "ok": false, "error": { "code": "unauthorized", "message": "…" } }

400 invalid_gtin · 401 unauthorized · 404 product_not_found / not_found
503 api_not_configured · 503 upstream_unavailable / rate_limited (with Retry-After)

Vonalkódok telefonról

A natív alkalmazások bármilyen vonalkódkönyvtárral beolvashatják a kódot, majd meghívhatják a GET /api/v1/product/{gtin} végpontot a nyers számjegyekkel: az EAN-8, az UPC-A (12 számjegy), az EAN-13 és a nullákkal kiegészített GTIN-14 mind ugyanarra a termékre normalizálódik. Az UPC-E kódot előbb UPC-A formátumra kell bővíteni. A webhely saját olvasója is pontosan ezt teszi a böngészőben.

Gyorsítótár és kéréskorlátok

A termékeket GTIN-enként 30 napig gyorsítótárazzuk, utána frissítjük a forrásadatbázisokból; ha az adatbázisok nem érhetők el, a régi másolatot szolgáljuk ki. Az Open Food Facts IP-címenként percenként kb. 15 termékolvasást és kb. 10 keresést enged, így a sok, gyorsítótárban nem szereplő lekérdezés egymás után 503 rate_limited választ adhat – vedd figyelembe a Retry-After fejlécet. Adatok: Open Food Facts (ODbL) és Dabas.