{"openapi":"3.1.0","info":{"title":"The Green agent interface","version":"1.0.0","description":"Published restaurant information and staff-reviewed booking enquiries. No live availability or automatic table confirmation. Preview access applies while the website is in development."},"servers":[{"url":"/"}],"paths":{"/agents/data.json":{"get":{"operationId":"getPublishedRestaurantInformation","responses":{"200":{"description":"Published venue, menus, carvery, catering and booking information. Missing prices remain unknown.","content":{"application/json":{"schema":{"type":"object"}}}},"503":{"description":"Published information temporarily unavailable; do not substitute stale facts.","content":{"application/json":{"schema":{"type":"object"}}}}}}},"/agents/bookings":{"post":{"operationId":"requestBooking","description":"Send only with guest approval. Reuse requestId with the same details for a retry. A receipt never confirms a reservation. No marketing signup is performed. Rate limits also apply to retries; honour Retry-After.","parameters":[{"name":"Origin","in":"header","required":false,"schema":{"type":"string"},"description":"Browser forms must send this website’s origin. JSON API clients may omit Origin; if supplied, it must match the origin receiving the request."}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","additionalProperties":false,"required":["requestId","guestConsent","type","date","time","guests","name","email","phone"],"properties":{"requestId":{"type":"string","format":"uuid","description":"A fresh UUID v4 for each new enquiry. Reuse this ID and identical details when retrying an uncertain submission."},"guestConsent":{"type":"boolean","const":true,"description":"The guest explicitly approved sending this request and their contact details."},"type":{"type":"string","enum":["table","carvery","function","wake","catering"]},"date":{"type":"string","format":"date","description":"Preferred local date, today through 730 days ahead. Carvery requests must be on a Sunday."},"time":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","description":"Preferred 24-hour Europe/London time. Sunday carvery requests: 12:00–15:00. This is a preference, not an available slot."},"guests":{"type":"integer","minimum":1,"maximum":999,"description":"Requested party size; the accepted input range is not a statement of venue capacity."},"name":{"type":"string","minLength":1,"maxLength":120},"email":{"type":"string","format":"email","maxLength":254},"phone":{"type":"string","minLength":7,"maxLength":60,"description":"Required guest contact number so staff can confirm arrangements or ask questions. Include the country code if outside the UK. Spaces, brackets, hyphens and extensions are accepted."},"message":{"type":"string","maxLength":4000}}}},"application/x-www-form-urlencoded":{"schema":{"type":"object","additionalProperties":false,"required":["requestId","guestConsent","type","date","time","guests","name","email","phone"],"properties":{"requestId":{"type":"string","format":"uuid","description":"A fresh UUID v4 for each new enquiry. Reuse this ID and identical details when retrying an uncertain submission."},"guestConsent":{"type":"string","const":"true"},"type":{"type":"string","enum":["table","carvery","function","wake","catering"]},"date":{"type":"string","format":"date","description":"Preferred local date, today through 730 days ahead. Carvery requests must be on a Sunday."},"time":{"type":"string","pattern":"^([01][0-9]|2[0-3]):[0-5][0-9]$","description":"Preferred 24-hour Europe/London time. Sunday carvery requests: 12:00–15:00. This is a preference, not an available slot."},"guests":{"type":"string","pattern":"^[0-9]{1,3}$"},"name":{"type":"string","minLength":1,"maxLength":120},"email":{"type":"string","format":"email","maxLength":254},"phone":{"type":"string","minLength":7,"maxLength":60,"description":"Required guest contact number so staff can confirm arrangements or ask questions. Include the country code if outside the UK. Spaces, brackets, hyphens and extensions are accepted."},"message":{"type":"string","maxLength":4000}}}}}},"responses":{"200":{"description":"Request received or replayed. Staff must still agree the booking with the guest.","content":{"application/json":{"schema":{"type":"object","required":["status","reference","confirmsBooking","replayed","message"],"properties":{"status":{"const":"request_received"},"reference":{"type":"string"},"confirmsBooking":{"const":false},"replayed":{"type":"boolean"},"message":{"type":"string"}}}}}},"400":{"description":"Invalid fields or missing guest approval; correct the error before resubmitting.","content":{"application/json":{"schema":{"type":"object"}}}},"403":{"description":"Origin must match this website.","content":{"application/json":{"schema":{"type":"object"}}}},"409":{"description":"Request ID already used with different details. Use a fresh ID for a new enquiry.","content":{"application/json":{"schema":{"type":"object"}}}},"413":{"description":"Request exceeds 16,000 bytes.","content":{"application/json":{"schema":{"type":"object"}}}},"415":{"description":"Use application/json or application/x-www-form-urlencoded.","content":{"application/json":{"schema":{"type":"object"}}}},"429":{"description":"Rate limited. Wait for Retry-After seconds.","content":{"application/json":{"schema":{"type":"object"}}},"headers":{"Retry-After":{"schema":{"type":"integer"},"description":"Seconds before retrying."}}},"503":{"description":"Temporarily unavailable. A receipt was not established; retry with the same request ID and details.","content":{"application/json":{"schema":{"type":"object"}}}}}}}}}