{"openapi":"3.1.0","info":{"title":"Whatsdo Actions","version":"1.0.0"},"servers":[{"url":"https://app.whatsdo.com"}],"paths":{"/actions/search":{"post":{"operationId":"search","summary":"Search for restaurants, gyms, yoga studios, etc.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"query":{"type":"string"},"location_text":{"type":["string","null"]}},"required":["query"]}}}},"responses":{"200":{"description":"Search results"}}}},"/actions/reserve":{"post":{"operationId":"reserve","summary":"Book a table, class, or session","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"item_id":{"type":"string"},"item_name":{"type":"string"},"item_type":{"type":"string"},"date_time":{"type":"string"},"party_size":{"type":"integer"},"special_requests":{"type":["string","null"]},"source":{"type":"string","enum":["opentable","yelp_ai"],"description":"Booking provider from bookable_via"},"location":{"type":["string","null"]},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]},"guest_name":{"type":["string","null"]},"guest_phone":{"type":["string","null"]},"guest_email":{"type":["string","null"]}},"required":["item_id","item_name","date_time","party_size"]}}}},"responses":{"200":{"description":"Reservation confirmation or alternatives"}}}},"/actions/reserve/yelp-ai/chat":{"post":{"operationId":"yelpAiChat","summary":"Continue Yelp AI conversation for CC hold flow","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"chat_id":{"type":"string"},"message":{"type":"string"},"latitude":{"type":["number","null"]},"longitude":{"type":["number","null"]}},"required":["chat_id","message"]}}}},"responses":{"200":{"description":"Yelp AI chat response"}}}},"/actions/history":{"get":{"operationId":"history","summary":"Get past reservations for the current user","responses":{"200":{"description":"Reservation list"}}}},"/actions/location":{"post":{"operationId":"saveLocation","summary":"Save or update user's location","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"label":{"type":"string"}},"required":["label"]}}}},"responses":{"200":{"description":"Geocoded location saved"}}}},"/actions/calendar/free":{"get":{"operationId":"calendarFree","summary":"Get free time slots for a date","parameters":[{"name":"date","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Free slots"}}}},"/actions/calendar/event":{"post":{"operationId":"calendarEvent","summary":"Add a confirmed booking to Google Calendar","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"title":{"type":"string"},"date_time":{"type":"string"},"duration_mins":{"type":"integer"},"confirmation_number":{"type":"string"},"address":{"type":"string"},"party_size":{"type":"integer"},"item_type":{"type":"string"},"special_requests":{"type":"string"}},"required":["title","date_time"]}}}},"responses":{"200":{"description":"Calendar event created"}}}}}}