Aller au contenu principal
Version: 1.0

Eaternity API

L'API Eaternity Database est un service web qui calcule de façon dynamique le Climate Score (équivalents CO₂), le Vita Score et d'autres empreintes environnementales des recettes, des restaurants et des ingrédients.

Le calcul intègre des informations mises à jour chaque jour sur l'origine, la saisonnalité et d'autres facteurs.

C'est l'API destinée aux cuisines, aux traiteurs et à leurs logiciels. Pour une analyse du cycle de vie (LCA) de niveau recherche, voir Choisir votre API.

Cas d'usage​

Les partenaires logiciels se connectent à l'Eaternity API de trois façons. L'évaluation de l'impact des recettes affiche le Climate Score et le Vita Score d'une recette juste à côté d'elle pendant que le chef la rédige. Les menus transmettent chaque plat servi par une cuisine, avec sa date, pour que le plan de menus puisse afficher la notation et que les rapports Eaternity puissent compter le plat. Les fournitures indiquent ce que la cuisine a acheté, ce qui rend son empreinte plus précise. De nombreuses intégrations combinent menus et fournitures.

Chaque cas d'usage part d'une cuisine ; les exemples utilisent kitchen-restaurant-a. Recettes, menus et fournitures transmettent tous leur contenu sous forme d'ingrédients. Tous les champs d'ingrédient sont décrits sur une seule page : Ingrédients.

Évaluation de l'impact des recettes​

Un chef ajuste une recette dans le logiciel de gestion des recettes, et sa valeur CO₂ se met à jour en même temps. C'est l'intégration la plus légère : une requête par recette, une réponse avec les valeurs par portion. La réponse contient le Climate Score sous co2-value en grammes de CO₂e et une rating de A à E ; les recettes notées A reçoivent l'Eaternity Award. Avec indicators=true, elle ajoute le Vita Score et les indicateurs environnementaux pour l'empreinte hydrique, la forêt tropicale, le bien-être animal, la saison et l'approvisionnement local. Pour un aperçu calculé mais non conservé, ajoutez transient=true ; voir Recettes transitoires.

À envoyer : titles, date et les ingredients, chacun avec id, names, amount et unit. Les quantités décrivent une portion, sauf si recipe-portions indique autre chose. L'origine, le transport, le mode de production et la conservation de chaque ingrédient affinent le résultat ; si l'origine et le transport manquent, Eaternity les estime.

Endpoints : PUT /kitchens/{kitchen_id}/recipes/{recipe_id} pour envoyer, GET /kitchens/{kitchen_id}/recipes/{recipe_id} pour relire le résultat.

Une portion de pâtes, cinq ingrédients :

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"}
]
}
}

Par portion : 226 g CO₂e, notation A avec l'Eaternity Award, Vita Score B. La liste des ingrédients reste vide, sauf si la requête ajoute full-resource=true.

Réponse
{
"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": []
}
}

Pour aller plus loin : tous les champs de recette dans Recettes, tous les champs d'ingrédient et les valeurs autorisées dans Ingrédients, l'origine des valeurs dans Climate Score et Vita Score. Les articles utilisés dans de nombreuses recettes peuvent être enregistrés une seule fois comme produits.

Les ERP de cuisine et les logiciels de planification des menus travaillent un niveau au-dessus : ils envoient le plan de menus. Chaque plat servi par une cuisine un jour donné est un menu avec son propre id, envoyé avec son kitchen-id et sa date. Eaternity le note comme n'importe quelle recette ; le plan de menus, ou les écrans du restaurant, affichent la notation ; et le plat entre dans le rapport mensuel de la cuisine. Dès que le logiciel de cuisine transmet les portions vendues après la fermeture, le rapport journalier présente la veille.

Les chiffres de production et de vente déterminent le poids de chaque plat dans les rapports : d'abord les portions vendues, puis les portions produites, puis les portions de la recette. Avec ces chiffres, les menus suffisent à eux seuls comme base des rapports. Les composants comme une sauce ou un accompagnement sont envoyés comme sous-recettes avec "transient": true : ils ne comptent qu'à travers le menu qui les utilise. Le menu lui-même porte "transient": false. Une ligne de menu (menu-line-name, menu-line-id) permet à un rapport d'inclure ou d'exclure une ligne entière.

À envoyer : kitchen-id, id, date, titles et ingredients, ainsi que production-portions et sold-portions. Un menu sans date est quand même calculé, mais n'apparaît pas dans les rapports.

Endpoints : POST /recipes/batch pour les menus et leurs sous-recettes en une seule requête, GET /kitchens/{kitchen_id}/recipes/{recipe_id} pour relire un résultat, et POST /prognosis/{kitchen_id}/portions pour ajouter plus tard les portions vendues, ce qui alimente aussi Forecast.

Le choix des id de menu est expliqué dans Unicité des ID de recette.

Un menu de 300 portions de Spätzle, dont 249 vendues. Le menu référence une sous-recette transitoire qui contient les ingrédients pour les 300 portions ; les deux sont envoyés dans un seul lot :

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"}
]
}
}
]

