{"openapi":"3.1.0","info":{"title":"Ozvermont booking API","description":"Learn about Deerfield Valley Inn near Mount Snow and the Paradise Vermont chalet near Stratton, check open dates, get exact quotes and, with the guest's clear approval, book a stay.","version":"0.1.0"},"paths":{"/v1/discover/properties":{"get":{"tags":["discover"],"summary":"List Properties","description":"The properties a guest can book.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"list_properties_v1_discover_properties_get","responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertiesResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/discover/properties/{property_id}":{"get":{"tags":["discover"],"summary":"Get Property","description":"One property: name, what a stay includes, photos, and who the guest would pay.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_property_v1_discover_properties__property_id__get","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PropertyResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/discover/properties/{property_id}/location":{"get":{"tags":["discover"],"summary":"Get Location","description":"Where the property is, and its local time offset.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_location_v1_discover_properties__property_id__location_get","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LocationResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/discover/properties/{property_id}/accommodations":{"get":{"tags":["discover"],"summary":"Get Accommodations","description":"Room types a guest can book, and the rooms of each type.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_accommodations_v1_discover_properties__property_id__accommodations_get","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccommodationsResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/discover/properties/{property_id}/stay-rules":{"get":{"tags":["discover"],"summary":"Get Stay Rules","description":"How long a stay can be, and check-in and check-out.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_stay_rules_v1_discover_properties__property_id__stay_rules_get","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/StayRulesResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/discover/properties/{property_id}/policies":{"get":{"tags":["discover"],"summary":"Get Policies","description":"Payment, cancellation, and fee rules taken from the property file.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_policies_v1_discover_properties__property_id__policies_get","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/PoliciesResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/discover/properties/{property_id}/breakfast":{"get":{"tags":["discover"],"summary":"Get Breakfast","description":"The inn breakfast menu. The chalet returns an empty list.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_breakfast_v1_discover_properties__property_id__breakfast_get","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BreakfastResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/discover/properties/{property_id}/questions":{"get":{"tags":["discover"],"summary":"Get Questions","description":"Answers to common questions. Empty until the property file lists them.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_questions_v1_discover_properties__property_id__questions_get","parameters":[{"name":"property_id","in":"path","required":true,"schema":{"type":"string","title":"Property Id"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuestionsResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/availability":{"get":{"tags":["plan and price"],"summary":"Get Availability","description":"Whether this accommodation can be reserved for these dates at this rate. No price is returned.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_availability_v1_availability_get","parameters":[{"name":"accommodation_id","in":"query","required":true,"schema":{"type":"string","description":"Id from /v1/discover/properties/{property_id}/accommodations.","title":"Accommodation Id"},"description":"Id from /v1/discover/properties/{property_id}/accommodations."},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Check-in day, YYYY-MM-DD.","title":"Start Date"},"description":"Check-in day, YYYY-MM-DD."},{"name":"nights","in":"query","required":true,"schema":{"type":"integer","description":"Number of nights, from 1 to 366.","title":"Nights"},"description":"Number of nights, from 1 to 366."},{"name":"rate","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. \"non-refundable\" (the default) or \"refundable\". The quote lists the rates sold.","title":"Rate"},"description":"Optional. \"non-refundable\" (the default) or \"refundable\". The quote lists the rates sold."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AvailabilityResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/nearest-dates":{"get":{"tags":["plan and price"],"summary":"Get Nearest Dates","description":"The nearest open check-in dates for the same room and number of nights, at this rate.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_nearest_dates_v1_nearest_dates_get","parameters":[{"name":"accommodation_id","in":"query","required":true,"schema":{"type":"string","description":"Id from /v1/discover/properties/{property_id}/accommodations.","title":"Accommodation Id"},"description":"Id from /v1/discover/properties/{property_id}/accommodations."},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Check-in day, YYYY-MM-DD.","title":"Start Date"},"description":"Check-in day, YYYY-MM-DD."},{"name":"nights","in":"query","required":true,"schema":{"type":"integer","description":"Number of nights, from 1 to 366.","title":"Nights"},"description":"Number of nights, from 1 to 366."},{"name":"guests","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Number of guests, 1 or greater when sent.","title":"Guests"},"description":"Number of guests, 1 or greater when sent."},{"name":"rate","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. \"non-refundable\" (the default) or \"refundable\". The quote lists the rates sold.","title":"Rate"},"description":"Optional. \"non-refundable\" (the default) or \"refundable\". The quote lists the rates sold."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/NearestDatesResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/open-dates":{"get":{"tags":["plan and price"],"summary":"Get Open Dates","description":"Each check-in in the range that the stay rules allow and the rate is sold for, with its quote total.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_open_dates_v1_open_dates_get","parameters":[{"name":"accommodation_id","in":"query","required":true,"schema":{"type":"string","description":"Id from /v1/discover/properties/{property_id}/accommodations.","title":"Accommodation Id"},"description":"Id from /v1/discover/properties/{property_id}/accommodations."},{"name":"from","in":"query","required":true,"schema":{"type":"string","format":"date","description":"First check-in day to look at, YYYY-MM-DD.","title":"From"},"description":"First check-in day to look at, YYYY-MM-DD."},{"name":"to","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Last check-in day to look at, YYYY-MM-DD, on or after `from`.","title":"To"},"description":"Last check-in day to look at, YYYY-MM-DD, on or after `from`."},{"name":"nights","in":"query","required":true,"schema":{"type":"integer","description":"Number of nights, from 1 to 366.","title":"Nights"},"description":"Number of nights, from 1 to 366."},{"name":"guests","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Number of guests, 1 or greater when sent.","title":"Guests"},"description":"Number of guests, 1 or greater when sent."},{"name":"payment_method","in":"query","required":true,"schema":{"type":"string","description":"Required. \"credit card\" or \"bank\".","title":"Payment Method"},"description":"Required. \"credit card\" or \"bank\"."},{"name":"rate","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. \"non-refundable\" (the default) or \"refundable\". The quote lists the rates sold.","title":"Rate"},"description":"Optional. \"non-refundable\" (the default) or \"refundable\". The quote lists the rates sold."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/OpenDatesResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/quote":{"get":{"tags":["plan and price"],"summary":"Get Quote","description":"An itemized price at the chosen rate, or a refusal with no total.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_quote_v1_quote_get","parameters":[{"name":"accommodation_id","in":"query","required":true,"schema":{"type":"string","description":"Id from /v1/discover/properties/{property_id}/accommodations.","title":"Accommodation Id"},"description":"Id from /v1/discover/properties/{property_id}/accommodations."},{"name":"start_date","in":"query","required":true,"schema":{"type":"string","format":"date","description":"Check-in day, YYYY-MM-DD.","title":"Start Date"},"description":"Check-in day, YYYY-MM-DD."},{"name":"nights","in":"query","required":true,"schema":{"type":"integer","description":"Number of nights, from 1 to 366.","title":"Nights"},"description":"Number of nights, from 1 to 366."},{"name":"guests","in":"query","required":false,"schema":{"anyOf":[{"type":"integer"},{"type":"null"}],"description":"Number of guests, 1 or greater when sent.","title":"Guests"},"description":"Number of guests, 1 or greater when sent."},{"name":"payment_method","in":"query","required":true,"schema":{"type":"string","description":"Required. \"credit card\" or \"bank\".","title":"Payment Method"},"description":"Required. \"credit card\" or \"bank\"."},{"name":"pets","in":"query","required":false,"schema":{"type":"integer","description":"Number of pets. More than the property allows is on request.","default":0,"title":"Pets"},"description":"Number of pets. More than the property allows is on request."},{"name":"breakfast","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Breakfast entries, one per dish: <morning>@<time>:<dish>[+<add-on>]. Repeat the parameter. Send each + as %2B. Only where the quote has a breakfast_offer.","default":[],"title":"Breakfast"},"description":"Breakfast entries, one per dish: <morning>@<time>:<dish>[+<add-on>]. Repeat the parameter. Send each + as %2B. Only where the quote has a breakfast_offer."},{"name":"extra","in":"query","required":false,"schema":{"type":"array","items":{"type":"string"},"description":"Optional extras: early-check-in, late-check-out, ev-charging.","default":[],"title":"Extra"},"description":"Optional extras: early-check-in, late-check-out, ev-charging."},{"name":"rate","in":"query","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"Optional. \"non-refundable\" (the default) or \"refundable\". The quote lists the rates sold.","title":"Rate"},"description":"Optional. \"non-refundable\" (the default) or \"refundable\". The quote lists the rates sold."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/QuoteResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/bookings/{booking_id}/bank-transfer":{"get":{"tags":["bookings"],"summary":"Bank Transfer","description":"The amount, reference and bank lines for this guest's bank booking.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"bank_transfer_v1_bookings__booking_id__bank_transfer_get","parameters":[{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","title":"Booking Id"}},{"name":"X-Client-Session","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Client-Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BankTransferResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found","headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Conflict","headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Service Unavailable","headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/bookings/{booking_id}/bank-transfer-sent":{"post":{"tags":["bookings"],"summary":"Report Bank Transfer","description":"Record the guest's report. The rows stay due, and a repeat queues nothing.\n\nTool class: Sensitive write. Call it only once the client has clearly approved it, every time. Side effects: records that the guest says the transfer was sent. It holds no room and queues one owner notice.","operationId":"report_bank_transfer_v1_bookings__booking_id__bank_transfer_sent_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A value of your choice, 1 to 255 visible ASCII characters, new for each change and the same when you retry it. The same key and body replay the kept answer for 24 hours and change nothing; another body gets 409.","schema":{"type":"string","minLength":1,"maxLength":255}},{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","title":"Booking Id"}},{"name":"X-Client-Session","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Client-Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found","headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Conflict","headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"sensitive_write","x-side-effects":"records that the guest says the transfer was sent. It holds no room and queues one owner notice.","security":[{},{"PartnerKey":[]}]}},"/v1/bookings":{"post":{"tags":["bookings"],"summary":"Start Booking","description":"Turn the quote the guest approved, at the rate it priced, into an unpaid booking.\n\nTool class: Sensitive write. Call it only once the client has clearly approved it, every time. Side effects: stores an unpaid booking. It does not hold dates or take payment. With bank transfer on, a bank booking queues one email with the bank details.","operationId":"start_booking_v1_bookings_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A value of your choice, 1 to 255 visible ASCII characters, new for each change and the same when you retry it. The same key and body replay the kept answer for 24 hours and change nothing; another body gets 409.","schema":{"type":"string","minLength":1,"maxLength":255}},{"name":"X-Client-Session","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Client-Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StartBookingRequest"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"409":{"description":"The quote changed, the dates are refused, or the guest already has an open booking on these nights.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"sensitive_write","x-side-effects":"stores an unpaid booking. It does not hold dates or take payment. With bank transfer on, a bank booking queues one email with the bank details.","security":[{},{"PartnerKey":[]}]},"get":{"tags":["bookings"],"summary":"List Bookings","description":"This guest's bookings, the latest first.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"list_bookings_v1_bookings_get","parameters":[{"name":"X-Client-Session","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Client-Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingsResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/bookings/{booking_id}":{"get":{"tags":["bookings"],"summary":"Get Booking","description":"One booking for this guest.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_booking_v1_bookings__booking_id__get","parameters":[{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","title":"Booking Id"}},{"name":"X-Client-Session","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Client-Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"404":{"description":"No booking with this id belongs to this guest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/bookings/{booking_id}/cancel":{"post":{"tags":["bookings"],"summary":"Cancel Booking","description":"Cancel this booking before check-in. A non-refundable stay stays paid. A refundable stay follows its\nrefund days: all back, a cancellation request the owner decides, or the deposit only. While that request\nis open, a cancel answers the booking as it stands and sends nothing, at any date.\n\nTool class: Sensitive write. Call it only once the client has clearly approved it, every time. Side effects: cancels the booking and frees the room, or, at a refundable rate between its two refund days, records a cancellation request and keeps the booking. It queues one email and one notice. The booking's rate decides what is refunded. A cancelled booking can't be restored.","operationId":"cancel_booking_v1_bookings__booking_id__cancel_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A value of your choice, 1 to 255 visible ASCII characters, new for each change and the same when you retry it. The same key and body replay the kept answer for 24 hours and change nothing; another body gets 409.","schema":{"type":"string","minLength":1,"maxLength":255}},{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","title":"Booking Id"}},{"name":"X-Client-Session","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Client-Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"404":{"description":"No booking with this id belongs to this guest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"409":{"description":"not_cancellable: this booking can no longer be cancelled. payment_processing: a payment waits for Stripe; cancel once it settles.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"sensitive_write","x-side-effects":"cancels the booking and frees the room, or, at a refundable rate between its two refund days, records a cancellation request and keeps the booking. It queues one email and one notice. The booking's rate decides what is refunded. A cancelled booking can't be restored.","security":[{},{"PartnerKey":[]}]}},"/v1/bookings/{booking_id}/requests":{"post":{"tags":["bookings"],"summary":"Create Request","description":"Record a change or other request. The booking's room, dates and payments stay as they are.\n\nTool class: Sensitive write. Call it only once the client has clearly approved it, every time. Side effects: records the guest's request. It queues one email and one notice. The booking stays as it is.","operationId":"create_request_v1_bookings__booking_id__requests_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A value of your choice, 1 to 255 visible ASCII characters, new for each change and the same when you retry it. The same key and body replay the kept answer for 24 hours and change nothing; another body gets 409.","schema":{"type":"string","minLength":1,"maxLength":255}},{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","title":"Booking Id"}},{"name":"X-Client-Session","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Client-Session"}}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestBody"}}}},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/BookingResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"The kind is not change or other, or the text is blank.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"404":{"description":"No booking with this id belongs to this guest.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"409":{"description":"This booking is not open for a request.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"sensitive_write","x-side-effects":"records the guest's request. It queues one email and one notice. The booking stays as it is.","security":[{},{"PartnerKey":[]}]}},"/v1/bookings/{booking_id}/requests/{request_id}":{"get":{"tags":["bookings"],"summary":"Get Request","description":"One request on this guest's booking. It changes nothing.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_request_v1_bookings__booking_id__requests__request_id__get","parameters":[{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","title":"Booking Id"}},{"name":"request_id","in":"path","required":true,"schema":{"type":"string","title":"Request Id"}},{"name":"X-Client-Session","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Client-Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RequestView"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"404":{"description":"No request with this id belongs to this booking.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}},"/v1/bookings/{booking_id}/card-payment":{"post":{"tags":["bookings"],"summary":"Open Card Payment","description":"Open the guest's card page, or refuse with one of contract section 3's answers.\n\nTool class: Sensitive write. Call it only once the client has clearly approved it, every time. Side effects: opens a card payment page for the booking and closes its earlier open page. It takes no payment by itself.","operationId":"open_card_payment_v1_bookings__booking_id__card_payment_post","parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A value of your choice, 1 to 255 visible ASCII characters, new for each change and the same when you retry it. The same key and body replay the kept answer for 24 hours and change nothing; another body gets 409.","schema":{"type":"string","minLength":1,"maxLength":255}},{"name":"booking_id","in":"path","required":true,"schema":{"type":"string","title":"Booking Id"}},{"name":"X-Client-Session","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"X-Client-Session"}}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/CardPaymentResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Not Found","headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Conflict","headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"503":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"description":"Service Unavailable","headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"sensitive_write","x-side-effects":"opens a card payment page for the booking and closes its earlier open page. It takes no payment by itself.","security":[{},{"PartnerKey":[]}]}},"/v1/clients":{"post":{"tags":["clients"],"summary":"Register Client","description":"Register a client, or recognize a returning one by email, and email them a one-time code.\n\nOnly with the client's agreement, once you have told them what registering means (the\nnotice below, when the business gives one). The code goes to the email given, works for\n10 minutes and allows 5 tries; a new code replaces the previous one. Code emails are\nlimited: 3 an hour for one client, and a number a day for each partner key, or for each\naddress without one. Needs an `Idempotency-Key` header.\n\nWhat registering means, to tell the client first:\n\n> Registering keeps the guest's name, email address and phone number with Ozvermont LLC (Deerfield Valley Inn and Paradise Vermont), to contact them about their requests and bookings and to send other information relevant to their stay. It is never used for marketing. Ozvermont's privacy policy: https://www.deerfieldvalleyinn.com/privacy. Tell the guest this, and get their agreement, before registering them.\n\nTool class: Write. Side effects: stores a new client's name, email address and phone number, and sends a one-time code to that email address. A returning client's new details wait for verification.","operationId":"register_client_v1_clients_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/RegisterResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests (`rate_limited`), or too many code emails (`too_many_codes`): wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}},"403":{"description":"This email is a review account, and this copy does not sign review accounts in now (`review_account`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"409":{"description":"The `Idempotency-Key` was already used for a different request (`idempotency_key_reused`), or the first request with it is still running (`request_in_progress`: send it again in a few seconds).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"503":{"description":"The code email cannot be sent right now (`email_unavailable`, `service_unavailable`). Try again in a few minutes.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"write","x-side-effects":"stores a new client's name, email address and phone number, and sends a one-time code to that email address. A returning client's new details wait for verification.","security":[{},{"PartnerKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A value of your choice, 1 to 255 visible ASCII characters, new for each change and the same when you retry it. The same key and body replay the kept answer for 24 hours and change nothing; another body gets 409.","schema":{"type":"string","minLength":1,"maxLength":255}}]}},"/v1/clients/verify":{"post":{"tags":["clients"],"summary":"Verify Client","description":"Check the code from the client's email. If it is right, a session opens for 24 hours.\n\nA wrong code says how many tries are left; after 5, or after 10 minutes, the code\nexpires and the client registers again for a new one. The session works only with the\npartner key it was made with (or only without a key). Needs an `Idempotency-Key` header.\n\nTool class: Write. Side effects: opens a 24-hour session, applies waiting new details, and adds the client to the client contact list.","operationId":"verify_client_v1_clients_verify_post","requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyRequest"}}},"required":true},"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/VerifyResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"The code is not right (`invalid_code`: the message says how many tries are left), there is no code waiting (`code_expired`: register again), or the request is invalid.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (only when an `Authorization` header is sent; without one, calls are anonymous).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}},"409":{"description":"The `Idempotency-Key` was already used for a different request (`idempotency_key_reused`), or the first request with it is still running (`request_in_progress`: send it again in a few seconds).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}}},"x-tool-class":"write","x-side-effects":"opens a 24-hour session, applies waiting new details, and adds the client to the client contact list.","security":[{},{"PartnerKey":[]}],"parameters":[{"name":"Idempotency-Key","in":"header","required":true,"description":"A value of your choice, 1 to 255 visible ASCII characters, new for each change and the same when you retry it. The same key and body replay the kept answer for 24 hours and change nothing; another body gets 409.","schema":{"type":"string","minLength":1,"maxLength":255}}]}},"/v1/clients/me":{"get":{"tags":["clients"],"summary":"Get Me","description":"The client behind a session, and when the session expires. An MCP sign-in's access token\nworks here too: then the time is when the token expires.\n\nTool class: Read. Side effects: none. It only retrieves information: it books nothing, holds no dates, takes no payment and sends nothing.","operationId":"get_me_v1_clients_me_get","parameters":[{"name":"X-Client-Session","in":"header","required":false,"schema":{"anyOf":[{"type":"string"},{"type":"null"}],"description":"The session from POST /v1/clients/verify.","title":"X-Client-Session"},"description":"The session from POST /v1/clients/verify."}],"responses":{"200":{"description":"Successful Response","content":{"application/json":{"schema":{"$ref":"#/components/schemas/MeResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"400":{"description":"Invalid request: the error names the parameter and how to fix it.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}}}},"401":{"description":"The API key is not valid (`invalid_api_key`), or the session is missing, unknown, expired, or was made with another partner key (`invalid_session`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"WWW-Authenticate":{"description":"`Bearer`: send a valid partner key, or no `Authorization` header at all.","schema":{"type":"string"}}}},"429":{"description":"Too many requests: wait the seconds in `Retry-After`, then try again.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ErrorResponse"}}},"headers":{"X-Request-ID":{"description":"This request's id. Error answers repeat it as request_id.","schema":{"type":"string"}},"Retry-After":{"description":"Seconds to wait before trying again.","schema":{"type":"integer"}}}}},"x-tool-class":"read","security":[{},{"PartnerKey":[]}]}}},"components":{"schemas":{"AccommodationResponse":{"properties":{"id":{"type":"string","title":"Id"},"property_id":{"type":"string","title":"Property Id"},"kind":{"type":"string","enum":["hotel_room","residence"],"title":"Kind"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"max_guests":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Guests"},"rooms":{"items":{"type":"string"},"type":"array","title":"Rooms"},"amenities":{"items":{"type":"string"},"type":"array","title":"Amenities"},"photos":{"items":{"$ref":"#/components/schemas/Photo"},"type":"array","title":"Photos"}},"type":"object","required":["id","property_id","kind","name","description","max_guests","rooms","amenities","photos"],"title":"AccommodationResponse"},"AccommodationsResponse":{"properties":{"accommodations":{"items":{"$ref":"#/components/schemas/AccommodationResponse"},"type":"array","title":"Accommodations"}},"type":"object","required":["accommodations"],"title":"AccommodationsResponse"},"AvailabilityResponse":{"properties":{"accommodation_id":{"type":"string","title":"Accommodation Id"},"start_date":{"type":"string","title":"Start Date"},"nights":{"type":"integer","title":"Nights"},"check_out_date":{"type":"string","title":"Check Out Date"},"status":{"type":"string","enum":["available","unavailable","on_request"],"title":"Status"},"reason":{"type":"string","title":"Reason"},"next_step":{"type":"string","title":"Next Step"},"nearest_open_dates":{"anyOf":[{"$ref":"#/components/schemas/NearestDates"},{"type":"null"}]}},"type":"object","required":["accommodation_id","start_date","nights","check_out_date","status","reason","next_step","nearest_open_dates"],"title":"AvailabilityResponse"},"BankLine":{"properties":{"label":{"type":"string","title":"Label"},"value":{"type":"string","title":"Value"}},"type":"object","required":["label","value"],"title":"BankLine"},"BankTransferResponse":{"properties":{"amount_cents":{"type":"integer","title":"Amount Cents"},"currency":{"type":"string","title":"Currency"},"reference":{"type":"string","title":"Reference"},"deadline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deadline"},"details":{"items":{"$ref":"#/components/schemas/BankLine"},"type":"array","title":"Details"}},"type":"object","required":["amount_cents","currency","reference","details"],"title":"BankTransferResponse","description":"What the guest needs to send a domestic transfer. The route holds nothing."},"BookingPayment":{"properties":{"payment_id":{"type":"string","title":"Payment Id"},"label":{"type":"string","title":"Label"},"amount_cents":{"type":"integer","title":"Amount Cents"},"status":{"type":"string","enum":["due","paid","refund_due","refunded"],"title":"Status"},"paid_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Paid At"}},"type":"object","required":["payment_id","label","amount_cents","status"],"title":"BookingPayment"},"BookingResponse":{"properties":{"booking_id":{"type":"string","title":"Booking Id"},"status":{"type":"string","enum":["payment_pending","confirmed","completed","closed_unpaid","dates_taken","cancelled_by_guest","cancelled_by_owner"],"title":"Status"},"status_text":{"type":"string","title":"Status Text"},"stage":{"type":"string","enum":["pending","confirmed","completed","failed","cancelled"],"title":"Stage"},"who_acts_next":{"type":"string","enum":["guest","operator","nobody"],"title":"Who Acts Next"},"next_step":{"type":"string","title":"Next Step"},"deadline":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Deadline"},"amount_due_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Amount Due Cents"},"payment_page":{"anyOf":[{"$ref":"#/components/schemas/PaymentPage"},{"type":"null"}]},"allowed_actions":{"items":{"type":"string"},"type":"array","title":"Allowed Actions"},"check_back_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Back At"},"flags":{"items":{"type":"string"},"type":"array","title":"Flags"},"summary":{"$ref":"#/components/schemas/BookingSummary"},"payments":{"items":{"$ref":"#/components/schemas/BookingPayment"},"type":"array","title":"Payments"},"requests":{"items":{"$ref":"#/components/schemas/RequestView"},"type":"array","title":"Requests"},"started_at":{"type":"string","title":"Started At"},"rate":{"type":"string","enum":["non-refundable","refundable"],"title":"Rate","description":"The rate booked. Its cancellation rule is in key_terms."},"seller":{"type":"string","title":"Seller"},"key_terms":{"items":{"type":"string"},"type":"array","title":"Key Terms"},"contact_email":{"type":"string","title":"Contact Email"},"breakfast":{"items":{"$ref":"#/components/schemas/BreakfastMorning"},"type":"array","title":"Breakfast","description":"Each morning's serving time and dishes. Empty when none was ordered."}},"type":"object","required":["booking_id","status","status_text","stage","who_acts_next","next_step","allowed_actions","flags","summary","payments","started_at","rate","seller","key_terms","contact_email"],"title":"BookingResponse","description":"Where the booking stands. Dates stay free until a payment is recorded."},"BookingSummary":{"properties":{"property_id":{"type":"string","title":"Property Id"},"accommodation_id":{"type":"string","title":"Accommodation Id"},"room_id":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Room Id"},"start_date":{"type":"string","title":"Start Date"},"check_out_date":{"type":"string","title":"Check Out Date"},"nights":{"type":"integer","title":"Nights"},"guests":{"type":"integer","title":"Guests"},"pets":{"type":"integer","title":"Pets"},"payment_method":{"type":"string","enum":["credit card","bank"],"title":"Payment Method"},"currency":{"type":"string","title":"Currency"},"lines":{"items":{"$ref":"#/components/schemas/QuoteLine"},"type":"array","title":"Lines"},"total_cents":{"type":"integer","title":"Total Cents"},"deposit_cents":{"type":"integer","title":"Deposit Cents"}},"type":"object","required":["property_id","accommodation_id","start_date","check_out_date","nights","guests","pets","payment_method","currency","lines","total_cents","deposit_cents"],"title":"BookingSummary"},"BookingsResponse":{"properties":{"bookings":{"items":{"$ref":"#/components/schemas/BookingResponse"},"type":"array","title":"Bookings"}},"type":"object","required":["bookings"],"title":"BookingsResponse","description":"The guest's bookings, latest first."},"BreakfastAddonResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"cents":{"type":"integer","title":"Cents","description":"Bank-transfer price in cents. The quote gives the card price."}},"type":"object","required":["id","name","cents"],"title":"BreakfastAddonResponse"},"BreakfastDishOrdered":{"properties":{"name":{"type":"string","title":"Name"},"addons":{"items":{"type":"string"},"type":"array","title":"Addons"}},"type":"object","required":["name","addons"],"title":"BreakfastDishOrdered"},"BreakfastDishResponse":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"contains":{"type":"string","title":"Contains"},"calories":{"type":"string","title":"Calories"},"at_inn_cents":{"type":"integer","title":"At Inn Cents","description":"Bank-transfer price in cents. The quote gives the card price."},"preorder_cents":{"type":"integer","title":"Preorder Cents","description":"Bank-transfer price in cents. The quote gives the card price."},"addons":{"items":{"$ref":"#/components/schemas/BreakfastAddonResponse"},"type":"array","title":"Addons"}},"type":"object","required":["id","name","contains","calories","at_inn_cents","preorder_cents","addons"],"title":"BreakfastDishResponse"},"BreakfastMorning":{"properties":{"morning":{"type":"string","title":"Morning"},"serving_time":{"type":"string","title":"Serving Time"},"dishes":{"items":{"$ref":"#/components/schemas/BreakfastDishOrdered"},"type":"array","title":"Dishes"}},"type":"object","required":["morning","serving_time","dishes"],"title":"BreakfastMorning","description":"One morning's breakfast on a booking: the serving time and each dish ordered."},"BreakfastOffer":{"properties":{"mornings":{"items":{"type":"string"},"type":"array","title":"Mornings"},"serving_times":{"items":{"type":"string"},"type":"array","title":"Serving Times"},"entry_form":{"type":"string","title":"Entry Form","description":"One breakfast entry per dish. In a query string, send each + as %2B."},"note":{"type":"string","title":"Note"},"dishes":{"items":{"$ref":"#/components/schemas/BreakfastOfferDish"},"type":"array","title":"Dishes"}},"type":"object","required":["mornings","serving_times","entry_form","note","dishes"],"title":"BreakfastOffer","description":"What the guest can pre-order for each morning of the stay. Only at a property that serves breakfast."},"BreakfastOfferAddon":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"cents":{"type":"integer","title":"Cents","description":"Full price, in the quote's payment method."}},"type":"object","required":["id","name","cents"],"title":"BreakfastOfferAddon"},"BreakfastOfferDish":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"contains":{"type":"string","title":"Contains"},"cents":{"type":"integer","title":"Cents","description":"Pre-order price, in the quote's payment method."},"addons":{"items":{"$ref":"#/components/schemas/BreakfastOfferAddon"},"type":"array","title":"Addons"}},"type":"object","required":["id","name","contains","cents","addons"],"title":"BreakfastOfferDish"},"BreakfastResponse":{"properties":{"serving_times":{"items":{"type":"string"},"type":"array","title":"Serving Times"},"dishes":{"items":{"$ref":"#/components/schemas/BreakfastDishResponse"},"type":"array","title":"Dishes"}},"type":"object","required":["serving_times","dishes"],"title":"BreakfastResponse"},"CardPaymentLine":{"properties":{"name":{"type":"string","title":"Name"},"amount_cents":{"type":"integer","title":"Amount Cents"}},"type":"object","required":["name","amount_cents"],"title":"CardPaymentLine"},"CardPaymentResponse":{"properties":{"payment_page":{"$ref":"#/components/schemas/PaymentPage"},"amount_cents":{"type":"integer","title":"Amount Cents"},"lines":{"items":{"$ref":"#/components/schemas/CardPaymentLine"},"type":"array","title":"Lines"}},"type":"object","required":["payment_page","amount_cents","lines"],"title":"CardPaymentResponse","description":"The page the guest pays. The route does not take the payment."},"ClientDetails":{"properties":{"client_id":{"type":"string","title":"Client Id"},"first_name":{"type":"string","title":"First Name"},"last_name":{"type":"string","title":"Last Name"},"email":{"type":"string","title":"Email"},"phone":{"type":"string","title":"Phone","description":"\"+\" and digits."}},"type":"object","required":["client_id","first_name","last_name","email","phone"],"title":"ClientDetails"},"ErrorDetail":{"properties":{"code":{"type":"string","title":"Code","description":"Machine-readable reason, e.g. `invalid_nights`."},"field":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Field","description":"The request parameter at fault, if any."},"message":{"type":"string","title":"Message","description":"What is wrong and how to fix it, in plain English."},"retryable":{"type":"boolean","title":"Retryable","description":"True only when the same request can succeed later, unchanged: when rate limited (HTTP 429) or on a failure on our side (HTTP 5xx)."},"request_id":{"type":"string","title":"Request Id","description":"This request's id, also in the `X-Request-ID` header. Quote it when reporting a problem."},"next_step":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Next Step","description":"Only on some errors: what the client can do instead, in plain English."}},"type":"object","required":["code","field","message","retryable","request_id"],"title":"ErrorDetail"},"ErrorResponse":{"properties":{"error":{"$ref":"#/components/schemas/ErrorDetail"}},"type":"object","required":["error"],"title":"ErrorResponse","description":"Every error has this shape."},"LocationResponse":{"properties":{"address":{"type":"string","title":"Address"},"locality":{"type":"string","title":"Locality"},"region":{"type":"string","title":"Region"},"country":{"type":"string","title":"Country"},"utc_offset":{"type":"string","title":"Utc Offset"},"description":{"type":"string","title":"Description"}},"type":"object","required":["address","locality","region","country","utc_offset","description"],"title":"LocationResponse"},"MeResponse":{"properties":{"client":{"$ref":"#/components/schemas/ClientDetails"},"session_expires_at":{"type":"string","title":"Session Expires At","description":"When the session stops working: ISO 8601, UTC."}},"type":"object","required":["client","session_expires_at"],"title":"MeResponse","description":"The client behind the session."},"NearestDates":{"properties":{"earlier":{"items":{"type":"string"},"type":"array","title":"Earlier"},"later":{"items":{"type":"string"},"type":"array","title":"Later"},"earlier_on_request":{"items":{"type":"string"},"type":"array","title":"Earlier On Request"},"later_on_request":{"items":{"type":"string"},"type":"array","title":"Later On Request"}},"type":"object","required":["earlier","later"],"title":"NearestDates"},"NearestDatesResponse":{"properties":{"accommodation_id":{"type":"string","title":"Accommodation Id"},"start_date":{"type":"string","title":"Start Date"},"nights":{"type":"integer","title":"Nights"},"nearest_open_dates":{"$ref":"#/components/schemas/NearestDates"}},"type":"object","required":["accommodation_id","start_date","nights","nearest_open_dates"],"title":"NearestDatesResponse"},"OpenDate":{"properties":{"start_date":{"type":"string","title":"Start Date"},"check_out_date":{"type":"string","title":"Check Out Date"},"status":{"type":"string","enum":["available","on_request"],"title":"Status"},"total_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Cents"}},"type":"object","required":["start_date","check_out_date","status"],"title":"OpenDate","description":"One check-in the search found. An on-request row has no total."},"OpenDatesResponse":{"properties":{"accommodation_id":{"type":"string","title":"Accommodation Id"},"from":{"type":"string","title":"From"},"to":{"type":"string","title":"To"},"nights":{"type":"integer","title":"Nights"},"guests":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Guests"},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method"},"currency":{"type":"string","title":"Currency"},"open_dates":{"items":{"$ref":"#/components/schemas/OpenDate"},"type":"array","title":"Open Dates"},"notes":{"items":{"type":"string"},"type":"array","title":"Notes"},"next_step":{"type":"string","title":"Next Step"}},"type":"object","required":["accommodation_id","from","to","nights","guests","payment_method","currency","open_dates","notes","next_step"],"title":"OpenDatesResponse"},"PaymentPage":{"properties":{"url":{"type":"string","title":"Url"},"expires_at":{"type":"string","title":"Expires At"}},"type":"object","required":["url","expires_at"],"title":"PaymentPage","description":"The open card page. Absent unless the latest page is open and the booking is unpaid."},"Photo":{"properties":{"url":{"type":"string","title":"Url"},"caption":{"type":"string","title":"Caption"}},"type":"object","required":["url","caption"],"title":"Photo"},"PoliciesResponse":{"properties":{"policies":{"items":{"type":"string"},"type":"array","title":"Policies"}},"type":"object","required":["policies"],"title":"PoliciesResponse"},"PropertiesResponse":{"properties":{"properties":{"items":{"$ref":"#/components/schemas/PropertySummary"},"type":"array","title":"Properties"}},"type":"object","required":["properties"],"title":"PropertiesResponse"},"PropertyResponse":{"properties":{"property_id":{"type":"string","title":"Property Id"},"name":{"type":"string","title":"Name"},"description":{"type":"string","title":"Description"},"amenities":{"items":{"type":"string"},"type":"array","title":"Amenities"},"included":{"items":{"type":"string"},"type":"array","title":"Included"},"not_included":{"items":{"type":"string"},"type":"array","title":"Not Included"},"photos":{"items":{"$ref":"#/components/schemas/Photo"},"type":"array","title":"Photos"},"seller":{"type":"string","title":"Seller"},"contact_email":{"type":"string","title":"Contact Email"}},"type":"object","required":["property_id","name","description","amenities","included","not_included","photos","seller","contact_email"],"title":"PropertyResponse"},"PropertySummary":{"properties":{"id":{"type":"string","title":"Id"},"name":{"type":"string","title":"Name"},"town":{"type":"string","title":"Town"},"region":{"type":"string","title":"Region"},"description":{"type":"string","title":"Description"}},"type":"object","required":["id","name","town","region","description"],"title":"PropertySummary"},"QuestionsResponse":{"properties":{"questions":{"items":{"type":"string"},"type":"array","title":"Questions"}},"type":"object","required":["questions"],"title":"QuestionsResponse"},"QuoteAvailability":{"properties":{"status":{"type":"string","enum":["available","unavailable","on_request"],"title":"Status"},"reason":{"type":"string","title":"Reason"}},"type":"object","required":["status","reason"],"title":"QuoteAvailability"},"QuoteLine":{"properties":{"code":{"type":"string","enum":["room","cleaning","pet","breakfast","extra","resort_fee","tax"],"title":"Code"},"label":{"type":"string","title":"Label"},"cents":{"type":"integer","title":"Cents"}},"type":"object","required":["code","label","cents"],"title":"QuoteLine","description":"One money line on a quote. Cents are an integer."},"QuoteResponse":{"properties":{"accommodation_id":{"type":"string","title":"Accommodation Id"},"start_date":{"type":"string","title":"Start Date"},"nights":{"type":"integer","title":"Nights"},"check_out_date":{"type":"string","title":"Check Out Date"},"guests":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Guests"},"payment_method":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Payment Method"},"rate":{"type":"string","title":"Rate"},"rates":{"items":{"type":"string"},"type":"array","title":"Rates"},"currency":{"type":"string","title":"Currency"},"lines":{"items":{"$ref":"#/components/schemas/QuoteLine"},"type":"array","title":"Lines"},"total_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Total Cents"},"deposit_cents":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Deposit Cents"},"payment_schedule":{"items":{"type":"string"},"type":"array","title":"Payment Schedule"},"availability":{"$ref":"#/components/schemas/QuoteAvailability"},"nearest_open_dates":{"anyOf":[{"$ref":"#/components/schemas/NearestDates"},{"type":"null"}]},"next_step":{"type":"string","title":"Next Step"},"terms":{"type":"string","title":"Terms"},"seller":{"type":"string","title":"Seller"},"key_terms":{"items":{"type":"string"},"type":"array","title":"Key Terms"},"questions_for_guest":{"items":{"type":"string"},"type":"array","title":"Questions For Guest","description":"Ask the guest all of these in one message."},"breakfast_offer":{"anyOf":[{"$ref":"#/components/schemas/BreakfastOffer"},{"type":"null"}]}},"type":"object","required":["accommodation_id","start_date","nights","check_out_date","guests","payment_method","rate","rates","currency","lines","payment_schedule","availability","next_step","terms","seller","key_terms","questions_for_guest"],"title":"QuoteResponse"},"RegisterRequest":{"properties":{"first_name":{"type":"string","title":"First Name","description":"1 to 100 characters."},"last_name":{"type":"string","title":"Last Name","description":"1 to 100 characters."},"email":{"type":"string","title":"Email","description":"The code goes here, and it is how the client is recognized next time."},"phone":{"type":"string","title":"Phone","description":"International format: \"+\", the country code and number, 8 to 15 digits. Spaces, dashes, dots, and brackets are fine."},"client_agreed":{"type":"boolean","title":"Client Agreed","description":"Must be true: the client was told what registering means and agreed to register."}},"type":"object","required":["first_name","last_name","email","phone"],"title":"RegisterRequest","description":"A client to register, or recognize by email. Tell them what registering means and get agreement first."},"RegisterResponse":{"properties":{"client_id":{"type":"string","title":"Client Id","description":"The client id (starts with `cl_`). Send it with the code to verify."},"client_status":{"type":"string","title":"Client Status","description":"\"new\", or \"returning\" when the email belongs to a client already."},"code_expires_at":{"type":"string","title":"Code Expires At","description":"When the code stops working: ISO 8601, UTC."},"next_step":{"type":"string","title":"Next Step","description":"What to do next, in plain English."}},"type":"object","required":["client_id","client_status","code_expires_at","next_step"],"title":"RegisterResponse","description":"The code is on its way to the client's email."},"RequestBody":{"properties":{"kind":{"type":"string","enum":["change","other"],"title":"Kind","description":"\"change\" or \"other\". To cancel, use POST /v1/bookings/{booking_id}/cancel."},"text":{"type":"string","title":"Text"}},"type":"object","required":["kind","text"],"title":"RequestBody","description":"A guest's request. The booking itself does not change."},"RequestView":{"properties":{"request_id":{"type":"string","title":"Request Id"},"booking_id":{"type":"string","title":"Booking Id"},"kind":{"type":"string","enum":["change","other","cancellation"],"title":"Kind"},"text":{"type":"string","title":"Text"},"state":{"type":"string","enum":["open","accepted","declined"],"title":"State"},"answer":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answer"},"answered_at":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Answered At"}},"type":"object","required":["request_id","booking_id","kind","text","state"],"title":"RequestView","description":"One request, open until the operator answers."},"StartBookingRequest":{"properties":{"accommodation_id":{"type":"string","title":"Accommodation Id"},"start_date":{"type":"string","format":"date","title":"Start Date"},"nights":{"type":"integer","title":"Nights"},"guests":{"type":"integer","title":"Guests"},"payment_method":{"type":"string","enum":["credit card","bank"],"title":"Payment Method"},"pets":{"type":"integer","title":"Pets","default":0},"breakfast":{"anyOf":[{"items":{"type":"string"},"type":"array"},{"type":"null"}],"title":"Breakfast","description":"Breakfast entries from the approved quote, <morning>@<time>:<dish>[+<add-on>]. Required where the quote has a breakfast_offer: the guest's entries, or an empty list for none."},"extra":{"items":{"type":"string"},"type":"array","title":"Extra"},"approved_total_cents":{"type":"integer","title":"Approved Total Cents"},"rate":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Rate","description":"Optional. \"non-refundable\" (the default) or \"refundable\": the rate the approved quote priced."}},"type":"object","required":["accommodation_id","start_date","nights","guests","payment_method","approved_total_cents"],"title":"StartBookingRequest","description":"The quote the guest approved, to turn into an unpaid booking."},"StayRulesResponse":{"properties":{"min_nights":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Min Nights"},"max_nights":{"anyOf":[{"type":"integer"},{"type":"null"}],"title":"Max Nights"},"check_in_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check In Time"},"check_out_time":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Check Out Time"},"utc_offset":{"anyOf":[{"type":"string"},{"type":"null"}],"title":"Utc Offset"},"summary":{"items":{"type":"string"},"type":"array","title":"Summary"}},"type":"object","required":["min_nights","max_nights","check_in_time","check_out_time","utc_offset","summary"],"title":"StayRulesResponse"},"ValidationError":{"properties":{"loc":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array","title":"Location"},"msg":{"type":"string","title":"Message"},"type":{"type":"string","title":"Error Type"},"input":{"title":"Input"},"ctx":{"type":"object","title":"Context"}},"type":"object","required":["loc","msg","type"],"title":"ValidationError"},"VerifyRequest":{"properties":{"client_id":{"type":"string","title":"Client Id","description":"From the registration answer."},"code":{"type":"string","title":"Code","description":"The 6 digits from the email."}},"type":"object","required":["client_id","code"],"title":"VerifyRequest"},"VerifyResponse":{"properties":{"session":{"type":"string","title":"Session","description":"Shown once (starts with `cs_`). Send it in the X-Client-Session header on later calls, with the same partner key as now, or with no key if there is none now."},"session_expires_at":{"type":"string","title":"Session Expires At","description":"When the session stops working, 24 hours from now: ISO 8601, UTC."},"client":{"$ref":"#/components/schemas/ClientDetails"},"next_step":{"type":"string","title":"Next Step","description":"What to do next, in plain English."}},"type":"object","required":["session","session_expires_at","client","next_step"],"title":"VerifyResponse","description":"The code was right: a session for this client."}},"securitySchemes":{"PartnerKey":{"type":"http","scheme":"bearer","description":"Optional partner key, sent as Authorization: Bearer <key>. Without the header the call is anonymous."}}},"servers":[{"url":"https://api.deerfieldvalleyinn.com"}]}