Zum Hauptinhalt springen
Version: 1.0

Eaternity API

Die Eaternity Database API ist ein Webservice, der den Climate Score (CO₂-Äquivalente), den Vita Score und weitere Umweltfussabdrücke von Rezepten, Restaurants und Zutaten dynamisch berechnet.

Die Berechnung berücksichtigt täglich aktualisierte Angaben zu Herkunft, Saisonalität und weiteren Faktoren.

Dies ist die API für Küchen, Caterer und ihre Software. Für Ökobilanzen (LCA) in Forschungsqualität siehe Die richtige API wählen.

Anwendungsfälle​

Softwarepartner binden die Eaternity API auf drei Arten an. Die Bewertung von Rezepten zeigt den Climate Score und den Vita Score eines Rezepts direkt daneben an, während eine Köchin oder ein Koch es erfasst. Menüs enthalten jedes Gericht, das eine Küche serviert, mit Datum. So kann der Menüplan die Bewertung anzeigen, und die Eaternity-Berichte können das Gericht zählen. Einkäufe melden, was die Küche eingekauft hat. Das macht ihren Fussabdruck genauer. Viele Integrationen kombinieren Menüs und Einkäufe.

Jeder Anwendungsfall geht von einer Küche aus; die Beispiele verwenden kitchen-restaurant-a. Rezepte, Menüs und Einkäufe enthalten ihren Inhalt als Zutaten. Alle Zutatenfelder sind auf einer Seite beschrieben: Zutaten.

Bewertung von Rezepten​

Ein Küchenteam passt ein Rezept in der Rezeptverwaltung an, und der CO₂-Wert wird gleich mit aktualisiert. Dies ist die schlankeste Integration: ein Request pro Rezept, eine Response mit den Werten pro Portion. Die Response enthält den Climate Score als co2-value in Gramm CO₂e und ein rating von A bis E; Rezepte mit Bewertung A erhalten den Eaternity Award. Mit indicators=true kommen der Vita Score und die Umweltindikatoren für Wasserfussabdruck, Regenwald, Tierwohl, Saison und lokale Beschaffung dazu. Für eine Vorschau, die berechnet, aber nicht gespeichert wird, fügen Sie transient=true hinzu; siehe Transiente Rezepte.

Was senden: titles, date und die ingredients, jeweils mit id, names, amount und unit. Die Mengen beschreiben eine Portion, ausser recipe-portions gibt etwas anderes an. Herkunft, Transport, Produktion und Konservierung jeder Zutat machen das Ergebnis genauer; fehlen Herkunft und Transport, schätzt Eaternity sie.

Endpoints: PUT /kitchens/{kitchen_id}/recipes/{recipe_id} zum Senden, GET /kitchens/{kitchen_id}/recipes/{recipe_id} zum erneuten Abrufen des Ergebnisses.

Eine Portion Pasta, fünf Zutaten:

PUT /kitchens/kitchen-restaurant-a/recipes/pasta-aglio-e-olio-2026-09-16?indicators=true
{
"recipe": {
"kitchen-id": "kitchen-restaurant-a",
"titles": [{"language": "de", "value": "Pasta aglio e olio"}],
"date": "2026-09-16",
"location": "6500 Bellinzona, Switzerland",
"production-portions": 15,
"sold-portions": 0,
"ingredients": [
{"id": "article-101", "names": [{"language": "de", "value": "Olivenöl"}], "amount": 30, "unit": "gram"},
{"id": "article-102", "names": [{"language": "de", "value": "Nudeln"}], "amount": 100, "unit": "gram"},
{"id": "article-103", "names": [{"language": "de", "value": "Knoblauch"}], "amount": 20, "unit": "gram"},
{"id": "article-104", "names": [{"language": "de", "value": "Peperoncini"}], "amount": 5, "unit": "gram"},
{"id": "article-105", "names": [{"language": "de", "value": "Petersilie (frisch)"}], "amount": 3, "unit": "gram"}
]
}
}

