// api v1

La API de datos nutricionales de Mercadona

REST y JSON. Filtra y ordena por cualquier nutriente, por alérgeno en sus tres estados, por ingrediente a cualquier profundidad, por NOVA o por precio. Busca por código de barras. Cada cifra nutricional lleva su origen. Y los mismos datos, como servidor MCP para ChatGPT, Claude o cualquier cliente MCP.

base
https://www.nutriinfo.es/api/v1
auth
Authorization: Bearer <clave>
mcp
https://www.nutriinfo.es/mcp/<enlace> · Streamable HTTP, sin auth
formato
application/json
página
hasta 100 resultados

// inicio

Primera llamada en un minuto

  1. 01

    Crea tu cuenta

    Con tu email, aquí. Sin tarjeta.

  2. 02

    Genera una clave

    Desde tu cuenta, si tu plan incluye acceso programático.

  3. 03

    Llama a la API

    Con la clave en la cabecera Authorization. Cada respuesta trae RateLimit-Remaining para que sepas lo que te queda.

curl -H "Authorization: Bearer $NUTRIINFO_CLAVE" \
  "https://www.nutriinfo.es/api/v1/productos?origen=declarado&orden=-proteinas&por_pagina=5"
{
  "datos": [{
    "id": "uuid", "slug": "…", "nombre": "…", "ean": "…",
    "precio": { "precio": 2.35, "precio_por_unidad": 9.4, "unidad_referencia": "kg", … },
    "nutricion": {
      "base": "por_100",
      "origen": "declarado",        // declarado | estimado | ausente
      "unidad_referencia": "g",
      "nutrientes": { "proteinas": { "valor": 21, "unidad": "g" }, … }
    },
    "nova": 1,
    "valor_orden": 21
  }],
  "paginacion": { "pagina": 1, "por_pagina": 5, "total": …, "paginas": … }
}

Forma de la respuesta (valores ilustrativos). La respuesta real, en el playground.

// reglas

Reglas del contrato

  • El origen nunca falta

    Cada base nutricional dice si es declarada (etiqueta), estimada o ausente. Un estimado nunca se sirve sin marca; origen=declarado los excluye.

  • Nutrientes abiertos

    No hay una lista fija: cualquier clave de /v1/nutrientes vale para filtrar con nutriente[clave][min|max] y para ordenar.

  • Solo comida

    Por defecto solo productos de consumo humano, publicados y a la venta. Ni piensos ni droguería.

  • Errores explícitos

    Un parámetro desconocido es un 400, nunca se ignora: una errata no puede devolver resultados sin filtrar.

  • EAN no es la clave

    Un EAN puede faltar (granel) o repetirse (pack y unidad): /productos/ean/{ean} devuelve una lista. La clave es el id.

  • Versionado

    Todo bajo /v1. Un cambio de contrato es una versión nueva, no una edición de esta.

// endpoints

Endpoints

GET/v1/productospaginado

Buscar productos

Listado con filtros, orden y paginación. Solo productos para consumo humano, visibles y a la venta. Cada producto indica el origen de su nutrición: declarado (etiqueta), estimado o ausente.

