{"openapi":"3.1.0","info":{"title":"Crowdly agent API","version":"1.0.0","description":"Crowdly knows which New York restaurants are hardest to book, which are hot or just opened, and where a table is open, from its own tracking of real reservation demand.\n- Start with recommend when someone asks where to eat: pass where they are (near), when, party size and any diet needs.\n- Give the user the restaurant, the next table and its booking_url. Booking happens on Resy with the user's own account; Crowdly never books for anyone.\n- Data comes from Crowdly's latest check, not live: tell the user to confirm on the booking page. time null means the date has a table but the times are on the booking page.\n- Diet: vegan, kosher and halal are only returned when the restaurant states it. no_pork \"none_listed\" means no pork dishes on the menus Crowdly read, not a guarantee.\n- Each call except account uses one call from the key's balance: Premium ($4.50/month) includes 1,000 a month; otherwise prepaid calls; every account starts with 10 free calls."},"servers":[{"url":"https://crowdly.tech"}],"security":[{"bearer":[]},{"apiKeyHeader":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Your Crowdly API key (crowdly_sk_...), from /agents."},"apiKeyHeader":{"type":"apiKey","in":"header","name":"x-api-key"}}},"paths":{"/api/v1/recommend":{"get":{"operationId":"recommend","summary":"Recommend where to eat","description":"The best restaurants in New York the user can actually get into: ranked by real demand (how booked out, how many tables taken in the last 24h, new openings), distance and diet fit, each with its next open table and a booking link. Use this first when someone asks where to eat.","parameters":[{"name":"near","in":"query","required":false,"description":"Where the user is: a neighborhood (\"West Village\", \"Williamsburg\", \"LES\") or \"lat,lng\".","schema":{"type":"string","description":"Where the user is: a neighborhood (\"West Village\", \"Williamsburg\", \"LES\") or \"lat,lng\"."}},{"name":"when","in":"query","required":false,"description":"tonight, tomorrow, this_week, any (next 30 days), or a date YYYY-MM-DD. Default any.","schema":{"type":"string","description":"tonight, tomorrow, this_week, any (next 30 days), or a date YYYY-MM-DD. Default any."}},{"name":"after","in":"query","required":false,"description":"Earliest seating, 24h or 12h, e.g. \"19:00\" or \"7pm\" (Eastern time).","schema":{"type":"string","description":"Earliest seating, 24h or 12h, e.g. \"19:00\" or \"7pm\" (Eastern time)."}},{"name":"before","in":"query","required":false,"description":"Latest seating, 24h or 12h, e.g. \"19:00\" or \"7pm\" (Eastern time).","schema":{"type":"string","description":"Latest seating, 24h or 12h, e.g. \"19:00\" or \"7pm\" (Eastern time)."}},{"name":"party","in":"query","required":false,"description":"Number of people (1 to 4). Tables are tracked for 2 and 4.","schema":{"type":"integer","minimum":1,"maximum":4,"default":2,"description":"Number of people (1 to 4). Tables are tracked for 2 and 4."}},{"name":"diet","in":"query","required":false,"description":"Diet needs. vegan, kosher and halal only return places that state it; no_pork, vegetarian and gluten_free rank by menu evidence.","schema":{"type":"string","description":"Comma-separated"}},{"name":"cuisine","in":"query","required":false,"description":"Cuisine to match, e.g. \"italian\", \"japanese\".","schema":{"type":"string","description":"Cuisine to match, e.g. \"italian\", \"japanese\"."}},{"name":"price_max","in":"query","required":false,"description":"Max price level, 1 ($) to 4 ($$$$).","schema":{"type":"integer","minimum":1,"maximum":4,"description":"Max price level, 1 ($) to 4 ($$$$)."}},{"name":"vibe","in":"query","required":false,"description":"hot: most booked right now. hard_to_book: booked out most nights. new: opened in the last 6 months. climbing: getting harder to book this week.","schema":{"type":"string","enum":["any","hot","hard_to_book","new","climbing"],"description":"hot: most booked right now. hard_to_book: booked out most nights. new: opened in the last 6 months. climbing: getting harder to book this week."}},{"name":"max_km","in":"query","required":false,"description":"Max distance in km when near is given. Default 3.","schema":{"type":"number","minimum":0.2,"maximum":30,"description":"Max distance in km when near is given. Default 3."}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":15,"default":5}}],"responses":{"200":{"description":"Results, plus usage (calls left)."},"400":{"description":"Invalid input."},"401":{"description":"Missing or invalid API key."},"402":{"description":"No calls left: subscribe or buy calls at /agents."},"429":{"description":"Rate limited (60 calls a minute per key)."}}}},"/api/v1/tables":{"get":{"operationId":"find_tables","summary":"Find open tables on a date","description":"Restaurants with an open table on a given date, hardest to book first, with seating times (next 7 days) and booking links. Filter by time, part of the city, price and cuisine.","parameters":[{"name":"date","in":"query","required":false,"description":"YYYY-MM-DD, today through the next 30 days. Default today (Eastern time).","schema":{"type":"string","description":"YYYY-MM-DD, today through the next 30 days. Default today (Eastern time)."}},{"name":"party","in":"query","required":false,"description":"Number of people (1 to 4). Tables are tracked for 2 and 4.","schema":{"type":"integer","minimum":1,"maximum":4,"default":2,"description":"Number of people (1 to 4). Tables are tracked for 2 and 4."}},{"name":"after","in":"query","required":false,"description":"Earliest seating, 24h or 12h, e.g. \"19:00\" or \"7pm\" (Eastern time).","schema":{"type":"string","description":"Earliest seating, 24h or 12h, e.g. \"19:00\" or \"7pm\" (Eastern time)."}},{"name":"before","in":"query","required":false,"description":"Latest seating, 24h or 12h, e.g. \"19:00\" or \"7pm\" (Eastern time).","schema":{"type":"string","description":"Latest seating, 24h or 12h, e.g. \"19:00\" or \"7pm\" (Eastern time)."}},{"name":"area","in":"query","required":false,"description":"Part of the city.","schema":{"type":"string","enum":["Downtown","Midtown","Uptown","Brooklyn","Queens","Bronx"],"description":"Part of the city."}},{"name":"price_max","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":4}},{"name":"cuisine","in":"query","required":false,"schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":25,"default":10}}],"responses":{"200":{"description":"Results, plus usage (calls left)."},"400":{"description":"Invalid input."},"401":{"description":"Missing or invalid API key."},"402":{"description":"No calls left: subscribe or buy calls at /agents."},"429":{"description":"Rate limited (60 calls a minute per key)."}}}},"/api/v1/restaurants/{restaurant}":{"get":{"operationId":"get_restaurant","summary":"Everything about one restaurant","description":"One restaurant by name or slug: how hard it is to book, its next open table for 2 and for 4, when it releases new dates, how long cancellations last, press, the team behind it, diet evidence from its menu, website, map and booking links.","parameters":[{"name":"restaurant","in":"path","required":true,"description":"Name or slug, e.g. \"Don Angie\" or \"don-angie\".","schema":{"type":"string","description":"Name or slug, e.g. \"Don Angie\" or \"don-angie\"."}}],"responses":{"200":{"description":"Results, plus usage (calls left)."},"400":{"description":"Invalid input."},"401":{"description":"Missing or invalid API key."},"402":{"description":"No calls left: subscribe or buy calls at /agents."},"429":{"description":"Rate limited (60 calls a minute per key)."}}}},"/api/v1/crowdly-index":{"get":{"operationId":"crowdly_index","summary":"The Crowdly Index","description":"Crowdly's rankings: index (the Crowdly 100, the hardest restaurants to book in New York, re-ranked every Monday, no tasting menus), climbing (getting harder to book this week), hot (most tables taken in the last 24h), new (opened in the last 6 months). Each with its next open table.","parameters":[{"name":"list","in":"query","required":false,"schema":{"type":"string","enum":["index","climbing","hot","new"],"default":"index"}},{"name":"area","in":"query","required":false,"description":"Part of the city.","schema":{"type":"string","enum":["Downtown","Midtown","Uptown","Brooklyn","Queens","Bronx"],"description":"Part of the city."}},{"name":"price_max","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":4}},{"name":"party","in":"query","required":false,"schema":{"type":"integer","enum":[2,4],"default":2}},{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Results, plus usage (calls left)."},"400":{"description":"Invalid input."},"401":{"description":"Missing or invalid API key."},"402":{"description":"No calls left: subscribe or buy calls at /agents."},"429":{"description":"Rate limited (60 calls a minute per key)."}}}},"/api/v1/openings":{"get":{"operationId":"rare_openings","summary":"Rare openings right now","description":"Tables open right now at restaurants that are booked out most nights (70%+): the cancellations worth grabbing. Gone fast; confirm on the booking page.","parameters":[],"responses":{"200":{"description":"Results, plus usage (calls left)."},"400":{"description":"Invalid input."},"401":{"description":"Missing or invalid API key."},"402":{"description":"No calls left: subscribe or buy calls at /agents."},"429":{"description":"Rate limited (60 calls a minute per key)."}}}},"/api/v1/drops":{"get":{"operationId":"upcoming_drops","summary":"When new dates open","description":"The next moments hard-to-book restaurants release new dates (Eastern time), which date opens, and the booking link to be ready on. Useful to set a reminder for the user.","parameters":[{"name":"limit","in":"query","required":false,"schema":{"type":"integer","minimum":1,"maximum":20,"default":8}}],"responses":{"200":{"description":"Results, plus usage (calls left)."},"400":{"description":"Invalid input."},"401":{"description":"Missing or invalid API key."},"402":{"description":"No calls left: subscribe or buy calls at /agents."},"429":{"description":"Rate limited (60 calls a minute per key)."}}}},"/api/v1/account":{"get":{"operationId":"account","summary":"Calls left","description":"Free. How many API calls this key has left (Premium plan, prepaid calls, free trial calls) and where to buy more.","parameters":[],"responses":{"200":{"description":"Results, plus usage (calls left)."},"400":{"description":"Invalid input."},"401":{"description":"Missing or invalid API key."},"402":{"description":"No calls left: subscribe or buy calls at /agents."},"429":{"description":"Rate limited (60 calls a minute per key)."}}}}}}