Plan Free

API de categorías de alimentos

Explora todas las categorías de alimentos con su recuento de productos: la base de filtros, facetas y navegación. JSON paginado sobre todo el catálogo, servido desde una vista precalculada para que siga siendo rápido.

200 OK
GET /v1/categories
curl -H "X-API-Key: food_•••" \
  "https://foodbase.dev/v1/categories"

{
  "data": [
    { "category": "Popcorn, Peanuts, Seeds & Related Snacks", "product_count": 95496 },
    { "category": "Candy", "product_count": 92693 },
    { "category": "Cheese", "product_count": 85564 }
  ],
  "total": 306779
}

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

Qué obtienes

category

El nombre de la categoría.

product_count

Cuántos productos pertenecen a ella.

total

Número de categorías distintas.

Listo para filtrar

Combínalo con la búsqueda para acotar los resultados por categoría.

Incluido en el plan gratuito: 100 solicitudes/día, sin tarjeta de crédito. 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/categories?q=chocolate&limit=10" \
  -H "X-API-Key: YOUR_API_KEY"
            

Cómo funciona

Qué devuelve una petición

GET /v1/categories lee una tabla precalculada con cada cadena de categoría distinta del catálogo y cuántos productos la llevan; los productos sin categoría se excluyen. Las filas se ordenan por product_count descendente sin ningún orden secundario, así que no dependas del orden de las filas con el mismo recuento.

q es un filtro de subcadena sin distinguir mayúsculas, no de prefijo: q=chocolate coincide por igual con "Chocolate", "en:chocolates" y "Beverages, Dairies, Dairy drinks, Flavoured milks, Chocolate milks", y reduce la respuesta capturada a un total de 11303 cadenas distintas. Los espacios se recortan, % y _ son literales y q tiene un tope de 200 caracteres.

limit va de 1 a 100 (por defecto 20) y offset de 0 a 10000, así que con limit=100 puedes llegar como máximo a las primeras 10.100 filas; acota con q en lugar de paginar más a fondo. Las respuestas llevan Cache-Control: public, max-age=600, el servidor cachea durante una hora y la tabla solo se reconstruye en una reimportación masiva, así que obtén los datos una vez al arrancar o en un paso de compilación y guarda el resultado.

Dos formas de cadena de categoría

Los productos de Open Food Facts llevan una jerarquía unida con comas, de lo general a lo específico: "Snacks, Sweet snacks, Cocoa and its products, Chocolates, Dark chocolates". Los segmentos pueden ser etiquetas de taxonomía en bruto con un prefijo de idioma de dos letras ("en:chocolate-candies"), pueden estar en el idioma de la etiqueta ("Botanas, Snacks dulces, Cacao y sus productos, Chocolates, Chocolates negros") y a menudo terminan en un cajón de sastre como en:groceries que no es el nivel más específico.

Los productos del USDA llevan una sola categoría de venta plana cuyo nombre puede contener comas ("Chips, Pretzels & Snacks"); nunca la dividas. Las filas de aquí no llevan source, así que cuando lo necesites, obtén un producto de la categoría con la API de base de datos de alimentos y lee source junto a category y categories_tags.

Una misma jerarquía puede aparecer como varias filas: la respuesta capturada lista "Snacks, Sweet snacks, Cocoa and its products, Chocolates, Dark chocolates" (497 productos) y la misma ruta sin espacios tras las comas (339) por separado. Fusiona por segmentos limpios, no por la cadena en bruto.

Crear un árbol de navegación o una interfaz de filtros

Aplica la limpieza que usa el sitio web: divide por comas, recorta espacios, quita una etiqueta xx: inicial, sustituye los guiones por espacios, pon en mayúscula la primera letra y descarta los segmentos repetidos sin distinguir mayúsculas. El primer segmento limpio es la raíz; el último que no sea un cajón de sastre (groceries, food, foods, products, unknown, none) es la hoja. El recuento de un nodo es la suma de product_count de todas las cadenas en bruto que se asignan a él.

  • Nodos raíz: agrupa por el primer segmento limpio ("Snacks", "Beverages", "Botanas").
  • Chips de hoja: el último segmento que no sea un cajón de sastre ("Dark chocolates", "Chocolate milks").
  • Nombres planos del USDA: la cadena entera es a la vez raíz y hoja.
  • Idioma: las jerarquías en idiomas distintos siguen siendo nodos separados; para traducciones por producto, pasa lang= a la API de búsqueda de alimentos y lee category_localized y category_segments_localized.
  • El árbol de navegación del sitio web en /categories/ aplica estas mismas reglas de limpieza a estos datos (y conserva solo las hojas más grandes); úsalo para comprobar tu resultado.