ParámetroTipoDescripción
categoriauuidId de categoría (de /v1/categorias). Incluye sus subcategorías.
textostringBúsqueda de texto en nombre y descripción.
marcastringMarca exacta, sin distinguir mayúsculas.
basepor_100 · escurrido · racion · reconstituidoBase de la nutrición: por_100 (defecto, la de comparación), escurrido (conservas: lo que se come sin el líquido), racion o reconstituido.
origendeclarado · estimadoSolo nutrición declarada en la etiqueta o solo estimada. Para rankings, origen=declarado excluye los estimados.
nutriente[proteinas][min]=20numbernutriente[clave][min] y nutriente[clave][max] con cualquier clave de /v1/nutrientes, en su unidad y sobre la base elegida.
alergeno[gluten]=libre_destringalergeno[clave]=estado. Claves: gluten, crustaceos, huevos, pescado, cacahuetes, soja, leche, frutos_de_cascara, apio, mostaza, sesamo, sulfitos, altramuces, moluscos. Estados: contiene, trazas, libre_de (declarado explícitamente; no es lo mismo que no mencionarlo). Varios estados separados por comas.
con_ingredientestringContiene este ingrediente a cualquier profundidad de la lista. Se puede repetir.
sin_ingredientestringNo contiene este ingrediente a ninguna profundidad. Solo devuelve productos cuya lista de ingredientes se conoce. Se puede repetir.
1,2stringGrupo NOVA (1 a 4); varios separados por comas.
precio_minnumberPrecio actual mínimo, en euros por unidad de venta (por kilo en lo que se vende al peso sin formato fijo).
precio_maxnumberPrecio actual máximo, en euros por unidad de venta (por kilo en lo que se vende al peso sin formato fijo).
graduacion_minnumberGraduación alcohólica mínima, en % vol. Solo devuelve productos con graduación conocida.
graduacion_maxnumberGraduación alcohólica máxima, en % vol (p. ej. 0.5 para bebidas sin alcohol que lo declaran). Solo devuelve productos con graduación conocida.
-proteinasstringnombre (defecto), precio, precio_por_unidad, proteina_por_euro, graduacion o cualquier clave de nutriente. Con «-» delante, descendente. Ordenar por un valor excluye los productos que no lo tienen.
paginaintegerPágina, desde 1.
por_paginaintegerResultados por página: 20 por defecto, 100 como máximo.
GET/api/v1/productos?origen=declarado&nutriente[proteinas][min]=20&orden=-proteinas&por_pagina=5Ejecutar ↗

GET/v1/productos/{id}

Ficha de producto

Ficha completa: todas las bases nutricionales con su origen, ingredientes en árbol, alérgenos por fuente, derivados, precio actual e imágenes.

ParámetroTipoDescripción
id*en la rutauuidId del producto.

GET/v1/productos/ean/{ean}

Buscar por código de barras

Fichas con ese EAN. Un EAN puede repetirse entre productos (pack y unidad suelta), por eso devuelve una lista.

ParámetroTipoDescripción
ean*en la rutastringEAN de 8 a 14 dígitos.

GET/v1/productos/{id}/precios

Histórico de precios

Serie histórica por tramos: cada tramo es un precio vigente entre desde y hasta (null = vigente hoy).

ParámetroTipoDescripción
id*en la rutauuidId del producto.
desdedateSolo tramos vigentes en esta fecha o después.
hastadateSolo tramos vigentes en esta fecha o antes.

GET/v1/cambios-preciopaginado

Cambios de precio

Productos que han subido o bajado de precio, en todo el catálogo o en una categoría, con el precio y el precio por kilo o litro de antes y de después, la variación en euros y en %, y si una oferta empieza o acaba. Un producto que entra en el seguimiento no cuenta. Datos desde el 9 de octubre de 2026.

ParámetroTipoDescripción
desdedateCambios desde esta fecha (AAAA-MM-DD). Para «hoy», la fecha de hoy.
hastadateCambios hasta esta fecha (AAAA-MM-DD).
tiposubida · bajadaSolo subidas o solo bajadas.
categoriauuidId de categoría (de /v1/categorias). Incluye sus subcategorías.
marcastringMarca exacta, p. ej. Hacendado.
variacion_minnumberVariación mínima en %, con signo (una bajada del 10 % es -10).
variacion_maxnumberVariación máxima en %, con signo.
promocionesincluir · solo · excluirincluir (defecto); solo: cambios en los que empieza o acaba una oferta; excluir: solo cambios de tarifa, sin oferta antes ni después.
-grasasstringfecha (defecto, lo más reciente primero), variacion (%), variacion_abs (€), precio, precio_por_unidad o cualquier clave de /v1/nutrientes (por 100 g). Con «-» delante, descendente. Ordenar por un valor excluye lo que no lo tiene.
paginaintegerPágina, desde 1.
por_paginaintegerResultados por página: 20 por defecto, 100 como máximo.
GET/api/v1/cambios-precio?tipo=subida&promociones=excluir&orden=-variacion&por_pagina=5Ejecutar ↗

