{"openapi":"3.1.0","info":{"title":"Table for Forty for assistants","version":"1.0.0","description":"Read-only search over live group dining rooms in New York and Philadelphia. Every price is all in (tax, service and gratuity included), the room page's own number. Nothing is booked or charged here: a guest sends a request from the room page."},"servers":[{"url":"https://officialfoodgroup.com/api/agents/v1"}],"externalDocs":{"url":"https://officialfoodgroup.com/agents"},"x-mcp":{"name":"table-for-forty","url":"https://officialfoodgroup.com/api/agents/mcp","transport":"streamable-http","protocolVersions":["2025-11-25","2025-06-18","2025-03-26","2024-11-05","2024-10-07"]},"paths":{"/rooms":{"get":{"operationId":"search_rooms","summary":"Search live rooms, all-in price first","parameters":[{"name":"city","in":"query","required":false,"description":"New York or Philadelphia (also nyc, philly, new-york). The one hard filter.","schema":{"type":"string","maxLength":40}},{"name":"neighborhood","in":"query","required":false,"description":"A neighborhood name. Narrows the results while any room matches; never empties them.","schema":{"type":"string","maxLength":80}},{"name":"date","in":"query","required":false,"description":"An event date, YYYY-MM-DD, today or later. Adds the dated all-in total and the room's availability that day.","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"guests","in":"query","required":false,"description":"The party size. Prices the all-in per person at this count; never hides a room.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"budget","in":"query","required":false,"description":"A budget band (0-150000, 150000-300000, 300000-500000, 500000-1000000, 1000000-; cents) or a dollar amount such as 2500. Narrows while any room matches; never empties the results.","schema":{"type":"string","maxLength":20}},{"name":"occasion","in":"query","required":false,"description":"The occasion, one of: corporate, team_dinner, meeting_offsite, holiday_party, birthday, friends_family, other. Carried into each room's inquiry link only; never a filter.","schema":{"type":"string","maxLength":40}},{"name":"limit","in":"query","required":false,"description":"Rooms per page, 1 to 50.","schema":{"default":20,"type":"integer","minimum":1,"maximum":50}},{"name":"offset","in":"query","required":false,"description":"Rooms to skip, for paging.","schema":{"default":0,"type":"integer","minimum":0,"maximum":10000}}],"responses":{"200":{"description":"Rooms","content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRoomsOutput"}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"read_failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/rooms/{venue_slug}/{space_slug}":{"get":{"operationId":"get_room","summary":"One room's facts, all-in price first","parameters":[{"name":"venue_slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]{1,100}$"}},{"name":"space_slug","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9-]{1,100}$"}},{"name":"date","in":"query","required":false,"description":"An event date, YYYY-MM-DD, today or later. Adds the dated all-in total and the room's availability that day.","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}-\\d{2}$"}},{"name":"guests","in":"query","required":false,"description":"The party size. Prices the all-in per person at this count; never hides a room.","schema":{"type":"integer","minimum":1,"maximum":500}},{"name":"budget","in":"query","required":false,"description":"A budget band (0-150000, 150000-300000, 300000-500000, 500000-1000000, 1000000-; cents) or a dollar amount such as 2500. Carried into the inquiry link only.","schema":{"type":"string","maxLength":20}},{"name":"occasion","in":"query","required":false,"description":"The occasion, one of: corporate, team_dinner, meeting_offsite, holiday_party, birthday, friends_family, other. Carried into each room's inquiry link only; never a filter.","schema":{"type":"string","maxLength":40}}],"responses":{"200":{"description":"The room","content":{"application/json":{"schema":{"$ref":"#/components/schemas/GetRoomOutput"}}}},"400":{"description":"invalid_input","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"not_found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"read_failed","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"schemas":{"SearchRoomsOutput":{"type":"object","properties":{"schema_version":{"type":"number","const":1},"total":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"limit":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"offset":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"neighborhood_matched":{"description":"False when no room matched the neighborhood and the results are the city's rooms; null when none was asked.","type":["boolean","null"]},"budget_matched":{"description":"False when no room matched the budget and the filter was softened; null when none was asked.","type":["boolean","null"]},"rooms":{"type":"array","items":{"type":"object","properties":{"room_ref":{"type":"string"},"venue_slug":{"type":"string"},"space_slug":{"type":"string"},"name":{"type":"string"},"venue_name":{"type":"string"},"pricing":{"type":"object","properties":{"kind":{"type":"string","enum":["fnb_minimum","rental"],"description":"fnb_minimum: a food and beverage minimum (plus any room fee). rental: a room fee, no minimum spend."},"all_in":{"anyOf":[{"type":"object","properties":{"per_person_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The all-in per person. With no date and no guests: the room page's own lead figure. With guests or a date: the page's price stepper at that count and date."},"per_person":{"anyOf":[{"type":"string","description":"The same amount, formatted as the room page prints it."},{"type":"null"}]},"party_size":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The count per_person divides by: guests when given (held to the room's limit, as the room page's price stepper holds it), else the room's seated capacity (standing when it lists no seats)."},"total_cents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The all-in total at the food and beverage minimum: the date's minimum when a date rides, else the room's lowest."},"total":{"type":"string","description":"The same amount, formatted as the room page prints it."},"from_per_person_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The room page's lead figure, always: the all-in from, per person."},"from_per_person":{"anyOf":[{"type":"string","description":"The same amount, formatted as the room page prints it."},{"type":"null"}]},"date":{"description":"The date the total is priced on, or null for the room's lowest.","type":["string","null"]},"rule_label":{"description":"The venue's calendar pricing rule that applies on that date, or null.","type":["string","null"]},"includes":{"type":"string","description":"What the all-in includes, in the page's words, e.g. tax, service and gratuity."}},"required":["per_person_cents","per_person","party_size","total_cents","total","from_per_person_cents","from_per_person","date","rule_label","includes"],"additionalProperties":false,"description":"The all-in price: food and beverage minimum plus the venue's tax, service and gratuity. Null for a space rental with no minimum."},{"type":"null"}]},"fnb_minimum_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The food and beverage minimum, before tax and service."},"fnb_minimum":{"anyOf":[{"type":"string","description":"The same amount, formatted as the room page prints it."},{"type":"null"}]},"room_fee_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The room fee. Never inside the all-in; it trails it."},"room_fee":{"anyOf":[{"type":"string","description":"The same amount, formatted as the room page prints it."},{"type":"null"}]},"charges":{"type":"object","properties":{"service_charge_bps":{"type":["number","null"]},"gratuity_bps":{"type":["number","null"]},"gratuity_included":{"type":"boolean","description":"True when the service charge already includes gratuity."},"sales_tax_bps":{"type":["number","null"]},"card_surcharge_bps":{"description":"The venue's surcharge on card payments only, in basis points, or null when it adds none. Never inside the all-in.","type":["number","null"]}},"required":["service_charge_bps","gratuity_bps","gratuity_included","sales_tax_bps","card_surcharge_bps"],"additionalProperties":false},"estimate_note":{"type":"string"}},"required":["kind","all_in","fnb_minimum_cents","fnb_minimum","room_fee_cents","room_fee","charges","estimate_note"],"additionalProperties":false},"space_type":{"type":"string"},"city":{"type":"string"},"neighborhood":{"type":"string"},"capacity":{"type":"object","properties":{"seated":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"standing":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["seated","standing"],"additionalProperties":false},"notice_days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"availability":{"anyOf":[{"type":"object","properties":{"date":{"type":"string"},"state":{"type":"string","enum":["open","past","notice","blocked","held","closed"],"description":"open: the room takes requests that day. past, notice, blocked, held: it does not. closed: no published hours that weekday; the venue may still say yes."},"next_open_dates":{"type":"array","items":{"type":"string"},"description":"Up to three open dates after it."}},"required":["date","state","next_open_dates"],"additionalProperties":false},{"type":"null"}],"description":"Only when a date rides."},"fits":{"anyOf":[{"type":"object","properties":{"seated":{"type":"boolean"},"standing":{"type":"boolean"},"within_room_limit":{"type":"boolean","description":"False when the count is above what the room's request form accepts."}},"required":["seated","standing","within_room_limit"],"additionalProperties":false},{"type":"null"}],"description":"Only when guests ride."},"page_url":{"type":"string"},"inquiry_url":{"type":"string","description":"The room page with the search carried into its request form. Requests are sent from that page by the guest."},"photo_url":{"type":["string","null"]}},"required":["room_ref","venue_slug","space_slug","name","venue_name","pricing","space_type","city","neighborhood","capacity","notice_days","availability","fits","page_url","inquiry_url","photo_url"],"additionalProperties":false}}},"required":["schema_version","total","limit","offset","neighborhood_matched","budget_matched","rooms"],"additionalProperties":false},"GetRoomOutput":{"type":"object","properties":{"schema_version":{"type":"number","const":1},"room":{"type":"object","properties":{"room_ref":{"type":"string"},"venue_slug":{"type":"string"},"space_slug":{"type":"string"},"name":{"type":"string"},"venue_name":{"type":"string"},"pricing":{"type":"object","properties":{"kind":{"type":"string","enum":["fnb_minimum","rental"],"description":"fnb_minimum: a food and beverage minimum (plus any room fee). rental: a room fee, no minimum spend."},"all_in":{"anyOf":[{"type":"object","properties":{"per_person_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The all-in per person. With no date and no guests: the room page's own lead figure. With guests or a date: the page's price stepper at that count and date."},"per_person":{"anyOf":[{"type":"string","description":"The same amount, formatted as the room page prints it."},{"type":"null"}]},"party_size":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The count per_person divides by: guests when given (held to the room's limit, as the room page's price stepper holds it), else the room's seated capacity (standing when it lists no seats)."},"total_cents":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991,"description":"The all-in total at the food and beverage minimum: the date's minimum when a date rides, else the room's lowest."},"total":{"type":"string","description":"The same amount, formatted as the room page prints it."},"from_per_person_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The room page's lead figure, always: the all-in from, per person."},"from_per_person":{"anyOf":[{"type":"string","description":"The same amount, formatted as the room page prints it."},{"type":"null"}]},"date":{"description":"The date the total is priced on, or null for the room's lowest.","type":["string","null"]},"rule_label":{"description":"The venue's calendar pricing rule that applies on that date, or null.","type":["string","null"]},"includes":{"type":"string","description":"What the all-in includes, in the page's words, e.g. tax, service and gratuity."}},"required":["per_person_cents","per_person","party_size","total_cents","total","from_per_person_cents","from_per_person","date","rule_label","includes"],"additionalProperties":false,"description":"The all-in price: food and beverage minimum plus the venue's tax, service and gratuity. Null for a space rental with no minimum."},{"type":"null"}]},"fnb_minimum_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The food and beverage minimum, before tax and service."},"fnb_minimum":{"anyOf":[{"type":"string","description":"The same amount, formatted as the room page prints it."},{"type":"null"}]},"room_fee_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}],"description":"The room fee. Never inside the all-in; it trails it."},"room_fee":{"anyOf":[{"type":"string","description":"The same amount, formatted as the room page prints it."},{"type":"null"}]},"charges":{"type":"object","properties":{"service_charge_bps":{"type":["number","null"]},"gratuity_bps":{"type":["number","null"]},"gratuity_included":{"type":"boolean","description":"True when the service charge already includes gratuity."},"sales_tax_bps":{"type":["number","null"]},"card_surcharge_bps":{"description":"The venue's surcharge on card payments only, in basis points, or null when it adds none. Never inside the all-in.","type":["number","null"]}},"required":["service_charge_bps","gratuity_bps","gratuity_included","sales_tax_bps","card_surcharge_bps"],"additionalProperties":false},"estimate_note":{"type":"string"}},"required":["kind","all_in","fnb_minimum_cents","fnb_minimum","room_fee_cents","room_fee","charges","estimate_note"],"additionalProperties":false},"space_type":{"type":"string"},"city":{"type":"string"},"neighborhood":{"type":"string"},"capacity":{"type":"object","properties":{"seated":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"standing":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["seated","standing"],"additionalProperties":false},"notice_days":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"availability":{"anyOf":[{"type":"object","properties":{"date":{"type":"string"},"state":{"type":"string","enum":["open","past","notice","blocked","held","closed"],"description":"open: the room takes requests that day. past, notice, blocked, held: it does not. closed: no published hours that weekday; the venue may still say yes."},"next_open_dates":{"type":"array","items":{"type":"string"},"description":"Up to three open dates after it."}},"required":["date","state","next_open_dates"],"additionalProperties":false},{"type":"null"}],"description":"Only when a date rides."},"fits":{"anyOf":[{"type":"object","properties":{"seated":{"type":"boolean"},"standing":{"type":"boolean"},"within_room_limit":{"type":"boolean","description":"False when the count is above what the room's request form accepts."}},"required":["seated","standing","within_room_limit"],"additionalProperties":false},{"type":"null"}],"description":"Only when guests ride."},"page_url":{"type":"string"},"inquiry_url":{"type":"string","description":"The room page with the search carried into its request form. Requests are sent from that page by the guest."},"photo_url":{"type":["string","null"]},"description":{"type":"string"},"venue_description":{"type":["string","null"]},"address":{"type":"object","propertyNames":{"type":"string"},"additionalProperties":{"type":"string"},"description":"The venue's address as the room page's structured data prints it (schema.org PostalAddress)."},"amenities":{"type":"array","items":{"type":"string"}},"photos":{"type":"array","items":{"type":"string"}},"key_facts":{"type":"array","items":{"type":"object","properties":{"label":{"type":"string"},"value":{"type":"string"}},"required":["label","value"],"additionalProperties":false},"description":"The room page's Key facts, verbatim."},"menus":{"anyOf":[{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"per_person_cents":{"anyOf":[{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},{"type":"null"}]},"per_person":{"anyOf":[{"type":"string","description":"The same amount, formatted as the room page prints it."},{"type":"null"}]}},"required":["name","per_person_cents","per_person"],"additionalProperties":false}},{"type":"null"}],"description":"The room's menus with their all-in per person, when the room page shows menus; else null."},"availability_window":{"type":"object","properties":{"today":{"type":"string"},"min_date":{"type":"string","description":"The first date the room's notice allows."},"first_open_date":{"type":["string","null"]},"next_open_dates":{"type":"array","items":{"type":"string"}}},"required":["today","min_date","first_open_date","next_open_dates"],"additionalProperties":false},"how_booking_works":{"type":"string"},"cancellation_policy_url":{"type":"string"}},"required":["room_ref","venue_slug","space_slug","name","venue_name","pricing","space_type","city","neighborhood","capacity","notice_days","availability","fits","page_url","inquiry_url","photo_url","description","venue_description","address","amenities","photos","key_facts","menus","availability_window","how_booking_works","cancellation_policy_url"],"additionalProperties":false}},"required":["schema_version","room"],"additionalProperties":false},"Error":{"type":"object","properties":{"error":{"type":"object","properties":{"code":{"type":"string","enum":["invalid_input","not_found","read_failed","server_error"]},"message":{"type":"string"},"details":{"type":"array","items":{"type":"object","properties":{"path":{"type":"string"},"message":{"type":"string"}},"required":["path","message"],"additionalProperties":false}}},"required":["code","message"],"additionalProperties":false}},"required":["error"],"additionalProperties":false}}}}