JSON API v1

Pārtikas vērtējumi jūsu lietotnei

Viss, ko rāda vietne, ir pieejams arī JSON formātā. Pieprasījumiem nepieciešama servera API atslēga – sūtiet to X-API-Key galvenē (vai Authorization: Bearer <atslēga>). Starpniekserveri atbildes nekad nesaglabā kešatmiņā (Cache-Control: no-store), un CORS pieprasījumi ir atļauti no jebkuras vietnes.

Galapunkti

GalapunktsKo tas dara
GET /api/v1Apraksta dokuments: iespējotie avoti, galapunkti, valodas un klasifikatora versija.
GET /api/v1/search?q=…Meklēšana pēc nosaukuma vai kategorijas (vispirms Dabas, tad Open Food Facts). Ja q ir svītrkods, produkts tiek meklēts tieši un atgriezts atbildē.
GET /api/v1/product/{gtin}Produkts ar sastāvdaļu sarakstu, uzturvērtību, kopējo vērtējumu healthy un FODMAP, keto, GI un pārstrādes vērtējumiem. Pieņem EAN-8, UPC-A, EAN-13 un GTIN-14 (sākuma nulles tiek normalizētas).

Piemēri

# produkts pēc svītrkoda
curl -H "X-API-Key: $API_KEY" "https://maxing.fitness/api/v1/product/3017624010701"

# brīva teksta meklēšana, teksti latviešu valodā
curl -G -H "X-API-Key: $API_KEY" --data-urlencode "q=auzu pārslas" \
  "https://maxing.fitness/api/v1/search?lang=lv"

Valodas

Kopsavilkumi un pamatojumi pēc noklusējuma ir angļu valodā. Pievienojiet lang ar kādu no šiem kodiem, lai tos saņemtu citā ES valodā: bg, es, cs, da, de, et, el, en, fr, ga, hr, it, lv, lt, hu, mt, nl, pl, pt, ro, sk, sl, fi, sv. Vērtējumi, punkti, noteikumu ID un missing atslēgas visās valodās ir vienādi.

Atbildes struktūra

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

Vērtējumi

Katram vērtējumam ir rating (green, yellow, red vai unknown), vienas rindas kopsavilkums summary, cilvēkam saprotami pamatojumi reasons un matches, kas norāda uz sastāvdaļām (pēc indeksa sarakstā ingredients), kuras to noteica. missing uzskaita datus, kas uzlabotu vērtējumu. healthy ir kopējā atbilde: zaļš produktiem ar marķējumu „Atslēgas caurums” (Nyckelhålet), citādi – Nutri-Score (no Open Food Facts vai aprēķināts ar 2023. gada algoritmu; tad score satur tā punktus), par vienu pakāpi zemāk ultrapārstrādātai pārtikai. Heiristika ir aprakstīta README; būtiskas izmaiņas palielina meta.classifierVersion (šī vērtība tiek sūtīta arī kā galvene X-Classifier-Version).

Kļūdas

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

Svītrkodi no tālruņa

Lietotnes var skenēt ar jebkuru svītrkodu bibliotēku un izsaukt GET /api/v1/product/{gtin} ar neapstrādātiem cipariem: EAN-8, UPC-A (12 cipari), EAN-13 un ar nullēm papildināts GTIN-14 tiek normalizēti uz vienu un to pašu produktu. UPC-E vispirms jāizvērš par UPC-A. Vietnes skeneris pārlūkā dara tieši to pašu.

Kešatmiņa un pieprasījumu ierobežojumi

Produkti tiek glabāti kešatmiņā 30 dienas katram GTIN un pēc tam atjaunināti no avota datubāzēm; ja datubāzes nedarbojas, tiek atgriezta novecojusi kopija. Open Food Facts atļauj aptuveni 15 produktu pieprasījumus un 10 meklējumus minūtē no vienas IP adreses, tāpēc nekešotu pieprasījumu uzplūds var saņemt atbildi 503 rate_limited – ievērojiet Retry-After. Dati: Open Food Facts (ODbL) un Dabas.