Plan Free

API de consulta de códigos de barras

Escanea o escribe un código de barras y obtén el producto. Resuelve cualquier código EAN-13 o UPC a un registro de alimento (marca, categoría, Nutri-Score y resumen nutricional) en una sola petición. Pensada para apps con escáner.

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

{
  "name_default": "Original Taste",
  "brand": "Coca-Cola",
  "barcode": "5449000000996",
  "nutriscore": "e",
  "nutrition_summary": {
    "energy_kcal": 42,
    "sugars_g": 10.6,
    "proteins_g": 0,
    "fat_g": 0
  }
}

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

Qué obtienes

name_default / brand

Nombre y marca del producto del código escaneado.

name / lang

Conjunto completo de nombres multilingües cuando la etiqueta incluye varios idiomas; añade ?lang= (en, fr, es, de, it, bg) para obtener categoría y alérgenos localizados.

barcode

El código de barras tal como está guardado en el catálogo: las variantes con ceros a la izquierda (UPC-12, EAN-13, GTIN-14) del mismo código se resuelven todas a él.

nutriscore

Nota Nutri-Score (a–e) cuando está disponible.

nutrition_summary

Macros principales: energía, azúcares, proteínas, grasas.

image_url

Imagen del producto cuando está disponible.

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/foods/barcode/5449000000996" \
  -H "X-API-Key: YOUR_API_KEY"
            

Cómo funciona

Qué hace una consulta

Envía GET /v1/foods/barcode/{code} con tu clave en la cabecera X-API-Key. El código va de GTIN-8 a GTIN-14, con un máximo de 20 caracteres. FoodBase prueba primero una coincidencia exacta con el código de barras guardado y después los equivalentes con ceros a la izquierda del mismo número, de modo que un UPC-A de 12 dígitos encuentra el registro guardado como EAN de 13 dígitos.

Para 5449000000996 el registro vuelve con barcode 5449000000996 e id 62ea12b8-b260-c288-5c38-3a4906f5d6dd. Ese id es estable entre reimportaciones, así que guárdalo como clave foránea en lugar de la cadena del código de barras.

Cuando varias filas del catálogo comparten el mismo código de barras, gana la más popular y la elección es determinista: el mismo código devuelve el mismo producto en cada llamada.

  • El barcode devuelto es la forma guardada, no necesariamente la forma que enviaste.

Cómo leer el registro

El cuerpo del 200 es el mismo registro completo de alimento que devuelve por id la API de base de datos de alimentos, así que analízalo una vez y reutiliza el parser. Para 5449000000996 eso significa source openfoodfacts, name_default Original Taste con entradas bg y fr en el array name, nutriscore e, nova_group 4 y ecoscore_grade not-applicable. El texto de etiqueta como serving_size_raw (1 can (330 ml)) y quantity (0kg en este registro, un error de un colaborador) se devuelve tal como se tecleó en el envase, así que trátalo como una pista y no como un número.

  • categories_tags es la taxonomía legible por máquinas (en:colas); category es la misma ruta como cadena para mostrar, unida con comas.
  • allergens y traces son null cuando la fuente no lista ninguno, lo cual no es lo mismo que libre de alérgenos.
  • image_url apunta a images.openfoodfacts.org y puede cambiar cuando los colaboradores actualizan el producto.

Localización y nutrición

Añade ?lang=bg (o en, fr, es, de, it) para rellenar category_localized, category_segments_localized y allergens_localized a partir de los diccionarios de traducción. Donde no existe traducción, el campo es null en lugar de un respaldo en inglés, así que mantén category y allergens en tu cadena de respaldo. lang no afecta a name ni a ingredients.

nutrition_summary tiene seis claves: energy_kcal, proteins_g, carbs_g, fat_g, sugars_g, fiber_g. Cualquiera puede ser null, y todo el objeto es null cuando la fuente no registró nutrición. Para la tabla completa por 100 g, más de 40 nutrientes cuando la fuente los tiene, llama a la API de nutrición con el id que acabas de recibir.

Flujo de escáner, caché y fallos

Con un 200, pinta la tarjeta con name_default, brand, image_url y nutrition_summary, y guarda el id. Con un 404 el código no está en el catálogo: recurre a la API de reconocimiento de imágenes de alimentos con una foto del frontal del envase, o ofrece al usuario una búsqueda de texto. No reintentes un 404; no cambiará hasta que se actualice el catálogo.

Las respuestas 200 llevan Cache-Control: public, max-age=300, y los 404 se pueden cachear durante 60 segundos. Respétalos en cualquier caché entre tus usuarios y FoodBase. Cada respuesta también lleva X-RateLimit-Second-Remaining y las cabeceras de cuota diaria; limita tu ritmo con ellas antes de ver un 429.

