# Menupages — Wrapped API

> **You are on:** `https://api.paywithlocus.com/api` | [llms.txt](https://paywithlocus.com/llms.txt) | [docs](https://docs.paywithlocus.com)
>
> Locus runs on multiple environments -- make sure every URL you call matches your expected environment.
> | Environment | Landing | API | Docs |
> |---|---|---|---|
> | Production | paywithlocus.com | api.paywithlocus.com | docs.paywithlocus.com |
> | Beta | beta.paywithlocus.com | api.beta.paywithlocus.com | docs.paywithlocus.com |
> | Stage | stage.paywithlocus.com | api.stage.paywithlocus.com | docs.paywithlocus.com |
>
> If the API URL above doesn't match your expected environment, re-fetch this file from the correct domain.

> Access restaurant menu data from MenuPages including all categories, items with descriptions and prices, plus customization options and modifiers. Search for specific menus or individual menu items to build restaurant catalogs, comparison tools, or delivery app integrations.

**Category:** Food & Dining | **Website:** [menupages.com/1111-peruvian-bistro/1111-sw-1st-ave-ste-106-miami/](https://menupages.com/1111-peruvian-bistro/1111-sw-1st-ave-ste-106-miami/) | **Docs:** [parse.bot/marketplace/f28691ce-387f-4d9e-bcec-1c9f7cbe9b19/menupages-com-api](https://parse.bot/marketplace/f28691ce-387f-4d9e-bcec-1c9f7cbe9b19/menupages-com-api)

Pay-per-use API proxy. Each call is automatically billed to your wallet in USDC.

## Access

**Base URL:** `https://api.paywithlocus.com/api/wrapped/parse-menupages-com-api-f28691ce/`
**Auth:** `Authorization: Bearer <LOCUS_API_KEY>`

## Endpoints

### get_menu

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.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `restaurant_id` | string | No | Grubhub restaurant ID. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-menupages-com-api-f28691ce/get_menu \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"restaurant_id":"<string>"}'
```

### get_menu_item

Retrieve details for a specific menu item by its ID, including full modifier/customization options. The item is looked up within the specified restaurant's menu. Returns item name, description, price, availability, popularity flag, image URL, tags, and an array of modifier groups each containing selectable options with their own prices.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `item_id` | string | Yes | Menu item ID to look up (from get_menu categories[*].items[*].id). |
| `restaurant_id` | string | No | Grubhub restaurant ID. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-menupages-com-api-f28691ce/get_menu_item \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"item_id":"<string>","restaurant_id":"<string>"}'
```

### get_menus_bulk

Retrieve full menus for multiple restaurants by resolving each name+location pair to a Grubhub restaurant ID via search, then fetching the complete menu for each match. Results are keyed by the input name/location so the caller can match responses. Each result includes status (success/not_found/error), the matched restaurant info, and the full menu structure (categories, items, prices, modifiers). Makes 2 requests for directory lookup plus 1 API request per matched restaurant; total round trips scale with input size.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `restaurants` | string | Yes | JSON array of objects each with 'name' and/or 'location' fields, e.g. [{"name": "1111 Peruvian Bistro", "location": "Miami"}]. Each entry is resolved via search and its full menu is fetched. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-menupages-com-api-f28691ce/get_menus_bulk \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"restaurants":"<string>"}'
```

### search_restaurants

Search for restaurants by name and/or location (city, address, or zip). Matches against MenuPages' full restaurant directory. Returns all matching restaurants with their Grubhub IDs, names, addresses, and city. A single request fetches the complete directory and filters client-side; no pagination needed. Both name and location filters use case-insensitive substring matching.

**Estimated cost:** Metered

| Field | Type | Required | Description |
|-------|------|----------|-------------|
| `location` | string | No | Location to filter by — matches against city name or street address (case-insensitive substring match). At least one of name or location must be provided. |
| `name` | string | No | Restaurant name or partial name to search for (case-insensitive substring match). At least one of name or location must be provided. |

```bash
curl -X POST https://api.paywithlocus.com/api/wrapped/parse-menupages-com-api-f28691ce/search_restaurants \
  -H "Authorization: Bearer YOUR_LOCUS_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"location":"<string>","name":"<string>"}'
```