Pro Portion: 226 g CO₂e, Bewertung A mit Eaternity Award, Vita Score B. Die Zutatenliste bleibt leer, ausser der Request enthält full-resource=true.

Response
{
"statuscode": 200,
"message": "",
"request-id": 0,
"recipe-id": "pasta-aglio-e-olio-2026-09-16",
"recipe": {
"food-unit": 1.21,
"final-weight-per-portion": 158.0,
"indicators": {
"vita-score": {
"vita-score-points": 292.83,
"vita-score-rating": "B",
"vita-score-improvement-percentage": 13.87,
"energy-kcals": 655.48,
"nutrition-label": true,
"fruit-risk-factor-amount-gram": 0.0,
"fruit-risk-factor-points": 61.24,
"vegetable-risk-factor-amount-gram": 25.0,
"vegetable-risk-factor-points": 30.57,
"wholegrain-risk-factor-amount-gram": 0.0,
"wholegrain-risk-factor-points": 82.86,
"nuts-seeds-risk-factor-amount-gram": 0.0,
"nuts-seeds-risk-factor-points": 13.98,
"milk-risk-factor-amount-gram": 0.0,
"milk-risk-factor-points": 9.42,
"processed-meat-risk-factor-amount-gram": 0.0,
"processed-meat-risk-factor-points": 0.0,
"red-meat-risk-factor-amount-gram": 0.0,
"red-meat-risk-factor-points": 0.0,
"salt-risk-factor-amount-gram": 0.02,
"salt-risk-factor-points": 0.0,
"high-in-energy-risk-factor-points": 0.81,
"high-in-fat-risk-factor-points": 61.12,
"low-in-fat-risk-factor-points": 0.0,
"high-in-protein-risk-factor-points": 0.0,
"low-in-protein-risk-factor-points": 32.83
},
"environment": {
"scarce-water-liters": 106.12,
"water-footprint-rating": "D",
"water-footprint-reduction-value": -79.67,
"water-footprint-award": false,
"water-footprint-improvement-percentage": -301.18,
"rainforest-label": true,
"rainforest-rating": "A",
"animal-treatment-label": true,
"animal-treatment-rating": "A",
"season-label": false,
"season-rating": "E",
"local-label": false,
"local-rating": "E"
}
},
"eaternity-award": true,
"co2-value": 226,
"rating": "A",
"co2-value-improvement-percentage": 76,
"co2-value-reduction-value": 713,
"id": "pasta-aglio-e-olio-2026-09-16",
"kitchen-id": "kitchen-restaurant-a",
"titles": [{"language": "de", "value": "Pasta aglio e olio"}],
"date": "2026-09-16",
"location": "6500 Bellinzona, Switzerland",
"servings": 1,
"recipe-portions": 1,
"production-portions": 15,
"sold-portions": 0,
"ingredients": []
}
}

Weiterlesen: alle Rezeptfelder unter Rezepte, alle Zutatenfelder und erlaubten Werte unter Zutaten, wie die Werte zustande kommen unter Climate Score und Vita Score. Artikel, die in vielen Rezepten vorkommen, können einmalig als Produkte gespeichert werden.

ERP- und Menüplanungssysteme für Küchen arbeiten eine Ebene höher: Sie senden den Menüplan. Jedes Gericht, das eine Küche an einem bestimmten Tag serviert, ist ein Menü mit eigener id, gesendet mit seiner kitchen-id und seinem date. Eaternity bewertet es wie jedes Rezept; der Menüplan oder die Bildschirme im Restaurant zeigen die Bewertung, und das Gericht fliesst in den Monatsbericht der Küche ein. Sobald die Küchensoftware nach Betriebsschluss die verkauften Portionen meldet, zeigt die Tagesanzeige den Vortag.

