Nutrolas Ernæringsdata API: Hvordan utviklere kan få tilgang til vår matdatabase

En utviklerguide til Nutrolas Ernæringsdata API. Lær hvordan du får tilgang til vår verifiserte matdatabase med over 3 millioner oppføringer, utforsk endepunkter, autentisering og virkelige bruksområder.

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

Skal du bygge en helse-, trenings- eller matrelatert app? En av de største utfordringene du vil møte, er ernæringsdata. Du trenger nøyaktig kalori- og makroinformasjon for tusenvis av matvarer, du må dekke internasjonale produkter, og du må sørge for at informasjonen er oppdatert ettersom produsentene reformulerer produktene sine.

De fleste utviklere begynner med å hente data fra åpne offentlige databaser som USDA FoodData Central. Dette gir et grunnlag, men dekker ikke merkede produkter fra 47 land, restaurantmåltider eller de tusenvis av regionale matvarene som virkelige brukere spiser hver dag. Å fylle disse hullene selv betyr mange år med datakurering.

Nutrolas Ernæringsdata API gir utviklere tilgang til den samme verifiserte matdatabasen som driver appen vår — over 3 millioner oppføringer, som dekker rå ingredienser, merkede produkter, restaurantmåltider og sammensatte oppskrifter. Hver oppføring er verifisert gjennom vår flerlagede kvalitetskontrollprosess, det samme systemet som over 2 millioner brukere stoler på.

Denne guiden dekker alt du trenger å vite for å begynne å bygge med vårt API: arkitektur, autentisering, endepunkter, hastighetsbegrensninger og virkelige kodeeksempler.

API Oversikt

Nutrolas Ernæringsdata API er et RESTful JSON API. Du sender HTTP-forespørsel, og får JSON-respons. Ingen SDK-er er nødvendig, men vi tilbyr klientbiblioteker for Python, JavaScript og Swift for enkelhets skyld.

Grunnleggende URL

https://api.nutrola.com/v1

Alle endepunkter serveres over HTTPS. Vanlige HTTP-forespørsel blir avvist.

Nøkkelfunksjoner

Funksjon Beskrivelse
Mat Søk Fulltekst søk på 3M+ matoppføringer med filtrering etter kategori, merke og land
Strekkodeoppslag Få ernæringsdata ved hjelp av UPC, EAN eller andre strekkodeformater
Ernæringsdetaljer Fullstendig ernæringsprofil for enhver matvare (70+ næringsstoffer inkludert mikronæringsstoffer)
Serveringsstørrelser Standard og alternative serveringsstørrelser med gramkonverteringer
Oppskrift Analyse Send en liste med ingredienser og få kombinert ernæringsdata
Matkategorier Bla gjennom den hierarkiske matkategoritaxonomien
Merke Katalog Søk og bla gjennom merkede matprodusenter
Autocomplete Rask forslag for søkefelt for mat

Responsformat

Alle svar følger en konsekvent struktur:

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

Feilrespons inkluderer en maskinlesbar feilkode og en menneskelig lesbar melding:

{
  "status": "error",
  "error": {
    "code": "FOOD_NOT_FOUND",
    "message": "Ingen matoppføring samsvarer med den oppgitte ID-en.",
    "request_id": "req_xyz789"
  }
}

Autentisering

Alle API-forespørsel krever en API-nøkkel som sendes i Authorization-headeren.

Få en API-nøkkel

  1. Opprett en utviklerkonto på developer.nutrola.com
  2. Naviger til API-nøkkel-seksjonen i dashbordet ditt
  3. Generer en ny nøkkel og spesifiser de nødvendige omfangene
  4. Oppbevar nøkkelen sikkert — den vises kun én gang

Bruke API-nøkkelen din

Inkluder nøkkelen i hver forespørsel-header:

Authorization: Bearer DIN_API_NØKKEL

Eksempel med curl:

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

API-nøkkel Omfang

Omfang Tilgangsnivå
foods:read Søk og hent matdata (mest vanlig)
barcodes:read Strekkodeoppslag
recipes:analyze Oppskrift ernæringsanalyse
brands:read Tilgang til merke katalog
categories:read Matkategori taksonomi

Nøkler kan begrenses til spesifikke funksjoner. En nøkkel med kun foods:read kan ikke få tilgang til strekkodeoppslag. Dette følger prinsippet om minst privilegium — be om bare de omfangene applikasjonen din trenger.

Kjerne Endepunkter

Mat Søk

Søk i databasen etter navn, nøkkelord eller fraser.

GET /v1/foods/search

Parametere:

