Dining API
CS50’s Dining API provides programmatic access via HTTP to data from Harvard University Dining Services (HUDS), including menus for undergraduate dining halls, graduate dining halls, and some cafes on campus. The API provides endpoints for:
Categories
Getting Categories
- GET /dining/categories
- Synopsis
Returns a JSON array of objects, each of which represents a category of food. For example, https://api.cs50.io/dining/categories.
- Status Codes
200 OK – Always returned.
- Response JSON Array of Objects
id (integer) – A category’s unique identifer. Usable as a primary key in a databse.
name (string) – A category’s name.
Example: Getting All Categories
https://api.cs50.io/dining/categories
import requests # Get categories response = requests.get("https://api.cs50.io/dining/categories") # Convert JSON to list of dicts categories = response.json() # Print each category's name for category in categories: print(category["name"])
curl "https://api.cs50.io/dining/categories"
Getting a Category
- GET /dining/categories/(id)
- Synopsis
Returns a JSON object that represents a category, where id is that category’s unique identifier. For example, https://api.cs50.io/dining/categories/32 represents Fresh Fruit, whereas https://api.cs50.io/dining/categories/62 represents Daily Soups. Yum!
- Parameters
id – A location’s unique identifier.
- Status Codes
200 OK – Returned if a category with id exists.
404 Not Found – Returned if no category with id exists.
- Response JSON Object
id (integer) – A category’s unique identifer. Usable as a primary key in a databse.
name (string) – A category’s name.
Example: Getting Fresh Fruit
https://api.cs50.io/dining/categories/32
import requests # Get category response = requests.get("https://api.cs50.io/dining/categories/32") # Convert JSON to dict category = response.json() # Print category's name print(category["name"])
curl "https://api.cs50.io/dining/categories/32"
Locations
Getting Locations
- GET /dining/locations
- Synopsis
Returns a JSON array of objects, each of which represents a location. For example, https://api.cs50.io/dining/locations.
- Status Codes
200 OK – Always returned.
- Response JSON Array of Objects
id (integer) – A location’s unique identifer. Usable as a primary key in a databse.
name (string) – A location’s name.
Example: Getting All Locations
https://api.cs50.io/dining/locations
import requests # Get locations response = requests.get("https://api.cs50.io/dining/locations") # Convert JSON to list of dicts locations = response.json() # Print each location's name for location in locations: print(location["name"])
curl "https://api.cs50.io/dining/locations"
Getting a Location
- GET /dining/locations/(id)
- Synopsis
Returns a JSON object that represents a location, where id is that location’s unique identifier. For example, https://api.cs50.io/dining/locations/30 represents Annenberg Hall, while https://api.cs50.io/dining/locations/7 represents Dunster and Mather House. Because some dining halls (e.g., Dunster’s and Mather’s) share kitchens (and thus menus), they also share an id (and name) in the API.
- Parameters
id – A location’s unique identifier.
- Status Codes
200 OK – Returned if a location with id exists.
404 Not Found – Returned if no location with id exists.
- Response JSON Object
id (integer) – A location’s unique identifer. Usable as a primary key in a databse.
name (string) – A location’s name.
Example: Getting Annenberg Hall
https://api.cs50.io/dining/locations/7
import requests # Get location response = requests.get("https://api.cs50.io/dining/locations/30") # Convert JSON to dict location = response.json() # Print location's name print(location["name"])
curl "https://api.cs50.io/dining/locations/7"
Recipes
Getting Recipes
- GET /dining/recipes
- Synopsis
Returns a JSON array of objects, each of which represents a recipe. For example, https://api.cs50.io/dining/recipes.
- Status Codes
200 OK – Always returned.
- Response JSON Array of Objects
id (integer) – A recipe’s unique identifer. Usable as a primary key in a databse.
name (string) – A recipe’s name.
Example: Getting All Recipes
https://api.cs50.io/dining/recipes
import requests # Get categories response = requests.get("https://api.cs50.io/dining/recipes") # Convert JSON to list of dicts recipes = response.json() # Print each recipe's name for recipe in recipes: print(recipe["name"])
curl "https://api.cs50.io/dining/recipes"
Getting a Recipe
- GET /dining/recipes/(id)
- Synopsis
Returns a JSON object that represents a recipe, where id is that recipe’s unique identifier. For example, https://api.cs50.io/dining/recipes/22011 represents Kabocha Squash Soup, whereas https://api.cs50.io/dining/recipes/22045 represents Wheat Tortillas. Yum!
- Parameters
id – A recipe’s unique identifier.
- Status Codes
200 OK – Returned if a recipe with id exists.
404 Not Found – Returned if no recipe with id exists.
- Response JSON Object
id (integer) – A recipe’s unique identifer. Usable as a primary key in a databse.
name (string) – A recipe’s name.
Example: Getting Kabocha Squash Soup
https://api.cs50.io/dining/recipes/22011
import requests # Get recipe response = requests.get("https://api.cs50.io/dining/recipes/22011") # Convert JSON to dict recipe = response.json() # Print recipe's name print(recipe["name"])
curl "https://api.cs50.io/dining/recipes/22011"
Acknowledgements
Special thanks to CS50’s friends at HUDS and HUIT for this API’s data!