Nutrolas Näringsdata-API: Så får utvecklare tillgång till vår livsmedelsdatabas

En utvecklarguide till Nutrolas Näringsdata-API. Lär dig hur du får tillgång till vår verifierade livsmedelsdatabas med över 3 miljoner poster, utforska endpoints, autentisering och verkliga användningsfall.

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

Bygger du en app inom hälsa, fitness eller mat? En av de största utmaningarna du kommer att möta är att hantera näringsdata. Du behöver exakt information om kalorier och makronäringsämnen för tusentals livsmedel, och den måste täcka internationella produkter samt vara aktuell i takt med att tillverkare ändrar sina recept.

De flesta utvecklare börjar med att hämta data från öppna statliga databaser som USDA FoodData Central. Det ger en grund, men täcker inte varumärkesprodukter från 47 länder, restaurangmåltider eller tusentals regionala livsmedel som verkliga användare konsumerar varje dag. Att fylla dessa luckor själv innebär år av datakurering.

Nutrolas Näringsdata-API ger utvecklare tillgång till samma verifierade livsmedelsdatabas som driver vår app — över 3 miljoner poster, som omfattar råvaror, varumärkesprodukter, restaurangmåltider och sammansatta recept. Varje post är verifierad genom vår flerlagers kvalitetskontroll, samma system som över 2 miljoner användare litar på.

Denna guide täcker allt du behöver veta för att börja bygga med vårt API: arkitektur, autentisering, endpoints, hastighetsbegränsningar och verkliga kodexempel.

API Översikt

Nutrolas Näringsdata-API är ett RESTful JSON API. Du gör HTTP-förfrågningar och får JSON-svar. Inga SDK:er krävs, men vi tillhandahåller klientbibliotek för Python, JavaScript och Swift för bekvämlighet.

Bas-URL

https://api.nutrola.com/v1

Alla endpoints serveras över HTTPS. Vanliga HTTP-förfrågningar avvisas.

Nyckelfunktioner

Funktion Beskrivning
Livsmedelssökning Fulltextsökning över 3M+ livsmedelsposter med filtrering efter kategori, märke och land
Streckkodssökning Få näringsdata via UPC, EAN eller andra streckkodformat
Näringsdetaljer Fullständig näringsprofil för vilket livsmedel som helst (70+ näringsämnen inklusive mikronäringsämnen)
Portionsstorlekar Standard och alternativa portionsstorlekar med gramkonverteringar
Receptanalys Skicka en lista med ingredienser och få kombinerad näringsdata
Livsmedelskategorier Bläddra i den hierarkiska livsmedelskategoritaxonomin
Varumärkesförteckning Sök och bläddra bland livsmedelsproducenter
Autocomplete Snabba förslag för livsmedelssökningsgränssnitt

Svarsformat

Alla svar följer en konsekvent struktur:

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

Felmeddelanden inkluderar en maskinläsbar felkod och ett mänskligt läsbart meddelande:

{
  "status": "error",
  "error": {
    "code": "FOOD_NOT_FOUND",
    "message": "Ingen livsmedelspost matchar det angivna ID:t.",
    "request_id": "req_xyz789"
  }
}

Autentisering

Alla API-förfrågningar kräver en API-nyckel som skickas i Authorization-huvudet.

Så här får du en API-nyckel

  1. Skapa ett utvecklarkonto på developer.nutrola.com
  2. Navigera till sektionen för API-nycklar i din instrumentpanel
  3. Generera en ny nyckel och specificera de behörigheter du behöver
  4. Spara nyckeln på ett säkert ställe — den visas endast en gång

Använda din API-nyckel

Inkludera nyckeln i varje begäran:

Authorization: Bearer DIN_API_NYCKEL

Exempel med curl:

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

API-nyckelbehörigheter

Behörighet Åtkomstnivå
foods:read Sök och hämta livsmedelsdata (vanligast)
barcodes:read Streckkodssökning
recipes:analyze Receptanalys av näring
brands:read Åtkomst till varumärkesförteckning
categories:read Livsmedelskategoritaxonomi

Nycklar kan begränsas till specifika funktioner. En nyckel med endast foods:read kan inte få åtkomst till streckodssökningar. Detta följer principen om minimiåtkomst — begär endast de behörigheter din applikation behöver.

Kärnendpoints

Livsmedelssökning

Sök i databasen efter namn, nyckelord eller fras.

GET /v1/foods/search

Parametrar:

Parameter Typ Obligatorisk Beskrivning
q string Ja Sökfråga (t.ex. "grillad kycklingbröst")
category string Nej Filtrera efter livsmedelskategori (t.ex. "mejeriprodukter", "grönsaker")
brand string Nej Filtrera efter varumärkesnamn
country string Nej ISO 3166-1 alpha-2 landskod (t.ex. "SE", "DE", "JP")
verified_only boolean Nej Endast returnera poster med verifierad källdata (standard: true)
page integer Nej Sidnummer för paginering (standard: 1)
per_page integer Nej Resultat per sida, max 50 (standard: 20)

Exempel på begäran:

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

Exempel på svar:

{
  "status": "success",
  "data": {
    "results": [
      {
        "id": "food_8f2k9d",
        "name": "Grekisk Yoghurt, Naturell, Lågfet",
        "brand": null,
        "category": "mejeriprodukter",
        "country": "SE",
        "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 behållare (170g)",
          "grams": 170
        }
      }
    ],
    "total_results": 342,
    "page": 1,
    "per_page": 5
  }
}

Hämta livsmedelsdetaljer

Hämta den fullständiga näringsprofilen för ett specifikt livsmedel.

GET /v1/foods/{food_id}

Exempel på begäran:

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

Detaljsvaret inkluderar den fullständiga näringsnedbrytningen — över 70 näringsämnen inklusive alla vitaminer, mineraler, aminosyror och fettsyraprofiler. Det inkluderar också alla tillgängliga portionsstorlekar och deras gramekvivalenter.

Delvis svar (Nyckelnäringsämnen):

{
  "status": "success",
  "data": {
    "id": "food_8f2k9d",
    "name": "Grekisk Yoghurt, Naturell, Lågfet",
    "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 behållare (170g)", "grams": 170 },
      { "description": "1 kopp (245g)", "grams": 245 },
      { "description": "1 msk (15g)", "grams": 15 },
      { "description": "100g", "grams": 100 }
    ],
    "allergens": ["mjölk"],
    "source": "USDA",
    "source_id": "170903",
    "last_verified": "2026-02-15",
    "confidence_score": 0.98
  }
}

Streckodssökning

Sök efter en livsmedelsprodukt via dess streckkod.

GET /v1/barcodes/{barcode}

Stödda format: UPC-A, UPC-E, EAN-13, EAN-8

Exempel på begäran:

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

Svaret returnerar samma livsmedelsdetaljobjekt som /foods/{food_id}-endpointen, med ytterligare streckkodsspecifika fält som barcode_format och regional_variants (en array av livsmedels-ID:n för samma produkt i olika länder, som kan ha olika formuleringar).

Receptanalys

Skicka en lista med ingredienser och få den kombinerade näringsnedbrytningen.

POST /v1/recipes/analyze

Begärningskropp:

{
  "name": "Övernattningsgröt",
  "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": "nypa salt" }
  ]
}

Du kan också skicka ingredienser som text för automatisk analys:

{
  "name": "Övernattningsgröt",
  "servings": 2,
  "ingredients_text": "160g havregryn, 400ml helmjölk, 60g jordnötssmör, nypa salt"
}

Svar:

{
  "status": "success",
  "data": {
    "name": "Övernattningsgröt",
    "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 helmjölk", "matched_food": "food_9p4q7r", "confidence": 0.99 },
      { "input": "60g jordnötssmör", "matched_food": "food_1a5b8c", "confidence": 0.96 },
      { "input": "nypa salt", "matched_food": "food_6d2e9f", "confidence": 0.88 }
    ]
  }
}

Autocomplete

Snabba förslag för att bygga sökgränssnitt.

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

Parametrar:

Parameter Typ Obligatorisk Beskrivning
q string Ja Delvis sökfråga (minst 2 tecken)
limit integer Nej Max resultat, 1-10 (standard: 5)
country string Nej Prioritera resultat från detta land

Svarstider är optimerade för interaktiv användning — vanligtvis under 50 ms. Autocomplete-endpointen returnerar förenklade livsmedelsobjekt (ID, namn, märke och kategori endast) för snabb rendering.

Hastighetsbegränsningar och prissättning

Gratis nivå

Den gratis nivån är utformad för utveckling, testning och småskaliga applikationer:

Begränsning Värde
Förfrågningar per dag 500
Förfrågningar per minut 30
Livsmedelssökresultat per förfrågan 20
Receptanalys per dag 10
Streckodssökningar per dag 100

Tillväxtnivå

För produktionsapplikationer med måttlig trafik:

Begränsning Värde
Förfrågningar per dag 25,000
Förfrågningar per minut 300
Livsmedelssökresultat per förfrågan 50
Receptanalys per dag 500
Streckodssökningar per dag 5,000
Pris $49/månad

Företagsnivå

För applikationer med hög trafik, white-label-lösningar och anpassade krav:

Funktion Detaljer
Förfrågningar per dag Anpassat (vanligtvis 100K+)
Hastighetsbegränsningar Anpassade
Dedikerad support Inkluderad
SLA 99.9% drifttidsgaranti
Anpassade dataexporter Tillgängliga
Webhook-notifikationer Tillgängliga för datauppdateringar
Pris Kontakta försäljning

Information om hastighetsbegränsningar ingår i varje API-svar via meta-objektet och i HTTP-svarshuvuden (X-RateLimit-Remaining, X-RateLimit-Reset).

Verkliga användningsfall

Fitness- och träningsappar

Om du bygger en fitnessapp och vill lägga till näringsspårning utan att bygga en livsmedelsdatabas från grunden, är Nutrolas API den snabbaste vägen. Använd livsmedelssökningen och streckkodsextensions för att låta användare logga måltider, och receptanalysendpunkten för anpassade måltidsinlägg.

Måltidsplaneringsplattformar

Måltidsplaneringsappar behöver exakt näringsdata för att generera planer som uppfyller specifika makromål. API:ets detaljerade näringsnedbrytning (70+ näringsämnen) möjliggör exakt optimering av måltidsplaner, inte bara kalorier och makron utan även mikronäringsämnen, allergener och kompatibilitet med kostrestriktioner.

Vård och telehälsa

Vårdsplattformar som övervakar patienternas näring kan integrera med API:et för att ge exakt livsmedelsloggning inom sina befintliga gränssnitt. De verifierade datakällorna (USDA, EFSA, tillverkardirekt) uppfyller de noggrannhetsstandarder som krävs för klinisk näringsövervakning.

Restaurang- och livsmedelsservice

Restaurangbeställningsplattformar kan använda API:et för att visa näringsinformation för menyobjekt. Receptanalysendpunkten är särskilt användbar här — skicka in ingredienserna för en rätt och få den kompletta näringsnedbrytningen utan att manuellt beräkna varje post.

Forskning och akademi

Näringsforskare kan använda API:et för att standardisera livsmedelskodning i koststudier. De konsekventa, verifierade uppgifterna minskar mätfel som plågar studier som förlitar sig på deltagarrapporterad näringsdata.

Kodexempel

Python: Sök efter ett livsmedel och få nä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 efter ett livsmedel
search_response = requests.get(
    f"{BASE_URL}/foods/search",
    headers=headers,
    params={"q": "grillad kycklingbröst", "per_page": 3}
)

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

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

# Hämta fullständiga detaljer för det första 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"Kolhydrater: {nutrition['carbohydrates']}g")
print(f"Fett: {nutrition['fat']}g")
print(f"Portionsstorlekar: {food_detail['serving_sizes']}")

JavaScript: Integrering av streckkodsskanning

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("Produkten hittades inte i databasen");
      return null;
    }
    throw new Error(`API-fel: ${response.status}`);
  }

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

// Exempel på användning
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(`  Kolhydrater: ${(product.nutrition_per_100g.carbohydrates * factor).toFixed(1)}g`);
  console.log(`  Fett: ${(product.nutrition_per_100g.fat * factor).toFixed(1)}g`);
}

Swift: Bygga ett Autocomplete-sökfält

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

Bästa praxis för felhantering

API:et använder standard HTTP-statuskoder:

Statuskod Betydelse Vanlig orsak
200 Framgång Begäran genomfördes normalt
400 Felaktig begäran Saknad obligatorisk parameter eller ogiltigt värde
401 Obefogad Ogiltig eller saknad API-nyckel
403 Förbjuden API-nyckeln saknar nödvändig behörighet
404 Ej hittad Livsmedels-ID eller streckkod finns inte i databasen
429 Hastighetsbegränsad För många förfrågningar; kontrollera hastighetsbegränsningshuvuden
500 Serverfel Intern fel; försök igen med exponentiell backoff

När du får ett 429-svar, talar Retry-After-huvudet om hur många sekunder du ska vänta innan du försöker igen. Det rekommenderas starkt att implementera exponentiell backoff för 429- och 500-svar i produktionsapplikationer.

Datakvalitet och uppdateringar

