API de Datos Nutricionales de Nutrola: Cómo los Desarrolladores Pueden Acceder a Nuestra Base de Datos de Alimentos

Una guía para desarrolladores sobre la API de Datos Nutricionales de Nutrola. Aprende cómo acceder a nuestra base de datos verificada de alimentos con más de 3 millones de entradas, explora los endpoints, la autenticación y casos de uso reales.

¿Estás construyendo una aplicación de salud, fitness o alimentación? Uno de los problemas más difíciles que enfrentarás son los datos nutricionales. Necesitas información precisa sobre calorías y macronutrientes para miles de alimentos, necesitas que cubra productos internacionales y que se mantenga actualizada a medida que los fabricantes reformulan sus productos.

La mayoría de los desarrolladores comienzan extrayendo datos de bases de datos gubernamentales abiertas como USDA FoodData Central. Eso proporciona una base, pero no cubre productos de marca de 47 países, comidas de restaurante ni los miles de alimentos regionales que los usuarios reales consumen cada día. Llenar esos vacíos por tu cuenta significa años de trabajo de curación de datos.

La API de Datos Nutricionales de Nutrola da a los desarrolladores acceso a la misma base de datos verificada de alimentos que potencia nuestra aplicación — más de 3 millones de entradas, incluyendo ingredientes crudos, productos de marca, comidas de restaurante y recetas compuestas. Cada entrada está verificada a través de nuestro proceso de control de calidad multicapa, el mismo sistema en el que confían más de 2 millones de usuarios.

Esta guía cubre todo lo que necesitas saber para comenzar a construir con nuestra API: arquitectura, autenticación, endpoints, límites de velocidad y ejemplos de código del mundo real.

Descripción General de la API

La API de Datos Nutricionales de Nutrola es una API JSON RESTful. Haces solicitudes HTTP y recibes respuestas JSON. No se requieren SDKs, aunque proporcionamos bibliotecas cliente para Python, JavaScript y Swift por conveniencia.

URL Base

https://api.nutrola.com/v1

Todos los endpoints se sirven a través de HTTPS. Las solicitudes HTTP simples son rechazadas.

Capacidades Principales

Capacidad Descripción
Búsqueda de Alimentos Búsqueda de texto completo en más de 3M de entradas de alimentos con filtrado por categoría, marca y país
Consulta por Código de Barras Obtén datos nutricionales por UPC, EAN u otros formatos de código de barras
Detalles Nutricionales Perfil nutricional completo para cualquier alimento (más de 70 nutrientes incluyendo micronutrientes)
Tamaños de Porción Tamaños de porción estándar y alternativos con conversiones en gramos
Análisis de Recetas Envía una lista de ingredientes y obtén datos nutricionales combinados
Categorías de Alimentos Navega por la taxonomía jerárquica de categorías de alimentos
Directorio de Marcas Busca y explora fabricantes de alimentos de marca
Autocompletado Sugerencias rápidas de escritura anticipada para interfaces de búsqueda de alimentos

Formato de Respuesta

Todas las respuestas siguen una estructura consistente:

{
  "status": "success",
  "data": { },
  "meta": {
    "request_id": "req_abc123",
    "rate_limit_remaining": 245,
    "rate_limit_reset": "2026-03-10T15:00:00Z"
  }
}

Las respuestas de error incluyen un código de error legible por máquina y un mensaje legible por humanos:

{
  "status": "error",
  "error": {
    "code": "FOOD_NOT_FOUND",
    "message": "No food entry matches the provided ID.",
    "request_id": "req_xyz789"
  }
}

Autenticación

Todas las solicitudes a la API requieren una clave de API enviada en el encabezado Authorization.

Obtener una Clave de API

  1. Crea una cuenta de desarrollador en developer.nutrola.com
  2. Navega a la sección de Claves de API en tu panel de control
  3. Genera una nueva clave y especifica los alcances que necesitas
  4. Almacena la clave de forma segura — solo se mostrará una vez

