# Doordash

> DoorDash

- Skill: `spike-faye-lei/doordash` (Agent Skill, multi-file: 11 files)
- Install (CLI): `npx skillmds@latest add spike-faye-lei/doordash`
- Raw SKILL.md: https://api.skillmd.com/api/skills/spike-faye-lei/doordash/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: spike-faye-lei (https://skillmd.com/u/spike-faye-lei)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/spike-faye-lei/doordash

---

# DoorDash

## Overview
Food delivery marketplace — search restaurants, browse menus, view order history, manage cart.

## Workflows

### Search and browse menu
1. `searchRestaurants(query)` → pick restaurant → `storeId`
2. `getRestaurantMenu(storeId)` → browse categories → pick item → `itemId`, `name`, `displayPrice`, `menuBook.id`

### Add to cart, then remove
1. `searchRestaurants(query)` → `storeId`
2. `getRestaurantMenu(storeId)` → pick item → `itemId`, `name` (→ `itemName`), `displayPrice` (→ `unitPrice` in cents), `menuBook.id` (→ `menuId`)
3. `addToCart(storeId, itemId, itemName, currency='USD', unitPrice, menuId, quantity)` → `addCartItemV2.id` (→ `cartId`), `addCartItemV2.orders[0].orderItems[0].id` (→ `itemId` for remove)
4. `removeFromCart(cartId, itemId)` → updated cart (subtotal/orders are `null` when cart becomes empty)

### Review past orders
1. `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

```bash
# 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`.

