Saltar al contenido principal
Versión: 1.0

Eaternity API

La Eaternity Database API es un servicio web que calcula de forma dinámica el Climate Score (equivalentes de CO₂), el Vita Score y otras huellas ambientales de recetas, restaurantes e ingredientes.

El cálculo incluye información que cambia a diario sobre origen, estacionalidad y otros factores.

Esta es la API para cocinas, empresas de catering y su software. Para análisis de ciclo de vida (LCA) de nivel científico, consultad Elegir vuestra API.

Casos de uso​

Los socios de software se conectan a la Eaternity API de tres maneras. La evaluación del impacto de recetas muestra el Climate Score y el Vita Score de una receta justo al lado mientras un chef la escribe. Los menús contienen cada plato que sirve una cocina, con su fecha, para que el plan de menús muestre la calificación y los informes de Eaternity cuenten el plato. Los suministros indican lo que compró la cocina, lo que hace su huella más precisa. Muchas integraciones combinan menús y suministros.

Cada caso de uso parte de una cocina; los ejemplos usan kitchen-restaurant-a. Recetas, menús y suministros llevan todos su contenido como ingredientes. Todos los campos de ingrediente se describen en una sola página: Ingredientes.

Evaluación del impacto de recetas​

Un chef ajusta una receta en el software de gestión de recetas y su valor de CO₂ se actualiza a la vez. Es la integración más sencilla: una solicitud por receta, una respuesta con los valores por ración. La respuesta contiene el Climate Score como co2-value en gramos de CO₂e y un rating de A a E; las recetas con calificación A llevan el Eaternity Award. Con indicators=true añade el Vita Score y los indicadores ambientales de huella hídrica, selva tropical, trato animal, temporada y origen local. Para una vista previa que se calcula pero no se guarda, añadid transient=true; ver Recetas transitorias.

Qué enviar: titles, date y los ingredients, cada uno con id, names, amount y unit. Las cantidades describen una ración, salvo que recipe-portions indique otra cosa. El origen, el transporte, la producción y la conservación de cada ingrediente afinan el resultado; si faltan el origen y el transporte, Eaternity los estima.

Endpoints: PUT /kitchens/{kitchen_id}/recipes/{recipe_id} para enviar, GET /kitchens/{kitchen_id}/recipes/{recipe_id} para volver a leer el resultado.

Una ración de pasta, cinco ingredientes:

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

Por ración: 226 g CO₂e, calificación A con el Eaternity Award, Vita Score B. La lista de ingredientes queda vacía salvo que la solicitud añada full-resource=true.

Respuesta
{
"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": []
}
}

Más información: todos los campos de receta en Recetas, todos los campos de ingrediente y sus valores permitidos en Ingredientes, y cómo se obtienen los valores en Climate Score y Vita Score. Los artículos que se usan en muchas recetas pueden guardarse una sola vez como productos.

Los sistemas ERP de cocina y de planificación de menús trabajan un nivel más arriba: envían el plan de menús. Cada plato que una cocina sirve en un día determinado es un menú con su propio id, enviado con su kitchen-id y su date. Eaternity lo califica como cualquier receta; el plan de menús, o las pantallas del restaurante, muestran la calificación; y el plato entra en el informe mensual de la cocina. Cuando el software de cocina comunica las raciones vendidas tras el cierre, el informe diario muestra el día anterior.

Las cifras de producción y de venta deciden cuánto pesa cada plato en los informes: primero las raciones vendidas, después las raciones producidas y por último las raciones de la receta. Con esas cifras, los menús por sí solos son una base completa para los informes. Componentes como una salsa o una guarnición se envían como subrecetas con "transient": true: solo cuentan a través del menú que las usa. El propio menú lleva "transient": false. Una línea de menú (menu-line-name, menu-line-id) permite que un informe incluya o excluya una línea entera.

Qué enviar: kitchen-id, id, date, titles e ingredients, además de production-portions y sold-portions. Un menú sin date se calcula igualmente, pero queda fuera de los informes.

Endpoints: POST /recipes/batch para los menús y sus subrecetas en una sola solicitud, GET /kitchens/{kitchen_id}/recipes/{recipe_id} para volver a leer un resultado, y POST /prognosis/{kitchen_id}/portions para añadir más tarde las raciones vendidas, que también alimentan Forecast.

Cómo elegir los ids de los menús se explica en Unicidad del ID de receta.

Un menú de 300 raciones de Spätzle, 249 vendidas. El menú referencia una subreceta transitoria que contiene los ingredientes para las 300 raciones; ambos van en un mismo lote:

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

