Piano Free

API di ricerca per codici a barre

Scansiona o digita un codice a barre, ottieni il prodotto. Risolvi qualsiasi codice EAN-13 o UPC in un record alimentare — marca, categoria, Nutri-Score e riepilogo nutrizionale — con una sola richiesta. Pensata per le app basate su scanner.

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
  }
}

Preferisci cliccare? Prova l'esploratore di prodotti o l'area di prova foto.

Cosa ottieni

name_default / brand

Nome del prodotto e marca per il codice scansionato.

name / lang

Insieme completo di nomi multilingue quando l'etichetta riporta più lingue; aggiungi ?lang= (en, fr, es, de, it, bg) per i campi localizzati di categoria e allergeni.

barcode

Il codice a barre così come è memorizzato nel catalogo — le varianti con zeri di riempimento (UPC-12, EAN-13, GTIN-14) dello stesso codice si risolvono tutte in esso.

nutriscore

Voto Nutri-Score (a–e) quando disponibile.

nutrition_summary

Macronutrienti principali: energia, zuccheri, proteine, grassi.

image_url

Immagine del prodotto, quando disponibile.

Incluso nel piano gratuito — 100 richieste/giorno, nessuna carta di credito richiesta. Vedi i piani →

Esempi di codice

La stessa richiesta in curl, JavaScript e Python. Sostituisci YOUR_API_KEY con una chiave della tua dashboard.


              curl "https://foodbase.dev/v1/foods/barcode/5449000000996" \
  -H "X-API-Key: YOUR_API_KEY"
            

Come funziona

Cosa fa una singola ricerca

Invia GET /v1/foods/barcode/{code} con la tua chiave nell'header X-API-Key. Il codice va da GTIN-8 a GTIN-14, al massimo 20 caratteri. FoodBase prova prima una corrispondenza esatta con il codice a barre memorizzato, poi gli equivalenti con zeri di riempimento dello stesso numero, quindi un UPC-A a 12 cifre trova il record memorizzato come EAN a 13 cifre.

Per 5449000000996 il record torna con barcode 5449000000996 e id 62ea12b8-b260-c288-5c38-3a4906f5d6dd. Quell'id è stabile tra le reimportazioni, quindi salvalo come chiave esterna al posto della stringa del codice a barre.

Quando più righe del catalogo hanno lo stesso codice a barre, vince la riga più popolare e la scelta è deterministica: lo stesso codice restituisce lo stesso prodotto a ogni chiamata.

  • Il barcode restituito è la forma memorizzata, non necessariamente quella che hai inviato.

Leggere il record

Il corpo 200 è lo stesso record alimentare completo che la Food Database API restituisce per id, quindi scrivi il parser una volta sola e riutilizzalo. Per 5449000000996 significa source openfoodfacts, name_default Original Taste con voci bg e fr nell'array name, nutriscore e, nova_group 4 ed ecoscore_grade not-applicable. Testi d'etichetta come serving_size_raw (1 can (330 ml)) e quantity (0kg in questo record, un errore di un contributore) tornano come digitati sulla confezione, quindi considerali un indizio e non un numero.

  • categories_tags è la tassonomia leggibile da macchina (en:colas); category è lo stesso percorso come stringa di visualizzazione unita da virgole.
  • allergens e traces sono null quando la fonte non ne elenca alcuno, il che non equivale a privo di allergeni.
  • image_url punta a images.openfoodfacts.org e può cambiare quando i contributori aggiornano il prodotto.

Localizzazione e nutrizione

Aggiungi ?lang=bg (o en, fr, es, de, it) per riempire category_localized, category_segments_localized e allergens_localized dai dizionari di traduzione. Dove non esiste una traduzione il campo è null, non un ripiego in inglese, quindi tieni category e allergens nella tua catena di fallback. lang non tocca name né ingredients.

nutrition_summary ha sei chiavi: energy_kcal, proteins_g, carbs_g, fat_g, sugars_g, fiber_g. Ognuna può essere null, e l'intero oggetto è null quando la fonte non ha registrato alcuna nutrizione. Per la tabella completa per 100 g, oltre 40 nutrienti dove la fonte li ha, chiama la Nutrition API con l'id che hai appena ricevuto.

Flusso dello scanner, cache e mancate corrispondenze

Con un 200, mostra la scheda a partire da name_default, brand, image_url e nutrition_summary, e conserva l'id. Con un 404 il codice non è nel catalogo: ripiega sulla Food Image Recognition API con una foto del fronte della confezione, oppure offri all'utente una ricerca testuale. Non riprovare un 404; non cambierà finché il catalogo non viene aggiornato.

Le risposte 200 portano Cache-Control: public, max-age=300, e i 404 sono memorizzabili in cache per 60 secondi. Rispettali in qualsiasi cache tra i tuoi utenti e FoodBase. Ogni risposta porta anche X-RateLimit-Second-Remaining e gli header della quota giornaliera; regola il ritmo in base a essi prima di vedere un 429.

