Nutrola's Nutrition Data API: Hoe Ontwikkelaars Toegang Krijgen tot Onze Voedseldatabase

Een ontwikkelaarsgids voor Nutrola's Nutrition Data API. Leer hoe je toegang krijgt tot onze geverifieerde voedseldatabase met meer dan 3 miljoen entries, verken endpoints, authenticatie en praktische gebruiksvoorbeelden.

Medically reviewed by Dr. Emily Torres, Registered Dietitian Nutritionist (RDN)

Ben je bezig met het bouwen van een gezondheids-, fitness- of voedselgerelateerde app? Een van de grootste uitdagingen waar je mee te maken krijgt, is het verkrijgen van voedingsdata. Je hebt nauwkeurige calorie- en macro-informatie nodig voor duizenden voedingsmiddelen, je moet internationale producten dekken en je moet ervoor zorgen dat de informatie actueel blijft naarmate fabrikanten hun producten herformuleren.

De meeste ontwikkelaars beginnen met het ophalen van gegevens uit open overheid databases zoals USDA FoodData Central. Dit biedt een basis, maar dekt geen merkproducten uit 47 landen, restaurantmaaltijden of de duizenden regionale voedingsmiddelen die echte gebruikers dagelijks consumeren. Het zelf invullen van deze hiaten betekent jaren van datacuratie.

Nutrola's Nutrition Data API biedt ontwikkelaars toegang tot dezelfde geverifieerde voedseldatabase die onze app aandrijft — meer dan 3 miljoen entries, inclusief rauwe ingrediënten, merkproducten, restaurantmaaltijden en samengestelde recepten. Elke entry is geverifieerd via ons meerlagige kwaliteitscontroleproces, hetzelfde systeem dat door meer dan 2 miljoen gebruikers wordt vertrouwd.

Deze gids behandelt alles wat je moet weten om aan de slag te gaan met onze API: architectuur, authenticatie, endpoints, limieten en praktische codevoorbeelden.

API Overzicht

De Nutrola Nutrition Data API is een RESTful JSON API. Je doet HTTP-verzoeken en ontvangt JSON-antwoorden. Er zijn geen SDK's vereist, hoewel we clientbibliotheken voor Python, JavaScript en Swift aanbieden voor het gemak.

Basis URL

https://api.nutrola.com/v1

Alle endpoints worden via HTTPS aangeboden. Gewone HTTP-verzoeken worden afgewezen.

Belangrijkste Functionaliteiten

Functionaliteit Beschrijving
Voedselzoekfunctie Volledige tekstzoekfunctie over 3M+ voedselentries met filtering op categorie, merk en land
Barcode Zoekfunctie Verkrijg voedingsdata op basis van UPC, EAN of andere barcodeformaten
Voedingsdetails Compleet voedingsprofiel voor elk voedingsmiddel (70+ voedingsstoffen, inclusief micros)
Portiegroottes Standaard en alternatieve portiegroottes met gramconversies
Receptanalyse Dien een lijst met ingrediënten in en ontvang gecombineerde voedingsdata
Voedselcategorieën Blader door de hiërarchische voedselcategorieën
Merkenregister Zoek en blader door merkvoedselfabrikanten
Autocomplete Snelle suggesties voor voedselzoekinterfaces

Antwoordformaat

Alle antwoorden volgen een consistente structuur:

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

Foutantwoorden bevatten een machine-leesbare foutcode en een begrijpelijke boodschap:

{
  "status": "error",
  "error": {
    "code": "FOOD_NOT_FOUND",
    "message": "Geen voedselentry gevonden die overeenkomt met de opgegeven ID.",
    "request_id": "req_xyz789"
  }
}

Authenticatie

Alle API-verzoeken vereisen een API-sleutel die in de Authorization header wordt doorgegeven.

