Plan Free

API de nutrición

Ve más allá de los macros principales. Obtén un desglose detallado de más de 40 nutrientes por producto (energía, proteínas, hidratos de carbono, grasas, azúcares, fibra, sodio, vitaminas y minerales), todo por 100 g, para cualquier alimento por ID.

200 OK
GET /v1/foods/{id}/nutrients
curl -H "X-API-Key: food_•••" \
  "https://foodbase.dev/v1/foods/62ea12b8.../nutrients"

{
  "food_id": "62ea12b8...",
  "macros": {
    "energy_kcal": 42,
    "proteins_g": 0,
    "carbs_g": 10.6,
    "sugars_g": 10.6,
    "fat_g": 0,
    "fiber_g": null
  },
  "fats": { "saturated_fat_g": 0 },
  "minerals": { "sodium_mg": 0, "salt_g": 0 },
  "other": { "added_sugars_g": 5.3 }
}

¿Prefieres hacer clic? Prueba el explorador de productos o la zona de pruebas de fotos.

Qué obtienes

Macros

Energía, proteínas, hidratos de carbono, azúcares, grasas, grasas saturadas, fibra.

Minerales

Sodio, calcio, hierro, potasio, magnesio, zinc y más.

Vitaminas

A, C, D, E y las vitaminas B cuando constan.

Por 100 g

Una base coherente para que puedas escalar a cualquier tamaño de ración.

Más de 40 campos

Un único objeto con todos los nutrientes que aporta la fuente de datos.

Incluido en el plan gratuito: 25 desgloses de nutrientes/día, sin tarjeta de crédito; ilimitados desde Starter. Ver planes →

Ejemplos de código

La misma petición en curl, JavaScript y Python. Sustituye YOUR_API_KEY por una clave de tu panel.


              curl "https://foodbase.dev/v1/foods/62ea12b8-b260-c288-5c38-3a4906f5d6dd/nutrients" \
  -H "X-API-Key: YOUR_API_KEY"
            

Cómo funciona

Una petición, cinco grupos, por 100 g

GET /v1/foods/{id}/nutrients recibe el UUID del alimento en la ruta y nada más: sin parámetros de consulta, sin cuerpo, sin lang. El id es el mismo que devuelve cualquier otro endpoint, así que un resultado de la API de búsqueda de alimentos o de la API de consulta de códigos de barras se convierte en un desglose completo con una llamada más. Los ids son deterministas entre reimportaciones, así que puedes guardarlos y seguir llamando a esta URL.

La respuesta es un objeto plano con food_id más cinco grupos fijos: macros, fats, minerals, vitamins y other. Todas las claves están siempre presentes y todos los valores son un número o null. Contando las claves del esquema actual salen 41 campos de nutrientes, de ahí la cifra de más de 40. Las unidades van en el nombre de la clave (energy_kcal, sodium_mg, selenium_mcg, vitamin_a_iu), así que nunca necesitas una tabla de unidades aparte.

Todos los valores son por 100 g del producto tal como se vende. Para mostrar una ración, multiplica por gramos dividido entre 100. El serving_size_raw del registro del alimento es texto de etiqueta (en el registro de muestra de Coca-Cola es "1 can (330 ml)"), así que la conversión de ese texto a gramos te corresponde a ti.

  • macros (10 claves) cubre energía en kcal y kJ, proteínas, hidratos de carbono, grasas, azúcares, fibra, alcohol, almidón y polioles; fats (7) añade saturadas, trans, mono- y poliinsaturadas, omega3, omega6 y cholesterol_mg
  • minerals (12) va de sodium_mg y salt_g a selenium_mcg y iodine_mcg; vitamins (11) da A y D en UI, B9 y B12 en mcg y el resto en mg; other contiene added_sugars_g

Cómo leer bien los nulos y los ceros

La respuesta de muestra del alimento 62ea12b8-b260-c288-5c38-3a4906f5d6dd muestra el patrón típico de Open Food Facts: energy_kcal 42, energy_kj 180.2, carbs_g 10.6, sugars_g 10.6, added_sugars_g 5.3, ceros explícitos en proteins_g, fat_g, saturated_fat_g, sodium_mg y salt_g, y null en todo lo demás, desde fiber_g hasta todo el grupo vitamins.

Trata los dos estados de forma distinta. Un 0 es un valor que la fuente informó; un null significa que el nutriente no figura en la etiqueta o no está en la fuente. Nunca conviertas null en 0 antes de sumar la ingesta de un día, o una comida hecha con productos etiquetados parcialmente subestimará en silencio las vitaminas y los minerales. Muestra un guion o "no informado" en su lugar.

