swiggy-dineout-booking
locations → search → details → slots → (cart, paid only) → book → status
Dineout tools take latitude/longitude. Saved locations do not expose coordinates, so the CLI captures them from the search/details response and reuses them for slots, cart and book. Keep the steps in this order and the coordinates take care of themselves.
1. Location, then search
swiggy dineout locations --json --no-interactive # "near me / home / office" → pick an id
swiggy dineout search -q italian --address-id <id> --json --no-interactive
swiggy dineout search -q rooftop --lat 12.9352 --lng 77.6245 --json --no-interactive # named area
One term only (name, cuisine, area, "pub", "rooftop", "buffet"). A dish becomes its cuisine ("dosa" → "South Indian"). Empty results mean nothing matched: say so and offer another term; never present unrelated restaurants as matches.
2. Details (optional) and slots
swiggy dineout details <restaurantId> --json --no-interactive
swiggy dineout slots --restaurant-id <id> --date 2026-09-06 --json --no-interactive # 7 days from the date
data.slots[] has dateStr, displayTime, reservationTime, slotId, and deals[] with itemId, isFree, bookingPrice. Match the user's date+time against dateStr + displayTime for THAT date; every 15-minute time inside a returned window is bookable. Trust the data — do not tell the user a listed time is unavailable.
3. Confirm, then book
Ask: "Book for guests on at , <free / ₹price deal>?" Wait for yes.
# Free deal (isFree=true): one step
swiggy dineout book --restaurant-id <id> --slot-id <slotId> --item-id <itemId> --reservation-time <reservationTime> --guests <n> --yes --json --no-interactive
# Paid prebook deal (isFree=false): cart first, then book with UPI
swiggy dineout cart --restaurant-id <id> --type DEAL_TICKET_PURCHASE --slot-id <slotId> --item-id <itemId> --reservation-time <reservationTime> --guests <n> --json --no-interactive
swiggy dineout book --restaurant-id <id> --slot-id <slotId> --item-id <itemId> --reservation-time <reservationTime> --guests <n> --cart-key <cartKey> --pay upi --wait --yes --json --no-interactive
Copy slotId, itemId (format restaurantId-ticketId) and reservationTime from the chosen slot exactly; never derive them from the display time. Guests must be 1–20. A paid booking returns PENDING_PAYMENT — that is not a booking yet; follow swiggy-pay (Dineout confirms with orderId + paasId).
4. Status and cancel
swiggy dineout status <orderId> --json --no-interactive # data.status, data.canCancel
swiggy dineout cancel <orderId> --reason "plan changed" --yes --json --no-interactive
Cancel only when the user clearly asked, and only with an orderId you have (from a booking in this conversation or from the user). cancel_booking is still rolling out; if it returns MCP_ERROR, direct the user to the Swiggy app or 080-67466729.
Never
- Auto-call
detailsorslotsright after a search; let the user pick a restaurant first. - Book without the explicit question in step 3.
- Retry
bookafter an error; runstatusfirst —book_tableis not idempotent.