Parameter Type Påkrevd Beskrivelse
q string Ja Søkeforespørsel (f.eks. "grillet kyllingbryst")
category string Nei Filtrer etter matkategori (f.eks. "melk", "grønnsaker")
brand string Nei Filtrer etter merkenavn
country string Nei ISO 3166-1 alpha-2 landskode (f.eks. "NO", "DE", "JP")
verified_only boolean Nei Returner kun oppføringer med verifisert kilde (standard: true)
page integer Nei Sidenummer for paginering (standard: 1)
per_page integer Nei Resultater per side, maks 50 (standard: 20)

Eksempel Forespørsel:

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

Eksempel Respons:

{
  "status": "success",
  "data": {
    "results": [
      {
        "id": "food_8f2k9d",
        "name": "Gresk Yoghurt, Naturell, Fettfri",
        "brand": null,
        "category": "melk",
        "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 beholder (170g)",
          "grams": 170
        }
      }
    ],
    "total_results": 342,
    "page": 1,
    "per_page": 5
  }
}

Hent Matdetaljer

Hent den komplette ernæringsprofilen for en spesifikk matvare.

GET /v1/foods/{food_id}

Eksempel Forespørsel:

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

Detaljresponsen inkluderer full næringsoppdeling — over 70 næringsstoffer inkludert alle vitaminer, mineraler, aminosyrer og fettsyreprofiler. Den inkluderer også alle tilgjengelige serveringsstørrelser og deres gramekvivalenter.

Delvis Respons (Nøkkelnæringsstoffer):

{
  "status": "success",
  "data": {
    "id": "food_8f2k9d",
    "name": "Gresk Yoghurt, Naturell, Fettfri",
    "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 beholder (170g)", "grams": 170 },
      { "description": "1 kopp (245g)", "grams": 245 },
      { "description": "1 ss (15g)", "grams": 15 },
      { "description": "100g", "grams": 100 }
    ],
    "allergens": ["melk"],
    "source": "USDA",
    "source_id": "170903",
    "last_verified": "2026-02-15",
    "confidence_score": 0.98
  }
}

Strekkodeoppslag

Søk etter et matprodukt ved hjelp av strekkoden.

GET /v1/barcodes/{barcode}

Støttede Formater: UPC-A, UPC-E, EAN-13, EAN-8

Eksempel Forespørsel:

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

Responsen returnerer det samme matdetaljobjektet som /foods/{food_id}-endepunktet, med tillegg av strekkode-spesifikke felt som barcode_format og regional_variants (et array av mat-ID-er for det samme produktet i forskjellige land, som kan ha forskjellige formuleringer).

Oppskrift Analyse

Send en liste med ingredienser og motta den kombinerte ernæringsoppdelingen.

POST /v1/recipes/analyze

Forespørsel Kropp:

{
  "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": "klype salt" }
  ]
}

Du kan også sende ingredienser som tekst for automatisk parsing:

{
  "name": "Overnight Oats",
  "servings": 2,
  "ingredients_text": "160g havregryn, 400ml helmelk, 60g peanøttsmør, klype salt"
}

Respons:

{
  "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 havregryn", "matched_food": "food_3k8m2n", "confidence": 0.97 },
      { "input": "400ml helmelk", "matched_food": "food_9p4q7r", "confidence": 0.99 },
      { "input": "60g peanøttsmør", "matched_food": "food_1a5b8c", "confidence": 0.96 },
      { "input": "klype salt", "matched_food": "food_6d2e9f", "confidence": 0.88 }
    ]
  }
}

Autocomplete

Rask type-ahead forslag for å bygge søkegrensesnitt.

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

Parametere:

Parameter Type Påkrevd Beskrivelse
q string Ja Delvis søkeforespørsel (minimum 2 tegn)
limit integer Nei Maks resultater, 1-10 (standard: 5)
country string Nei Prioriter resultater fra dette landet

Responsstidene er optimalisert for interaktiv bruk — vanligvis under 50 ms. Autocomplete-endepunktet returnerer forenklede matobjekter (ID, navn, merke og kategori) for rask rendering.

Hastighetsbegrensninger og Priser

Gratis Nivå

Det gratis nivået er designet for utvikling, testing og småskala applikasjoner:

Grense Verdi
Forespørsel per dag 500
Forespørsel per minutt 30
Mat søkresultater per forespørsel 20
Oppskrift analyse per dag 10
Strekkodeoppslag per dag 100

Vekst Nivå

For produksjonsapplikasjoner med moderat trafikk:

Grense Verdi
Forespørsel per dag 25,000
Forespørsel per minutt 300
Mat søkresultater per forespørsel 50
Oppskrift analyse per dag 500
Strekkodeoppslag per dag 5,000
Pris $49/måned

Bedriftsnivå

For applikasjoner med høy trafikk, hvitmerkeløsninger og tilpassede krav:

Funksjon Detaljer
Forespørsel per dag Tilpasset (vanligvis 100K+)
Hastighetsbegrensninger Tilpasset
Dedikert støtte Inkludert
SLA 99.9% oppetid garanti
Tilpassede dataeksporter Tilgjengelig
Webhook-varsler Tilgjengelig for dataoppdateringer
Pris Kontakt salg

Informasjon om hastighetsbegrensninger er inkludert i hver API-respons via meta-objektet og i HTTP-responsoverskrifter (X-RateLimit-Remaining, X-RateLimit-Reset).

Virkelige Bruksområder

Fitness- og Treningsapper

Hvis du bygger en treningsapp og ønsker å legge til ernæringssporing uten å bygge en matdatabase fra bunnen av, er Nutrolas API den raskeste veien. Bruk mat søk- og strekkodeendepunktene for å la brukerne logge måltider, og oppskrift analyse-endepunktet for tilpassede måltidsoppføringer.

Måltidsplanleggingsplattformer

Måltidsplanleggingsapper trenger nøyaktige ernæringsdata for å generere planer som treffer spesifikke makromål. API-ens detaljerte næringsoppdeling (70+ næringsstoffer) muliggjør presis optimalisering av måltidsplaner, ikke bare kalorier og makroer, men også mikronæringsstoffer, allergener og kompatibilitet med kostholdsrestriksjoner.

Helsevesen og Telehelse

Helseplattformer som overvåker pasienternæring kan integrere med API-en for å gi nøyaktig matlogging innenfor sine eksisterende grensesnitt. De verifiserte datakildene (USDA, EFSA, produsentdirekte) møter nøyaktighetsstandardene som kreves for klinisk ernæringsovervåking.

Restaurant- og Matservice

Restaurantbestillingsplattformer kan bruke API-en for å vise ernæringsinformasjon for menyartikler. Oppskrift analyse-endepunktet er spesielt nyttig her — send inn ingrediensene til en rett og få den komplette ernæringsoppdelingen uten å måtte beregne hver enkelt vare manuelt.

Forskning og Akademia

Ernæringsforskere kan bruke API-en for å standardisere matkoding i kostholdsstudier. De konsistente, verifiserte dataene reduserer målefeil som plager studier som er avhengige av deltakerrapporterte ernæringsdata.

Kodeeksempler

Python: Søk etter en Matvare og Hent Ernæringsdetaljer

import requests

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

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

# Søk etter en matvare
search_response = requests.get(
    f"{BASE_URL}/foods/search",
    headers=headers,
    params={"q": "grillet kyllingbryst", "per_page": 3}
)

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

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

# Hent fullstendige detaljer for det første resultatet
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"Kalorier: {nutrition['calories']}")
print(f"Protein: {nutrition['protein']}g")
print(f"Karbohydrater: {nutrition['carbohydrates']}g")
print(f"Fett: {nutrition['fat']}g")
print(f"Serveringsstørrelser: {food_detail['serving_sizes']}")

JavaScript: Integrering av Strekkodeskanning

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("Produktet ble ikke funnet i databasen");
      return null;
    }
    throw new Error(`API-feil: ${response.status}`);
  }

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

// Eksempel på bruk
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(`  Kalorier: ${Math.round(product.nutrition_per_100g.calories * factor)}`);
  console.log(`  Protein: ${(product.nutrition_per_100g.protein * factor).toFixed(1)}g`);
  console.log(`  Karbohydrater: ${(product.nutrition_per_100g.carbohydrates * factor).toFixed(1)}g`);
  console.log(`  Fett: ${(product.nutrition_per_100g.fat * factor).toFixed(1)}g`);
}

Swift: Bygge et Autocomplete Søkefelt

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

Beste Praksis for Feilhåndtering

API-en bruker standard HTTP-statuskoder:

Statuskode Betydning Vanlig Årsak
200 Succes Forespørselen ble fullført normalt
400 Dårlig Forespørsel Manglende påkrevd parameter eller ugyldig verdi
401 Uautorisert Ugyldig eller manglende API-nøkkel
403 Forbudt API-nøkkelen mangler nødvendig omfang
404 Ikke Funnet Mat-ID eller strekkode ikke i databasen
429 Hastighetsbegrenset For mange forespørsel; sjekk hastighetsbegrensningsoverskrifter
500 Serverfeil Intern feil; prøv igjen med eksponentiell tilbakeholdelse

Når du mottar en 429-respons, forteller Retry-After-headeren deg hvor mange sekunder du må vente før du prøver igjen. Implementering av eksponentiell tilbakeholdelse for 429 og 500-responser anbefales sterkt for produksjonsapplikasjoner.

Datakvalitet og Oppdateringer