La cobertura es mejor para productos de venta minorista europeos y estadounidenses, porque el catálogo se construye a partir de Open Food Facts y USDA FoodData Central, con GS1 Bulgaria y Metro Bulgaria por encima. Las líneas de marca blanca y los productos muy recientes son los fallos más habituales.

Qué puedes crear

Escáneres de códigos de barras

Convierte un escaneo con la cámara del móvil en datos de producto y nutrición al instante.

Apps de despensa y de la compra

Deja que los usuarios añadan productos escaneando el código de barras del envase.

Comercio y cajas

Enriquece una cesta con atributos alimentarios a partir del código de barras.

Límites por plan

Free 100 solicitudes/día compartidas entre todos los endpoints y claves, 1 solicitud/s con una ráfaga de 5.
Starter 5000 solicitudes/día, 5/s con una ráfaga de 25.
Pro 25.000 solicitudes/día, 20/s con una ráfaga de 100.
Enterprise 100.000 solicitudes/día, 50/s con una 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 — Ninguna fila del catálogo coincide con el código ni con ninguna variante con ceros a la izquierda. Cuerpo: {"error":"Not found","message":"No food with this barcode"}.

Ofrece identificación por foto o una búsqueda de texto; cachea el fallo durante los 60 s permitidos.

401 — Falta la cabecera X-API-Key o la clave no es válida.

Revisa el nombre de la cabecera y la clave en tu panel; haz pasar la llamada por tu backend en lugar de incluir la clave en una app móvil.

429 — Se superó la ráfaga por segundo de esta clave o se consumió la cuota diaria de la cuenta.

Espera los segundos indicados en Retry-After y reintenta una vez.

Comparada con otras API

La mayoría de las API de códigos de barras responden con un nombre, una marca y quizá una imagen; FoodBase responde con el registro completo del alimento, así que un solo escaneo te da ingredientes, alérgenos, Nutri-Score y un resumen nutricional sin una segunda llamada. El catálogo es Open Food Facts más USDA FoodData Central más GS1 y Metro Bulgaria, lo que lo hace sólido para la alimentación europea y estadounidense y más débil fuera de esos mercados. El relleno con ceros de los GTIN se gestiona en el servidor, así que no necesitas ninguna capa de normalización. No hay garantía de que todos los códigos existan; prevé el camino del 404.

Ver la comparativa completa de API de datos de alimentos →

Preguntas frecuentes

¿Tengo que convertir un código UPC-A a EAN-13 antes de llamar? +

No. Envía los dígitos que produjo tu escáner. FoodBase prueba primero la cadena exacta y luego los equivalentes con ceros a la izquierda, de modo que un UPC-A de 12 dígitos encuentra la forma EAN-13 de 13 dígitos y 0000080042556 encuentra el producto guardado como 80042556. El campo barcode de la respuesta muestra la forma guardada.

¿Qué pasa si dos productos comparten el mismo código de barras? +

Gana la fila del catálogo más popular y la elección es determinista, por lo que consultas repetidas devuelven el mismo producto. Si necesitas las alternativas, busca por nombre con la API de búsqueda de alimentos.

¿La respuesta es la misma que al obtener el producto por id? +

Sí. Es el registro que devuelve la API de base de datos de alimentos para GET /v1/foods/{id}, incluidos nutrition_summary, categories_tags y los arrays multilingües name e ingredients.

¿Cómo muestro el nombre del producto en el idioma del usuario? +

Lee el array name y elige la entrada cuyo lang coincida; el ejemplo incluye bg (Кока-Кола), fr (Coca-Cola en canette), de, it, es y más. Recurre a name_default, que es la entrada principal (lang main). El parámetro ?lang= solo localiza categoría y alérgenos.

¿Puedo cachear por mi cuenta los resultados de códigos de barras? +

Sí, y deberías. Los aciertos llegan con Cache-Control: public, max-age=300 y los fallos se pueden cachear durante 60 segundos. Una caché compartida delante de tu backend hace que los escaneos repetidos del mismo código no toquen tu cuota diaria.

¿Por qué un producto real devuelve 404? +

La cobertura sigue a las fuentes: Open Food Facts, USDA FoodData Central, GS1 Bulgaria y Metro Bulgaria, por lo que los productos de venta minorista europeos y estadounidenses están mejor cubiertos. Las líneas de marca blanca y los lanzamientos recientes son los huecos habituales; recurre a la API de reconocimiento de imágenes de alimentos o a una búsqueda de texto.

Empieza a crear con la API de consulta de códigos de barras

Gratis para empezar. Sin tarjeta de crédito.

Obtener clave API Ir al panel