GET/v1/cambios-envasepaginado

Cambios de envase y reduflación

Productos cuyo envase trae menos o más que antes, con la cantidad y el precio de antes y de después y cuánto ha variado el precio por cantidad. reduflacion marca las reducciones en las que el precio no ha bajado en proporción. Datos desde el 11 de octubre de 2026.

ParámetroTipoDescripción
categoriauuidId de categoría (de /v1/categorias). Incluye sus subcategorías.
tiporeduccion · aumentoSolo reducciones (el envase trae menos) o solo aumentos.
solo_reduflaciontrue · falsetrue: solo reducciones que salen más caras por cantidad.
desdedateSolo cambios desde esta fecha (AAAA-MM-DD).
paginaintegerPágina, desde 1.
por_paginaintegerResultados por página: 20 por defecto, 100 como máximo.
GET/api/v1/cambios-envase?tipo=reduccion&por_pagina=5Ejecutar ↗

GET/v1/categorias

Árbol de categorías

Categorías activas en árbol. El id sirve para el filtro categoria de /v1/productos.

GET/api/v1/categoriasEjecutar ↗

GET/v1/nutrientes

Catálogo de nutrientes

Claves de nutriente que se pueden usar para filtrar y ordenar, con su unidad y cuántos productos las declaran por 100 g/ml.

GET/api/v1/nutrientesEjecutar ↗

GET/v1/ingredientes/buscarpaginado

Productos por ingrediente

Productos que contienen un ingrediente a cualquier profundidad de la lista, con los ingredientes que coinciden.

ParámetroTipoDescripción
q*stringIngrediente a buscar (mínimo 2 letras).
basepor_100 · escurrido · racion · reconstituidoBase de la nutrición: por_100 (defecto, la de comparación), escurrido (conservas: lo que se come sin el líquido), racion o reconstituido.
paginaintegerPágina, desde 1.
por_paginaintegerResultados por página: 20 por defecto, 100 como máximo.
GET/api/v1/ingredientes/buscar?q=palma&por_pagina=5Ejecutar ↗

GET/v1/estado

Estado del catálogo

Última ingesta, productos indexados y cobertura de los datos.

GET/api/v1/estadoEjecutar ↗

GET/v1/uso

Consumo de la cuota

Plan de la cuenta y consultas usadas y restantes hoy (cuota diaria de esta clave) y este mes (toda la cuenta), con cuándo se renueva cada una. No gasta cuota: se puede consultar aunque esté agotada.

GET/v1/openapi.jsonsin clave

Esta especificación

Especificación OpenAPI de la API v1.

// errores

Errores y límites

400parametro_invalidoUn parámetro no existe, está repetido o no es válido. Nunca se ignora en silencio.
401clave_requerida · clave_invalidaFalta la clave, o no existe o está revocada.
403tipo_clave · cliente_inactivoLa clave es del conector de asistentes, o la cuenta está desactivada.
404no_encontradoEl producto no existe o no está publicado.
429cuota_diaria · cuota_mensual · limite_paginasCuota agotada. Retry-After dice cuándo vuelve.
{ "error": { "codigo": "…", "mensaje": "…" } }

Cada respuesta autenticada lleva RateLimit-Limit, RateLimit-Remaining y RateLimit-Reset. La cuota es diaria y mensual, en hora de Madrid.

// planes

Planes

Leyendo planes

Consulta, no descarga. Los planes son para consultar: páginas de como mucho 100 productos y, en los planes bajos, un límite diario de páginas. La descarga completa del catálogo y del histórico de precios es un producto aparte.

De quién es cada dato. Nombres, imágenes y precios son de Mercadona; la extracción nutricional estructurada es trabajo de Nutriinfo.es. El uso de la API está sujeto a sus términos, que prohíben redistribuir el conjunto de datos.