Produktions- und Verkaufszahlen bestimmen, wie stark jedes Gericht in den Berichten gewichtet wird: zuerst verkaufte Portionen, dann produzierte Portionen, dann Rezeptportionen. Mit diesen Zahlen sind Menüs allein eine vollständige Grundlage für Berichte. Komponenten wie eine Sauce oder eine Beilage werden als Unterrezepte mit "transient": true gesendet: Sie zählen nur über das Menü, das sie verwendet. Das Menü selbst hat "transient": false. Über eine Menülinie (menu-line-name, menu-line-id) kann ein Bericht eine ganze Linie ein- oder ausschliessen.

Was senden: kitchen-id, id, date, titles und ingredients, dazu production-portions und sold-portions. Ein Menü ohne date wird trotzdem berechnet, erscheint aber nicht in den Berichten.

Endpoints: POST /recipes/batch für die Menüs und ihre Unterrezepte in einem Request, GET /kitchens/{kitchen_id}/recipes/{recipe_id} zum erneuten Abrufen eines Ergebnisses und POST /prognosis/{kitchen_id}/portions zum späteren Nachtragen verkaufter Portionen, die auch in Forecast einfliessen.

Wie Sie Menü-IDs wählen, steht unter Eindeutigkeit der Rezept-ID.

Ein Menü mit 300 Portionen Spätzle, davon 249 verkauft. Das Menü verweist auf ein transientes Unterrezept, das die Zutaten für alle 300 Portionen enthält; beide werden in einem Batch gesendet:

POST /recipes/batch
[
{
"request-id": 0,
"transient": false,
"recipe": {
"id": "menu-2026-09-29-spaetzle",
"kitchen-id": "kitchen-restaurant-a",
"titles": [{"language": "de", "value": "Spätzle"}],
"date": "2026-09-29",
"recipe-portions": 300,
"production-portions": 300,
"sold-portions": 249,
"ingredients": [
{"id": "spaetzle-150g-vegan", "type": "recipes", "amount": 45000, "unit": "gram"}
]
}
},
{
"request-id": 1,
"transient": true,
"recipe": {
"id": "spaetzle-150g-vegan",
"kitchen-id": "kitchen-restaurant-a",
"titles": [{"language": "de", "value": "Spätzle frisch (150g) (vegan)"}],
"date": "2026-09-29",
"recipe-portions": 300,
"ingredients": [
{"id": "article-201", "names": [{"language": "de", "value": "Salz"}], "amount": 90, "unit": "gram"},
{"id": "article-202", "names": [{"language": "de", "value": "Nudeln"}], "amount": 45000, "unit": "gram"},
{"id": "article-203", "names": [{"language": "de", "value": "Muskat"}], "amount": 30, "unit": "gram"},
{"id": "article-204", "names": [{"language": "de", "value": "Rapsöl"}], "amount": 1.5, "unit": "liter"}
]
}
}
]

Jeder Eintrag kommt mit seinem eigenen statuscode zurück, zugeordnet über request-id. Das Menü hat 143 g CO₂e pro Portion:

Response
[
{
"statuscode": 200,
"message": "",
"recipe-id": "menu-2026-09-29-spaetzle",
"request-id": 0,
"recipe": {
"food-unit": 0.99,
"final-weight-per-portion": 150.00000000000003,
"eaternity-award": true,
"co2-value": 143,
"rating": "A",
"co2-value-improvement-percentage": 81,
"co2-value-reduction-value": 628,
"id": "menu-2026-09-29-spaetzle",
"kitchen-id": "kitchen-restaurant-a",
"titles": [{"language": "de", "value": "Spätzle"}],
"date": "2026-09-29",
"servings": 300,
"recipe-portions": 300,
"production-portions": 300,
"sold-portions": 249,
"ingredients": []
}
},
{
"statuscode": 200,
"message": "",
"recipe-id": "spaetzle-150g-vegan",
"request-id": 1,
"recipe": {
"food-unit": 1.02,
"final-weight-per-portion": 155.0,
"eaternity-award": true,
"co2-value": 148,
"rating": "A",
"co2-value-improvement-percentage": 81,
"co2-value-reduction-value": 649,
"id": "spaetzle-150g-vegan",
"kitchen-id": "kitchen-restaurant-a",
"titles": [{"language": "de", "value": "Spätzle frisch (150g) (vegan)"}],
"date": "2026-09-29",
"servings": 300,
"recipe-portions": 300,
"ingredients": []
}
}
]