Een API-sleutel Verkrijgen

  1. Maak een ontwikkelaarsaccount aan op developer.nutrola.com
  2. Navigeer naar de sectie API-sleutels in je dashboard
  3. Genereer een nieuwe sleutel en specificeer de benodigde scopes
  4. Bewaar de sleutel veilig — deze wordt slechts één keer weergegeven

Gebruik van je API-sleutel

Voeg de sleutel toe aan elke verzoekheader:

Authorization: Bearer YOUR_API_KEY

Voorbeeld met curl:

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

API-sleutel Scopes

Scope Toegangsniveau
foods:read Zoek en haal voedseldata op (meest gebruikelijk)
barcodes:read Barcodezoekfunctie
recipes:analyze Receptvoedingsanalyse
brands:read Toegang tot merkenregister
categories:read Voedselcategorieën

Sleutels kunnen worden gespecificeerd voor specifieke functionaliteiten. Een sleutel met alleen foods:read kan geen barcodezoekopdrachten uitvoeren. Dit volgt het principe van minimale privileges — vraag alleen de scopes aan die je applicatie nodig heeft.

Kernendpoints

Voedselzoekfunctie

Zoek in de database op naam, trefwoord of zin.

GET /v1/foods/search

Parameters:

Parameter Type Vereist Beschrijving
q string Ja Zoekopdracht (bijv. "gegrilde kipfilet")
category string Nee Filter op voedselcategorie (bijv. "zuivel", "groenten")
brand string Nee Filter op merknaam
country string Nee ISO 3166-1 alpha-2 landcode (bijv. "US", "DE", "JP")
verified_only boolean Nee Alleen entries met geverifieerde brondata retourneren (standaard: true)
page integer Nee Pagina nummer voor paginering (standaard: 1)
per_page integer Nee Resultaten per pagina, max 50 (standaard: 20)

Voorbeeldverzoek:

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

Voorbeeldantwoord:

{
  "status": "success",
  "data": {
    "results": [
      {
        "id": "food_8f2k9d",
        "name": "Griekse Yoghurt, Naturel, Vetvrij",
        "brand": null,
        "category": "zuivel",
        "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
  }
}

Verkrijg Voedselgegevens

Haal het volledige voedingsprofiel op voor een specifiek voedingsmiddel.

GET /v1/foods/{food_id}

Voorbeeldverzoek:

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

Het detailantwoord bevat de volledige voedingssamenstelling — meer dan 70 voedingsstoffen, inclusief alle vitamines, mineralen, aminozuren en vetzuurprofielen. Het bevat ook alle beschikbare portiegroottes en hun gram-equivalenten.

Deelantwoord (Belangrijke Voedingsstoffen):

{
  "status": "success",
  "data": {
    "id": "food_8f2k9d",
    "name": "Griekse Yoghurt, Naturel, Vetvrij",
    "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": ["melk"],
    "source": "USDA",
    "source_id": "170903",
    "last_verified": "2026-02-15",
    "confidence_score": 0.98
  }
}

Barcode Zoekfunctie

Zoek een voedselproduct op basis van zijn barcode.

GET /v1/barcodes/{barcode}

Ondersteunde Formaten: UPC-A, UPC-E, EAN-13, EAN-8

Voorbeeldverzoek:

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

Het antwoord retourneert hetzelfde voedsel detailobject als de /foods/{food_id} endpoint, met extra barcode-specifieke velden zoals barcode_format en regional_variants (een array van voedsel-ID's voor hetzelfde product in verschillende landen, die mogelijk verschillende formuleringen hebben).

Receptanalyse

Dien een lijst met ingrediënten in en ontvang de gecombineerde voedingssamenstelling.

POST /v1/recipes/analyze

Verzoeklichaam:

{
  "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": "snufje zout" }
  ]
}

Je kunt ook ingrediënten als tekst indienen voor automatische parsing:

{
  "name": "Overnight Oats",
  "servings": 2,
  "ingredients_text": "160g havermout, 400ml volle melk, 60g pindakaas, snufje zout"
}

Antwoord:

{
  "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 havermout", "matched_food": "food_3k8m2n", "confidence": 0.97 },
      { "input": "400ml volle melk", "matched_food": "food_9p4q7r", "confidence": 0.99 },
      { "input": "60g pindakaas", "matched_food": "food_1a5b8c", "confidence": 0.96 },
      { "input": "snufje zout", "matched_food": "food_6d2e9f", "confidence": 0.88 }
    ]
  }
}