La copertura è migliore per i prodotti della grande distribuzione europea e statunitense, perché il catalogo è costruito da Open Food Facts e USDA FoodData Central, con GS1 Bulgaria e Metro Bulgaria in aggiunta. Le linee a marchio del distributore e i prodotti molto recenti sono i casi mancanti più comuni.

Cosa puoi costruire

Scanner di codici a barre

Trasforma la scansione con la fotocamera del telefono in dati istantanei su prodotto e nutrizione.

App per dispensa e spesa

Lascia che gli utenti aggiungano articoli scansionando il codice a barre della confezione.

Retail e casse

Arricchisci un carrello con gli attributi alimentari a partire dal codice a barre.

Limiti per piano

Free 100 richieste/giorno condivise tra tutti gli endpoint e le chiavi, 1 richiesta/s con burst di 5.
Starter 5.000 richieste/giorno, 5/s con burst di 25.
Pro 25.000 richieste/giorno, 20/s con burst di 100.
Enterprise 100.000 richieste/giorno, 50/s con burst di 250.

Ogni risposta include gli header X-RateLimit-* con il budget residuo; ogni 429 include Retry-After . Confronta i piani →

Errori e come gestirli

404 — Nessuna riga del catalogo corrisponde al codice o a una sua variante con zeri di riempimento. Corpo: {"error":"Not found","message":"No food with this barcode"}.

Offri l'identificazione tramite foto o una ricerca testuale; metti in cache il mancato riscontro per i 60 s consentiti.

401 — L'header X-API-Key manca o la chiave non è valida.

Controlla il nome dell'header e la chiave nella dashboard; fai passare la chiamata dal tuo backend invece di distribuire la chiave in un'app mobile.

429 — Burst al secondo superato per questa chiave, oppure quota giornaliera dell'account esaurita.

Attendi i secondi indicati in Retry-After, poi riprova una volta.

Confronto con altre API

La maggior parte delle API per codici a barre risponde con un nome, una marca e magari un'immagine; FoodBase risponde con il record alimentare completo, quindi una scansione ti dà ingredienti, allergeni, Nutri-Score e un riepilogo nutrizionale senza una seconda chiamata. Il catalogo è Open Food Facts più USDA FoodData Central più GS1 e Metro Bulgaria, il che lo rende solido per i prodotti alimentari europei e statunitensi e più debole fuori da quei mercati. Gli zeri di riempimento dei GTIN sono gestiti dal server, quindi non ti serve alcuno strato di normalizzazione. Non c'è garanzia che ogni codice esista; metti in conto il percorso 404.

Vedi il confronto completo delle API di dati alimentari →

Domande frequenti

Devo convertire un codice UPC-A in EAN-13 prima di chiamare? +

No. Invia le cifre prodotte dal tuo scanner. FoodBase prova prima la stringa esatta e poi gli equivalenti con zeri di riempimento, quindi un UPC-A a 12 cifre trova la forma EAN-13 a 13 cifre e 0000080042556 trova il prodotto memorizzato come 80042556. Il campo barcode nella risposta mostra la forma memorizzata.

Cosa succede se due prodotti condividono lo stesso codice a barre? +

Vince la riga di catalogo più popolare e la scelta è deterministica, quindi ricerche ripetute restituiscono lo stesso prodotto. Se ti servono le alternative, cerca per nome con la Food Search API.

La risposta è la stessa che ottengo recuperando il prodotto per id? +

Sì. È il record che la Food Database API restituisce per GET /v1/foods/{id}, compresi nutrition_summary, categories_tags e gli array multilingue name e ingredients.

Come mostro il nome del prodotto nella lingua dell'utente? +

Leggi l'array name e scegli la voce la cui lang corrisponde; l'esempio contiene bg (Кока-Кола), fr (Coca-Cola en canette), de, it, es e altre. Ripiega su name_default, che è la voce principale (lang main). Il parametro ?lang= localizza solo categoria e allergeni.

Posso mettere in cache i risultati dei codici a barre dal mio lato? +

Sì, ed è consigliabile. Le corrispondenze arrivano con Cache-Control: public, max-age=300 e i mancati riscontri sono memorizzabili per 60 secondi. Una cache condivisa davanti al tuo backend fa sì che le scansioni ripetute dello stesso codice non tocchino la tua quota giornaliera.

Perché un prodotto reale torna con un 404? +

La copertura segue le fonti: Open Food Facts, USDA FoodData Central, GS1 Bulgaria e Metro Bulgaria, quindi i prodotti della grande distribuzione europea e statunitense sono i meglio coperti. Le linee a marchio del distributore e i prodotti lanciati da poco sono le lacune abituali; ripiega sulla Food Image Recognition API o su una ricerca testuale.

Inizia subito con API di ricerca per codici a barre

Gratis per iniziare. Nessuna carta di credito richiesta.

Ottieni la chiave API Vai alla dashboard