Nutrolas database oppdateres kontinuerlig. Oppføringer av merkede produkter oppdateres når produsentene rapporterer endringer, vanligvis innen 48 timer. Oppføringer fra offentlige databaser synkroniseres kvartalsvis når nye utgivelser publiseres.

Hvis applikasjonen din cacher API-responser (noe vi anbefaler for ytelse), foreslår vi en cache TTL på 24 timer for matdetaljeresponser og 1 time for søkresultater. last_verified-feltet i matdetaljeresponser forteller deg når oppføringen sist ble bekreftet som nøyaktig.

For bedriftskunder tilbyr vi webhook-varsler når matoppføringer oppdateres, slik at applikasjonen din kan invalidere cachedata proaktivt i stedet for å vente på at cache TTL skal utløpe.

Komme i Gang

  1. Registrer degdeveloper.nutrola.com — det tar under ett minutt
  2. Generer en API-nøkkel med de nødvendige omfangene
  3. Gjør din første forespørsel ved å bruke curl-eksemplene ovenfor
  4. Utforsk de interaktive dokumentenedeveloper.nutrola.com/docs hvor du kan teste endepunkter direkte i nettleseren din
  5. Bli med i utviklerfellesskapet på vår Discord-server for støtte, funksjonsforespørsel og for å se hva andre utviklere bygger

Hvis du har spørsmål, opplever problemer, eller ønsker å diskutere en bedriftsintegrasjon, kontakt vårt utviklerteam på api@nutrola.com.

FAQ

Er Nutrola API gratis å bruke?

Ja, det finnes et gratis nivå som inkluderer 500 forespørsel per dag. Dette er egnet for utvikling, testing og småskala applikasjoner. For produksjonsapplikasjoner med høyere trafikk, starter vekstnivået på $49 per måned med 25,000 daglige forespørsel. Bedriftsplaner med tilpassede grenser er tilgjengelige for høytrafikkbruk.

Hvilke dataformater støtter API-en?

API-en bruker utelukkende JSON for både forespørsel og respons. Alle endepunkter aksepterer standard spørringsparametere for GET-forespørsel og JSON forespørselkropper for POST-forespørsel. Responskoding er UTF-8, som håndterer matnavn på alle støttede språk.

Hvor nøyaktige er ernæringsdataene som tilbys av API-en?

Hver oppføring i Nutrola-databasen går gjennom en flerlagers verifikasjonsprosess som inkluderer validering fra offentlige kilder, kryssreferering av produsentdata, AI-drevet statistisk sjekking og menneskelig ekspertvurdering. Vår nøyaktighetsstandard er 97.4% sammenlignet med laboratorieanalyse, sammenlignet med en bransjegjennomsnitt på 70-85% for crowdsourcet databaser. Hver matoppføring inkluderer et confidence_score-felt som indikerer vårt sikkerhetsnivå.

Kan jeg bruke API-en til å bygge et kommersielt produkt?

Ja. API-en er designet for kommersiell bruk. Det gratis nivået kan brukes til kommersielle produkter innenfor sine hastighetsbegrensninger. Vekst- og bedriftsplaner inkluderer kommersielle bruksrettigheter uten restriksjoner på hvilken type applikasjon. Se vilkårene for bruk på developer.nutrola.com for fullstendige detaljer.

Støtter API-en matvarer fra utenfor USA?

Ja. Databasen dekker merkede produkter fra 47 land og generiske matvarer fra over 120 kjøkken. Bruk country-parameteren på søkendepunktene for å prioritere resultater fra et spesifikt marked. Strekkodeoppslag matcher automatisk produktet med riktig regional formulering.

Hvordan håndterer jeg matvarer som ikke er i databasen?

Hvis et strekkodeoppslag returnerer en 404, kan du falle tilbake på et tekstsøk ved å bruke produktnavnet. Hvis ingen av tilnærmingene finner maten, kan du sende den inn for tillegg gjennom utviklerportalen. Matvarer sendt inn av API-partnere prioriteres for verifikasjon og legges vanligvis til innen 72 timer. Bedriftskunder kan be om batch-tillegg for store produktkataloger.

Finnes det SDK-er eller klientbiblioteker tilgjengelig?

Vi tilbyr offisielle klientbiblioteker for Python (via pip: pip install nutrola), JavaScript/TypeScript (via npm: npm install @nutrola/api), og Swift (via Swift Package Manager). Disse bibliotekene håndterer autentisering, hastighetsbegrensning, gjenopprettinger og responsparsing. Fellesskapsvedlikeholdte biblioteker er tilgjengelige for Go, Ruby og PHP.

Klar til å forvandle ernæringssporingen din?

Bli en del av tusenvis som har forvandlet helsereisen sin med Nutrola!