Skip to main content
skill CX Codex

doordash — Claude Code skill: search restaurants, manage cart

A skill that drives DoorDash from the CLI: restaurant search, menus, order history and cart edits.

Install into Claude Code · Skills CLI (Vercel) All methods and platforms ↓
npx skills add imoonkey/openweb --skill doordash -a claude-code
Open on GitHub

What doordash does

The skill exposes five DoorDash operations to your agent. searchRestaurants looks up stores by keyword, getRestaurantMenu returns the store header plus the full menu, getOrderHistory lists past orders, and addToCart/removeFromCart change the cart. Everything runs through openweb doordash exec, for instance openweb doordash exec searchRestaurants '{"query": "pizza"}'.

The call order matters. searchRestaurants yields storeId; getRestaurantMenu then gives you itemId, name, displayPrice and menuBook.id. Adding an item needs all six fields at once — storeId, itemId, itemName, currency, unitPrice in cents and menuId. Send a partial object and the server answers BAD_USER_INPUT. Note that unitPrice is cents, so you convert displayPrice yourself.

getOrderHistory needs auth and pages through results with limit and offset. Search output mixes in grocery suggestions that are not stores; filter them by resultType. Two more edges: removeFromCart hands back null for subtotal and orders once the cart is empty, and formattedAddress in order history is often null.

What it helps with

  • find a restaurant by keyword and get its storeId
  • pull up a store menu and pick an item with its price
  • assemble all six fields needed to add an item to the cart
  • remove a line from the cart using cartId and itemId
  • page through past orders

Example prompts for the agent

  • Find pizza places nearby and show me the menu for the first one
  • Add the 12 inch plain cheese pizza from that menu to my cart
  • Show my last 5 orders

How to install doordash

1Skills CLI (Vercel)

npx skills add imoonkey/openweb --skill doordash -a claude-code

2Manually: put the files in place

~/.claude/skills/doordash/SKILL.md

Copy the whole skill folder; for one project use .claude/skills/doordash/

Step by step, with commands for each platform: How to install skills in Claude Code: five ways

Questions about doordash

How do I install doordash in Claude Code?

Run npx skills add imoonkey/openweb --skill doordash -a claude-code. The skill lands at ~/.claude/skills/doordash/SKILL.md.

What does the doordash skill do?

It gives an agent DoorDash access: restaurant search, menus, order history and cart operations, all through openweb doordash exec commands.

Why does addToCart return BAD_USER_INPUT?

The server wants all six fields — storeId, itemId, itemName, currency, unitPrice in cents and menuId. Pull the values from getRestaurantMenu; on US accounts currency is "USD".

Source text

SKILL.md · MIT
# 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`.

© imoonkey · MIT · imoonkey/openweb

Similar skills

All skills for Agent setup: memory, context, orchestration →

From the same set4

Project sponsors

Companies that keep this analytics open
Gold sponsor

Impressions, clicks and code copies — open statistics. We keep the numbers public for the same reason NeBlask itself is public. Become a sponsor