Autocomplete

Snelle type-ahead suggesties voor het bouwen van zoekinterfaces.

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

Parameters:

Parameter Type Vereist Beschrijving
q string Ja Deeltijd zoekopdracht (minimaal 2 tekens)
limit integer Nee Maximaal aantal resultaten, 1-10 (standaard: 5)
country string Nee Prioriteer resultaten uit dit land

De responsetijden zijn geoptimaliseerd voor interactief gebruik — meestal onder de 50 ms. De autocomplete endpoint retourneert vereenvoudigde voedselobjecten (ID, naam, merk en categorie) voor snelle weergave.

Rate Limieten en Prijzen

Gratis Pakket

Het gratis pakket is ontworpen voor ontwikkeling, testen en kleinschalige applicaties:

Limiet Waarde
Verzoeken per dag 500
Verzoeken per minuut 30
Voedselzoekresultaten per verzoek 20
Receptanalyse per dag 10
Barcodezoekopdrachten per dag 100

Groei Pakket

Voor productieapplicaties met gematigd verkeer:

Limiet Waarde
Verzoeken per dag 25.000
Verzoeken per minuut 300
Voedselzoekresultaten per verzoek 50
Receptanalyse per dag 500
Barcodezoekopdrachten per dag 5.000
Prijs $49/maand

Enterprise Pakket

Voor applicaties met veel verkeer, white-label oplossingen en aangepaste vereisten:

Kenmerk Details
Verzoeken per dag Aangepast (meestal 100K+)
Rate limieten Aangepast
Toegewijde ondersteuning Inbegrepen
SLA 99,9% uptime garantie
Aangepaste gegevensexports Beschikbaar
Webhookmeldingen Beschikbaar voor gegevensupdates
Prijs Neem contact op met verkoop

Informatie over rate limieten is opgenomen in elk API-antwoorden via het meta object en in HTTP-responsheaders (X-RateLimit-Remaining, X-RateLimit-Reset).

Praktische Gebruikscases

Fitness- en Workout Apps

Als je een fitnessapp bouwt en voedingsregistratie wilt toevoegen zonder een voedseldatabase vanaf nul op te bouwen, is Nutrola's API de snelste weg. Gebruik de voedselzoek- en barcode endpoints zodat gebruikers maaltijden kunnen registreren, en de receptanalyse endpoint voor aangepaste maaltijdinvoer.

Maaltijdplanningsplatforms

Maaltijdplanningsapps hebben nauwkeurige voedingsdata nodig om plannen te genereren die specifieke macrodoelen bereiken. De gedetailleerde voedingsafbraak van de API (70+ voedingsstoffen) maakt precieze optimalisatie van maaltijdplannen mogelijk, niet alleen calorieën en macro's, maar ook micronutriënten, allergenen en compatibiliteit met dieetbeperkingen.

Gezondheidszorg en Telehealth

Gezondheidsplatforms die de voeding van patiënten monitoren, kunnen integreren met de API om nauwkeurige voedselregistratie binnen hun bestaande interfaces te bieden. De geverifieerde gegevensbronnen (USDA, EFSA, fabrikant-direct) voldoen aan de nauwkeurigheidsnormen die vereist zijn voor klinische voedingsmonitoring.

Restaurant- en Voedselservice

Restaurantbestelsystemen kunnen de API gebruiken om voedingsinformatie voor menu-items weer te geven. De receptanalyse endpoint is hier bijzonder nuttig — dien de ingrediënten van een gerecht in en ontvang de complete voedingsafbraak zonder handmatig elke item te berekenen.