La cobertura sigue a la procedencia. Las filas con source usda_foundation o usda_sr_legacy son análisis de laboratorio del USDA y rellenan los grupos de vitaminas y minerales, por lo que la mayoría de las claves son números. Las filas con source usda (USDA Branded Foods) y las de Open Food Facts se transcriben del envase, así que son fiables para los nutrientes obligatorios de la etiqueta y a menudo null más allá de ellos. El campo source del registro del alimento te dice en qué caso estás antes de pintar la tabla.

  • Muestra null como desconocido, no como cero; agrega solo las claves que no sean null en todos los elementos de la comida.
  • sodium_mg y salt_g existen ambos porque las etiquetas difieren según la región; usa el que espere tu público y recurre al otro.

Cuándo necesitas realmente esta llamada

Cada registro de alimento de la API de base de datos de alimentos y cada coincidencia por código de barras ya incluye nutrition_summary con seis valores principales: energy_kcal, proteins_g, carbs_g, fat_g, sugars_g y fiber_g. Las coincidencias de búsqueda son filas más ligeras sin él. Para el resultado de un escáner, una tarjeta de detalle o un registro rápido de calorías, ese objeto suele bastar y no cuenta como desglose de nutrientes.

Reserva /nutrients para la pantalla de detalle o para el momento en que un usuario pregunta por el sodio, las grasas saturadas, el colesterol o una vitamina concreta. Busca o escanea, muestra el resumen y obtén el desglose al tocar. En el plan gratuito, esto es también lo que te mantiene dentro de la asignación de 25 al día mientras desarrollas.

Las cabeceras de la respuesta capturada no llevan Cache-Control, así que el caché es cosa tuya. Los ids son estables y los valores solo cambian cuando se reimporta un producto, por lo que una caché con clave food_id y retenida durante horas o días es segura.

La asignación del plan gratuito, cabecera por cabecera

En el plan gratuito, cada desglose correcto descuenta de un contador diario aparte de 25, informado en cada respuesta como X-RateLimit-Nutrients-Limit, X-RateLimit-Nutrients-Remaining y X-RateLimit-Nutrients-Reset. Lee Remaining antes de una ráfaga de consultas de detalle y podrás recurrir a nutrition_summary en lugar de toparte con el muro a mitad de sesión.

Al llegar a cero, el endpoint devuelve 429 con el error "Nutrients daily allowance exceeded", un upgrade_url en el cuerpo y Retry-After con los segundos hasta medianoche UTC. Una llamada rechazada no consume ni un desglose ni una solicitud diaria, y no mueve el reinicio. Los planes de pago no tienen ese contador; sus llamadas de nutrientes están limitadas solo por la cuota diaria de solicitudes del plan (compartida entre todas las claves de la cuenta) y el límite por segundo de cada clave.

Si estás en Starter o superior y trabajas con un catálogo grande, obtén primero los registros base con la API de consulta masiva de alimentos y llama a /nutrients solo para los ids cuyo resumen no baste.

Qué puedes crear

Contadores de calorías y macros

Registra la nutrición exacta por ración con una sola consulta.

Planificación de comidas y dietas

Crea planes que cumplan objetivos de macronutrientes y micronutrientes.

Herramientas de salud y clínicas

Muestra perfiles de nutrientes detallados como apoyo a la orientación dietética.

Límites por plan

Free 25 desgloses de nutrientes/día (cabeceras X-RateLimit-Nutrients-*), dentro de 100 solicitudes/día; 1 sol./s, ráfaga de 5
Starter Desgloses ilimitados dentro de 5000 solicitudes/día; 5 sol./s, ráfaga de 25
Pro Desgloses ilimitados dentro de 25.000 solicitudes/día; 20 sol./s, ráfaga de 100
Enterprise Desgloses ilimitados dentro de 100.000 solicitudes/día; 50 sol./s, ráfaga de 250

Cada respuesta incluye cabeceras X-RateLimit-* con el presupuesto restante; cada 429 incluye Retry-After . Comparar planes →

Errores y cómo gestionarlos

404 — No hay fila de nutrientes para ese id: puede que el alimento no exista, o que exista sin datos de nutrición (su nutrition_summary es null). El cuerpo dice "No nutrient data for this food".