Usar Tu Clave de API

Incluye la clave en cada encabezado de solicitud:

Authorization: Bearer YOUR_API_KEY

Ejemplo con curl:

curl -H "Authorization: Bearer ntr_live_abc123def456" \
  https://api.nutrola.com/v1/foods/search?q=chicken+breast

Alcances de la Clave de API

Alcance Nivel de Acceso
foods:read Buscar y obtener datos de alimentos (más común)
barcodes:read Consulta por código de barras
recipes:analyze Análisis nutricional de recetas
brands:read Acceso al directorio de marcas
categories:read Taxonomía de categorías de alimentos

Las claves pueden limitarse a capacidades específicas. Una clave con solo foods:read no puede acceder a consultas por código de barras. Esto sigue el principio de menor privilegio — solicita solo los alcances que tu aplicación necesita.

Endpoints Principales

Búsqueda de Alimentos

Busca en la base de datos por nombre, palabra clave o frase.

GET /v1/foods/search

Parámetros:

Parámetro Tipo Obligatorio Descripción
q string Consulta de búsqueda (ej., "grilled chicken breast")
category string No Filtrar por categoría de alimento (ej., "dairy", "vegetables")
brand string No Filtrar por nombre de marca
country string No Código de país ISO 3166-1 alfa-2 (ej., "US", "DE", "JP")
verified_only boolean No Solo devolver entradas con datos de origen verificados (por defecto: true)
page integer No Número de página para paginación (por defecto: 1)
per_page integer No Resultados por página, máximo 50 (por defecto: 20)

Solicitud de Ejemplo:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.nutrola.com/v1/foods/search?q=greek+yogurt&country=US&per_page=5"

Respuesta de Ejemplo:

{
  "status": "success",
  "data": {
    "results": [
      {
        "id": "food_8f2k9d",
        "name": "Greek Yogurt, Plain, Nonfat",
        "brand": null,
        "category": "dairy",
        "country": "US",
        "verified": true,
        "source": "USDA",
        "nutrition_per_100g": {
          "calories": 59,
          "protein": 10.2,
          "carbohydrates": 3.6,
          "fat": 0.4,
          "fiber": 0,
          "sugar": 3.2,
          "sodium": 36
        },
        "default_serving": {
          "description": "1 container (170g)",
          "grams": 170
        }
      }
    ],
    "total_results": 342,
    "page": 1,
    "per_page": 5
  }
}

Obtener Detalles de un Alimento

Recupera el perfil nutricional completo de un alimento específico.

GET /v1/foods/{food_id}

Solicitud de Ejemplo:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.nutrola.com/v1/foods/food_8f2k9d"

La respuesta de detalle incluye el desglose nutricional completo — más de 70 nutrientes incluyendo todas las vitaminas, minerales, aminoácidos y perfiles de ácidos grasos. También incluye todos los tamaños de porción disponibles y sus equivalentes en gramos.

Respuesta Parcial (Nutrientes Clave):

{
  "status": "success",
  "data": {
    "id": "food_8f2k9d",
    "name": "Greek Yogurt, Plain, Nonfat",
    "nutrition_per_100g": {
      "calories": 59,
      "protein": 10.2,
      "carbohydrates": 3.6,
      "fat": 0.4,
      "fiber": 0,
      "sugar": 3.2,
      "saturated_fat": 0.1,
      "monounsaturated_fat": 0.1,
      "polyunsaturated_fat": 0,
      "cholesterol": 5,
      "sodium": 36,
      "potassium": 141,
      "calcium": 110,
      "iron": 0.1,
      "vitamin_a": 4,
      "vitamin_c": 0,
      "vitamin_d": 0
    },
    "serving_sizes": [
      { "description": "1 container (170g)", "grams": 170 },
      { "description": "1 cup (245g)", "grams": 245 },
      { "description": "1 tbsp (15g)", "grams": 15 },
      { "description": "100g", "grams": 100 }
    ],
    "allergens": ["milk"],
    "source": "USDA",
    "source_id": "170903",
    "last_verified": "2026-02-15",
    "confidence_score": 0.98
  }
}

