Eaternity API
L'Eaternity Database API è un servizio web che calcola in modo dinamico il Climate Score (CO₂ equivalenti), il Vita Score e altre impronte ambientali di ricette, ristoranti e ingredienti.
Nel calcolo include informazioni aggiornate ogni giorno su origine, stagionalità e altri fattori.
Questa è l'API per cucine, aziende di catering e i loro software. Per la valutazione del ciclo di vita (LCA) a livello di ricerca, consultate Scegliere l'API.
Casi d'uso
I partner software si collegano all'Eaternity API in tre modi. La valutazione dell'impatto delle ricette mostra il Climate Score e il Vita Score di una ricetta accanto alla ricetta stessa, mentre lo chef la scrive. I menu contengono ogni piatto servito da una cucina, con la sua data, così il piano dei menu può mostrare la valutazione e i report Eaternity possono contare il piatto. Le forniture indicano ciò che la cucina ha acquistato e rendono più precisa la sua impronta. Molte integrazioni combinano menu e forniture.
Ogni caso d'uso parte da una cucina; gli esempi usano kitchen-restaurant-a. Ricette, menu e forniture contengono tutti il loro contenuto sotto forma di ingredienti. Tutti i campi degli ingredienti sono descritti in un'unica pagina: Ingredienti.
Valutazione dell'impatto delle ricette
Uno chef modifica una ricetta nel software di gestione delle ricette e il valore di CO₂ si aggiorna di conseguenza. È l'integrazione più snella: una request per ricetta, una response con i valori per porzione. La response contiene il Climate Score come co2-value in grammi di CO₂e e un rating da A a E; le ricette con valutazione A ricevono l'Eaternity Award. Con indicators=true aggiunge il Vita Score e gli indicatori ambientali per impronta idrica, foresta pluviale, trattamento degli animali, stagionalità e provenienza locale. Per un'anteprima calcolata ma non salvata, aggiungete transient=true; vedere Ricette transitorie.
Cosa inviare: titles, date e gli ingredients, ciascuno con id, names, amount e unit. Le quantità descrivono una porzione, salvo diversa indicazione in recipe-portions. Origine, trasporto, produzione e conservazione di ogni ingrediente rendono il risultato più preciso; se origine e trasporto mancano, Eaternity li stima.
Endpoint: PUT /kitchens/{kitchen_id}/recipes/{recipe_id} per inviare, GET /kitchens/{kitchen_id}/recipes/{recipe_id} per rileggere il risultato.
Una porzione di pasta, cinque ingredienti:
{
"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"}
]
}
}
Per porzione: 226 g CO₂e, valutazione A con l'Eaternity Award, Vita Score B. La lista degli ingredienti resta vuota, a meno che la request non aggiunga 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": []
}
}
Per approfondire: tutti i campi delle ricette in Ricette, tutti i campi degli ingredienti e i valori ammessi in Ingredienti, come nascono i valori in Climate Score e Vita Score. Gli articoli usati in molte ricette possono essere salvati una sola volta come prodotti.
Menu per la visualizzazione del piano dei menu e i report
I sistemi ERP per cucine e i sistemi di pianificazione dei menu lavorano un livello più in alto: inviano il piano dei menu. Ogni piatto che una cucina serve in un dato giorno è un menu con il proprio id, inviato con il suo kitchen-id e la sua date. Eaternity lo valuta come qualsiasi ricetta; il piano dei menu, o gli schermi nel ristorante, mostrano la valutazione; e il piatto entra nel Report Mensile della cucina. Quando il software della cucina comunica le porzioni vendute dopo la chiusura, il Report Giornaliero mostra il giorno precedente.
I dati di produzione e di vendita determinano quanto pesa ogni piatto nei report: prima le porzioni vendute, poi le porzioni prodotte, poi le porzioni della ricetta. Con questi dati, i soli menu sono una base completa per i report. Componenti come una salsa o un contorno entrano come sotto-ricette con "transient": true: contano solo attraverso il menu che le usa. Il menu stesso ha "transient": false. Una linea di menu (menu-line-name, menu-line-id) permette a un report di includere o escludere un'intera linea.
Cosa inviare: kitchen-id, id, date, titles e ingredients, più production-portions e sold-portions. Un menu senza date viene comunque calcolato, ma resta fuori dai report.
Endpoint: POST /recipes/batch per i menu e le loro sotto-ricette in un'unica request, GET /kitchens/{kitchen_id}/recipes/{recipe_id} per rileggere un risultato e POST /prognosis/{kitchen_id}/portions per aggiungere in seguito le porzioni vendute, che alimentano anche Forecast.
Come scegliere gli id dei menu è spiegato in Unicità dell'ID della ricetta.
Un menu di 300 porzioni di Spätzle, 249 vendute. Il menu fa riferimento a una sotto-ricetta transitoria che contiene gli ingredienti per tutte le 300 porzioni; entrambi vanno in un unico 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"}
]
}
}
]
Ogni elemento torna con il proprio statuscode, associato tramite request-id. Il menu ha 143 g CO₂e per porzione:
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": []
}
}
]
Per approfondire: un menu con sotto-ricette su più livelli e una linea di menu nell'Esempio di composizione con sotto-ricette, il significato di transient in Ricette transitorie, le dimensioni dei batch in Limiti di dimensione delle request e cosa vedono le cucine nel Report Mensile.
Forniture per report basati sulle forniture
I software di acquisto e di gestione merci, o i dati degli ordini di un grossista, registrano ciò che è effettivamente arrivato in cucina. Inviate come forniture, queste consegne fanno sì che l'impronta della cucina nei report Eaternity si basi su ciò che è stato acquistato, una base più precisa dei soli menu. Le forniture funzionano con o senza ricette.
Ogni fornitura è una consegna: una supply-date e una lista di articoli. La response restituisce per ogni articolo il valore di CO₂ e la valutazione, e per la consegna il totale. GTIN, origine, trasporto, produzione e conservazione di ogni articolo rendono il risultato più preciso.
Cosa inviare: supply-date, la data a cui la fornitura viene attribuita nei report, e gli articoli come ingredients con id, names, amount e unit. Facoltativi: supplier, supplier-id, invoice-id e order-date.
Endpoint: POST /supplies/batch per molte consegne in una volta, con kitchen-id in ogni fornitura, oppure PUT /kitchens/{kitchen_id}/supplies/{supply_id} per una singola consegna.
Una consegna di due articoli:
{
"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"
}
]
}
}
La consegna totalizza 162.372 g CO₂e, la somma dei suoi due articoli:
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"
}
}
Per approfondire: tutti i campi delle forniture in Forniture, tutti i campi degli articoli e i valori ammessi in Ingredienti e le dimensioni dei batch in Limiti di dimensione delle request.
Indice dei campi
Ogni campo rimanda alla sua definizione.
| Livello | Campi |
|---|---|
| Ricetta | id · kitchen-id · titles · date · recipe-portions · ingredients · production-portions · sold-portions · menu-line-name · menu-line-id · transient · location · weight |
| Ingrediente | id · names · amount · unit · type · origin · transport · production · processing · conservation · packaging · gtin · producer · loss-in-percent-of-amount · ingredients-declaration · nutrient-values |
| Fornitura | id · kitchen-id · supplier · supplier-id · invoice-id · order-date · supply-date · ingredients |
| Response | co2-value · rating · eaternity-award · info-text · indicators · vita-score |
| Parametri di query | full-resource · indicators · nutrient-values · transient · return-uids |
Funzionalità principali
- Climate Score: calcola i CO₂ equivalenti di ricette e ingredienti
- Vita Score: valutazione della qualità nutrizionale (scala A-E)
- Metriche ambientali: valutazioni per impronta idrica, impatto sulla foresta pluviale, benessere animale, stagionalità e provenienza locale
- Forecast: previsioni di vendita per le cucine basate sull'intelligenza artificiale
Termini e condizioni
Accedendo alle API, accettate i Termini e condizioni di Eaternity.
Autenticazione
- HTTP: Basic Auth
Autenticazione
L'Eaternity API usa la HTTP Basic Authentication: la chiave API è il nome utente, la password resta vuota. L'header è Authorization: Basic <base64(apikey:)>. Per richiedere una chiave, scrivete a info@eaternity.ch.
Esempi di codice per cURL, header HTTP, Python e JavaScript: Autenticazione.
Tipo di schema di sicurezza: | http |
|---|---|
Schema di autorizzazione HTTP: | basic |
Contatto Team Eaternity: info@eaternity.ch
Licenza Proprietaria
Scegliere l'API
Le API Eaternity servono pubblici diversi con esigenze distinte.
| Funzionalità | Eaternity API | LCA API |
|---|---|---|
| Pubblico principale | Ristoranti, produttori alimentari, sistemi ERP | Team LCA e di ricerca |
| Caso d'uso | Monitoraggio operativo della sostenibilità | Ricerca LCA scientifica |
| Granularità dei dati | Livello di ricetta/menu | Dettaglio completo della catena di fornitura |
| Elaborazione batch | Ottimizzata per grandi volumi | Ottimizzata per la precisione |
Scegliete l'Eaternity API se siete un ristorante o un servizio di ristorazione, se vi integrate con un ERP o un software di gestione alimentare, se monitorate metriche di sostenibilità dei menu o se generate report ambientali per le vostre attività.
Scegliete la LCA API se lavorate nell'LCA o nella ricerca, se svolgete analisi dettagliate della catena di fornitura, se vi serve piena trasparenza sul ciclo di vita o se lavorate con dati ambientali di livello scientifico.