nutriapi

REST API untuk data nutrisi pangan Indonesia — 9.938 data dari TKPI & USDA.

Base URL https://nutriapi.konfig.id

Semua endpoint mengembalikan Content-Type: application/json dan mendukung CORS.

Health Check

GET /health Status server
200 OK
{"status":"ok"}

List & Paginasi

GET /foods Coba →

Parameter Query

ParamTipeDefaultDeskripsi
_pagenumber1Nomor halaman
_limitnumber20Data per halaman (max 100)
200 Array FoodRecord[]

Header Respons

HeaderDeskripsi
X-Total-CountTotal data
X-Total-PagesTotal halaman
X-PageHalaman saat ini
X-LimitData per halaman
GET /foods?_page=1&_limit=2

[
  { "code": "AP001", "name": "Abon Ayam", "calories": 443, "protein": 24.2, "fat": 28.4, "carbo": 28.3, "fiber": 0 },
  { "code": "AP002", "name": "Abon Ayam (Daging Asap)", "calories": 443, "protein": 24.2, "fat": 28.4, "carbo": 28.3, "fiber": 0 }
]

X-Total-Count: 9938
X-Total-Pages: 4969
X-Page: 1
X-Limit: 2

Cari Berdasarkan Kode

GET /foods?code={code} Coba →
ParamTipeDeskripsi
codestringKode unik makanan, cth: AP001
200 Object FoodRecord
GET /foods?code=AP001

{
  "code": "AP001",
  "name": "Abon Ayam",
  "calories": 443,
  "protein": 24.2,
  "fat": 28.4,
  "carbo": 28.3,
  "fiber": 0
}
404 Kode tidak ditemukan
{"error":"Food with code 'XXXXX' not found"}

Pencarian

GET /foods?name_like={keyword} Coba →
GET /search?q={keyword} Coba →

Kedua endpoint menghasilkan output yang identik.

ParamTipeDefaultDeskripsi
name_like / qstringKata kunci (case-insensitive)
_pagenumber1Halaman
_limitnumber20Per halaman (max 100)
200 Array FoodRecord[] + header paginasi
GET /foods?name_like=nasi&_limit=2

[
  { "code": "TK096", "name": "Nasi Putih", "calories": 204, "protein": 2.3, "fat": 0.4, "carbo": 40.6, "fiber": 0.2 },
  { "code": "TK097", "name": "Nasi Gurih", "calories": 264, "protein": 3.2, "fat": 8.5, "carbo": 39.9, "fiber": 0.3 }
]

X-Total-Count: 18
X-Total-Pages: 9
X-Page: 1
X-Limit: 2
400 /search tanpa parameter q
{"error":"Missing 'q' query parameter. Example: /search?q=ayam"}

Struktur FoodRecord

FieldTipeSatuanDeskripsi
codestringKode unik makanan
namestringNama makanan
caloriesnumberkcalEnergi
proteinnumbergProtein
fatnumbergLemak total
carbonumbergKarbohidrat
fibernumbergSerat pangan
Nilai nutrisi yang tidak tersedia dikembalikan sebagai 0.

Contoh Pemakaian

cURL
curl https://nutriapi.konfig.id/foods?code=AP001

# Dengan paginasi
curl "https://nutriapi.konfig.id/foods?_page=1&_limit=5"

# Cari makanan
curl "https://nutriapi.konfig.id/foods?name_like=tempe"
JavaScript
// Cari berdasarkan nama
const res = await fetch("https://nutriapi.konfig.id/foods?name_like=ayam");
const data = await res.json();

// Akses header paginasi
const total = res.headers.get("X-Total-Count");
console.log(`Ditemukan ${total} data`);
console.log(data);

// Ambil satu data berdasarkan kode
const single = await fetch("https://nutriapi.konfig.id/foods?code=AP001")
  .then(r => r.json());
console.log(single.name); // "Abon Ayam"
Python
import requests

# List dengan paginasi
r = requests.get("https://nutriapi.konfig.id/foods", params={"_page": 1, "_limit": 5})
data = r.json()
print(f"Total: {r.headers['X-Total-Count']}")

# Cari berdasarkan kode
r = requests.get("https://nutriapi.konfig.id/foods", params={"code": "AP001"})
print(r.json())

# Cari berdasarkan nama
r = requests.get("https://nutriapi.konfig.id/search", params={"q": "tempe"})
for food in r.json():
    print(food["name"], "-", food["calories"], "kcal")