Nutrolas databas uppdateras kontinuerligt. Poster för varumärkesprodukter uppdateras när tillverkare rapporterar ändringar, vanligtvis inom 48 timmar. Poster från statliga databaser synkroniseras kvartalsvis när nya versioner publiceras.

Om din applikation cachar API-svar (vilket vi rekommenderar för prestanda), föreslår vi en cache TTL på 24 timmar för livsmedelsdetaljsvar och 1 timme för sökresultat. Fältet last_verified i livsmedelsdetaljsvar berättar när posten senast bekräftades som korrekt.

För företagskunder erbjuder vi webhook-notifikationer när livsmedelsposter uppdateras, så att din applikation kan ogiltigförklara cachad data proaktivt istället för att vänta på att cache TTL ska löpa ut.

Komma igång

  1. Registrera digdeveloper.nutrola.com — det tar mindre än en minut
  2. Generera en API-nyckel med de behörigheter du behöver
  3. Gör din första begäran med hjälp av curl-exemplen ovan
  4. Utforska de interaktiva dokumentendeveloper.nutrola.com/docs där du kan testa endpoints direkt i din webbläsare
  5. Gå med i utvecklarsamhället på vår Discord-server för support, funktionsförfrågningar och för att se vad andra utvecklare bygger

Om du har frågor, stöter på problem eller vill diskutera en företagsintegration, kontakta vårt utvecklarrelations-team på api@nutrola.com.

FAQ

Är Nutrola API gratis att använda?

Ja, det finns en gratis nivå som inkluderar 500 förfrågningar per dag. Detta är lämpligt för utveckling, testning och småskaliga applikationer. För produktionsapplikationer med högre trafik börjar tillväxtnivån på $49 per månad med 25 000 dagliga förfrågningar. Företagsplaner med anpassade begränsningar finns tillgängliga för användningsfall med hög trafik.

Vilka dataformat stöder API:et?

API:et använder uteslutande JSON för både begärningar och svar. Alla endpoints accepterar standardfrågeparametrar för GET-förfrågningar och JSON-begärningskroppar för POST-förfrågningar. Svarskodningen är UTF-8, vilket hanterar livsmedelsnamn på alla stödda språk korrekt.

Hur noggrant är näringsdata som tillhandahålls av API:et?

Varje post i Nutrolas databas går igenom en flerlagers verifieringsprocess som inkluderar validering av statliga källor, korsreferens av tillverkarens data, AI-drivna statistiska kontroller och granskning av mänskliga experter. Vår noggrannhetsstandard är 97,4% jämfört med laboratorieanalys, jämfört med en branschgenomsnitt på 70-85% för crowdsourcade databaser. Varje livsmedelspost inkluderar ett fält för confidence_score som anger vår säkerhetsnivå.

Kan jag använda API:et för att bygga en kommersiell produkt?

Ja. API:et är utformat för kommersiellt bruk. Den gratis nivån kan användas för kommersiella produkter inom dess hastighetsbegränsningar. Tillväxt- och företagsplaner inkluderar kommersiella användningsrättigheter utan begränsningar på typ av applikation. Granska användarvillkoren på developer.nutrola.com för fullständiga detaljer.

Stöder API:et livsmedel från länder utanför USA?

Ja. Databasen täcker varumärkesprodukter från 47 länder och generiska livsmedel från över 120 kök. Använd country-parametern på sökendpoints för att prioritera resultat från en specifik marknad. Streckodssökningar matchar automatiskt produkten till rätt regional formulering.

Hur hanterar jag livsmedel som inte finns i databasen?

Om en streckodssökning returnerar en 404 kan du falla tillbaka på en textsökning med produktnamnet. Om ingen av dessa metoder hittar livsmedlet kan du skicka in det för tillägg via utvecklarportalen. Livsmedel som skickas in av API-partner prioriteras för verifiering och läggs vanligtvis till inom 72 timmar. Företagskunder kan begära batchtillägg för stora produktkataloger.

Finns det SDK:er eller klientbibliotek tillgängliga?

Vi tillhandahåller officiella klientbibliotek för Python (via pip: pip install nutrola), JavaScript/TypeScript (via npm: npm install @nutrola/api) och Swift (via Swift Package Manager). Dessa bibliotek hanterar autentisering, hastighetsbegränsningar, omförsök och svarsanalyser. Gemenskapsunderhållna bibliotek finns tillgängliga för Go, Ruby och PHP.

Redo att förvandla din näringsspårning?

Gå med tusentals som har förvandlat sin hälsoresa med Nutrola!