Onderzoek en Academici

Voedingsonderzoekers kunnen de API gebruiken om voedselcodering in dieetstudies te standaardiseren. De consistente, geverifieerde gegevens verminderen de meetfouten die studies teisteren die afhankelijk zijn van door deelnemers gerapporteerde voedingsdata.

Code Voorbeelden

Python: Zoek een Voedsel en Verkrijg Voedingsdetails

import requests

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

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

# Zoek een voedsel
search_response = requests.get(
    f"{BASE_URL}/foods/search",
    headers=headers,
    params={"q": "gegrilde kipfilet", "per_page": 3}
)

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

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

# Verkrijg volledige details voor het eerste resultaat
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"Calorieën: {nutrition['calories']}")
print(f"Eiwit: {nutrition['protein']}g")
print(f"Koolhydraten: {nutrition['carbohydrates']}g")
print(f"Vet: {nutrition['fat']}g")
print(f"Portiegroottes: {food_detail['serving_sizes']}")

JavaScript: Barcode Scanning Integratie

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("Product niet gevonden in database");
      return null;
    }
    throw new Error(`API fout: ${response.status}`);
  }

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

// Voorbeeldgebruik
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(`Per ${serving.description}:`);
  console.log(`  Calorieën: ${Math.round(product.nutrition_per_100g.calories * factor)}`);
  console.log(`  Eiwit: ${(product.nutrition_per_100g.protein * factor).toFixed(1)}g`);
  console.log(`  Koolhydraten: ${(product.nutrition_per_100g.carbohydrates * factor).toFixed(1)}g`);
  console.log(`  Vet: ${(product.nutrition_per_100g.fat * factor).toFixed(1)}g`);
}

Swift: Een Autocomplete Zoekveld Bouwen

import Foundation

class Nutrola API {
    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]
}

Foutafhandelings Best Practices

De API maakt gebruik van standaard HTTP-statuscodes:

Statuscode Betekenis Veelvoorkomende Oorzaak
200 Succes Verzoek is normaal uitgevoerd
400 Ongeldig Verzoek Ontbrekende vereiste parameter of ongeldige waarde
401 Niet Geautoriseerd Ongeldige of ontbrekende API-sleutel
403 Verboden API-sleutel mist vereiste scope
404 Niet Gevonden Voedsel-ID of barcode niet in database
429 Rate Beperkt Te veel verzoeken; controleer rate limit headers
500 Serverfout Interne fout; probeer opnieuw met exponentiële backoff

Wanneer je een 429-respons ontvangt, vertelt de Retry-After header je hoeveel seconden je moet wachten voordat je het opnieuw probeert. Het implementeren van exponentiële backoff voor 429 en 500-responsen wordt sterk aanbevolen voor productieapplicaties.

Gegevensversheid en Updates

Nutrola's database wordt continu bijgewerkt. Geverifieerde productentries worden vernieuwd wanneer fabrikanten wijzigingen rapporteren, meestal binnen 48 uur. Overheidsdatabase-entries worden elk kwartaal gesynchroniseerd wanneer nieuwe releases worden gepubliceerd.

Als je applicatie API-antwoorden cachet (wat we aanbevelen voor prestaties), adviseren we een cache TTL van 24 uur voor voedsel detailantwoorden en 1 uur voor zoekresultaten. Het last_verified veld in voedsel detailantwoorden vertelt je wanneer de entry voor het laatst als nauwkeurig bevestigd is.

Voor enterprise klanten bieden we webhookmeldingen aan wanneer voedselentries worden bijgewerkt, zodat je applicatie proactief gecachte gegevens kan ongeldig maken in plaats van te wachten tot de cache TTL is verlopen.