Weiterlesen: ein Menü mit Unterrezepten über mehrere Ebenen und einer Menülinie im Beispiel für verschachtelte Unterrezepte, was transient bedeutet unter Transiente Rezepte, Batch-Grössen unter Grössenlimits für Requests und was Küchen sehen im Monatsbericht.

Einkäufe für einkaufsbasierte Berichte​

Einkaufs- und Warenwirtschaftssoftware oder die Bestelldaten eines Grosshändlers erfassen, was tatsächlich in der Küche angekommen ist. Als Einkäufe gesendet, stützen diese Lieferungen den Fussabdruck der Küche in den Eaternity-Berichten auf das, was eingekauft wurde. Das ist eine genauere Grundlage als die Menüs allein. Einkäufe funktionieren mit oder ohne Rezepte.

Jeder Einkauf ist eine Lieferung: ein supply-date und eine Liste von Artikeln. Die Response gibt für jeden Artikel den CO₂-Wert und die Bewertung zurück und für die Lieferung die Summe. GTIN, Herkunft, Transport, Produktion und Konservierung jedes Artikels machen das Ergebnis genauer.

Was senden: supply-date, das Datum, unter dem der Einkauf in Berichten zählt, und die Artikel als ingredients mit id, names, amount und unit. Optional: supplier, supplier-id, invoice-id und order-date.

Endpoints: POST /supplies/batch für viele Lieferungen auf einmal, mit kitchen-id in jedem Einkauf, oder PUT /kitchens/{kitchen_id}/supplies/{supply_id} für eine einzelne.

Eine Lieferung mit zwei Artikeln:

PUT /kitchens/kitchen-restaurant-a/supplies/delivery-2026-07-29-0118?full-resource=true
{
"supply": {
"id": "delivery-2026-07-29-0118",
"supplier": "Meat wholesaler",
"supplier-id": "supplier-001",
"order-date": "2026-07-28",
"supply-date": "2026-07-29",
"ingredients": [
{
"id": "article-301",
"names": [{"language": "de", "value": "Poulet"}],
"amount": 10000,
"unit": "gram",
"origin": "Switzerland",
"transport": "ground",
"production": "standard",
"conservation": "fresh"
},
{
"id": "article-302",
"gtin": "7612345000015",
"names": [{"language": "de", "value": "Bratwurst"}],
"amount": 10000,
"unit": "gram"
}
]
}
}

Die Lieferung ergibt insgesamt 162'372 g CO₂e, die Summe ihrer beiden Artikel:

Response
{
"statuscode": 200,
"message": "",
"request-id": 0,
"supply-id": "delivery-2026-07-29-0118",
"supply": {
"food-unit": 124.1,
"final-weight-per-portion": 20000.0,
"co2-value": 162372,
"rating": "C",
"co2-value-improvement-percentage": -68,
"co2-value-reduction-value": -65738,
"kitchen-id": "kitchen-restaurant-a",
"supplier": "Meat wholesaler",
"supplier-id": "supplier-001",
"order-date": "2026-07-28",
"supply-date": "2026-07-29",
"ingredients": [
{
"foodUnit": 61.04,
"co2-value": 44566,
"rating": "B",
"co2-value-improvement-percentage": 6,
"co2-value-reduction-value": 2963,
"bar-chart": 27,
"id": "article-301",
"type": "conceptual-ingredients",
"names": [{"language": "de", "value": "Poulet"}],
"amount": 10000.0,
"unit": "gram",
"origin": "Switzerland",
"transport": "ground",
"production": "standard",
"processing": "",
"conservation": "fresh",
"packaging": ""
},
{
"foodUnit": 63.06,
"co2-value": 117806,
"rating": "D",
"co2-value-improvement-percentage": -140,
"co2-value-reduction-value": -68700,
"bar-chart": 73,
"id": "article-302",
"type": "conceptual-ingredients",
"names": [{"language": "de", "value": "Bratwurst"}],
"amount": 10000.0,
"unit": "gram",
"origin": "",
"transport": "",
"production": "",
"processing": "",
"conservation": "",
"packaging": "",
"gtin": "7612345000015"
}
],
"id": "delivery-2026-07-29-0118"
}
}

