{
 "openapi": "3.1.0",
 "info": {
  "title": "Corissia Hotels API v3",
  "version": "3.0",
  "description": "Read-only API of corissia.com: the hotels, their facts (from the confirmed facts registry; what is not confirmed is reported as unknown) and quotes for an exact stay and guest composition. Dates are never changed silently: an invalid stay gets an explicit error code. A quote is not a reservation: the guest books on the website (request, or booking with a 20% deposit where the room is available). Prices are per room for the stay, the same as on the website. Restaurants, bars, spa and menus: as published on the website, with the prices of the menus; no reservation of a table or treatment. Open positions of the career page in English, German and Greek; applications only on the page of a position."
 },
 "servers": [
  {
   "url": "https://corissia.com/api/v3"
  }
 ],
 "paths": {
  "/": {
   "get": {
    "operationId": "getIndex",
    "summary": "API index",
    "responses": {
     "200": {
      "description": "Index",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Index"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/hotels": {
   "get": {
    "operationId": "listHotels",
    "summary": "The five hotels, for comparison",
    "parameters": [
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "de",
        "en"
       ],
       "default": "en"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Hotels",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HotelsList"
        }
       }
      }
     },
     "304": {
      "description": "Not modified"
     },
     "400": {
      "description": "Invalid parameter",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/hotels/{hotel_id}": {
   "get": {
    "operationId": "getHotel",
    "summary": "Facts of a hotel and its room types",
    "parameters": [
     {
      "name": "hotel_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      }
     },
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "de",
        "en"
       ],
       "default": "en"
      }
     },
     {
      "name": "category",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Hotel",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/HotelDetail"
        }
       }
      }
     },
     "304": {
      "description": "Not modified"
     },
     "400": {
      "description": "Invalid parameter",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown hotel",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/quotes": {
   "get": {
    "operationId": "getQuote",
    "summary": "Prices for an exact stay and guest composition",
    "parameters": [
     {
      "name": "hotel",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      }
     },
     {
      "name": "checkin",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "date",
       "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
      }
     },
     {
      "name": "checkout",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string",
       "format": "date",
       "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
      }
     },
     {
      "name": "occupancy",
      "in": "query",
      "required": true,
      "schema": {
       "type": "string"
      },
      "description": "Rooms separated by |, each room adults or adults-age,age (ages 0-17 on arrival). Example: 2-8,4|2 (URL-encoded 2-8%2C4%7C2). At most 5 rooms."
     },
     {
      "name": "room",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      }
     },
     {
      "name": "board",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "BB",
        "HB",
        "AI"
       ]
      }
     },
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "de",
        "en"
       ],
       "default": "en"
      }
     },
     {
      "name": "via",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "api",
        "mcp"
       ],
       "default": "api"
      },
      "description": "mcp: set by the Corissia MCP server, so the booking links show they came through it."
     },
     {
      "name": "format",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "json",
        "text"
       ],
       "default": "json"
      },
      "description": "text: the same quote as text/plain lines (for assistants whose fetch tool reads no JSON); errors as text too."
     }
    ],
    "responses": {
     "200": {
      "description": "Quote for the exact stay",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Quote"
        }
       },
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "304": {
      "description": "Not modified"
     },
     "400": {
      "description": "Missing or invalid parameter, or invalid dates",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown hotel or room type",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "422": {
      "description": "Age restriction, not operating, operation unconfirmed or occupancy not supported",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/venues": {
   "get": {
    "operationId": "listVenues",
    "summary": "Restaurants, bars, spa, room and beach service, as the website shows them",
    "description": "Read only. Hours, prices and access as published on the website; they may change. Nothing can be reserved here: for a table or a treatment give the reservation URL or phone of the venue; where reservation is null the website offers none.",
    "parameters": [
     {
      "name": "hotel",
      "in": "query",
      "required": false,
      "schema": {
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      },
      "description": "Venues the guests of this hotel use"
     },
     {
      "name": "type",
      "in": "query",
      "required": false,
      "schema": {
       "enum": [
        "restaurant",
        "bar",
        "cafe",
        "spa",
        "room_service",
        "beach_service"
       ]
      }
     },
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "de",
        "en"
       ],
       "default": "en"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Venues",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/VenuesList"
        }
       }
      }
     },
     "304": {
      "description": "Not modified"
     },
     "400": {
      "description": "Invalid parameter",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/venues/{venue_id}": {
   "get": {
    "operationId": "getVenue",
    "summary": "A venue: access, opening hours, services, reservation and its menu sections",
    "parameters": [
     {
      "name": "venue_id",
      "in": "path",
      "required": true,
      "schema": {
       "enum": [
        "restaurant-poeme",
        "restaurant-celeste",
        "bar-c",
        "bar-littlegalaxy",
        "fauchon",
        "room-service-hiltonchania",
        "wellness-loccitane",
        "restaurant-360",
        "restaurant-flair",
        "bar-flair",
        "bar-flairbeach",
        "room-service-flair",
        "wellness-flair",
        "restaurant-ophelia",
        "restaurant-autograph",
        "bar-H2O",
        "room-service",
        "wellness-harmony",
        "restaurant-armonia",
        "restaurant-park",
        "bar-park",
        "beach-park",
        "bar-panorama",
        "bar-portokali",
        "wellness-princess"
       ]
      }
     },
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "de",
        "en"
       ],
       "default": "en"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Venue",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/VenueDetail"
        }
       }
      }
     },
     "304": {
      "description": "Not modified"
     },
     "400": {
      "description": "Invalid parameter",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown venue",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/venues/{venue_id}/menu": {
   "get": {
    "operationId": "getVenueMenu",
    "summary": "The menu or treatment list of a venue with the prices of the website",
    "parameters": [
     {
      "name": "venue_id",
      "in": "path",
      "required": true,
      "schema": {
       "enum": [
        "restaurant-poeme",
        "restaurant-celeste",
        "bar-c",
        "bar-littlegalaxy",
        "fauchon",
        "room-service-hiltonchania",
        "wellness-loccitane",
        "restaurant-360",
        "restaurant-flair",
        "bar-flair",
        "bar-flairbeach",
        "room-service-flair",
        "wellness-flair",
        "restaurant-ophelia",
        "restaurant-autograph",
        "bar-H2O",
        "room-service",
        "wellness-harmony",
        "restaurant-armonia",
        "restaurant-park",
        "bar-park",
        "beach-park",
        "bar-panorama",
        "bar-portokali",
        "wellness-princess"
       ]
      }
     },
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "de",
        "en"
       ],
       "default": "en"
      }
     },
     {
      "name": "section",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string"
      },
      "description": "One section (id from menu_sections)"
     }
    ],
    "responses": {
     "200": {
      "description": "Menu",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Menu"
        }
       }
      }
     },
     "304": {
      "description": "Not modified"
     },
     "400": {
      "description": "Invalid parameter or unknown section",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Unknown venue",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/dining/{hotel_id}": {
   "get": {
    "operationId": "getDiningText",
    "summary": "Restaurants, bars and spa for the guests of a hotel, with hours, access, reservation and menu links (text)",
    "description": "For assistants without the MCP connector: a URL without query string. Append /de for German.",
    "parameters": [
     {
      "name": "hotel_id",
      "in": "path",
      "required": true,
      "schema": {
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Text",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "404": {
      "description": "Unknown hotel (text)",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/dining/{hotel_id}/de": {
   "get": {
    "operationId": "getDiningTextGerman",
    "summary": "The same in German",
    "parameters": [
     {
      "name": "hotel_id",
      "in": "path",
      "required": true,
      "schema": {
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Text",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "404": {
      "description": "Unknown hotel (text)",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/menu/{venue_id}": {
   "get": {
    "operationId": "getMenuText",
    "summary": "The menu of a venue with prices (text); /de for German; a longer menu continues at /menu/{venue_id}[/de]/{page}",
    "parameters": [
     {
      "name": "venue_id",
      "in": "path",
      "required": true,
      "schema": {
       "enum": [
        "restaurant-poeme",
        "restaurant-celeste",
        "bar-c",
        "bar-littlegalaxy",
        "fauchon",
        "room-service-hiltonchania",
        "wellness-loccitane",
        "restaurant-360",
        "restaurant-flair",
        "bar-flair",
        "bar-flairbeach",
        "room-service-flair",
        "wellness-flair",
        "restaurant-ophelia",
        "restaurant-autograph",
        "bar-H2O",
        "room-service",
        "wellness-harmony",
        "restaurant-armonia",
        "restaurant-park",
        "bar-park",
        "beach-park",
        "bar-panorama",
        "bar-portokali",
        "wellness-princess"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Text, at most 65,536 bytes per page",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "404": {
      "description": "Unknown venue or page (text)",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/menu/{venue_id}/de": {
   "get": {
    "operationId": "getMenuTextGerman",
    "summary": "The same in German (the German page of a venue may show its English menu: then it is given as it is)",
    "parameters": [
     {
      "name": "venue_id",
      "in": "path",
      "required": true,
      "schema": {
       "enum": [
        "restaurant-poeme",
        "restaurant-celeste",
        "bar-c",
        "bar-littlegalaxy",
        "fauchon",
        "room-service-hiltonchania",
        "wellness-loccitane",
        "restaurant-360",
        "restaurant-flair",
        "bar-flair",
        "bar-flairbeach",
        "room-service-flair",
        "wellness-flair",
        "restaurant-ophelia",
        "restaurant-autograph",
        "bar-H2O",
        "room-service",
        "wellness-harmony",
        "restaurant-armonia",
        "restaurant-park",
        "bar-park",
        "beach-park",
        "bar-panorama",
        "bar-portokali",
        "wellness-princess"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Text",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "404": {
      "description": "Unknown venue or page (text)",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/jobs": {
   "get": {
    "operationId": "listJobs",
    "summary": "The open positions of the career page",
    "description": "Read only, as the career page shows them: title, departments, place of work, employment type, gross salary per month where the page discloses it, date posted and the page of the position. Applications only on that page, by the candidate.",
    "parameters": [
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "en",
        "de",
        "el"
       ],
       "default": "en"
      }
     },
     {
      "name": "department",
      "in": "query",
      "required": false,
      "schema": {
       "enum": [
        "management",
        "sales",
        "backoffice",
        "frontoffice",
        "wellness",
        "housekeeping",
        "engineering",
        "technology",
        "food",
        "fnb"
       ]
      }
     },
     {
      "name": "location",
      "in": "query",
      "required": false,
      "schema": {
       "enum": [
        "georgioupolis",
        "chania"
       ]
      },
      "description": "Positions with work at this place (a position for both places matches both)."
     }
    ],
    "responses": {
     "200": {
      "description": "Open positions",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/JobsList"
        }
       }
      }
     },
     "304": {
      "description": "Not modified"
     },
     "400": {
      "description": "Invalid parameter",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/jobs/{job_id}": {
   "get": {
    "operationId": "getJob",
    "summary": "One open position with its description",
    "parameters": [
     {
      "name": "job_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "pattern": "^[A-Za-z0-9_-]{1,64}$"
      }
     },
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "en",
        "de",
        "el"
       ],
       "default": "en"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Position",
      "headers": {
       "ETag": {
        "schema": {
         "type": "string"
        }
       }
      },
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/JobDetail"
        }
       }
      }
     },
     "304": {
      "description": "Not modified"
     },
     "400": {
      "description": "Invalid parameter",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "404": {
      "description": "Not an open position",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/links": {
   "get": {
    "operationId": "getQuoteLinks",
    "summary": "Index of quote links for assistants without the MCP connector (text)",
    "description": "Fetch tools of assistants open only URLs that already appeared in the conversation. This index lists, for every hotel and month of arrival, the complete URL of a page with complete quote URLs (2 adults, 1 room, 1-14 nights).",
    "responses": {
     "200": {
      "description": "Index",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/links/{hotel_id}": {
   "get": {
    "operationId": "getQuoteLinksOfHotel",
    "summary": "The months of arrival of one hotel, with the complete URL of each month page (text); /de for German",
    "parameters": [
     {
      "name": "hotel_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Lines «YYYY-MM: URL»",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "404": {
      "description": "Unknown hotel",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/links/{hotel_id}/{month}": {
   "get": {
    "operationId": "getQuoteLinksOfMonth",
    "summary": "Complete quote URLs by arrival date and nights (text)",
    "parameters": [
     {
      "name": "hotel_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      }
     },
     {
      "name": "month",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "pattern": "^[0-9]{4}-[0-9]{2}$"
      }
     },
     {
      "name": "lang",
      "in": "query",
      "required": false,
      "schema": {
       "type": "string",
       "enum": [
        "de",
        "en"
       ],
       "default": "en"
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Lines «YYYY-MM-DD +N: URL» (URLs without query string), at most 65,536 bytes per page; a longer month continues at /links/{hotel_id}/{month}[/de]/{page}",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "404": {
      "description": "Unknown hotel, month outside the catalogue or page",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/links/{hotel_id}/{month}/{lang}": {
   "get": {
    "operationId": "getQuoteLinksOfMonthInLanguage",
    "summary": "The same page with the quote URLs in a language (de); a path without query string",
    "parameters": [
     {
      "name": "hotel_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      }
     },
     {
      "name": "month",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "pattern": "^[0-9]{4}-[0-9]{2}$"
      }
     },
     {
      "name": "lang",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "de",
        "en"
       ]
      }
     }
    ],
    "responses": {
     "200": {
      "description": "As /links/{hotel_id}/{month}",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "404": {
      "description": "Unknown hotel, month outside the catalogue or page",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/q/{hotel_id}/{checkin}/{nights}": {
   "get": {
    "operationId": "getQuoteText",
    "summary": "Live quote for 2 adults as text: the URLs of the link pages, without query string",
    "description": "The same as /quotes?hotel={hotel_id}&checkin={checkin}&checkout={checkin + nights}&occupancy=2&format=text: the same checks, status codes, error codes and amounts. Append /de for German.",
    "parameters": [
     {
      "name": "hotel_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      }
     },
     {
      "name": "checkin",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "format": "date",
       "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
      }
     },
     {
      "name": "nights",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 99
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Quote as text",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "400": {
      "description": "Invalid dates (text)",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "404": {
      "description": "Unknown hotel (text)",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "422": {
      "description": "Not operating, operation unconfirmed (text)",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  },
  "/q/{hotel_id}/{checkin}/{nights}/{guests}": {
   "get": {
    "operationId": "getQuoteTextForGuests",
    "summary": "Live quote as text for other guests: the guests after the nights, a path without query string",
    "description": "The same as /quotes?hotel={hotel_id}&checkin={checkin}&checkout={checkin + nights}&occupancy={guests}&format=text: the same checks, status codes, error codes and amounts. guests has the form of occupancy: 1 (1 adult), 3, 2-8,4 (2 adults with children aged 8 and 4), 2%7C2 (two rooms of 2 adults). Append /de for German. Also /q/{hotel_id}/{checkin}/{nights}?occupancy={guests} (and board, room); the guests given twice with different values answer 400 INVALID_PARAMETER.",
    "parameters": [
     {
      "name": "hotel_id",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      }
     },
     {
      "name": "checkin",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "format": "date",
       "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
      }
     },
     {
      "name": "nights",
      "in": "path",
      "required": true,
      "schema": {
       "type": "integer",
       "minimum": 1,
       "maximum": 99
      }
     },
     {
      "name": "guests",
      "in": "path",
      "required": true,
      "schema": {
       "type": "string",
       "pattern": "^[0-9][0-9,|-]{0,199}$"
      },
      "examples": {
       "one_adult": {
        "value": "1"
       },
       "family": {
        "value": "2-8,4"
       },
       "two_rooms": {
        "value": "2|2"
       }
      }
     }
    ],
    "responses": {
     "200": {
      "description": "Quote as text",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "400": {
      "description": "Invalid dates or guests (text)",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "404": {
      "description": "Unknown hotel (text)",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "422": {
      "description": "Not operating, operation unconfirmed, no room type for the guests (text)",
      "content": {
       "text/plain": {
        "schema": {
         "type": "string"
        }
       }
      }
     },
     "405": {
      "description": "Method not allowed (GET and HEAD only)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "429": {
      "description": "Too many requests (60 per visitor and minute, 600 in all)",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     },
     "503": {
      "description": "Data not available right now; retry in a minute",
      "content": {
       "application/json": {
        "schema": {
         "$ref": "#/components/schemas/Error"
        }
       }
      }
     }
    }
   }
  }
 },
 "components": {
  "schemas": {
   "Error": {
    "type": "object",
    "properties": {
     "api_version": {
      "const": "3.0"
     },
     "error": {
      "type": "object",
      "properties": {
       "code": {
        "type": "string",
        "enum": [
         "MISSING_PARAMETER",
         "INVALID_PARAMETER",
         "HOTEL_NOT_FOUND",
         "ROOM_NOT_FOUND",
         "NOT_FOUND",
         "CHECKOUT_NOT_AFTER_CHECKIN",
         "CHECKIN_IN_PAST",
         "DATE_OUT_OF_RANGE",
         "AGE_RESTRICTION",
         "HOTEL_NOT_OPERATING",
         "OPERATION_UNCONFIRMED",
         "OCCUPANCY_NOT_SUPPORTED",
         "METHOD_NOT_ALLOWED",
         "RATE_LIMITED",
         "TEMPORARY_ERROR",
         "VENUE_NOT_FOUND",
         "JOB_NOT_FOUND"
        ]
       },
       "message": {
        "type": "string"
       },
       "field": {
        "type": "string"
       },
       "room_index": {
        "type": "integer"
       },
       "min_age": {
        "type": "integer"
       },
       "suggestions": {
        "type": "object",
        "properties": {
         "operating_periods": {
          "type": "array",
          "items": {
           "$ref": "#/components/schemas/OperatingPeriod"
          }
         }
        },
        "additionalProperties": false,
        "required": [
         "operating_periods"
        ]
       }
      },
      "additionalProperties": false,
      "required": [
       "code",
       "message"
      ]
     },
     "request": {
      "type": "object",
      "additionalProperties": {
       "type": "string",
       "maxLength": 200
      },
      "description": "The known parameters as they came, cut to 200 characters."
     }
    },
    "additionalProperties": false,
    "required": [
     "api_version",
     "error",
     "request"
    ]
   },
   "Fact": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "key": {
      "type": "string"
     },
     "status": {
      "type": "string",
      "enum": [
       "verified",
       "unknown"
      ],
      "description": "unknown also covers facts not confirmed yet. Unknown does not mean no."
     },
     "answer": {
      "const": "unknown, ask the hotel"
     },
     "value": {
      "description": "dining.board_inclusions: BoardInclusions (what each board includes, from the board window before the cart); dining.restaurants: the venue ids for the guests of the hotel (GET /venues)."
     },
     "text": {
      "type": "string"
     },
     "conditions": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "valid_from": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
     },
     "valid_to": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
     },
     "source": {
      "type": "object",
      "properties": {
       "label": {
        "type": "string"
       },
       "url": {
        "type": "string"
       }
      },
      "additionalProperties": false,
      "required": [
       "label"
      ]
     }
    },
    "additionalProperties": false,
    "required": [
     "id",
     "key",
     "status"
    ]
   },
   "FactGroups": {
    "type": "object",
    "description": "Facts by category (identity, operation, policies, location, pools, dining, services, accessibility, terms, room).",
    "additionalProperties": {
     "type": "array",
     "items": {
      "$ref": "#/components/schemas/Fact"
     }
    }
   },
   "BoardInclusions": {
    "type": "array",
    "description": "One entry per board the hotel sells, as the board window before the cart shows it. All inclusive of Harmony and Hilton has two entries by arrival date (arrivals_until / arrivals_from).",
    "items": {
     "type": "object",
     "properties": {
      "board": {
       "enum": [
        "BB",
        "HB",
        "AI"
       ]
      },
      "name": {
       "type": "string"
      },
      "arrivals_from": {
       "type": [
        "string",
        "null"
       ],
       "format": "date",
       "description": "This entry is for arrivals from this date (The Refined Inclusive 2027 of Harmony and Hilton); null: no lower limit."
      },
      "arrivals_until": {
       "type": [
        "string",
        "null"
       ],
       "format": "date",
       "description": "This entry is for arrivals until this date; null: no upper limit."
      },
      "meals": {
       "type": "array",
       "minItems": 4,
       "maxItems": 4,
       "items": {
        "type": "object",
        "properties": {
         "meal": {
          "enum": [
           "breakfast",
           "lunch",
           "dinner",
           "bar"
          ]
         },
         "title": {
          "type": "string"
         },
         "hours": {
          "type": "string",
          "pattern": "^\\d{2}:\\d{2} - \\d{2}:\\d{2}$",
          "description": "The hours of the column of the window."
         },
         "venues": {
          "type": "array",
          "items": {
           "type": "object",
           "properties": {
            "venue": {
             "oneOf": [
              {
               "enum": [
                "restaurant-poeme",
                "restaurant-celeste",
                "bar-c",
                "bar-littlegalaxy",
                "fauchon",
                "room-service-hiltonchania",
                "wellness-loccitane",
                "restaurant-360",
                "restaurant-flair",
                "bar-flair",
                "bar-flairbeach",
                "room-service-flair",
                "wellness-flair",
                "restaurant-ophelia",
                "restaurant-autograph",
                "bar-H2O",
                "room-service",
                "wellness-harmony",
                "restaurant-armonia",
                "restaurant-park",
                "bar-park",
                "beach-park",
                "bar-panorama",
                "bar-portokali",
                "wellness-princess"
               ]
              },
              {
               "type": "null"
              }
             ],
             "description": "The venue (GET /venues/{venue_id}); null: a place without its own venue."
            },
            "name": {
             "type": "string"
            },
            "label": {
             "type": [
              "string",
              "null"
             ]
            },
            "food": {
             "type": [
              "boolean",
              "null"
             ],
             "description": "The food of this meal is included with the board; null in the bar column."
            },
            "beverages": {
             "type": "boolean",
             "description": "Beverages included; with all inclusive see the beverages note (conditions)."
            },
            "booking": {
             "enum": [
              "advance_booking_required",
              "upon_request_advance_booking",
              null
             ]
            },
            "not_for_rooms": {
             "type": "array",
             "items": {
              "type": "string"
             },
             "description": "Room types whose board does not cover this venue (neither food nor beverages)."
            }
           },
           "additionalProperties": false,
           "required": [
            "venue",
            "name",
            "label",
            "food",
            "beverages",
            "booking",
            "not_for_rooms"
           ]
          }
         }
        },
        "additionalProperties": false,
        "required": [
         "meal",
         "title",
         "hours",
         "venues"
        ]
       }
      }
     },
     "additionalProperties": false,
     "required": [
      "board",
      "name",
      "arrivals_from",
      "arrivals_until",
      "meals"
     ]
    }
   },
   "OperatingPeriod": {
    "type": "object",
    "properties": {
     "from": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
     },
     "to": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
     },
     "source": {
      "type": "string",
      "enum": [
       "master_rates",
       "site_default"
      ],
      "description": "master_rates: the season plan of the hotel; site_default: written dates of the site, an estimate."
     }
    },
    "additionalProperties": false,
    "required": [
     "from",
     "to",
     "source"
    ]
   },
   "HotelRef": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "url": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "required": [
     "id",
     "name",
     "url"
    ]
   },
   "Contact": {
    "type": "object",
    "properties": {
     "phone": {
      "type": "string"
     },
     "request_url": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "required": [
     "phone",
     "request_url"
    ]
   },
   "Index": {
    "type": "object",
    "properties": {
     "api_version": {
      "const": "3.0"
     },
     "description": {
      "type": "string"
     },
     "openapi": {
      "type": "string"
     },
     "routes": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "path": {
         "type": "string"
        },
        "method": {
         "type": "string"
        },
        "description": {
         "type": "string"
        }
       },
       "additionalProperties": false,
       "required": [
        "path",
        "method"
       ]
      }
     }
    },
    "additionalProperties": false,
    "required": [
     "api_version",
     "description",
     "openapi",
     "routes"
    ]
   },
   "HotelSummary": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "url": {
      "type": "string"
     },
     "summary_facts": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Fact"
      }
     },
     "operating_periods": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/OperatingPeriod"
      }
     },
     "facts_url": {
      "type": "string"
     },
     "quotes_url_template": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "required": [
     "id",
     "name",
     "url",
     "summary_facts",
     "operating_periods",
     "facts_url",
     "quotes_url_template"
    ]
   },
   "HotelsList": {
    "type": "object",
    "properties": {
     "api_version": {
      "const": "3.0"
     },
     "lang": {
      "enum": [
       "de",
       "en"
      ]
     },
     "hotels": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/HotelSummary"
      }
     }
    },
    "additionalProperties": false,
    "required": [
     "api_version",
     "lang",
     "hotels"
    ]
   },
   "BookingLimits": {
    "type": "object",
    "properties": {
     "max_adults": {
      "type": "integer"
     },
     "max_children": {
      "type": "integer"
     },
     "max_total": {
      "type": "integer"
     },
     "max_infants": {
      "type": "integer"
     },
     "infants_count_toward_total": {
      "type": "boolean"
     },
     "age_bands": {
      "type": "object",
      "properties": {
       "infant": {
        "const": "0-1"
       },
       "child": {
        "const": "2-12"
       },
       "adult_from": {
        "const": 13
       }
      },
      "additionalProperties": false,
      "required": [
       "infant",
       "child",
       "adult_from"
      ]
     }
    },
    "additionalProperties": false,
    "required": [
     "max_adults",
     "max_children",
     "max_total",
     "max_infants",
     "infants_count_toward_total",
     "age_bands"
    ]
   },
   "Room": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "url": {
      "type": "string"
     },
     "booking_limits": {
      "$ref": "#/components/schemas/BookingLimits"
     },
     "facts": {
      "$ref": "#/components/schemas/FactGroups"
     }
    },
    "additionalProperties": false,
    "required": [
     "id",
     "name",
     "url",
     "booking_limits",
     "facts"
    ]
   },
   "HotelDetail": {
    "type": "object",
    "properties": {
     "api_version": {
      "const": "3.0"
     },
     "lang": {
      "enum": [
       "de",
       "en"
      ]
     },
     "hotel": {
      "$ref": "#/components/schemas/HotelRef"
     },
     "contact": {
      "$ref": "#/components/schemas/Contact"
     },
     "categories": {
      "type": "array",
      "items": {
       "type": "string"
      }
     },
     "facts": {
      "$ref": "#/components/schemas/FactGroups"
     },
     "rooms": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Room"
      }
     },
     "operating_periods": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/OperatingPeriod"
      }
     }
    },
    "additionalProperties": false,
    "required": [
     "api_version",
     "lang",
     "hotel",
     "contact",
     "categories",
     "facts",
     "rooms",
     "operating_periods"
    ]
   },
   "Rate": {
    "type": "object",
    "properties": {
     "board": {
      "type": "string",
      "enum": [
       "BB",
       "HB",
       "FB",
       "AI"
      ]
     },
     "board_name": {
      "type": "string"
     },
     "price_basis": {
      "const": "per_room_for_stay"
     },
     "single_use": {
      "type": "boolean",
      "description": "Single-occupancy price: 1 adult and nobody else."
     },
     "total": {
      "type": "integer",
      "minimum": 1
     },
     "total_before_discount": {
      "type": "integer",
      "minimum": 1
     },
     "per_night": {
      "type": "array",
      "minItems": 1,
      "items": {
       "type": "object",
       "properties": {
        "date": {
         "type": "string",
         "format": "date",
         "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
        },
        "amount": {
         "type": "integer",
         "minimum": 1
        }
       },
       "additionalProperties": false,
       "required": [
        "date",
        "amount"
       ]
      }
     },
     "stay_tax": {
      "type": "object",
      "properties": {
       "total": {
        "type": "integer",
        "minimum": 0
       },
       "included": {
        "const": false
       },
       "payable": {
        "const": "at_hotel"
       }
      },
      "additionalProperties": false,
      "required": [
       "total",
       "included",
       "payable"
      ]
     },
     "deposit": {
      "type": "object",
      "properties": {
       "percent": {
        "const": 20
       },
       "amount": {
        "type": "integer",
        "minimum": 0
       }
      },
      "additionalProperties": false,
      "required": [
       "percent",
       "amount"
      ]
     },
     "balance_at_hotel": {
      "type": "integer",
      "minimum": 0
     },
     "cancellation": {
      "type": "object",
      "properties": {
       "free_until": {
        "oneOf": [
         {
          "type": "string",
          "format": "date",
          "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
         },
         {
          "type": "null"
         }
        ]
       },
       "fee_from": {
        "type": "string",
        "format": "date",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
       },
       "fee": {
        "const": "deposit"
       }
      },
      "additionalProperties": false,
      "required": [
       "free_until",
       "fee_from",
       "fee"
      ]
     },
     "included_extras": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "type": {
         "const": "airport_transfer"
        },
        "price": {
         "const": 0
        }
       },
       "additionalProperties": false,
       "required": [
        "type",
        "price"
       ]
      }
     },
     "optional_extras": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "type": {
         "const": "sea_view"
        },
        "total": {
         "type": "integer",
         "minimum": 1
        }
       },
       "additionalProperties": false,
       "required": [
        "type",
        "total"
       ]
      }
     },
     "booking_url": {
      "type": "string",
      "format": "uri",
      "description": "Give this link to the guest for this room and board: it opens the room page of corissia.com with the dates, the board and the guests of this room. The guest adds the room and sends the request (or books), typing name, e-mail and phone there; nothing personal is in the link."
     }
    },
    "additionalProperties": false,
    "required": [
     "board",
     "board_name",
     "price_basis",
     "single_use",
     "total",
     "per_night",
     "stay_tax",
     "deposit",
     "balance_at_hotel",
     "cancellation",
     "included_extras",
     "optional_extras",
     "booking_url"
    ]
   },
   "Offer": {
    "type": "object",
    "additionalProperties": false,
    "properties": {
     "room_type": {
      "type": "object",
      "properties": {
       "id": {
        "type": "string"
       },
       "name": {
        "type": "string"
       },
       "url": {
        "type": "string"
       }
      },
      "additionalProperties": false,
      "required": [
       "id",
       "name",
       "url"
      ]
     },
     "rate_status": {
      "type": "string",
      "enum": [
       "published",
       "no_public_rate"
      ],
      "description": "no_public_rate: no price is published for these dates; it does not mean closed or sold out."
     },
     "availability_status": {
      "type": "string",
      "enum": [
       "available",
       "on_request"
      ],
      "description": "available: book with the 20% deposit or send a request. on_request: high demand on some nights; only a request, the booking advisor confirms the room."
     },
     "high_demand_nights": {
      "type": "array",
      "items": {
       "type": "string",
       "format": "date",
       "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
      }
     },
     "availability_note": {
      "type": "string"
     },
     "booking_modes": {
      "type": "array",
      "minItems": 1,
      "items": {
       "enum": [
        "request",
        "confirmed_with_deposit"
       ]
      }
     },
     "rates": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Rate"
      }
     }
    },
    "required": [
     "room_type",
     "rate_status",
     "booking_modes",
     "rates"
    ]
   },
   "QuoteRoom": {
    "type": "object",
    "properties": {
     "room_index": {
      "type": "integer"
     },
     "occupancy": {
      "type": "object",
      "properties": {
       "adults": {
        "type": "integer"
       },
       "children_ages": {
        "type": "array",
        "items": {
         "type": "integer"
        }
       },
       "children": {
        "type": "integer"
       },
       "infants": {
        "type": "integer"
       }
      },
      "additionalProperties": false,
      "required": [
       "adults",
       "children_ages",
       "children",
       "infants"
      ]
     },
     "offers": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Offer"
      }
     },
     "not_offered": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "room_type": {
         "type": "string"
        },
        "reason": {
         "const": "OCCUPANCY_NOT_SUPPORTED"
        }
       },
       "additionalProperties": false,
       "required": [
        "room_type",
        "reason"
       ]
      }
     }
    },
    "additionalProperties": false,
    "required": [
     "room_index",
     "occupancy",
     "offers",
     "not_offered"
    ]
   },
   "VenueAccess": {
    "type": "object",
    "properties": {
     "hotel_guests": {
      "type": "array",
      "items": {
       "enum": [
        "hiltonchania",
        "harmony",
        "flair",
        "princess",
        "beach"
       ]
      },
      "description": "The hotels whose guests use the venue."
     },
     "other_guests": {
      "oneOf": [
       {
        "type": "null"
       },
       {
        "type": "object",
        "properties": {
         "hotels": {
          "type": "array",
          "items": {
           "enum": [
            "hiltonchania",
            "harmony",
            "flair",
            "princess",
            "beach"
           ]
          }
         },
         "condition": {
          "type": "string"
         }
        },
        "additionalProperties": false,
        "required": [
         "hotels",
         "condition"
        ]
       }
      ],
      "description": "Guests of other Corissia hotels who may use the venue under a condition, e.g. adults, with reservation."
     },
     "external_guests": {
      "enum": [
       "yes",
       "with_reservation",
       "no"
      ],
      "description": "Guests not staying at a Corissia hotel."
     },
     "note": {
      "type": [
       "string",
       "null"
      ]
     },
     "min_age": {
      "type": [
       "integer",
       "null"
      ],
      "description": "The minimum age the page states; null: the page states none."
     },
     "age_note": {
      "type": [
       "string",
       "null"
      ],
      "description": "The sentence of the page about age, in the language of the call."
     }
    },
    "additionalProperties": false,
    "required": [
     "hotel_guests",
     "other_guests",
     "external_guests",
     "note",
     "min_age",
     "age_note"
    ]
   },
   "AccessForHotel": {
    "type": "object",
    "properties": {
     "hotel": {
      "enum": [
       "hiltonchania",
       "harmony",
       "flair",
       "princess",
       "beach"
      ]
     },
     "as": {
      "enum": [
       "hotel_guest",
       "other_guest"
      ]
     },
     "condition": {
      "type": [
       "string",
       "null"
      ],
      "description": "For other_guest: e.g. adults, with reservation."
     }
    },
    "additionalProperties": false,
    "required": [
     "hotel",
     "as",
     "condition"
    ]
   },
   "OpeningHours": {
    "oneOf": [
     {
      "type": "null"
     },
     {
      "type": "object",
      "properties": {
       "days": {
        "const": "daily"
       },
       "season": {
        "type": [
         "string",
         "null"
        ],
        "description": "As written on the page, e.g. April - November; null: no season written."
       },
       "ranges": {
        "type": "array",
        "minItems": 1,
        "items": {
         "type": "object",
         "properties": {
          "from": {
           "type": "string",
           "pattern": "^\\d{2}:\\d{2}$"
          },
          "to": {
           "type": "string",
           "pattern": "^\\d{2}:\\d{2}$"
          },
          "last_order": {
           "type": [
            "string",
            "null"
           ],
           "pattern": "^\\d{2}:\\d{2}$"
          }
         },
         "additionalProperties": false,
         "required": [
          "from",
          "to",
          "last_order"
         ]
        }
       }
      },
      "additionalProperties": false,
      "required": [
       "days",
       "season",
       "ranges"
      ]
     }
    ],
    "description": "The «Opening hours» section of the venue page; null when the page shows none (ask the venue)."
   },
   "VenueService": {
    "type": "object",
    "properties": {
     "name": {
      "type": "string"
     },
     "from": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^\\d{2}:\\d{2}$"
     },
     "to": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^\\d{2}:\\d{2}$"
     },
     "last_order": {
      "type": [
       "string",
       "null"
      ],
      "pattern": "^\\d{2}:\\d{2}$"
     },
     "price": {
      "type": [
       "number",
       "null"
      ],
      "minimum": 0
     },
     "price_unit": {
      "enum": [
       "per_person",
       null
      ]
     },
     "note": {
      "type": [
       "string",
       "null"
      ]
     }
    },
    "additionalProperties": false,
    "required": [
     "name",
     "from",
     "to",
     "last_order",
     "price",
     "price_unit",
     "note"
    ]
   },
   "VenueReservation": {
    "oneOf": [
     {
      "type": "null"
     },
     {
      "type": "object",
      "properties": {
       "url": {
        "type": "string",
        "description": "The reservation section of the page (language of the call)."
       },
       "phones": {
        "type": "array",
        "minItems": 1,
        "items": {
         "type": "string"
        }
       },
       "advance": {
        "enum": [
         "required",
         "preferred",
         "recommended"
        ]
       },
       "note": {
        "type": [
         "string",
         "null"
        ]
       },
       "form_note": {
        "type": [
         "string",
         "null"
        ]
       }
      },
      "additionalProperties": false,
      "required": [
       "url",
       "phones",
       "advance",
       "note",
       "form_note"
      ]
     }
    ],
    "description": "null: the website offers no reservation for this venue."
   },
   "MenuSectionSummary": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "title": {
      "type": [
       "string",
       "null"
      ]
     },
     "price_per_person": {
      "type": [
       "number",
       "null"
      ],
      "minimum": 0
     },
     "items": {
      "type": "integer"
     },
     "items_with_price": {
      "type": "integer"
     }
    },
    "additionalProperties": false,
    "required": [
     "id",
     "title",
     "price_per_person",
     "items",
     "items_with_price"
    ]
   },
   "Venue": {
    "type": "object",
    "properties": {
     "id": {
      "enum": [
       "restaurant-poeme",
       "restaurant-celeste",
       "bar-c",
       "bar-littlegalaxy",
       "fauchon",
       "room-service-hiltonchania",
       "wellness-loccitane",
       "restaurant-360",
       "restaurant-flair",
       "bar-flair",
       "bar-flairbeach",
       "room-service-flair",
       "wellness-flair",
       "restaurant-ophelia",
       "restaurant-autograph",
       "bar-H2O",
       "room-service",
       "wellness-harmony",
       "restaurant-armonia",
       "restaurant-park",
       "bar-park",
       "beach-park",
       "bar-panorama",
       "bar-portokali",
       "wellness-princess"
      ]
     },
     "type": {
      "enum": [
       "restaurant",
       "bar",
       "cafe",
       "spa",
       "room_service",
       "beach_service"
      ]
     },
     "name": {
      "type": "string"
     },
     "location": {
      "enum": [
       "hiltonchania",
       "flair",
       "georgioupolis"
      ]
     },
     "hotel": {
      "enum": [
       "hiltonchania",
       "harmony",
       "flair",
       "princess",
       "beach",
       null
      ],
      "description": "The hotel it belongs to; null: Corissia Park, shared by the hotels in Georgioupolis."
     },
     "access": {
      "$ref": "#/components/schemas/VenueAccess"
     },
     "access_for_hotel": {
      "$ref": "#/components/schemas/AccessForHotel",
      "description": "Only with the hotel filter: how the guests of that hotel may use the venue."
     },
     "cuisine": {
      "type": [
       "string",
       "null"
      ]
     },
     "description": {
      "type": [
       "string",
       "null"
      ]
     },
     "opening_hours": {
      "$ref": "#/components/schemas/OpeningHours"
     },
     "services": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/VenueService"
      }
     },
     "services_note": {
      "type": [
       "string",
       "null"
      ]
     },
     "hours_note": {
      "const": "As published on the website; may vary by season."
     },
     "reservation": {
      "$ref": "#/components/schemas/VenueReservation"
     },
     "reservation_note": {
      "type": [
       "string",
       "null"
      ]
     },
     "url": {
      "type": [
       "string",
       "null"
      ],
      "description": "The venue page; null for the venues shown only on the QR menu page."
     },
     "menu_text_url": {
      "type": "string"
     },
     "menu_sections": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/MenuSectionSummary"
      }
     },
     "lang_served": {
      "enum": [
       "de",
       "en"
      ],
      "description": "The language of the menu the page of this language shows."
     },
     "source": {
      "type": "string"
     },
     "as_of": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
     }
    },
    "additionalProperties": false,
    "required": [
     "id",
     "type",
     "name",
     "location",
     "hotel",
     "access",
     "cuisine",
     "description",
     "opening_hours",
     "services",
     "services_note",
     "hours_note",
     "reservation",
     "reservation_note",
     "url",
     "menu_text_url",
     "menu_sections",
     "lang_served",
     "source",
     "as_of"
    ]
   },
   "VenuesList": {
    "type": "object",
    "properties": {
     "api_version": {
      "const": "3.0"
     },
     "lang": {
      "enum": [
       "de",
       "en"
      ]
     },
     "filters": {
      "type": "object",
      "properties": {
       "hotel": {
        "enum": [
         "hiltonchania",
         "harmony",
         "flair",
         "princess",
         "beach",
         null
        ]
       },
       "type": {
        "type": [
         "string",
         "null"
        ]
       }
      },
      "additionalProperties": false,
      "required": [
       "hotel",
       "type"
      ]
     },
     "venues": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Venue"
      }
     }
    },
    "additionalProperties": false,
    "required": [
     "api_version",
     "lang",
     "filters",
     "venues"
    ]
   },
   "VenueDetail": {
    "type": "object",
    "properties": {
     "api_version": {
      "const": "3.0"
     },
     "lang": {
      "enum": [
       "de",
       "en"
      ]
     },
     "venue": {
      "$ref": "#/components/schemas/Venue"
     }
    },
    "additionalProperties": false,
    "required": [
     "api_version",
     "lang",
     "venue"
    ]
   },
   "MenuItem": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "description": {
      "type": [
       "string",
       "null"
      ]
     },
     "price": {
      "type": [
       "number",
       "null"
      ],
      "minimum": 0,
      "description": "EUR as on the website; null where the website shows no price."
     }
    },
    "additionalProperties": false,
    "required": [
     "id",
     "name",
     "description",
     "price"
    ]
   },
   "MenuCategory": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "name": {
      "type": "string"
     },
     "description": {
      "type": [
       "string",
       "null"
      ]
     },
     "items": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/MenuItem"
      }
     }
    },
    "additionalProperties": false,
    "required": [
     "id",
     "name",
     "description",
     "items"
    ]
   },
   "MenuSection": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "title": {
      "type": [
       "string",
       "null"
      ]
     },
     "price_per_person": {
      "type": [
       "number",
       "null"
      ],
      "minimum": 0
     },
     "items": {
      "type": "integer"
     },
     "items_with_price": {
      "type": "integer"
     },
     "categories": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/MenuCategory"
      }
     }
    },
    "additionalProperties": false,
    "required": [
     "id",
     "title",
     "price_per_person",
     "items",
     "items_with_price",
     "categories"
    ]
   },
   "Menu": {
    "type": "object",
    "properties": {
     "api_version": {
      "const": "3.0"
     },
     "lang": {
      "enum": [
       "de",
       "en"
      ]
     },
     "lang_served": {
      "enum": [
       "de",
       "en"
      ]
     },
     "currency": {
      "const": "EUR"
     },
     "venue": {
      "type": "object",
      "properties": {
       "id": {
        "enum": [
         "restaurant-poeme",
         "restaurant-celeste",
         "bar-c",
         "bar-littlegalaxy",
         "fauchon",
         "room-service-hiltonchania",
         "wellness-loccitane",
         "restaurant-360",
         "restaurant-flair",
         "bar-flair",
         "bar-flairbeach",
         "room-service-flair",
         "wellness-flair",
         "restaurant-ophelia",
         "restaurant-autograph",
         "bar-H2O",
         "room-service",
         "wellness-harmony",
         "restaurant-armonia",
         "restaurant-park",
         "bar-park",
         "beach-park",
         "bar-panorama",
         "bar-portokali",
         "wellness-princess"
        ]
       },
       "name": {
        "type": "string"
       },
       "url": {
        "type": [
         "string",
         "null"
        ]
       }
      },
      "additionalProperties": false,
      "required": [
       "id",
       "name",
       "url"
      ]
     },
     "prices_note": {
      "type": "string"
     },
     "source": {
      "type": "string"
     },
     "as_of": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
     },
     "sections": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/MenuSection"
      }
     }
    },
    "additionalProperties": false,
    "required": [
     "api_version",
     "lang",
     "lang_served",
     "currency",
     "venue",
     "prices_note",
     "source",
     "as_of",
     "sections"
    ]
   },
   "Job": {
    "type": "object",
    "properties": {
     "id": {
      "type": "string"
     },
     "title": {
      "type": "string"
     },
     "summary": {
      "type": "string"
     },
     "departments": {
      "type": "array",
      "items": {
       "type": "object",
       "properties": {
        "id": {
         "enum": [
          "management",
          "sales",
          "backoffice",
          "frontoffice",
          "wellness",
          "housekeeping",
          "engineering",
          "technology",
          "food",
          "fnb"
         ]
        },
        "name": {
         "type": "string"
        }
       },
       "additionalProperties": false,
       "required": [
        "id",
        "name"
       ]
      }
     },
     "location": {
      "type": "object",
      "properties": {
       "places": {
        "type": "array",
        "minItems": 1,
        "items": {
         "enum": [
          "georgioupolis",
          "chania"
         ]
        }
       },
       "text": {
        "type": "string"
       }
      },
      "additionalProperties": false,
      "required": [
       "places",
       "text"
      ]
     },
     "employment": {
      "type": "object",
      "properties": {
       "type": {
        "enum": [
         "FULL_TIME",
         "PART_TIME",
         "CONTRACTOR",
         "TEMPORARY",
         "INTERN",
         "VOLUNTEER",
         "PER_DIEM",
         "OTHER"
        ]
       },
       "text": {
        "type": "string"
       }
      },
      "additionalProperties": false,
      "required": [
       "type",
       "text"
      ]
     },
     "salary": {
      "oneOf": [
       {
        "type": "object",
        "properties": {
         "currency": {
          "const": "EUR"
         },
         "min": {
          "type": "integer",
          "minimum": 1
         },
         "max": {
          "type": "integer",
          "minimum": 1
         },
         "unit": {
          "const": "month"
         },
         "basis": {
          "const": "gross"
         }
        },
        "additionalProperties": false,
        "required": [
         "currency",
         "min",
         "max",
         "unit",
         "basis"
        ]
       },
       {
        "type": "null"
       }
      ],
      "description": "Gross per month as the career page shows it; null where the page does not disclose it."
     },
     "salary_note": {
      "type": "string"
     },
     "date_posted": {
      "type": "string",
      "format": "date",
      "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
     },
     "url": {
      "type": "string",
      "format": "uri",
      "description": "The page of the position, with its description and the application form."
     },
     "description": {
      "type": "string",
      "description": "Only in GET /jobs/{job_id}: the description of the page as plain text."
     }
    },
    "additionalProperties": false,
    "required": [
     "id",
     "title",
     "summary",
     "departments",
     "location",
     "employment",
     "salary",
     "salary_note",
     "date_posted",
     "url"
    ]
   },
   "JobsList": {
    "type": "object",
    "properties": {
     "api_version": {
      "const": "3.0"
     },
     "lang": {
      "enum": [
       "en",
       "de",
       "el"
      ]
     },
     "employer": {
      "type": "string"
     },
     "career_page": {
      "type": "string",
      "format": "uri"
     },
     "filters": {
      "type": "object",
      "properties": {
       "department": {
        "enum": [
         "management",
         "sales",
         "backoffice",
         "frontoffice",
         "wellness",
         "housekeeping",
         "engineering",
         "technology",
         "food",
         "fnb",
         null
        ]
       },
       "location": {
        "enum": [
         "georgioupolis",
         "chania",
         null
        ]
       }
      },
      "additionalProperties": false,
      "required": [
       "department",
       "location"
      ]
     },
     "count": {
      "type": "integer",
      "minimum": 0
     },
     "jobs": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/Job"
      }
     },
     "how_to_apply": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "required": [
     "api_version",
     "lang",
     "employer",
     "career_page",
     "filters",
     "count",
     "jobs",
     "how_to_apply"
    ]
   },
   "JobDetail": {
    "type": "object",
    "properties": {
     "api_version": {
      "const": "3.0"
     },
     "lang": {
      "enum": [
       "en",
       "de",
       "el"
      ]
     },
     "employer": {
      "type": "string"
     },
     "job": {
      "$ref": "#/components/schemas/Job"
     },
     "how_to_apply": {
      "type": "string"
     }
    },
    "additionalProperties": false,
    "required": [
     "api_version",
     "lang",
     "employer",
     "job",
     "how_to_apply"
    ]
   },
   "Quote": {
    "type": "object",
    "properties": {
     "api_version": {
      "const": "3.0"
     },
     "generated_at": {
      "type": "string"
     },
     "currency": {
      "const": "EUR"
     },
     "lang": {
      "enum": [
       "de",
       "en"
      ]
     },
     "request": {
      "type": "object",
      "properties": {
       "hotel": {
        "type": "string"
       },
       "checkin": {
        "type": "string",
        "format": "date",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
       },
       "checkout": {
        "type": "string",
        "format": "date",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
       },
       "occupancy": {
        "type": "array",
        "items": {
         "type": "object",
         "properties": {
          "adults": {
           "type": "integer"
          },
          "children_ages": {
           "type": "array",
           "items": {
            "type": "integer"
           }
          }
         },
         "additionalProperties": false,
         "required": [
          "adults",
          "children_ages"
         ]
        }
       },
       "room": {
        "type": [
         "string",
         "null"
        ]
       },
       "board": {
        "type": [
         "string",
         "null"
        ]
       }
      },
      "additionalProperties": false,
      "required": [
       "hotel",
       "checkin",
       "checkout",
       "occupancy",
       "room",
       "board"
      ]
     },
     "hotel": {
      "$ref": "#/components/schemas/HotelRef"
     },
     "stay": {
      "type": "object",
      "properties": {
       "checkin": {
        "type": "string",
        "format": "date",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
       },
       "checkout": {
        "type": "string",
        "format": "date",
        "pattern": "^\\d{4}-\\d{2}-\\d{2}$"
       },
       "nights": {
        "type": "integer",
        "minimum": 1
       },
       "checkin_from": {
        "type": "string"
       },
       "checkout_until": {
        "type": "string"
       }
      },
      "additionalProperties": false,
      "required": [
       "checkin",
       "checkout",
       "nights"
      ]
     },
     "operation_status": {
      "type": "string",
      "enum": [
       "operating",
       "expected"
      ],
      "description": "expected: the nights fall in written dates of the site, not yet in the season plan."
     },
     "rooms": {
      "type": "array",
      "items": {
       "$ref": "#/components/schemas/QuoteRoom"
      }
     },
     "deposit_rule": {
      "type": "object",
      "properties": {
       "percent": {
        "const": 20
       },
       "basis": {
        "const": "sum_of_rooms_same_dates"
       },
       "rounding": {
        "const": "nearest_euro_half_up"
       },
       "free_transfer_basis": {
        "const": "sum_of_rooms_same_dates"
       }
      },
      "additionalProperties": false,
      "required": [
       "percent",
       "basis",
       "rounding"
      ]
     },
     "terms": {
      "type": "object",
      "properties": {
       "fact_ids": {
        "type": "array",
        "items": {
         "type": "string"
        }
       },
       "cancellation": {
        "type": "string"
       },
       "deposit": {
        "type": "string"
       },
       "booking_modes": {
        "type": "string"
       }
      },
      "additionalProperties": false,
      "required": [
       "fact_ids"
      ]
     },
     "booking_url": {
      "type": "string",
      "format": "uri",
      "description": "The hotel's offers for these dates. For a chosen room and board give rooms[].offers[].rates[].booking_url."
     },
     "contact": {
      "$ref": "#/components/schemas/Contact"
     },
     "freshness": {
      "type": "object",
      "properties": {
       "prices_as_of": {
        "type": "string"
       },
       "offer_expires": {
        "type": "null"
       },
       "hold": {
        "const": false
       },
       "note": {
        "type": "string"
       }
      },
      "additionalProperties": false,
      "required": [
       "prices_as_of",
       "offer_expires",
       "hold",
       "note"
      ]
     }
    },
    "additionalProperties": false,
    "required": [
     "api_version",
     "generated_at",
     "currency",
     "lang",
     "request",
     "hotel",
     "stay",
     "operation_status",
     "rooms",
     "deposit_rule",
     "terms",
     "booking_url",
     "contact",
     "freshness"
    ]
   }
  }
 }
}
