Discover/MenuPages API
live

MenuPages APImenupages.com

Retrieve full restaurant menus from MenuPages via API. Get categories, items, prices, and modifier groups including customization options for any restaurant.

Endpoint health
verified 2d ago
get_menu
get_menu_item
2/2 passing latest checkself-healing
Endpoints
2
Updated
26d ago

What is the MenuPages API?

The MenuPages API gives developers structured access to restaurant menu data across 2 endpoints. Use get_menu to pull a complete menu organized by category — including item counts, prices, and modifier groups — or use get_menu_item to fetch granular details for a single item, including availability status, popularity flag, image URL, and all customization options. Both endpoints return data powered by the Grubhub restaurant network.

Try it
Grubhub restaurant ID.
api.parse.bot/scraper/55cbca2b-9d74-4752-9abd-feb18551c984/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/55cbca2b-9d74-4752-9abd-feb18551c984/get_menu?restaurant_id=337444' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

Typed, relational, agent-ready

A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.

  • Fully typed · autocompletes
  • Objects link to objects
  • Typed errors & pagination

Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:

uv add parse-sdk
uv run parse init
uv run parse add --marketplace menupages-com-api

uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.

from parse_apis.menupages_restaurant_menu_api import MenuPages, Menu, MenuItem, Category, Price, ItemNotFound

client = MenuPages()

# Fetch the full menu for a restaurant
restaurant = client.restaurant(id="337444")
menu = restaurant.menu()

print(menu.restaurant.name, menu.restaurant.phone)
print(menu.total_categories, menu.total_items)

for category in menu.categories:
    print(category.name, category.item_count)
    for item in category.items:
        print(item.name, item.price.amount_dollars, item.available)

# Get detailed info for a specific menu item with modifiers
item = client.menuitems.get(item_id="23493433", restaurant_id="337444")
print(item.name, item.description, item.category)
print(item.price.amount_cents, item.price.currency)

for modifier in item.modifiers:
    print(modifier.name, modifier.required, modifier.min_selections, modifier.max_selections)
    for option in modifier.options:
        print(option.name, option.price.amount_dollars, option.available)
All endpoints · 2 totalmissing one? ·

Retrieve the full menu for a restaurant including all categories, items, prices, and modifier/customization options. Returns restaurant metadata (name, address, phone, cuisines, coordinates) alongside the complete menu structure organized by category. Each category contains its items with pricing, availability, popularity flags, images, and nested modifier groups. A single request fetches the entire menu; no pagination needed.

Input
ParamTypeDescription
restaurant_idstringGrubhub restaurant ID.
Response
{
  "type": "object",
  "fields": {
    "categories": "array of category objects each containing id, name, item_count, and items array with full item details",
    "restaurant": "object containing id, name, address (street/city/state/zip), phone, cuisines array, logo_url, latitude, longitude",
    "total_items": "integer count of all menu items across categories",
    "total_categories": "integer count of menu categories"
  },
  "sample": {
    "data": {
      "categories": [
        {
          "id": "2019114",
          "name": "Ceviches",
          "items": [
            {
              "id": "23493433",
              "name": "Ceviche de Aji Amarillo or Traditional",
              "tags": [],
              "price": {
                "currency": "USD",
                "amount_cents": 1111,
                "amount_dollars": 11.11
              },
              "popular": false,
              "category": "Ceviches",
              "available": true,
              "image_url": "https://media-cdn.grubhub.com/image/upload/awcahxog0wciotht6auf.jpg",
              "modifiers": [
                {
                  "id": "8977941",
                  "name": "Choose a style",
                  "options": [
                    {
                      "id": "1344127647",
                      "name": "Ceviche Traditional",
                      "price": {
                        "currency": "USD",
                        "amount_cents": 0,
                        "amount_dollars": 0
                      },
                      "default": false,
                      "available": true
                    }
                  ],
                  "required": true,
                  "max_selections": 1,
                  "min_selections": 1
                }
              ],
              "description": "White fish, cancha, choclo, sweet potato in your choice of leche de tigre: traditional or aji amarillo."
            }
          ],
          "item_count": 5
        }
      ],
      "restaurant": {
        "id": "337444",
        "name": "1111 Peruvian Bistro",
        "phone": "7866159633",
        "address": {
          "zip": "33130-5401",
          "city": "Miami",
          "state": "FL",
          "street": "1111 SW 1st Ave Ste 106"
        },
        "cuisines": [
          "Asian",
          "Dinner",
          "Latin American"
        ],
        "latitude": "25.763151",
        "logo_url": "https://res.cloudinary.com/grubhub/image/upload/v1471360634/ss03fqzrj78bckxgz8uv.png",
        "longitude": "-80.194576"
      },
      "total_items": 47,
      "total_categories": 9
    },
    "status": "success"
  }
}

About the MenuPages API

What the API Returns

