SDKs & Guides
Python Flask
Build a nutrition API wrapper with Flask
Create a Flask backend that wraps ChowAPI for food search, barcode lookup, and nutrition data.
Prerequisites
- Python 3.9+
- Flask
- ChowAPI key
Installation
1
Install dependencies
pip install flask requests2
Set your API key
export CHOWAPI_KEY=chow_live_YOUR_KEYCode examples
Search foods endpoint
Create a Flask route that wraps the ChowAPI search.
app.py
import os
import requests
from flask import Flask, request, jsonify
app = Flask(__name__)
API_BASE = "https://api.chowapi.dev/v1"
API_KEY = os.environ["CHOWAPI_KEY"]
@app.route("/api/search")
def search_foods():
query = request.args.get("q", "")
if len(query) < 2:
return jsonify({"error": "Query too short"}), 400
res = requests.get(
f"{API_BASE}/search",
params={"q": query, "limit": 10},
headers={"Authorization": f"Bearer {API_KEY}"},
)
data = res.json()
return jsonify({
"results": [
{
"name": food["name"],
"brand": food.get("brand"),
"calories": food["nutrients"]["calories"],
"protein": food["nutrients"]["protein_g"],
"carbs": food["nutrients"]["carbs_g"],
"fat": food["nutrients"]["fat_g"],
}
for food in data["results"]
]
})Python Flask Pattern
Caching with Flask-Caching
Cache search results to reduce API calls.
app.py
from flask_caching import Cache
cache = Cache(app, config={"CACHE_TYPE": "simple"})
@app.route("/api/search")
@cache.cached(timeout=300, query_string=True) # Cache for 5 minutes
def search_foods():
query = request.args.get("q", "")
res = requests.get(
f"{API_BASE}/search",
params={"q": query, "limit": 10},
headers={"Authorization": f"Bearer {API_KEY}"},
)
return jsonify(res.json())