Chaque élément revient avec son propre statuscode, associé par request-id. Le menu a 143 g CO₂e par portion :

Réponse
[
{
"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": []
}
}
]

Pour aller plus loin : un menu avec des sous-recettes sur plusieurs niveaux et une ligne de menu dans l'exemple de composition de sous-recettes, la signification de transient dans Recettes transitoires, la taille des lots dans Limites de taille des requêtes, et ce que voient les cuisines dans le rapport mensuel.

Fournitures pour les rapports basés sur les achats​

Les logiciels d'achat et de gestion des marchandises, ou les données de commande d'un grossiste, enregistrent ce qui est réellement arrivé en cuisine. Envoyées comme fournitures, ces livraisons fondent l'empreinte de la cuisine dans les rapports Eaternity sur ce qui a été acheté, une base plus précise que les menus seuls. Les fournitures fonctionnent avec ou sans recettes.

Chaque fourniture correspond à une livraison : une supply-date et une liste d'articles. La réponse donne à chaque article sa valeur CO₂ et sa notation, et à la livraison son total. Le GTIN, l'origine, le transport, le mode de production et la conservation de chaque article affinent le résultat.

À envoyer : supply-date, la date à laquelle la fourniture est comptée dans les rapports, et les articles comme ingredients avec id, names, amount et unit. Facultatif : supplier, supplier-id, invoice-id et order-date.

Endpoints : POST /supplies/batch pour de nombreuses livraisons à la fois, avec kitchen-id dans chaque fourniture, ou PUT /kitchens/{kitchen_id}/supplies/{supply_id} pour une seule.

Une livraison de deux articles :

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"
}
]
}
}

La livraison totalise 162 372 g CO₂e, la somme de ses deux articles :

Réponse
{
"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"
}
}

Pour aller plus loin : tous les champs de fourniture dans Fournitures, tous les champs d'article et les valeurs autorisées dans Ingrédients, et la taille des lots dans Limites de taille des requêtes.

Index des champs​

Chaque champ renvoie vers sa définition.

NiveauChamps
Recetteid · kitchen-id · titles · date · recipe-portions · ingredients · production-portions · sold-portions · menu-line-name · menu-line-id · transient · location · weight
Ingrédientid · names · amount · unit · type · origin · transport · production · processing · conservation · packaging · gtin · producer · loss-in-percent-of-amount · ingredients-declaration · nutrient-values
Fournitureid · kitchen-id · supplier · supplier-id · invoice-id · order-date · supply-date · ingredients
Réponseco2-value · rating · eaternity-award · info-text · indicators · vita-score
Paramètres de requêtefull-resource · indicators · nutrient-values · transient · return-uids

Fonctionnalités principales​

  • Climate Score : calcule les équivalents CO₂ des recettes et des ingrédients
  • Vita Score : notation de la qualité nutritionnelle (échelle A-E)
  • Indicateurs environnementaux : notations pour l'empreinte hydrique, l'impact sur la forêt tropicale, le bien-être animal, la saisonnalité et l'approvisionnement local
  • Forecast : prévisions de ventes par intelligence artificielle pour les cuisines

Conditions générales​

En accédant aux API, vous acceptez les conditions générales d'Eaternity.

Authentification​

Authentification​

L'Eaternity API utilise l'authentification HTTP Basic : la clé API sert de nom d'utilisateur, le mot de passe reste vide. L'en-tête est Authorization: Basic <base64(apikey:)>. Pour demander une clé, écrivez à info@eaternity.ch.

Exemples de code pour cURL, en-têtes HTTP, Python et JavaScript : Authentification.

Type de schéma de sécurité :

http

Schéma d'autorisation HTTP :

basic

Contact

Équipe Eaternity : info@eaternity.ch

URL : https://eaternity.org/contact


Choisir votre API​

Les API Eaternity s'adressent à des groupes d'utilisateurs aux besoins différents.

CaractéristiqueEaternity APILCA API
Utilisateurs principauxRestaurants, fabricants alimentaires, systèmes ERPPraticiens LCA, chercheurs
Cas d'usageSuivi opérationnel de la durabilitéRecherche LCA scientifique
Granularité des donnéesNiveau recette/menuDétail complet de la chaîne d'approvisionnement
Traitement par lotsOptimisé pour les gros volumesOptimisé pour la précision

Choisissez l'Eaternity API si vous êtes un restaurant ou un service de restauration, si vous l'intégrez à un ERP ou à un logiciel de gestion alimentaire, si vous suivez des indicateurs de durabilité de vos menus ou si vous produisez des rapports environnementaux pour votre exploitation.

Choisissez la LCA API si vous êtes praticien LCA ou chercheur, si vous menez une analyse détaillée de la chaîne d'approvisionnement, si vous avez besoin d'une transparence complète sur le cycle de vie ou si vous travaillez avec des données environnementales de niveau recherche.