DoorDash
Overview
Food delivery marketplace — search restaurants, browse menus, view order history, manage cart.
Workflows
Search and browse menu
searchRestaurants(query) → pick restaurant → storeId
getRestaurantMenu(storeId) → browse categories → pick item → itemId, name, displayPrice, menuBook.id
Add to cart, then remove
searchRestaurants(query) → storeId
getRestaurantMenu(storeId) → pick item → itemId, name (→ itemName), displayPrice (→ unitPrice in cents), menuBook.id (→ menuId)
addToCart(storeId, itemId, itemName, currency='USD', unitPrice, menuId, quantity) → addCartItemV2.id (→ cartId), addCartItemV2.orders[0].orderItems[0].id (→ itemId for remove)
removeFromCart(cartId, itemId) → updated cart (subtotal/orders are null when cart becomes empty)
Review past orders
getOrderHistory(limit) → order list with items, totals, timestamps
Operations
| Operation |
Intent |
Key Input |
Key Output |
Notes |
| searchRestaurants |
search restaurants by keyword |
query |
name, storeId, categories, imageUrl |
entry point; includes non-store results (check resultType) |
| getRestaurantMenu |
get store detail + full menu |
storeId ← searchRestaurants |
storeHeader, menuBook (id → menuId), itemLists (id, name, displayPrice) |
optional: menuId, fulfillmentType |
| getOrderHistory |
list past orders |
limit, offset |
orders (store, items, grandTotal, timestamps) |
paginated; requires auth |
| addToCart |
add menu item to cart |
storeId ← searchRestaurants; itemId, itemName, unitPrice (cents), menuId ← getRestaurantMenu; currency='USD' |
addCartItemV2.id (cartId), addCartItemV2.orders[0].orderItems[0].id |
write op; all six input fields are server-required |
| removeFromCart |
remove item from cart |
cartId, itemId ← addToCart |
removeCartItemV2 (subtotal/orders null if cart now empty) |
write op; mutation takes cartId/itemId directly — no RemoveCartItemInput wrapper |
Quick Start
# Search for restaurants
openweb doordash exec searchRestaurants '{"query": "pizza"}'
# Get a restaurant's menu (returns itemId, name, displayPrice, menuBook.id)
openweb doordash exec getRestaurantMenu '{"storeId": "245613"}'
# View recent orders
openweb doordash exec getOrderHistory '{"limit": 5}'
# Add item to cart — all six fields required by upstream
openweb doordash exec addToCart '{"addCartItemInput": {"storeId": "245613", "itemId": "23864478062", "itemName": "12 Inch Plain Cheese Pizza", "currency": "USD", "unitPrice": 1440, "menuId": "57979746", "quantity": 1}}'
# Remove item from cart (cartId + itemId from addToCart response)
openweb doordash exec removeFromCart '{"cartId": "<addCartItemV2.id>", "itemId": "<addCartItemV2.orders[0].orderItems[0].id>"}'
Known Limitations
addCartItemInput requires six fields (storeId, itemId, itemName, currency, unitPrice in cents, menuId) — partial input returns BAD_USER_INPUT. All values come from getRestaurantMenu; currency is "USD" for US accounts.
removeFromCart returns nulls for subtotal/currencyCode/fulfillmentType/restaurant/orders when the removed item was the last one in the cart (cart UUID still returned).
formattedAddress in order history is often null.
- Search results include non-store items (grocery suggestions) — filter via
resultType.
1---2name: doordash3description: DoorDash4---5# DoorDash67## Overview8Food delivery marketplace — search restaurants, browse menus, view order history, manage cart.910## Workflows1112### Search and browse menu131. `searchRestaurants(query)` → pick restaurant → `storeId`142. `getRestaurantMenu(storeId)` → browse categories → pick item → `itemId`, `name`, `displayPrice`, `menuBook.id`1516### Add to cart, then remove171. `searchRestaurants(query)` → `storeId`182. `getRestaurantMenu(storeId)` → pick item → `itemId`, `name` (→ `itemName`), `displayPrice` (→ `unitPrice` in cents), `menuBook.id` (→ `menuId`)193. `addToCart(storeId, itemId, itemName, currency='USD', unitPrice, menuId, quantity)` → `addCartItemV2.id` (→ `cartId`), `addCartItemV2.orders[0].orderItems[0].id` (→ `itemId` for remove)204. `removeFromCart(cartId, itemId)` → updated cart (subtotal/orders are `null` when cart becomes empty)2122### Review past orders231. `getOrderHistory(limit)` → order list with items, totals, timestamps2425## Operations2627| Operation | Intent | Key Input | Key Output | Notes |28|-----------|--------|-----------|------------|-------|29| searchRestaurants | search restaurants by keyword | query | name, storeId, categories, imageUrl | entry point; includes non-store results (check resultType) |30| getRestaurantMenu | get store detail + full menu | storeId ← searchRestaurants | storeHeader, menuBook (id → menuId), itemLists (id, name, displayPrice) | optional: menuId, fulfillmentType |31| getOrderHistory | list past orders | limit, offset | orders (store, items, grandTotal, timestamps) | paginated; requires auth |32| addToCart | add menu item to cart | storeId ← searchRestaurants; itemId, itemName, unitPrice (cents), menuId ← getRestaurantMenu; currency='USD' | addCartItemV2.id (cartId), addCartItemV2.orders[0].orderItems[0].id | write op; all six input fields are server-required |33| removeFromCart | remove item from cart | cartId, itemId ← addToCart | removeCartItemV2 (subtotal/orders null if cart now empty) | write op; mutation takes `cartId`/`itemId` directly — no `RemoveCartItemInput` wrapper |3435## Quick Start3637```bash38# Search for restaurants39openweb doordash exec searchRestaurants '{"query": "pizza"}'4041# Get a restaurant's menu (returns itemId, name, displayPrice, menuBook.id)42openweb doordash exec getRestaurantMenu '{"storeId": "245613"}'4344# View recent orders45openweb doordash exec getOrderHistory '{"limit": 5}'4647# Add item to cart — all six fields required by upstream48openweb doordash exec addToCart '{"addCartItemInput": {"storeId": "245613", "itemId": "23864478062", "itemName": "12 Inch Plain Cheese Pizza", "currency": "USD", "unitPrice": 1440, "menuId": "57979746", "quantity": 1}}'4950# Remove item from cart (cartId + itemId from addToCart response)51openweb doordash exec removeFromCart '{"cartId": "<addCartItemV2.id>", "itemId": "<addCartItemV2.orders[0].orderItems[0].id>"}'52```5354## Known Limitations5556- `addCartItemInput` requires six fields (storeId, itemId, itemName, currency, unitPrice in cents, menuId) — partial input returns `BAD_USER_INPUT`. All values come from `getRestaurantMenu`; `currency` is `"USD"` for US accounts.57- `removeFromCart` returns nulls for subtotal/currencyCode/fulfillmentType/restaurant/orders when the removed item was the last one in the cart (cart UUID still returned).58- `formattedAddress` in order history is often null.59- Search results include non-store items (grocery suggestions) — filter via `resultType`.