Weiterlesen: alle Einkaufsfelder unter Einkäufe, alle Artikelfelder und erlaubten Werte unter Zutaten und Batch-Grössen unter Grössenlimits für Requests.

Feldverzeichnis​

Jedes Feld verlinkt auf seine Definition.

EbeneFelder
Rezeptid · kitchen-id · titles · date · recipe-portions · ingredients · production-portions · sold-portions · menu-line-name · menu-line-id · transient · location · weight
Zutatid · names · amount · unit · type · origin · transport · production · processing · conservation · packaging · gtin · producer · loss-in-percent-of-amount · ingredients-declaration · nutrient-values
Einkaufid · kitchen-id · supplier · supplier-id · invoice-id · order-date · supply-date · ingredients
Responseco2-value · rating · eaternity-award · info-text · indicators · vita-score
Query-Parameterfull-resource · indicators · nutrient-values · transient · return-uids

Wichtige Funktionen​

  • Climate Score: CO₂-Äquivalente für Rezepte und Zutaten berechnen
  • Vita Score: Bewertung der Ernährungsqualität (Skala A-E)
  • Umweltkennzahlen: Bewertungen für Wasserfussabdruck, Regenwald, Tierwohl, Saisonalität und lokale Beschaffung
  • Forecast: KI-gestützte Verkaufsprognosen für Küchen

Allgemeine Geschäftsbedingungen​

Mit dem Zugriff auf die APIs akzeptieren Sie die Allgemeinen Geschäftsbedingungen von Eaternity.

Authentifizierung​

Authentifizierung​

Die Eaternity API verwendet HTTP Basic Authentication: Der API-Schlüssel ist der Benutzername, das Passwort bleibt leer. Der Header lautet Authorization: Basic <base64(apikey:)>. Einen Schlüssel erhalten Sie auf Anfrage an info@eaternity.ch.

Codebeispiele für cURL, HTTP-Header, Python und JavaScript: Authentifizierung.

Typ des Sicherheitsschemas:

http

HTTP-Autorisierungsschema:

basic


Die richtige API wählen​

Die Eaternity APIs richten sich an verschiedene Zielgruppen mit unterschiedlichen Anforderungen.

MerkmalEaternity APILCA API
HauptnutzerRestaurants, Lebensmittelhersteller, ERP-SystemeLCA-Fachleute, Forschende
AnwendungsfallNachhaltigkeit im Betrieb verfolgenWissenschaftliche LCA-Forschung
Detailgrad der DatenEbene Rezept/MenüVollständige Lieferkette im Detail
Batch-VerarbeitungOptimiert für grosse MengenOptimiert für Präzision

Wählen Sie die Eaternity API, wenn Sie ein Restaurant oder einen Gastronomiebetrieb führen, eine Anbindung an ERP- oder Food-Management-Software umsetzen, Nachhaltigkeitskennzahlen für Menüs verfolgen oder Umweltberichte für den Betrieb erstellen.

Wählen Sie die LCA API, wenn Sie als LCA-Fachperson oder in der Forschung arbeiten, detaillierte Lieferkettenanalysen durchführen, volle Transparenz über den Lebenszyklus brauchen oder mit Umweltdaten in Forschungsqualität arbeiten.