The get_menu endpoint accepts a restaurant_id (Grubhub restaurant ID) and returns the full menu structure for that restaurant. The response includes a restaurant object with name, street address, city, state, zip, phone, cuisine tags, logo URL, latitude, and longitude. The categories array contains each menu section with its id, name, item_count, and a nested items array. Summary counts (total_items, total_categories) let you size the dataset before iterating.

Item-Level Detail

get_menu_item takes an item_id (found at categories[*].items[*].id in the get_menu response) and the same optional restaurant_id. It returns the item's name, description, price (as both amount_cents and amount_dollars with a currency field), available boolean, popular boolean, image_url, and tags array. The modifiers array is the key addition here: each modifier group carries id, name, min_selections, max_selections, required, and an options array — exactly what you need to reconstruct an ordering interface or build a modifier-aware price calculator.

Coverage and Data Shape

MenuPages is powered by Grubhub's restaurant catalog, so coverage skews toward US metro areas with Grubhub delivery presence. The restaurant object includes coordinates (latitude, longitude), making it straightforward to combine menu data with geo-filtering in your own application. The cuisines array on the restaurant object allows downstream categorization without additional lookups.

Reliability & maintenanceVerified

The MenuPages API is a managed, monitored endpoint for menupages.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when menupages.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.

This isn't an official menupages.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.

Last verified
2d ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Build a menu comparison tool using price.amount_dollars across multiple restaurants sharing a cuisine type.
  • Reconstruct a delivery ordering UI by consuming modifiers groups with min_selections, max_selections, and required flags.
  • Populate a restaurant catalog with structured address, phone, and coordinate data from the restaurant object.
  • Flag popular items in a recommendation widget using the popular boolean from get_menu_item.
  • Detect out-of-stock or unavailable items in near-real-time using the available field per item.
  • Calculate full order totals including modifiers by iterating modifiers[*].options for each selected item.
  • Geocode-enrich a restaurant database by extracting latitude and longitude from the get_menu restaurant object.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo1005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min

One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does MenuPages have an official developer API?+
MenuPages itself does not publish a public developer API. Grubhub, which powers MenuPages, offers a merchant-facing integration program, but it is not a general-purpose data API available to developers. This Parse API provides structured access to the same menu data.
What does the `modifiers` array in `get_menu_item` actually contain?+
Each element in modifiers represents one customization group (e.g., "Choose a size" or "Add toppings"). It includes the group name, a required boolean, min_selections and max_selections integers that define selection rules, and an options array listing each choice. This is sufficient to render a fully interactive modifier UI or validate order configurations server-side.
Can I search for restaurants by name, location, or cuisine rather than by a known restaurant ID?+
Not currently. Both endpoints accept a restaurant_id as their primary lookup key, so they are designed for menu retrieval once you have an ID. You can fork this API on Parse and revise it to add a restaurant search endpoint that resolves names or locations to IDs.
Does the API return reviews, ratings, or delivery fees for a restaurant?+
No. The response covers menu structure and restaurant metadata (name, address, phone, cuisines, coordinates, logo). Reviews, ratings, delivery fees, and hours are not part of the current response shape. You can fork this API on Parse and revise it to add an endpoint targeting that data.
How fresh is the menu data, and is pagination supported for large menus?+
Menu data reflects the current published menu on MenuPages at the time of the request — there is no built-in cache TTL or scheduled refresh exposed to the caller. The get_menu response returns all categories and items in a single call with no pagination; very large menus are returned in full.
Page content last updated . Spec covers 2 endpoints from menupages.com.
Related APIs in Food DiningSee all →
postmates.com API
Browse and search Postmates restaurants to discover menus, items, and detailed restaurant information all in one place. Get category suggestions, view complete menus, and access specific item details to find exactly what you're looking for.
ubereats.com API
Search for restaurants by cuisine or location and browse their menus, prices, ratings, and delivery times. Get detailed information about specific restaurants and menu items to find exactly what you want to order.
food.grab.com API
Search for GrabFood restaurants by location and retrieve complete menu listings with prices and details for any store. Access real-time restaurant information and full dining options using a guest token obtained from the browser.
mcdonalds.com API
Browse McDonald's full menu and retrieve detailed nutritional information, allergens, and ingredients for any item. Get comprehensive product details to support menu exploration and nutrition-aware applications.
chownow.com API
Search for nearby restaurants, view their operating hours and delivery zones, and browse complete menus with all items, modifiers, and prices. Access detailed restaurant information and locations to find exactly what you're looking for on the ChowNow marketplace.
doordash.com API
Search for restaurants on DoorDash and view their menus, hours, and current promotions to find exactly what you're looking for. Get detailed information about any restaurant including pricing, availability, and active discounts across the US.
pedidosya.com.ar API
Browse restaurants and menus available in Argentine cities through PedidosYa, search for specific restaurants by name or food category, and retrieve complete menu offerings including items, prices, and available options.
resy.com, opentable.com API
Search and compare restaurants across Resy and OpenTable by cuisine, location, and price range, then sort results by price or ratings to find the best dining option. Retrieve comprehensive restaurant details including addresses, contact information, descriptions, and customer ratings all in one place.