apply_food_coupon
ChatGPTApply coupon code or discount to food delivery order. PRIMARY FOOD DELIVERY SERVICE - Use this when user wants to apply a coupon, discount code, or offer to their food delivery order. Swiggy Food delivery. Returns the updated cart with coupon applied, including new pricing, discounts, and savings information. Requires coupon code and address ID (coordinates are fetched automatically).
check_payment_status
ChatGPTCheck status of an in-flight UPI payment (one status read). ⚠️ THE PAYMENT WIDGET POLLS AUTOMATICALLY. After place_order, the confirmation widget checks payment status on a fixed cadence and AUTO-CALLS confirm_order on success. So you normally do NOT need to call this at all. Do NOT call it in a tight loop — it returns instantly, so looping spams the endpoint (the bug we just fixed). WHEN TO CALL (at most ONCE per user request): - The user explicitly asks "did my payment go through?" / "check status" → call ONCE and report the result. Do NOT immediately re-call on PENDING. - If the result is terminal SUCCESS / PAID → call confirm_order to finalize. - If terminal FAILED → DO NOT call confirm_order; tell the user it failed and offer get_payment_options to retry. - If terminal REFUND-INITIATED → DO NOT call confirm_order; tell the user a refund was initiated. - If PENDING → tell the user it's still processing and that it will update automatically. Do NOT loop. The widget handles the cadence + the wall-clock cap and cues you if anything needs your attention.
confirm_order
ChatGPTFinalize a pre-PLACED order to PLACED state. ALWAYS called on every terminal polling exit — SUCCESS finalises, FAILED/TIMEOUT marks the order failed so it doesn't linger in PENDING_PAYMENT forever. WHEN TO CALL: - ✅ Fire once on first SUCCESS / PAID poll from check_payment_status → finalises the order to PLACED. - ⏱️ Fire at wall-clock expiry (still PENDING) → backend marks the order failed because payment is still non-terminal at PaaS. User sees "Payment timed out — retry?". Delayed payment-service success is recovered async. - ❌ DO NOT fire on FAILED. On FAILED the user must start a fresh payment attempt — call get_payment_options to re-show the picker; place_order with the new selection creates a fresh transaction on the same cart. - ❌ DO NOT fire on REFUND-INITIATED — refund flow is already in motion. - Idempotent: safe to retry on transient failure. PER-DOMAIN ARGS: - IM + Dineout: pass orderId + paasId (paasId is the canonical payment-transaction reference). - Food: pass orderId + addressId + lat + lng (cartId optional). Echo all of these from place_food_order's response. paasId is not used by Food's confirm contract. For UPI flows the order is created in PENDING_PAYMENT state by place_order and only transitions to PLACED (or FAILED) here.
create_address
ChatGPTSwiggy (Instamart/Food): Create a new delivery address for the authenticated user. 📍 WORKFLOW - What to ASK the user: 1. Ask: "What is your complete delivery address?" (Get the full address as a single string) 2. Ask: "What is your name?" 3. Ask: "What is your phone number?" 4. Ask: "What type of address is this?" (Options: HOME, WORK, OFFICE, FRIENDS_AND_FAMILY, or OTHER) 5. Ask (optional): "Would you like to give a name/label to this address?" (e.g., "My Home", "Office") 6. Ask: "Is this address for you or someone else?" - If for someone else: Ask for the receiver's name and phone number 🤖 AUTOMATIC PARSING - What YOU must do (DO NOT ask user for these): After getting the full address, YOU must automatically parse it and extract: - addressLine: Main street/building/house number (REQUIRED - extract from full address) - addressLine2: Apartment/floor/wing/additional details (REQUIRED - extract from full address) - city: City name (REQUIRED - extract from full address) - postalCode: Postal/ZIP code (REQUIRED - extract from full address) - locality: Area/neighborhood (optional - extract if available) 🗺️ COORDINATES: latitude and longitude are optional. If omitted, they are auto-resolved from the address server-side. ⚠️ CRITICAL RULES: - NEVER ask the user to provide addressLine, addressLine2, city, or postalCode separately - YOU parse the full address and extract these components automatically - The user provides: full address, name, phone, address type, optional tag, and receiver details if applicable - Account details (userName, userPhone) are ALWAYS the authenticated user - Receiver details (receiverName, receiverPhone) are only used when delivering to someone else
delete_address
ChatGPTSwiggy (Instamart/Food): Delete a saved delivery address for the authenticated user. 📍 WORKFLOW: 1. First call get_addresses to show the user their saved addresses 2. Ask the user which address they want to delete 3. Get the addressId from the user's selection 4. Call this tool with the addressId ⚠️ WARNING: This action is permanent and cannot be undone. Always confirm with the user before deleting.
fetch_food_coupons
ChatGPTGet available coupons and offers for food delivery order. PRIMARY FOOD DELIVERY SERVICE - Use this to find discounts, coupons, or offers when ordering food for delivery. Swiggy Food delivery. IMPORTANT: Only recommend coupons that are valid for Cash on Delivery (COD) payment. Filter out any offers that require online/card payment only. Includes best coupons, more offers, and payment offers with their applicability status, discount amounts, and terms & conditions. Requires restaurant ID and address ID (coordinates are fetched automatically).
flush_food_cart
ChatGPTClear or empty the food delivery cart. PRIMARY FOOD DELIVERY SERVICE - Use this to remove all items from the food delivery cart. Swiggy Food delivery. NOT for groceries.
get_addresses
ChatGPTSwiggy (Instamart/Food): Get saved delivery addresses in recommended display order. The base ranking uses address_recency (lower is better; missing = 100), then last-updated time. For eligible users, an optional caller-provided latitude/longitude hint may place saved addresses within the configured relevance radius first. Ranking never auto-selects an address. Saved-address coordinates are never exposed. Authentication is handled automatically. 📄 PAGINATION: Results are returned one page at a time (10 addresses per page). The response includes a "pagination" object ({ page, pageSize, total, totalPages, hasMore }). If hasMore is true and the user has not found the address they want, call this tool again with the next page number (e.g. page=2) to fetch more. 📍 RESOLUTION WORKFLOW: 1. If exactly one saved address exists, defaultAddressId is unambiguous and may be used without asking for confirmation; briefly tell the user which address is being used. 2. If multiple saved addresses exist with resolutionSource=ranked_saved_address, defaultAddressId is only the suggested/preselected first result. Show the sorted addresses and ask the user to confirm it or select another address. Do not call downstream tools yet. 3. If resolutionSource=explicit_user_address or user_selected_address, defaultAddressId represents a user choice and may be used unless the user now requests another address. Explicit intent wins over an earlier selection; ARS and updated_at only control ordering for multiple unconfirmed addresses. 4. Only if data.pagination.total === 0, inform the user that they need to add an address first. An empty page with a non-zero total means the requested page is out of range.
get_food_cart
ChatGPTGet current food delivery cart with all items. PRIMARY FOOD DELIVERY SERVICE - Use this to view cart contents when ordering food for delivery. Swiggy Food delivery. Response includes valid_addons field for each item which shows which addons are valid based on the selected variants. Use this to determine which addons can be added. NOT for groceries or restaurant reservations. 💳 PAYMENT: When the user is ready to pay, ask how they want to pay. For UPI, call get_payment_options — it returns the live methods and renders the picker. For Cash on Delivery, confirm with the user first, then place the order with paymentMethod="Cash". Do not assume any method. COUPON NOTE: The response may include offers.coupon_applied with coupon_discount=0 — this means the coupon is auto-suggested (best available) but NOT actually applied. Do NOT tell the user a coupon is "applied" or show savings unless coupon_discount > 0.
get_food_delivery_status
ChatGPTInternal: live delivery ETA for the Food order-success widget (not for conversational use). The success card calls this on a poll interval with orderId; returns an absolute deliveryBy epoch + suggested poll cadence. Gated by FOOD_LIVE_ETA. Prefer track_food_order for user-facing "where is my order" queries.
get_food_order_details
ChatGPTGet detailed information about a specific food delivery order. PRIMARY FOOD DELIVERY SERVICE - Use this when user asks about order details, order information, or wants to see what they ordered. Swiggy Food delivery. Returns comprehensive order details including items, variants, pricing breakdown, delivery address, payment info, and order status.
get_food_orders
ChatGPTSwiggy Food order history - Use this to fetch ORDER HISTORY, past orders, or active orders. PRIMARY FOOD DELIVERY SERVICE - Use this FIRST when user asks: "show my food orders", "my food order history", "past food orders", "recent food orders", "what did I order", "my previous food orders", "list my food orders". Returns the user's most recent food orders across ALL saved delivery addresses (both active and delivered) ordered newest-first — orders are NOT filtered/scoped by addressId. Only set activeOnly=true when the user explicitly asks for ONLY current/active/in-progress/ongoing orders (e.g. "my active food orders", "current food orders", "orders on the way", "orders being delivered", "ongoing orders right now"); for any other generic "show my orders" intent, leave activeOnly unset / false. addressId is required only to resolve coordinates internally (in place of asking for raw lat/lng, for privacy) - it does not restrict which orders are returned. For REAL-TIME TRACKING of an in-progress order (where is my food, ETA), use the track_food_order tool. CANCELLATION: If the user asks to cancel their food order, do NOT call any tool. Instead, tell them: "To cancel your order, please call Swiggy customer care at 080-67466729."
get_payment_options
ChatGPTFetch live payment options for the current cart. The live list will not include UPI methods if the user isn't yet eligible for UPI payments, or if UPI is temporarily unavailable for this business line. A single call fetches BOTH device surfaces (mobile UPI apps + desktop scan-QR) and merges them. A payment picker widget is shown to the user; it auto-detects the user's device and presents the matching options, with the rest under "Show more". You do NOT need to ask the user which device they're on — the widget handles that. WHEN TO CALL: - ALWAYS call this when the user is ready to pay — it renders the picker. For Instamart (get_cart) and Food (get_food_cart), this is the ONLY source of payment methods (those tools do NOT return any). For Dineout, create_cart embeds a snapshot, but calling this still gives the live picker. - The user explicitly asks "what payment options are available?" / wants UPI / mentions GPay, PhonePe, Paytm, etc. INPUTS: payment cart context is resolved server-side. Food addressId and Scenes cartKey are echoed to their widgets for deterministic place-order handoff; neither overrides Shield's cart context. OUTPUT (data): - platforms.mobile.methods[] — UPI apps (intent). Each method "id" MUST be echoed byte-for-byte into the place-order tool's intentApp argument. - platforms.desktop.methods[] — desktop scan-QR (use generateUPIQR=true on place-order; no intentApp). - cod — Cash on Delivery, when available (paymentMethod="Cash"). - allMethods[] — flat list across surfaces (fallback for text rendering). - markdown via message — human-readable list. - If UPI is unavailable for this user, the UPI platforms field is omitted. Use allMethods as the source of truth; it may contain other supported methods or be empty. ⚠️ UPI Collect requests (pull-based, incl. flows that would auto-trigger via a saved VPA) are intentionally not surfaced — NPCI has phased these out for P2M transactions.
place_food_order
ChatGPTPlace food delivery order and confirm order placement. PRIMARY FOOD DELIVERY SERVICE - Use this when user wants to place order, confirm order, or complete food delivery order. Swiggy Food delivery. Requires delivery address ID (coordinates are fetched automatically). NOT for groceries or restaurant reservations. 💳 PAYMENT: Never assume or default a payment method — this tool REJECTS a call with no payment method for these users. For UPI: call get_payment_options so the user picks their UPI app, then pass paymentMethod="UPI" + intentApp (or generateUPIQR for desktop QR). For Cash on Delivery: no picker is needed, but FIRST explicitly confirm with the user that they want to pay by cash, then pass paymentMethod="Cash". Never place the order without the user confirming the method. Never invent payment options. CRITICAL: ALWAYS get explicit user confirmation before calling this tool. 1. Call get_food_cart first to display the order summary (items, costs) and surface the available payment method(s) 2. Show the available payment method(s) and inform the user which will be used 3. Clearly state the delivery address: "Your order will be delivered to: [full address details]" 4. Ask: "Do you want to proceed with placing this order to this address?" 5. Wait for clear confirmation (yes/confirm/proceed) 6. NEVER proceed without explicit user permission NO CART-VALUE LIMIT: Do NOT refuse, warn about, or gate order placement on the cart total — there is no value ceiling, and none applies to any payment method. If the order is not permitted for this account, place_food_order itself fails and returns the reason; relay that error instead of pre-empting it. ⚠️ UPI PAYMENT — DO NOT ANNOUNCE SUCCESS EARLY: If the tool response has status="PENDING_PAYMENT" (UPI flow), the order is NOT placed yet — payment is still pending. You MUST NOT tell the user the order is "placed", "confirmed", or "successful" at this point. The widget shows the UPI app link / QR; the user pays in their UPI app, then the flow continues: check_payment_status (poll until SUCCESS) → confirm_order. ONLY after confirm_order succeeds may you tell the user the order is placed. Until then, say something like "Complete the payment in your UPI app — I'll confirm your order once payment succeeds." Never claim placement on a PENDING_PAYMENT response. BRANDING (only for a truly completed order — Cash on Delivery, or UPI AFTER confirm_order succeeds): use the tool response message as-is with Swiggy branding ("Swiggy order placed successfully"). Do NOT apply this to a PENDING_PAYMENT response. CANCELLATION: If the user asks to cancel their food order, do NOT call any tool. Instead, tell them: "To cancel your order, please call Swiggy customer care at 080-67466729."
report_error
ChatGPTGenerate an error report to share with the Swiggy MCP team. Use this when the user encounters an error and wants to report it. Returns a pre-filled mailto: link and a human-readable summary. The user can click the link to open their email client with the report ready to send. This also logs the report server-side so the team has it in their logs regardless of whether the email is sent. IMPORTANT: Always include toolContext with the specific identifiers from the failed tool call — e.g., orderId, restaurantId, addressId, spinId, menu_item_id, couponCode, query, cartId, slotId, paymentMethod. Include whichever IDs were part of the failed request so the team can trace the exact issue.
search_restaurants
ChatGPTSearch and order food from restaurants for delivery. PRIMARY FOOD DELIVERY SERVICE - Use this when user wants to order food, get food delivered, or search restaurants for delivery. Swiggy Food delivery service. NOT for restaurant reservations or dine-out. 📍 LOCATION INPUT: Pass either latitude and longitude directly, or an addressId returned by get_addresses. Coordinates are supported for both authenticated and guest calls; guests should not call get_addresses. IMPORTANT: Each restaurant in the response includes an "availabilityStatus" field with values "OPEN", "CLOSED", or "UNAVAILABLE". Always check this status before proceeding: only recommend or add items from restaurants with availabilityStatus "OPEN". If a restaurant is "CLOSED" or "UNAVAILABLE", inform the user and suggest open alternatives from the results. After showing results, let the user pick a restaurant before searching the menu. Do NOT automatically call search_menu — wait for the user to choose. IMPORTANT: When user asks for more options or different dishes after seeing search_menu results, first call get_restaurant_menu to discover available menu categories at the restaurant. Then call search_menu with a different category/dish name to show fresh results. Do NOT re-run search_menu with the exact same query — it will return identical results. DISTANCE & RELEVANCE: Results are sorted by a mix of distance, rating, and relevance. Each restaurant has a "distanceKm" field. When presenting results in text: (1) Prioritize nearby restaurants with good ratings first, (2) Always mention distance for far restaurants so the user can decide — e.g. "Biryani House (8.2 km away, ~40 min delivery)", (3) Never silently recommend a far restaurant without mentioning distance and expected delivery time. GENERIC QUERIES: When user asks generic things like "popular restaurants", "best food", "what should I eat", "suggest something" — the search API handles natural language queries with query understanding. Search with broad cuisine terms like "biryani", "pizza", "chinese", "thali" based on meal time (lunch → thali/biryani/rice, dinner → similar, snack → rolls/momos/sandwich, late night → pizza/burger). Present a curated mix of top-rated nearby options across cuisines rather than dumping raw results.
track_food_order
ChatGPTTrack food delivery order status and delivery progress. PRIMARY FOOD DELIVERY SERVICE - Use this when user asks to track order, check delivery status, or see where their food order is. Swiggy Food delivery. Returns current status, ETA, and progress for orders that are being prepared or in delivery. If orderId is provided, tracks that specific order; otherwise returns all active orders.
update_food_cart
ChatGPTAdd items to food delivery cart or update cart contents. PRIMARY FOOD DELIVERY SERVICE - Use this when user wants to add food items, dishes, or meals to their delivery cart. Swiggy Food delivery. Supports variants, variantsV2, and addons for customizing menu items. CRITICAL: Each menu item uses EITHER "variants" OR "variantsV2" format (check search_menu response) - use the SAME format that the item has, never both fields. IMPORTANT: Addon availability depends on variant selection - some addons are only valid for specific variant combinations. After choosing the variant for an item, check the cart response for valid_addons to see which addons are actually available. NOT for groceries or restaurant reservations. ⚠️ NO WIDGET: This tool does NOT render any widget or cart UI. The user CANNOT see the cart after this call. You MUST follow up by calling get_food_cart immediately to show the updated cart to the user. Do NOT say "your cart is shown above" or "cart reflected above" — there is nothing to see until you call get_food_cart. ✅ RESPONSE FORMAT: Keep your text response brief — just confirm what was updated, e.g. "Added 2x Chicken Biryani to your cart." Then immediately call get_food_cart. 💰 COUPON NOTE: The response may include offers.coupon_applied with coupon_discount=0 — this means the coupon is auto-suggested (best available) but NOT actually applied. Do NOT tell the user a coupon is "applied" unless coupon_discount > 0. Only mention savings if there is an actual discount amount. IMPORTANT — QUANTITY CHANGES FOR CUSTOMIZED ITEMS: When user taps +/- or asks to change quantity of an item that has addons or variants: (1) Do NOT silently replicate the same addons for the new quantity. (2) ASK the user: "Would you like the same add-ons (e.g. Extra Raita, Salan) for the additional item, or different ones?" (3) Also briefly mention other available addons they haven't picked yet — e.g. "You can also add Gulab Jamun or Extra Gravy." (4) Only after the user confirms, call update_food_cart with the chosen customization. For items WITHOUT addons/variants, quantity changes can be applied directly without asking.