Consulta por Código de Barras

Busca un producto alimenticio por su código de barras.

GET /v1/barcodes/{barcode}

Formatos Soportados: UPC-A, UPC-E, EAN-13, EAN-8

Solicitud de Ejemplo:

curl -H "Authorization: Bearer YOUR_API_KEY" \
  "https://api.nutrola.com/v1/barcodes/0049000006346"

La respuesta devuelve el mismo objeto de detalle de alimento que el endpoint /foods/{food_id}, con campos adicionales específicos del código de barras como barcode_format y regional_variants (un array de IDs de alimentos para el mismo producto en diferentes países, que pueden tener formulaciones diferentes).

Análisis de Recetas

Envía una lista de ingredientes y recibe el desglose nutricional combinado.

POST /v1/recipes/analyze

Cuerpo de la Solicitud:

{
  "name": "Overnight Oats",
  "servings": 2,
  "ingredients": [
    { "food_id": "food_3k8m2n", "grams": 160 },
    { "food_id": "food_9p4q7r", "grams": 400 },
    { "food_id": "food_1a5b8c", "grams": 60 },
    { "food_id": "food_6d2e9f", "grams": 2, "description": "pinch of salt" }
  ]
}

También puedes enviar ingredientes como texto para análisis automático:

{
  "name": "Overnight Oats",
  "servings": 2,
  "ingredients_text": "160g rolled oats, 400ml whole milk, 60g peanut butter, pinch of salt"
}

Respuesta:

{
  "status": "success",
  "data": {
    "name": "Overnight Oats",
    "servings": 2,
    "nutrition_per_serving": {
      "calories": 425,
      "protein": 18.5,
      "carbohydrates": 42.3,
      "fat": 21.2,
      "fiber": 5.8
    },
    "nutrition_total": {
      "calories": 850,
      "protein": 37.0,
      "carbohydrates": 84.6,
      "fat": 42.4,
      "fiber": 11.6
    },
    "ingredients_matched": [
      { "input": "160g rolled oats", "matched_food": "food_3k8m2n", "confidence": 0.97 },
      { "input": "400ml whole milk", "matched_food": "food_9p4q7r", "confidence": 0.99 },
      { "input": "60g peanut butter", "matched_food": "food_1a5b8c", "confidence": 0.96 },
      { "input": "pinch of salt", "matched_food": "food_6d2e9f", "confidence": 0.88 }
    ]
  }
}

Autocompletado

Sugerencias rápidas de escritura anticipada para construir interfaces de búsqueda.

GET /v1/foods/autocomplete?q={query}

Parámetros:

Parámetro Tipo Obligatorio Descripción
q string Consulta parcial de búsqueda (mínimo 2 caracteres)
limit integer No Máximo de resultados, 1-10 (por defecto: 5)
country string No Priorizar resultados de este país

Los tiempos de respuesta están optimizados para uso interactivo — normalmente por debajo de 50ms. El endpoint de autocompletado devuelve objetos de alimentos simplificados (solo ID, nombre, marca y categoría) para un renderizado rápido.

Límites de Velocidad y Precios

Plan Gratuito

El plan gratuito está diseñado para desarrollo, pruebas y aplicaciones de pequeña escala:

Límite Valor
Solicitudes por día 500
Solicitudes por minuto 30
Resultados de búsqueda por solicitud 20
Análisis de recetas por día 10
Consultas de código de barras por día 100

Plan Growth

Para aplicaciones en producción con tráfico moderado:

Límite Valor
Solicitudes por día 25.000
Solicitudes por minuto 300
Resultados de búsqueda por solicitud 50
Análisis de recetas por día 500
Consultas de código de barras por día 5.000
Precio $49/mes

Plan Enterprise

Para aplicaciones de alto tráfico, soluciones de marca blanca y requisitos personalizados:

Característica Detalles
Solicitudes por día Personalizado (normalmente 100K+)
Límites de velocidad Personalizados
Soporte dedicado Incluido
SLA Garantía de disponibilidad del 99,9%
Exportaciones de datos personalizadas Disponibles
Notificaciones por webhook Disponibles para actualizaciones de datos
Precio Contactar a ventas

La información sobre límites de velocidad se incluye en cada respuesta de la API a través del objeto meta y en los encabezados de respuesta HTTP (X-RateLimit-Remaining, X-RateLimit-Reset).

Casos de Uso Reales

Aplicaciones de Fitness y Entrenamiento

Si estás construyendo una aplicación de fitness y quieres añadir seguimiento nutricional sin construir una base de datos de alimentos desde cero, la API de Nutrola es el camino más rápido. Usa los endpoints de búsqueda de alimentos y código de barras para permitir que los usuarios registren comidas, y el endpoint de análisis de recetas para entradas de comidas personalizadas.

Plataformas de Planificación de Comidas

Las aplicaciones de planificación de comidas necesitan datos nutricionales precisos para generar planes que cumplan con objetivos específicos de macros. El desglose detallado de nutrientes de la API (más de 70 nutrientes) permite la optimización precisa de planes de comidas, no solo calorías y macros sino micronutrientes, alérgenos y compatibilidad con restricciones alimentarias.

Salud y Telemedicina

Las plataformas de salud que monitorean la nutrición de los pacientes pueden integrarse con la API para proporcionar un registro preciso de alimentos dentro de sus interfaces existentes. Las fuentes de datos verificadas (USDA, EFSA, datos directos del fabricante) cumplen con los estándares de precisión requeridos para el monitoreo nutricional clínico.

Restauración y Servicios de Alimentación

Las plataformas de pedidos de restaurantes pueden usar la API para mostrar información nutricional de los elementos del menú. El endpoint de análisis de recetas es particularmente útil aquí — envía los ingredientes de un plato y obtén el desglose nutricional completo sin calcular manualmente cada elemento.

Investigación y Academia

Los investigadores en nutrición pueden usar la API para estandarizar la codificación de alimentos en estudios dietéticos. Los datos consistentes y verificados reducen el error de medición que afecta a los estudios que dependen de datos nutricionales reportados por los participantes.

Ejemplos de Código

Python: Buscar un Alimento y Obtener Detalles Nutricionales

import requests

API_KEY = "ntr_live_your_key_here"
BASE_URL = "https://api.nutrola.com/v1"

headers = {
    "Authorization": f"Bearer {API_KEY}"
}

# Buscar un alimento
search_response = requests.get(
    f"{BASE_URL}/foods/search",
    headers=headers,
    params={"q": "chicken breast grilled", "per_page": 3}
)

results = search_response.json()["data"]["results"]

for food in results:
    print(f"{food['name']} - {food['nutrition_per_100g']['calories']} cal/100g")

# Obtener detalles completos del primer resultado
food_id = results[0]["id"]
detail_response = requests.get(
    f"{BASE_URL}/foods/{food_id}",
    headers=headers
)

food_detail = detail_response.json()["data"]
nutrition = food_detail["nutrition_per_100g"]

print(f"\n{food_detail['name']}")
print(f"Calorías: {nutrition['calories']}")
print(f"Proteína: {nutrition['protein']}g")
print(f"Carbohidratos: {nutrition['carbohydrates']}g")
print(f"Grasa: {nutrition['fat']}g")
print(f"Tamaños de porción: {food_detail['serving_sizes']}")

JavaScript: Integración de Escaneo de Código de Barras

const API_KEY = "ntr_live_your_key_here";
const BASE_URL = "https://api.nutrola.com/v1";

async function lookupBarcode(barcode) {
  const response = await fetch(
    `${BASE_URL}/barcodes/${barcode}`,
    {
      headers: {
        "Authorization": `Bearer ${API_KEY}`
      }
    }
  );

  if (!response.ok) {
    if (response.status === 404) {
      console.log("Producto no encontrado en la base de datos");
      return null;
    }
    throw new Error(`Error de API: ${response.status}`);
  }

  const data = await response.json();
  return data.data;
}

