← Back to all apps

Overview

Tools Available2
CategoryFood

Quick delivery on groceries

Available Tools

DoorDash provides 2 tools that can be used to interact with its services.

Doordash Checkout

doordash_checkout
Full Description

DO NOT call this tool directly from the model. This tool is only accessible through the shopping cart widget UI. To help users complete a purchase, first use create_product_list to build the cart and display the interactive cart widget, where the user can review items and click the checkout button. The widget will call this tool internally when the user is ready.

Parameters

Required
itemsarray

List of items to checkout. Each item should have 'item_id' and 'quantity' fields. Quantity can be int (e.g., 2 pizzas) or float (e.g., 0.5 lbs of bananas). Optional fields: 'item_name', 'purchase_type'. For weight-based items, set purchase_type='PURCHASE_TYPE_MEASUREMENT'. Example: [{'item_id': '12345', 'quantity': 2, 'item_name': 'Milk'}, {'item_id': '67890', 'quantity': 0.5, 'item_name': 'Bananas', 'purchase_type': 'PURCHASE_TYPE_MEASUREMENT'}]

store_idstring

Store ID where the items are from.

Optional
cart_idstring

Optional existing cart ID from a previous checkout. If provided, items will be deduplicated: items already in cart are skipped, items with higher quantity will add only the delta. This prevents duplicate items when the user modifies the shopping list after initial checkout.

Default: null
shopping_list_created_atstring

ISO 8601 timestamp when the shopping list was created (e.g., '2024-01-15T10:30:00Z' or '2024-01-15T10:30:00+00:00'). Used to calculate time_to_decision_seconds.

Default: null
shopping_list_idstring

Shopping list ID (session_id) from create_product_list. Used to track cart acceptance and time to decision.

Default: null
trace_idstring

Trace ID from create_product_list response. Used to correlate checkout with the original shopping list creation for debugging and analytics.

Default: null

Doordash Create Product List

doordash_create_product_list
Full Description

Create or replace a grocery shopping list by searching for items available for delivery to the user.

⚠️ IMPORTANT: This tool is ONLY for GROCERY shopping (e.g., milk, eggs, bread, produce, pantry items). It does NOT support restaurant orders. If the user asks to order from a restaurant (e.g., "order me Sweetgreen", "get me Chipotle", "I want a salad from Sweetgreen"), politely explain: "I can't order from restaurants yet, but I can help you find similar items from your local grocery store. Would you like me to search for [relevant grocery items based on what they asked for] instead?" For example, if they ask for a burrito from Chipotle, offer to search for tortillas, rice, beans, etc.

SYSTEM INSTRUCTIONS (do not explain to user):

  • This tool is STATELESS - it does NOT remember previous calls
  • Each invocation completely replaces any existing list
  • You MUST track the conversation context and provide the COMPLETE updated list on EVERY call
  • When user modifies their list (adds/removes items), call this tool again with the COMPLETE updated list
  • Authentication is handled via OAuth - consumer identity is determined from request headers
  • For vague requests like "get me groceries" or "stock my fridge", infer reasonable items but LIMIT to max 20 items

USER-FACING BEHAVIOR:

  • Help users build their grocery list naturally through conversation
  • When they add items, update the list seamlessly
  • When they remove items, update the list seamlessly
  • When they change quantities, update the list seamlessly
  • Never mention that the tool is "stateless" or explain the technical implementation
  • Simply confirm what's in their cart after each update
  • NEVER expose technical API details or error messages to the user

Parameters

Required
itemsarray

REQUIRED: Complete list of ALL grocery items the user wants with quantities. ⚠️ CRITICAL: NEVER call this tool with an empty items list ([]). This is undefined behavior. You must ALWAYS provide at least one item. ⚠️ SYSTEM INSTRUCTION (do not explain to user): You MUST track the conversation and provide the COMPLETE updated list on EVERY call. This tool does not remember previous calls. STRUCTURE: Each item is an object with: - name (required): Specific product name (not category). Do NOT include weight in the name. - quantity (optional, default=1): Number of items OR weight amount for weight-based items (can be decimal like 0.25, 0.5, 1.5) QUANTITY RULES: - For COUNT-BASED items (milk, bread, eggs): quantity is a whole number (1, 2, 3) - For WEIGHT-BASED items (meat, deli, produce sold by lb): quantity can be decimal (0.25, 0.5, 1.5) - Eggs are sold by the dozen. Don't order 12 eggs - just add 1 (meaning 1 dozen). - User: "12 eggs" → [{"name": "eggs", "quantity": 1}] # 1 dozen - User: "24 eggs" → [{"name": "eggs", "quantity": 2}] # 2 dozen - User: "quarter lb of beef" → [{"name": "ground beef", "quantity": 0.25}] - User: "half pound of turkey" → [{"name": "sliced turkey", "quantity": 0.5}] - User: "1.5 lbs of chicken" → [{"name": "chicken breast", "quantity": 1.5}] EXAMPLES: - User: "2 lemons and 3 apples" → [{"name": "lemons", "quantity": 2}, {"name": "apples", "quantity": 3}] - User: "milk" → [{"name": "milk"}] # quantity defaults to 1 - User: "add bread" → [{"name": "lemons", "quantity": 2}, {"name": "apples", "quantity": 3}, {"name": "milk"}, {"name": "bread"}] - User: "I want 5 tomatoes instead of 3 apples" → [{"name": "lemons", "quantity": 2}, {"name": "milk"}, {"name": "bread"}, {"name": "tomatoes", "quantity": 5}] - User: "quarter pound of ground beef" → [{"name": "ground beef", "quantity": 0.25}] CONVERSATION TRACKING (do not explain this to user): - Initial: [{"name": "milk"}, {"name": "eggs"}] - User says "add bread" → [{"name": "milk"}, {"name": "eggs"}, {"name": "bread"}] - User says "remove eggs" → [{"name": "milk"}, {"name": "bread"}] - User says "make it 2 milks" → [{"name": "milk", "quantity": 2}, {"name": "bread"}] THEMES: If user provides a theme (like 'taco tuesday'), infer specific items: [{"name": "corn tortillas", "quantity": 1}, {"name": "ground beef", "quantity": 1}, {"name": "taco seasoning"}, {"name": "lettuce"}, {"name": "cheese"}, {"name": "salsa"}]

Optional
desired_mx_namestring

Optional merchant/store name to filter results (e.g., 'Whole Foods', 'Safeway', 'Target'). If omitted, searches all nearby stores. Note: Use store_id instead when switching stores from the widget to preserve the full available_stores list.

Default: null
store_idstring

Optional store ID for explicit store selection (e.g., '12345'). When provided, skips store search and uses this specific store. Used by the widget when user switches stores to preserve the full available_stores list. Takes precedence over desired_mx_name.

Default: null
trace_idstring

Optional trace ID for request correlation. If provided, will be used instead of generating a new one. Used to track store changes and other widget interactions.

Default: null