De una categoría a sus productos

La búsqueda no tiene parámetro de categoría. La API de búsqueda de alimentos compara primero nombres de producto y marcas y, solo cuando eso no encuentra nada, compara las palabras de tu consulta con las cadenas de categoría. Envía como q un segmento limpio completo que no sea en sí mismo un nombre de producto, como "Seeds & Related Snacks", y obtendrás los productos de esa categoría ordenados por popularidad.

El recurso de reserva se basa en palabras, así que "Seeds & Related Snacks" coincide con toda cadena de categoría que contenga esas palabras en cualquier idioma, y un segmento que también es una palabra de producto común ("Chocolate" o "Dark chocolates") nunca llega a él porque los nombres de producto coinciden primero. Para un listado estricto, filtra cada resultado por su campo category, que es la cadena en bruto que devolvió este endpoint.

Qué puedes crear

Filtros y facetas

Pinta una navegación por categorías con recuentos de productos en vivo.

Visión general del catálogo

Muestra a los usuarios la forma del conjunto de datos antes de que busquen.

Paneles de analítica

Representa en gráficos cómo se distribuyen los productos entre categorías.

Límites por plan

Free 100 solicitudes/día compartidas entre endpoints, 1/s (ráfaga de 5); suficiente para refrescar un árbol en caché varias veces al día.
Starter 5000 solicitudes/día, 5/s (ráfaga de 25).
Pro 25.000 solicitudes/día, 20/s (ráfaga de 100).
Enterprise 100.000 solicitudes/día, 50/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

401 — X-API-Key falta, no es válida o está revocada.

Envía una clave del panel; el campo error del cuerpo indica cuál es el caso.

422 — limit fuera de 1–100, offset fuera de 0–10000, o q con más de 200 caracteres.

Acota los valores en el cliente; aquí la validación devuelve 422, no 400.

429 — Se agotó el límite por segundo de la clave o la cuota diaria de la cuenta.

Espera a Retry-After y mientras tanto sirve tu copia en caché.

Comparada con otras API

Esto es un listado de cadenas de categoría tal como están guardadas, con recuentos, no una taxonomía curada. Los colaboradores de Open Food Facts y la importación del USDA aportan cada uno su propia forma, espaciado, idioma y etiquetas, y el endpoint no los fusiona; las reglas de limpieza de arriba te corresponde aplicarlas a ti. A cambio, los recuentos coinciden exactamente con el catálogo y cada cadena se puede devolver tal cual a la búsqueda o compararse con el campo category de un producto. Construye un único árbol normalizado a partir de esta lista y cachéalo, porque los datos solo cambian en una reimportación.

Ver la comparativa completa de API de datos de alimentos →

Preguntas frecuentes

¿q es una coincidencia de prefijo o de subcadena? +

Subcadena, sin distinguir mayúsculas, en cualquier parte de la cadena; q=chocolate devuelve "Beverages, Dairies, Dairy drinks, Flavoured milks, Chocolate milks" además de "Chocolate". No hay forma de anclarla al principio.

¿Por qué veo la misma jerarquía más de una vez? +

Las cadenas guardadas difieren en espaciado, etiquetado ("en:chocolates" frente a "Chocolates") o idioma, y el endpoint cuenta por cadena en bruto. Fusiona por segmentos limpios para colapsarlas.

¿Puedo listar solo las categorías del USDA o solo las de Open Food Facts? +

No: no hay filtro de fuente y las filas no llevan source. Obtén un producto de la categoría con la API de base de datos de alimentos y lee su campo source.

¿Puedo filtrar la búsqueda por categoría? +

No con un parámetro. Envía el segmento como q a la API de búsqueda de alimentos, que recurre a la coincidencia por categoría solo cuando ningún nombre de producto ni marca coincide; filtra por el campo category de cada resultado para una coincidencia exacta.

¿total cuenta productos o categorías? +

Cadenas de categoría distintas que coinciden con q: en la respuesta capturada, total es 11303 para q=chocolate mientras que la primera fila por sí sola contiene 46110 productos. Suma product_count tú mismo para obtener un total de productos.

Empieza a crear con la API de categorías de alimentos

Gratis para empezar. Sin tarjeta de crédito.

Obtener clave API Ir al panel