// Ejemplo de uso
const product = await lookupBarcode("0049000006346");

if (product) {
  const serving = product.default_serving;
  const factor = serving.grams / 100;

  console.log(`${product.name} (${product.brand})`);
  console.log(`Por ${serving.description}:`);
  console.log(`  Calorías: ${Math.round(product.nutrition_per_100g.calories * factor)}`);
  console.log(`  Proteína: ${(product.nutrition_per_100g.protein * factor).toFixed(1)}g`);
  console.log(`  Carbohidratos: ${(product.nutrition_per_100g.carbohydrates * factor).toFixed(1)}g`);
  console.log(`  Grasa: ${(product.nutrition_per_100g.fat * factor).toFixed(1)}g`);
}

Swift: Construir un Campo de Búsqueda con Autocompletado

import Foundation

class NutrolaAPI {
    private let apiKey: String
    private let baseURL = "https://api.nutrola.com/v1"

    init(apiKey: String) {
        self.apiKey = apiKey
    }

    func autocomplete(query: String, limit: Int = 5) async throws -> [FoodSuggestion] {
        guard query.count >= 2 else { return [] }

        var components = URLComponents(string: "\(baseURL)/foods/autocomplete")!
        components.queryItems = [
            URLQueryItem(name: "q", value: query),
            URLQueryItem(name: "limit", value: String(limit))
        ]

        var request = URLRequest(url: components.url!)
        request.setValue("Bearer \(apiKey)", forHTTPHeaderField: "Authorization")

        let (data, _) = try await URLSession.shared.data(for: request)
        let response = try JSONDecoder().decode(AutocompleteResponse.self, from: data)
        return response.data.suggestions
    }
}

struct FoodSuggestion: Codable {
    let id: String
    let name: String
    let brand: String?
    let category: String
}

struct AutocompleteResponse: Codable {
    let status: String
    let data: AutocompleteData
}

struct AutocompleteData: Codable {
    let suggestions: [FoodSuggestion]
}

Buenas Prácticas para el Manejo de Errores

La API utiliza códigos de estado HTTP estándar:

Código de Estado Significado Causa Común
200 Éxito La solicitud se completó normalmente
400 Solicitud Incorrecta Falta un parámetro obligatorio o valor inválido
401 No Autorizado Clave de API inválida o ausente
403 Prohibido La clave de API carece del alcance requerido
404 No Encontrado ID de alimento o código de barras no está en la base de datos
429 Límite de Velocidad Excedido Demasiadas solicitudes; verifica los encabezados de límite de velocidad
500 Error del Servidor Error interno; reintenta con retroceso exponencial

Cuando recibes una respuesta 429, el encabezado Retry-After te indica cuántos segundos debes esperar antes de reintentar. Se recomienda encarecidamente implementar retroceso exponencial para las respuestas 429 y 500 en aplicaciones de producción.

Actualización y Frescura de los Datos

La base de datos de Nutrola se actualiza continuamente. Las entradas de productos de marca se actualizan cuando los fabricantes reportan cambios, normalmente dentro de las 48 horas. Las entradas de bases de datos gubernamentales se sincronizan trimestralmente cuando se publican nuevas versiones.

Si tu aplicación almacena en caché las respuestas de la API (lo cual recomendamos por rendimiento), sugerimos un TTL de caché de 24 horas para las respuestas de detalle de alimentos y 1 hora para los resultados de búsqueda. El campo last_verified en las respuestas de detalle de alimentos te indica cuándo se confirmó por última vez la precisión de la entrada.

Para clientes enterprise, ofrecemos notificaciones por webhook cuando se actualizan las entradas de alimentos, para que tu aplicación pueda invalidar los datos en caché de forma proactiva en lugar de esperar a que expire el TTL del caché.

