Uber Eats API: Get restaurant menu
Gets the delivery menu, prices, rating and delivery details of the nearest matching Uber Eats restaurant at a city or address. For a city, a central listed address is used; delivery fees may reflect guest promotions, and rating counts may be rounded.
Unofficial. Not affiliated with or endorsed by Uber Eats.
Inputs
Values from the run on Oct 31, 2026, shown under Output.
- Location, required
location City or delivery address, for example Austin, TX or 1100 S Lamar Blvd, Austin, TX.
Austin, TX
- Restaurant, required
restaurant Restaurant name or Uber Eats store link, for example Shake Shack.
Shake Shack
Input as JSON
{ "location": "Austin, TX", "restaurant": "Shake Shack"}Output
{ "address": "1100 South Lamar Blvd, Austin, TX 78704", "store_id": "6bd52e2e-ccbd-4a3f-bea7-386c25084405", "menu_items": [ { "price": 19.47, "item_name": "The Shackburger Meal", "photo_link": "https://tb-static.uber.com/prod/image-proc/processed_images/980d69553a39bea296a836c57e6a5d03/6c3cd142fc812204b1336bf9f7b1f071.jpeg" , "description": "The ShackBurger Meal includes a single ShackBurger, made with 100% Angus Beef, our signature crispy crinkle cut fries and a large Coke product. (Contains: Milk, Egg, Wheat, Soy, Sesame) *Approximate weight per patty is 4oz before cooking", "menu_section": "Featured items", "currency_code": "USD" }, { "price": 9.39, "item_name": "ShackBurger", "photo_link": "https://tb-static.uber.com/prod/image-proc/processed_images/f037033bf3f85a7c4ee9b93b27b1b2d9/6c3cd142fc812204b1336bf9f7b1f071.jpeg" , "description": "Angus beef cheeseburger with lettuce, tomato, and ShackSauce on a toasted potato bun (Contains: Milk, Egg, Wheat, Soy, Sesame)", "menu_section": "Featured items", "currency_code": "USD" }, { "price": 9.99, "item_name": "Chicken Shack", "photo_link": "https://tb-static.uber.com/prod/image-proc/processed_images/761f31ed1a8b3059cbe97ebe1e9adac1/6c3cd142fc812204b1336bf9f7b1f071.jpeg" , "description": "Antibiotic-free, hand-breaded, white-meat chicken breast over lettuce, pickles, and buttermilk herb mayo on a toasted potato bun (Contains: Milk, Egg, Wheat, Sesame)", "menu_section": "Featured items", "currency_code": "USD" } ], "store_link": "https://www.ubereats.com/store/shake-shack-south-lamar/a9UuLsy9Sj--pzhsJQhEBQ" , "star_rating": 4.6, "delivery_fee": 0, "restaurant_name": "Shake Shack (South Lamar)", "number_of_ratings": 15000, "estimated_delivery_time": "17–31 Min", "delivery_fee_currency_code": "USD"}Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"ubereats.com/get_restaurant_menu","input":{"location":"Austin, TX","restaurant":"Shake Shack"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "ubereats.com/get_restaurant_menu" , "input": { "location": "Austin, TX", "restaurant": "Shake Shack" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "ubereats.com/get_restaurant_menu" , "input": { "location": "Austin, TX", "restaurant": "Shake Shack" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run ubereats.com/get_restaurant_menu# with {"location":"Austin, TX","restaurant":"Shake Shack"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "restaurant", "location" ], "properties": { "location": { "type": "string", "description": "City or delivery address, for example Austin, TX or 1100 S Lamar Blvd, Austin, TX." }, "restaurant": { "type": "string", "description": "Restaurant name or Uber Eats store link, for example Shake Shack." } }}Output schema
{ "type": "object", "required": [ "restaurant_name", "address", "star_rating", "number_of_ratings", "delivery_fee", "delivery_fee_currency_code", "estimated_delivery_time", "store_link", "store_id", "menu_items" ], "properties": { "address": { "type": [ "string", "null" ] }, "store_id": { "type": [ "string", "null" ] }, "menu_items": { "type": "array", "items": { "type": "object", "required": [ "menu_section", "item_name", "description", "price", "currency_code", "photo_link" ], "properties": { "price": { "type": "number" }, "item_name": { "type": "string" }, "photo_link": { "type": [ "string", "null" ] }, "description": { "type": [ "string", "null" ] }, "menu_section": { "type": "string" }, "currency_code": { "type": "string" } } } }, "store_link": { "type": "string" }, "star_rating": { "type": [ "number", "null" ] }, "delivery_fee": { "type": [ "number", "null" ] }, "restaurant_name": { "type": [ "string", "null" ] }, "number_of_ratings": { "type": [ "integer", "null" ], "description": "Displayed count; a rounded count such as 15,000+ is returned as 15000." }, "estimated_delivery_time": { "type": [ "string", "null" ] }, "delivery_fee_currency_code": { "type": "string" } }}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
ubereats.com/get_restaurant_menu- Returns
- restaurant name, address, rating, delivery fee, delivery time, store link, menu items with prices
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method ubereats.com/get_restaurant_menu with the inputs above.
Ask your agent
- What's on the menu at the Chipotle closest to 742 Evergreen Terrace, Springfield, IL, and how much is delivery?
- Pull up the Uber Eats menu and prices for Shake Shack in Austin, TX
- I'm in Denver — how long would delivery from Sweetgreen take, and what are their salad prices?
- Show me the rating, delivery fee and full item list for Joe's Pizza near 350 5th Ave, New York, NY on ubereats.com
- Need prices for everything at the nearest Panda Express to downtown Seattle so I can plan a group order
See more
All Uber Eats methodsFind restaurants delivering to an address in Uber Eats guest browsing order. Fees can be conditional for new users; displayed rating counts may be rounded.
ubereats.com/search_restaurantsFinds DoorDash restaurants delivering to a street address or ZIP code, optionally for a cuisine or dish, in DoorDash's search order. Fees and times reflect guest offers; the numeric fee is null when DoorDash shows no amount.
doordash.com/search_restaurantsGets a restaurant's public OpenTable profile by name or OpenTable link and city, including ratings, details, menu and photo links. Ratings and other fields can be missing when the restaurant does not publish them.
opentable.com/get_restaurantFinds the nearest open Chipotle that takes online orders for a city, address, or ZIP code and returns its address, distance, today's hours and the pickup menu with prices, calories and photos.
chipotle.com/get_menuFinds McDonald's restaurants within 50 miles of a US city, address or ZIP code, nearest first. Each result includes today's hours, services and directions. Open-now status follows the listed hours.
mcdonalds.com/search_restaurantsLooks up a McDonald's menu item by name on the US, UK or Canada site and returns its nutrition, allergens, ingredients and photo link.
mcdonalds.com/get_menu_item_nutritionLooks up a Starbucks menu item by name. Returns its description, standard recipe, size-specific nutrition, ingredients, allergens and photo.
starbucks.com/get_menu_itemLists Tripadvisor's ranked restaurants in a city from the first results page, optionally filtered by cuisine and price category. Sponsored listings are left out; up to 30 restaurants with rating, review count, cuisines, price range and address.
tripadvisor.com/list_top_restaurants