JSON-API v1

Toiduhinnangud sinu rakendusele

Kõik, mida veebisait näitab, on saadaval ka JSON-vormingus. Päringud vajavad serveri API-võtit – saada see päises X-API-Key (või Authorization: Bearer <võti>). Vahendajad ei salvesta vastuseid kunagi vahemällu (Cache-Control: no-store) ja vastused lubavad CORS-i igast päritolust.

Lõpp-punktid

Lõpp-punktMida see teeb
GET /api/v1Ülevaatedokument: kasutusel olevad allikad, lõpp-punktid, keeled ja klassifikaatori versioon.
GET /api/v1/search?q=…Otsing nime või kategooria järgi (kõigepealt Dabas, siis Open Food Facts). Kui q on vöötkood, otsitakse toode otse üles ja tagastatakse kohe vastuses.
GET /api/v1/product/{gtin}Toode koos koostisosade loetelu, toitumisalase teabe, üldhinnangu healthy ning FODMAP-i, keto, GI ja töötlemisastme hinnangutega. Sobivad EAN-8, UPC-A, EAN-13 ja GTIN-14 (algusnullid normaliseeritakse).

Näited

# toode vöötkoodi järgi
curl -H "X-API-Key: $API_KEY" "https://maxing.fitness/api/v1/product/3017624010701"

# vabatekstiotsing, tekstid eesti keeles
curl -G -H "X-API-Key: $API_KEY" --data-urlencode "q=kaerahelbed" \
  "https://maxing.fitness/api/v1/search?lang=et"

Keeled

Kokkuvõtted ja põhjendused on vaikimisi inglise keeles. Lisa parameeter lang ühega neist koodidest, et saada need mõnes teises ELi keeles: bg, es, cs, da, de, et, el, en, fr, ga, hr, it, lv, lt, hu, mt, nl, pl, pt, ro, sk, sl, fi, sv. Hinnangud, punktid, reeglite ID-d ja missing-võtmed on kõigis keeltes samad.

Vastuse struktuur

{
  "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": { … } }
}

Hinnangud

Igal hinnangul on rating (green, yellow, red või unknown), üherealine kokkuvõte (summary), loetavad põhjendused (reasons) ning matches, mis osutab hinnangu põhjustanud koostisosadele (indeksina massiivis ingredients). missing loetleb andmed, mis teeksid hinnangu täpsemaks. healthy on üldvastus: roheline Võtmeaugu märgisega (Nyckelhålet) toodetele, muul juhul Nutri-Score (andmebaasist Open Food Facts või arvutatud 2023. aasta algoritmiga – sel juhul on score väärtuseks selle punktid), ülitöödeldud toidu puhul ühe astme võrra madalam. Heuristikad on kirjeldatud README-failis; kliente mõjutavad muudatused suurendavad väärtust meta.classifierVersion (saadetakse ka päisena X-Classifier-Version).

Vead

{ "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)

Vöötkoodid telefonist

Rakendused võivad skannida mis tahes vöötkooditeegiga ja teha päringu GET /api/v1/product/{gtin} toorete numbritega: EAN-8, UPC-A (12 numbrit), EAN-13 ja nullidega täidetud GTIN-14 normaliseeritakse kõik samaks tooteks. UPC-E tuleb enne laiendada UPC-A-ks. Veebisaidi enda lugeja teeb brauseris täpselt sedasama.

Vahemälu ja päringupiirangud

Tooted salvestatakse vahemällu 30 päevaks GTIN-i kohta ja seejärel uuendatakse lähteandmebaasidest; kui andmebaasid ei vasta, kasutatakse aegunud koopiat. Open Food Facts lubab umbes 15 tootepäringut ja 10 otsingut minutis IP-aadressi kohta, nii et paljud järjestikused vahemälust mööduvad päringud võivad saada vastuseks 503 rate_limited – järgi päist Retry-After. Andmed: Open Food Facts (ODbL) ja Dabas.