Primeros Pasos

  1. Regístrate en developer.nutrola.com — toma menos de un minuto
  2. Genera una clave de API con los alcances que necesitas
  3. Haz tu primera solicitud usando los ejemplos de curl anteriores
  4. Explora la documentación interactiva en developer.nutrola.com/docs donde puedes probar los endpoints directamente en tu navegador
  5. Únete a la comunidad de desarrolladores en nuestro servidor de Discord para soporte, solicitudes de funciones y para ver qué están construyendo otros desarrolladores

Si tienes preguntas, encuentras problemas o quieres discutir una integración enterprise, contacta a nuestro equipo de relaciones con desarrolladores en api@nutrola.com.

Preguntas Frecuentes

¿La API de Nutrola es gratuita?

Sí, hay un plan gratuito que incluye 500 solicitudes por día. Esto es adecuado para desarrollo, pruebas y aplicaciones de pequeña escala. Para aplicaciones en producción con mayor tráfico, el plan Growth comienza en $49 al mes con 25.000 solicitudes diarias. Los planes Enterprise con límites personalizados están disponibles para casos de uso de alto tráfico.

¿Qué formatos de datos soporta la API?

La API usa exclusivamente JSON tanto para solicitudes como para respuestas. Todos los endpoints aceptan parámetros de consulta estándar para solicitudes GET y cuerpos de solicitud JSON para solicitudes POST. La codificación de las respuestas es UTF-8, lo que maneja correctamente los nombres de alimentos en todos los idiomas soportados.

¿Qué tan precisos son los datos nutricionales proporcionados por la API?

Cada entrada en la base de datos de Nutrola pasa por un proceso de verificación multicapa que incluye validación de fuentes gubernamentales, verificación cruzada de datos del fabricante, comprobación estadística impulsada por IA y revisión de expertos humanos. Nuestro estándar de precisión es del 97,4% comparado con análisis de laboratorio, frente a un promedio de la industria del 70-85% para bases de datos de contribución colectiva. Cada entrada de alimento incluye un campo confidence_score que indica nuestro nivel de certeza.

¿Puedo usar la API para construir un producto comercial?

Sí. La API está diseñada para uso comercial. El plan gratuito puede usarse para productos comerciales dentro de sus límites de velocidad. Los planes Growth y Enterprise incluyen derechos de uso comercial sin restricciones en el tipo de aplicación. Revisa los términos de servicio en developer.nutrola.com para obtener todos los detalles.

¿La API soporta alimentos de fuera de Estados Unidos?

Sí. La base de datos cubre productos de marca de 47 países y alimentos genéricos de más de 120 cocinas. Usa el parámetro country en los endpoints de búsqueda para priorizar resultados de un mercado específico. Las consultas por código de barras identifican automáticamente el producto con la formulación regional correcta.

¿Cómo manejo alimentos que no están en la base de datos?

Si una consulta por código de barras devuelve un 404, puedes recurrir a una búsqueda de texto usando el nombre del producto. Si ninguno de los enfoques encuentra el alimento, puedes enviarlo para su adición a través del portal de desarrolladores. Los alimentos enviados por socios de la API tienen prioridad para verificación y normalmente se añaden dentro de 72 horas. Los clientes enterprise pueden solicitar adiciones por lotes para catálogos de productos grandes.

¿Hay SDKs o bibliotecas cliente disponibles?

Proporcionamos bibliotecas cliente oficiales para Python (vía pip: pip install nutrola), JavaScript/TypeScript (vía npm: npm install @nutrola/api) y Swift (vía Swift Package Manager). Estas bibliotecas manejan la autenticación, los límites de velocidad, los reintentos y el análisis de respuestas. Existen bibliotecas mantenidas por la comunidad para Go, Ruby y PHP.

¿Listo para transformar tu seguimiento nutricional?

¡Únete a miles que han transformado su viaje de salud con Nutrola!

API de Datos Nutricionales de Nutrola: Guía para Desarrolladores | Nutrola