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:
{
"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.
Menús para mostrar el plan de menús y para los informes
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:
[
{
"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:
{
"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.
| Nivel | Campos |
|---|---|
| Receta | 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 |
| Suministro | id · kitchen-id · supplier · supplier-id · invoice-id · order-date · supply-date · ingredients |
| Respuesta | co2-value · rating · eaternity-award · info-text · indicators · vita-score |
| Parámetros de consulta | full-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
- HTTP: Basic Auth
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
Licencia Propietaria
Elegir vuestra API
Las API de Eaternity sirven a públicos con necesidades distintas.
| Característica | Eaternity API | LCA API |
|---|---|---|
| Público principal | Restaurantes, fabricantes de alimentos, sistemas ERP | Profesionales de LCA, equipos de investigación |
| Caso de uso | Seguimiento operativo de la sostenibilidad | Investigación científica en LCA |
| Granularidad de los datos | Nivel de receta/menú | Detalle completo de la cadena de suministro |
| Procesamiento por lotes | Optimizado para grandes volúmenes | Optimizado 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.