Cada elemento vuelve con su propio statuscode, asociado mediante request-id. El menú tiene 143 g CO₂e por ración:

Respuesta
[
{
"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": []
}
}
]

Más información: un menú con subrecetas de varios niveles y una línea de menú en el Ejemplo de composición con subrecetas, qué significa transient en Recetas transitorias, los tamaños de lote en Límites de tamaño de las solicitudes y lo que ven las cocinas en el informe mensual.

Suministros para informes basados en suministros​

El software de compras y de gestión de mercancías, o los datos de pedidos de un mayorista, registran lo que llegó realmente a la cocina. Enviadas como suministros, estas entregas basan la huella de la cocina en los informes de Eaternity en lo que se compró, una base más precisa que los menús solos. Los suministros funcionan con o sin recetas.

Cada suministro es una entrega: una supply-date y una lista de artículos. La respuesta da a cada artículo su valor de CO₂ y su calificación, y a la entrega su total. El GTIN, el origen, el transporte, la producción y la conservación de cada artículo afinan el resultado.

Qué enviar: supply-date, la fecha a la que se asigna el suministro en los informes, y los artículos como ingredients con id, names, amount y unit. Opcional: supplier, supplier-id, invoice-id y order-date.

Endpoints: POST /supplies/batch para muchas entregas a la vez, con kitchen-id en cada suministro, o PUT /kitchens/{kitchen_id}/supplies/{supply_id} para una sola.

Una entrega de dos artículos:

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 entrega suma 162.372 g CO₂e, la suma de sus dos artículos:

Respuesta
{
"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"
}
}

Más información: todos los campos de suministro en Suministros, todos los campos de artículo y sus valores permitidos en Ingredientes, y los tamaños de lote en Límites de tamaño de las solicitudes.

Índice de campos​

Cada campo enlaza con su definición.

NivelCampos
Recetaid · kitchen-id · titles · date · recipe-portions · ingredients · production-portions · sold-portions · menu-line-name · menu-line-id · transient · location · weight
Ingredienteid · names · amount · unit · type · origin · transport · production · processing · conservation · packaging · gtin · producer · loss-in-percent-of-amount · ingredients-declaration · nutrient-values
Suministroid · kitchen-id · supplier · supplier-id · invoice-id · order-date · supply-date · ingredients
Respuestaco2-value · rating · eaternity-award · info-text · indicators · vita-score
Parámetros de consultafull-resource · indicators · nutrient-values · transient · return-uids

Funciones principales​

  • Climate Score: calcula los equivalentes de CO₂ de recetas e ingredientes
  • Vita Score: calificación de la calidad nutricional (escala A-E)
  • Métricas ambientales: calificaciones de huella hídrica, impacto en la selva tropical, bienestar animal, estacionalidad y origen local
  • Forecast: predicciones de ventas con IA para cocinas

Términos y condiciones​

Al acceder a las API, aceptáis los Términos y condiciones de Eaternity.

Autenticación​

Autenticación​

La Eaternity API usa HTTP Basic Authentication: la clave de API es el nombre de usuario y la contraseña queda vacía. La cabecera es Authorization: Basic <base64(apikey:)>. Para solicitar una clave, escribid a info@eaternity.ch.

Ejemplos de código para cURL, cabeceras HTTP, Python y JavaScript: Autenticación.

Tipo de esquema de seguridad:

http

Esquema de autorización HTTP:

basic

Contacto

Equipo de Eaternity: info@eaternity.ch

URL: https://eaternity.org/contact

Licencia

Propietaria


Elegir vuestra API​

Las API de Eaternity sirven a públicos con necesidades distintas.

CaracterísticaEaternity APILCA API
Público principalRestaurantes, fabricantes de alimentos, sistemas ERPProfesionales de LCA, equipos de investigación
Caso de usoSeguimiento operativo de la sostenibilidadInvestigación científica en LCA
Granularidad de los datosNivel de receta/menúDetalle completo de la cadena de suministro
Procesamiento por lotesOptimizado para grandes volúmenesOptimizado para la precisión

Elegid la Eaternity API si sois un restaurante o un servicio de restauración, si os integráis con un ERP o un software de gestión alimentaria, si hacéis seguimiento de métricas de sostenibilidad de los menús o si generáis informes ambientales para vuestra operación.

Elegid la LCA API si trabajáis en LCA o en investigación, si realizáis análisis detallados de la cadena de suministro, si necesitáis transparencia completa del ciclo de vida o si trabajáis con datos ambientales de nivel científico.