No reintentes. Muestra el alimento sin desglose; si el id venía de una caché antigua, vuelve a resolverlo por código de barras o búsqueda, ya que un 404 aquí no es transitorio.

422 — El id de la ruta no es un UUID, como un código de barras o un id truncado copiado de una muestra.

Pasa el campo id de una búsqueda, un código de barras o un registro de alimento; resuelve primero los códigos de barras con la API de consulta de códigos de barras.

429 — Solo plan gratuito: el cuerpo dice error "Nutrients daily allowance exceeded" y X-RateLimit-Nutrients-Remaining es 0. No se consumió ningún desglose.

Respeta Retry-After (segundos hasta medianoche UTC), recurre a nutrition_summary el resto del día y muestra el upgrade_url del cuerpo si el usuario necesita desgloses completos ahora.

429 — Cualquier plan: se agotó el límite por segundo de la clave o la cuota diaria de solicitudes de toda la cuenta; X-RateLimit-Second-Remaining y X-RateLimit-Daily-Remaining te dicen cuál.

Espera los segundos de Retry-After. Pon en cola las consultas de detalle en lugar de lanzarlas en paralelo; si es el límite diario, detente hasta X-RateLimit-Daily-Reset.

Comparada con otras API

La mayoría de las API de nutrición devuelven una tabla por ración que no puedes reconvertir, o reparten los nutrientes en filas de nombre/valor/unidad que tienes que normalizar tú. FoodBase devuelve un objeto fijo y tipado por 100 g con la unidad en cada clave, de modo que un cliente escrito una vez contra el esquema sirve para todos los productos. La contrapartida es la honestidad sobre los huecos: una fila de Open Food Facts derivada de la etiqueta tiene nulos donde una fila del USDA tiene números, y la API lo refleja en lugar de rellenar con estimaciones. Si solo necesitas los macros principales, el registro del alimento ya los incluye y este endpoint es opcional.

Ver la comparativa completa de API de datos de alimentos →

Preguntas frecuentes

¿Los valores son por ración o por 100 g? +

Siempre por 100 g, para todos los planes y todas las fuentes. El serving_size_raw del registro del alimento es texto de etiqueta como "1 can (330 ml)", así que convertirlo a gramos y escalar ocurre en tu código. Así dos productos son comparables sin saber cómo define cada marca una ración.

¿Qué significa un valor null y en qué se diferencia de 0? +

Null significa que el nutriente no figura en la etiqueta o no está en la fuente; 0 significa que la fuente informó cero. En la respuesta de muestra de Coca-Cola, fat_g es 0 mientras que fiber_g es null. Nunca trates ambos igual al totalizar una comida.

¿Por qué un alimento del USDA tiene las vitaminas rellenas y un producto de supermercado no? +

Las filas USDA Foundation y SR Legacy (source usda_foundation, usda_sr_legacy) proceden de análisis de laboratorio y suelen rellenar los grupos de vitaminas y minerales. Las filas USDA Branded (source usda) y las de Open Food Facts se transcriben del envase, que en la mayoría de las regiones solo exige los nutrientes principales. Consulta el campo source del registro del alimento para saber qué tipo de fila tienes.

¿Necesito este endpoint si ya tengo nutrition_summary? +

A menudo no. nutrition_summary del registro del alimento ya da energy_kcal, proteins_g, carbs_g, fat_g, sugars_g y fiber_g. Llama a /nutrients cuando necesites el resto, como grasas saturadas, sodio, colesterol o cualquier vitamina o mineral, lo cual normalmente solo hace falta en una pantalla de detalle.

¿Cómo se relaciona el límite de 25 desgloses del plan gratuito con las 100 solicitudes al día? +

Los 25 son un contador aparte, informado en las cabeceras X-RateLimit-Nutrients-* y reiniciado a medianoche UTC; las 100 son la cuota de solicitudes de toda la cuenta. Un desglose correcto descuenta de ambos. Un 429 por la asignación de nutrientes no consume ninguno, pero sigue fallando hasta el reinicio, así que deja de llamar hasta entonces.

¿Qué endpoint me da el id que debo pasar aquí? +

Cualquiera de ellos. La API de búsqueda de alimentos devuelve ids para consultas de texto y la API de consulta de códigos de barras resuelve un GTIN a un registro. El food_id de muestra 62ea12b8-b260-c288-5c38-3a4906f5d6dd es el registro del código de barras 5449000000996.

Empieza a crear con la API de nutrición

Gratis para empezar. Sin tarjeta de crédito.

Obtener clave API Ir al panel