Aan de Slag

  1. Meld je aan op developer.nutrola.com — het duurt minder dan een minuut
  2. Genereer een API-sleutel met de benodigde scopes
  3. Doe je eerste verzoek met behulp van de bovenstaande curl-voorbeelden
  4. Verken de interactieve documentatie op developer.nutrola.com/docs waar je endpoints direct in je browser kunt testen
  5. Sluit je aan bij de ontwikkelaarsgemeenschap op onze Discord-server voor ondersteuning, functieaanvragen en om te zien wat andere ontwikkelaars bouwen

Als je vragen hebt, problemen tegenkomt of wilt praten over een enterprise-integratie, neem dan contact op met ons ontwikkelaarsrelatieteam via api@nutrola.com.

Veelgestelde Vragen

Is de Nutrola API gratis te gebruiken?

Ja, er is een gratis pakket dat 500 verzoeken per dag omvat. Dit is geschikt voor ontwikkeling, testen en kleinschalige applicaties. Voor productieapplicaties met hoger verkeer begint het Groei pakket bij $49 per maand met 25.000 dagelijkse verzoeken. Enterprise plannen met aangepaste limieten zijn beschikbaar voor toepassingen met veel verkeer.

Welke gegevensformaten ondersteunt de API?

De API gebruikt uitsluitend JSON voor zowel verzoeken als antwoorden. Alle endpoints accepteren standaard queryparameters voor GET-verzoeken en JSON-verzoeklichamen voor POST-verzoeken. De responscodering is UTF-8, wat correct omgaat met voedselnamen in alle ondersteunde talen.

Hoe nauwkeurig zijn de voedingsgegevens die door de API worden geleverd?

Elke entry in de Nutrola database ondergaat een meerlagig verificatieproces, inclusief validatie van overheidsbronnen, kruisverwijzing van fabrikantgegevens, AI-gestuurde statistische controle en menselijke expertbeoordeling. Onze nauwkeurigheidsnorm is 97,4% vergeleken met laboratoriumanalyse, in vergelijking met een industriegemiddelde van 70-85% voor crowdsourced databases. Elke voedselentry bevat een confidence_score veld dat ons niveau van zekerheid aangeeft.

Kan ik de API gebruiken om een commercieel product te bouwen?

Ja. De API is ontworpen voor commercieel gebruik. Het gratis pakket kan worden gebruikt voor commerciële producten binnen de rate limits. Groei- en Enterprise plannen omvatten commerciële gebruiksrechten zonder beperkingen op het type applicatie. Bekijk de gebruiksvoorwaarden op developer.nutrola.com voor volledige details.

Ondersteunt de API voedingsmiddelen van buiten de Verenigde Staten?

Ja. De database dekt merkproducten uit 47 landen en generieke voedingsmiddelen uit meer dan 120 keukens. Gebruik de country parameter op zoekendpoints om resultaten uit een specifieke markt te prioriteren. Barcodezoekopdrachten matchen automatisch het product met de juiste regionale formulering.

Hoe ga ik om met voedingsmiddelen die niet in de database staan?

Als een barcodezoekopdracht een 404 retourneert, kun je terugvallen op een tekstzoekopdracht met de productnaam. Als geen van beide benaderingen het voedsel vindt, kun je het indienen voor toevoeging via het ontwikkelaarsportaal. Voedingsmiddelen die door API-partners zijn ingediend, krijgen prioriteit voor verificatie en worden meestal binnen 72 uur toegevoegd. Enterprise klanten kunnen batch toevoegingen aanvragen voor grote productcatalogi.

Zijn er SDK's of clientbibliotheken beschikbaar?

We bieden officiële clientbibliotheken voor Python (via pip: pip install nutrola), JavaScript/TypeScript (via npm: npm install @nutrola/api) en Swift (via Swift Package Manager). Deze bibliotheken behandelen authenticatie, rate limiting, herhalingen en respons parsing. Gemeenschaps-onderhouden bibliotheken zijn beschikbaar voor Go, Ruby en PHP.

Klaar om je voedingstracking te transformeren?

Sluit je aan bij duizenden die hun gezondheidsreis hebben getransformeerd met Nutrola!