DoorDash APIdoordash.com ↗
Access DoorDash restaurant listings, full menus with prices, delivery fees, ratings, and promotions via 2 endpoints. Covers restaurants across the US.
What is the DoorDash API?
The DoorDash API provides structured access to restaurant and menu data across the US through 2 endpoints. Use list_restaurants to retrieve restaurant names, ratings, delivery fees, estimated delivery times, and active promotions for a given city or location, and use get_restaurant to pull a complete menu breakdown — including item-level pricing, pickup and delivery availability, store hours, and address details — for any specific DoorDash store.
curl -X GET 'https://api.parse.bot/scraper/e3310be0-3731-4735-8c75-cec618e4ef6e/list_restaurants?limit=5&location=new-york-ny-restaurants' \ -H 'X-API-Key: $PARSE_API_KEY'
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 doordash-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.
"""Walkthrough: DoorDash Restaurant API — browse locations and drill into restaurant details."""
from parse_apis.doordash_restaurant_api import DoorDash, FulfillmentType, RestaurantNotFound
client = DoorDash()
# List restaurants in New York, capped at 5 total items
nyc = client.location("new-york-ny-restaurants")
for restaurant in nyc.restaurants(limit=5):
print(restaurant.name, restaurant.rating, restaurant.delivery_fee)
# Drill into the first restaurant's full details
first = nyc.restaurants(limit=1).first()
if first:
detail = first.details()
print(detail.name, detail.price_range, detail.address.display_address)
print(detail.operation_status.status, detail.delivery.estimated_minutes)
# Browse the menu categories and items
for category in detail.menu_items[:3]:
print(category.category_name)
for item in category.items[:2]:
print(" ", item.name, item.price)
# Check available menus
for menu in detail.menu.available_menus:
print(menu.name, menu.display_hours)
# Typed error handling for a bad store_id
try:
bad = client.location("new-york-ny-restaurants").restaurants(limit=1).first()
if bad:
bad.store_id = "0000000"
bad.details()
except RestaurantNotFound as exc:
print(f"Restaurant not found: store_id={exc.store_id}")
print("exercised: location.restaurants / restaurant_summary.details / menu browsing / error handling")
List restaurants available for delivery in a given city/location. Returns restaurant names, ratings, categories, delivery fees, estimated delivery times, and current promotions. Results are parsed from the DoorDash food delivery page for the specified location.
| Param | Type | Description |
|---|---|---|
| limit | integer | Maximum number of restaurants to return |
| location | string | Location slug in format '{city}-{state}-restaurants' (e.g., 'new-york-ny-restaurants', 'los-angeles-ca-restaurants', 'chicago-il-restaurants') |
{
"type": "object",
"fields": {
"location": "string, the location slug used for the query",
"restaurants": "array of restaurant summary objects with store_id, name, slug, url, rating, rating_count, categories, delivery_fee, distance, delivery_time, and promotion",
"total_found": "integer, number of restaurants returned"
}
}About the DoorDash API
Restaurant Discovery
The list_restaurants endpoint accepts a location parameter formatted as a city-state slug (e.g., new-york-ny-restaurants or los-angeles-ca-restaurants) and an optional limit to cap results. Each restaurant object in the response includes a store_id, name, slug, url, rating, rating_count, categories, delivery_fee, distance, and delivery_time. Active promotions are also surfaced per restaurant, making it straightforward to identify discounted delivery or current deals without fetching each store individually.
Restaurant Detail and Full Menus
The get_restaurant endpoint requires a store_id (available from list_restaurants results) and accepts optional fulfillment_type (Delivery or Pickup) and menu_id parameters. The response includes the restaurant's full menu structure: a menu object with id, name, display_hours, categories, and available_menus, plus a flat menu_items array organized by category, each containing category_id, category_name, and an array of items with prices. Separate delivery and pickup objects report real-time availability and estimated wait times.
Supporting Data Fields
Beyond menu data, get_restaurant returns a ratings object with average, count, display, and an is_new flag. The address object provides street, city, state, display_address, and lat/lng coordinates. The restaurant's phone number and categories array (cuisine types) are also included. This makes the endpoint useful for building location-aware or category-filtered restaurant directories without separate geocoding calls.
The DoorDash API is a managed, monitored endpoint for doordash.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when doordash.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 doordash.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.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a delivery fee comparison tool across multiple restaurants in a given city using
delivery_feeanddelivery_timefields fromlist_restaurants. - Aggregate menu item prices across competing restaurants in the same cuisine category for market analysis.
- Track active promotions and discounts on DoorDash by city to surface current deals in a consumer-facing app.
- Populate a restaurant directory with address coordinates, phone numbers, and cuisine categories from
get_restaurant. - Monitor pickup vs. delivery availability and estimated wait times for a set of store IDs.
- Extract structured menu data — including category breakdowns and item-level pricing — for restaurant analytics or competitive research.
- Identify newly listed restaurants on DoorDash using the
is_newflag in theratingsobject.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 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.
Does DoorDash have an official developer API?+
What does `get_restaurant` return for menus, and can I request a specific menu version?+
menu object with id, name, display_hours, and an available_menus list. If you want a specific menu version — such as a breakfast or late-night menu — you can pass a menu_id from that available_menus list as an input parameter.Does the API cover DoorDash restaurants outside the United States?+
location parameter uses US city-state slugs. You can fork this API on Parse and revise it to add support for Canadian or Australian location slugs if DoorDash operates there in your target market.Are individual menu item reviews or customer photos available?+
ratings at the restaurant level (average, count, display) but does not expose per-item reviews, review text, or customer-uploaded photos. You can fork this API on Parse and revise it to add an endpoint targeting item-level review data if that surface is available.How does pagination work for `list_restaurants`?+
total_found integer indicating how many restaurants were returned. You can control the number of results with the limit parameter. There is no built-in offset or cursor parameter exposed — if you need to page through large result sets, you would fork the API on Parse and revise to add offset-based pagination.