{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://raw.githubusercontent.com/api-evangelist/amadeus/refs/heads/main/json-schema/hotel-booking-hotel-product-schema.json", "title": "HotelProduct", "description": "Hotel Offer\n", "type": "object", "properties": { "checkInDate": { "type": "string", "format": "date", "example": "2020-12-30", "description": "check-in date of the stay (hotel local date). Format YYYY-MM-DD\nThe lowest accepted value is today date (no dates in the past). " }, "checkOutDate": { "type": "string", "format": "date", "example": "2020-12-31", "description": "check-out date of the stay (hotel local date). Format YYYY-MM-DD\nThe lowest accepted value is `checkInDate`+1. " }, "roomQuantity": { "type": "integer", "minimum": 1, "maximum": 9, "example": 1, "description": "number of rooms (1-9)" }, "rateCode": { "type": "string", "description": "Special Rate - Provider Response Code (3 chars)\nExamples\n\n * RAC - Rack\n\n * BAR - Best Available Rate\n\n * PRO - Promotional\n\n * COR - Corporate\n\n * GOV - Government (qualified)\n\n * AAA - AAA (qualified)\n\n * BNB - Bed and Breakfast\n\n * PKG - Package\n\n * TVL - Travel Industry\n\n * SPC - Special Promo Rate\n\n * WKD - Weekend\n\n * CON - Convention\n\n * SNR - Senior (Europe) (qualified)\n\n * ARP - AARP - American Association of Retired People (50+) (qualified)\n\n * SRS - Senior (qualified)\n\n * ROR - Room Only Rate (no breakfast)\n\n * FAM - Family\n\n * DAY - Day rate\n", "pattern": "^[A-Z0-9*]{3}$", "minLength": 3, "maxLength": 3, "example": "RAC" }, "category": { "type": "string", "description": "Special Rate Category\nExamples:\n ASSOCIATION\n FAMILY_PLAN\n", "example": "FAMILY_PLAN" }, "commission": { "title": "HotelProduct_Commission", "type": "object", "properties": { "percentage": { "type": "string", "description": "Percentage of the commission paid to the travel seller. Value is between 0 and 100", "pattern": "^\\\\d+(\\\\.\\\\d+)?$", "example": 50 }, "amount": { "type": "string", "description": "Amount of the commission paid to the travel seller. The amount is always linked to the currency code of the offer", "pattern": "^\\\\d+(\\\\.\\\\d+)?$", "example": "199.50" }, "description": { "type": "object", "description": "Specific type to convey a list of string for specific information type ( via qualifier) in specific character set, or language", "title": "QualifiedFreeText", "properties": { "text": { "type": "string", "description": "Free Text", "example": "Do you need and example ?" }, "lang": { "type": "string", "description": "see RFC 5646", "example": "fr-FR" } } } } }, "room": { "title": "HotelProduct_RoomDetails", "type": "object", "properties": { "type": { "description": "Room type code, 3 character identifier of the room.\nThe first character identifies the room type category. \nThe second numeric character identifies the number of beds. \nThe third character identifies the bed type. \nThere is a special case where ROH is returned, this value stands for Run Of House.", "type": "string", "pattern": "^[A-Z0-9*]{3}$", "example": "string-value" }, "description": { "type": "object", "description": "Specific type to convey a list of string for specific information type ( via qualifier) in specific character set, or language", "title": "QualifiedFreeText", "properties": { "text": { "type": "string", "description": "Free Text", "example": "Do you need and example ?" }, "lang": { "type": "string", "description": "see RFC 5646", "example": "fr-FR" } } } } }, "guests": { "title": "HotelProduct_Guests", "type": "object", "properties": { "adults": { "type": "integer", "minimum": 1, "maximum": 9, "example": 2, "description": "number of adult guests (1-9) per room" }, "childAges": { "type": "array", "items": { "type": "integer", "minimum": 0, "maximum": 20 }, "description": "Comma separated list of ages of each child at the time of check-out from the hotel. If several children have the same age, the ages will be repeated." } } }, "price": { "title": "HotelProduct_HotelPrice", "description": "price information", "allOf": [ { "type": "object", "description": "Price valuation information", "title": "Price", "properties": { "currency": { "type": "string", "description": "currency Code apply to all elements of the price", "example": "EUR" }, "sellingTotal": { "type": "string", "description": "sellingTotal = Total + margins + markup + totalFees - discounts", "example": "199.50" }, "total": { "type": "string", "description": "total = base + totalTaxes", "example": "199.50" }, "base": { "type": "string", "example": "string-value" }, "markups": { "type": "array", "items": { "title": "Markup", "type": "object", "description": "Markup applied to provide a service or a product to the client. Typical use case is to convey markup information set by the travel agent.", "properties": { "amount": { "type": "string", "description": "Defines the monetary value with decimal position as a String.", "example": "10" } } } } } }, { "type": "object", "properties": { "taxes": { "type": "array", "items": { "title": "HotelProduct_HotelTax", "type": "object", "properties": { "currency": { "type": "string", "description": "Currency code of the tax" }, "amount": { "type": "string", "description": "Amount of the tax" }, "code": { "description": "The tax code which identifies the tax.\n Examples:\n 1=BED_TAX\n 2=CITY_TAX", "type": "string" }, "percentage": { "type": "string", "description": "percentage of the tax. Use together with pricingFrequency and pricingMode" }, "included": { "type": "boolean", "description": "Is the tax included in the base amount" }, "description": { "type": "string", "description": "Textual description of the tax" }, "pricingFrequency": { "description": "Specifies if the tax applies per stay or per night\n - PER_STAY\n - PER_NIGHT", "type": "string" }, "pricingMode": { "description": "Specifies if the tax applies per occupant or per room\n - PER_OCCUPANT\n - PER_PRODUCT", "type": "string" } } } }, "variations": { "title": "HotelProduct_PriceVariations", "type": "object", "description": "Daily price variations and the average daily price (when available) is shown here", "properties": { "changes": { "description": "The collection of price periods.\nEven if the daily price is not changeing during the stay, this section is filled", "type": "array", "items": { "title": "HotelProduct_PriceVariation", "description": "Some prices may vary during a stay, thus here you can see the daily price per period of the stay", "allOf": [ { "type": "object", "properties": { "startDate": { "description": "Begin date of the period\nFormat: YYYY-MM-DD", "type": "string", "format": "date" }, "endDate": { "description": "End date of the period\nFormat: YYYY-MM-DD", "type": "string", "format": "date" } }, "required": [ "startDate", "endDate" ] }, { "$ref": "#/definitions/Price" } ] } } } } } } ], "example": "199.50" }, "policies": { "title": "HotelProduct_PolicyDetails", "type": "object", "description": "Booking Rules", "properties": { "paymentType": { "type": "string", "description": "payment type. Guarantee means Pay at Check Out. Check the `methods` in `guarantee` or `deposit` or `prepay`.", "example": "DEPOSIT", "enum": [ "GUARANTEE", "DEPOSIT", "PREPAY", "HOLDTIME" ] }, "guarantee": { "title": "HotelProduct_GuaranteePolicy", "type": "object", "description": "the guarantee policy information applicable to the offer. It includes accepted payments", "properties": { "description": { "$ref": "#/definitions/QualifiedFreeText" }, "acceptedPayments": { "$ref": "#/definitions/HotelProduct_PaymentPolicy" } } }, "deposit": { "title": "HotelProduct_DepositPolicy", "type": "object", "description": "the deposit/prepay policy information applicable to the offer. It includes accepted payments, deadline and the amount due", "properties": { "amount": { "type": "string", "description": "Deposit-Prepay amount", "pattern": "^\\\\d+(\\\\.\\\\d+)?$", "example": "199.50" }, "deadline": { "type": "string", "format": "date-time", "description": "The date and time of the deadline in ISO 8601[https://www.w3.org/TR/NOTE-datetime]. \n Example: 2010-08-14T13:00:00\n Please note that this value is expressed in the hotels local time zone\n", "example": "2026-08-15T10:30:00Z" }, "description": { "$ref": "#/definitions/QualifiedFreeText" }, "acceptedPayments": { "$ref": "#/definitions/HotelProduct_PaymentPolicy" } } }, "prepay": { "title": "HotelProduct_DepositPolicy", "type": "object", "description": "the deposit/prepay policy information applicable to the offer. It includes accepted payments, deadline and the amount due", "properties": { "amount": { "type": "string", "description": "Deposit-Prepay amount", "pattern": "^\\\\d+(\\\\.\\\\d+)?$", "example": "199.50" }, "deadline": { "type": "string", "format": "date-time", "description": "The date and time of the deadline in ISO 8601[https://www.w3.org/TR/NOTE-datetime]. \n Example: 2010-08-14T13:00:00\n Please note that this value is expressed in the hotels local time zone\n", "example": "2026-08-15T10:30:00Z" }, "description": { "$ref": "#/definitions/QualifiedFreeText" }, "acceptedPayments": { "$ref": "#/definitions/HotelProduct_PaymentPolicy" } } }, "holdTime": { "title": "HotelProduct_HoldPolicy", "type": "object", "description": "the hold policy", "properties": { "deadline": { "type": "string", "format": "date-time", "description": "The date and time of the deadline in ISO 8601[https://www.w3.org/TR/NOTE-datetime]. \n Example: 2010-08-14T13:00:00\n Please note that this value is expressed in the hotels local time zone\n", "example": "2026-08-15T10:30:00Z" } }, "required": [ "deadline" ] }, "checkInOut": { "title": "HotelProduct_CheckInOutPolicy", "type": "object", "properties": { "checkIn": { "type": "string", "example": "13:00:00", "description": "Check-in From time limit in ISO-8601 format [http://www.w3.org/TR/xmlschema-2/#time]" }, "checkInDescription": { "$ref": "#/definitions/QualifiedFreeText" }, "checkOut": { "type": "string", "example": "11:00:00", "description": "Check-out Until time limit in ISO-8601 format [http://www.w3.org/TR/xmlschema-2/#time]" }, "checkOutDescription": { "$ref": "#/definitions/QualifiedFreeText" } } }, "cancellations": { "type": "array", "items": { "title": "HotelProduct_CancellationPolicy", "type": "object", "description": "Cancellation policies are optional in response (whether they apply or not according to the provider response returned at pricing or sell. ", "properties": { "type": { "type": "string", "enum": [ "FULL_STAY" ], "description": "* FULL_STAY: the Penalty amount equals the `total` price.", "example": "FULL_STAY" }, "amount": { "type": "string", "description": "Amount of the cancellation fee.", "pattern": "^\\\\d+(\\\\.\\\\d+)?$", "example": "199.50" }, "numberOfNights": { "type": "integer", "format": "int32", "minimum": 0, "description": "Number of nights due as fee in case of cancellation.", "example": 1 }, "percentage": { "type": "string", "description": "Percentage of the total stay amount to be paid in case of cancellation. Value is between 0 and 100.", "pattern": "^\\\\d+(\\\\.\\\\d+)?$", "example": 50 }, "deadline": { "type": "string", "format": "date-time", "description": "Represents the deadline after which the penalty applies. DateTime is in ISO 8601 [https://www.w3.org/TR/NOTE-datetime].\nExample: 2010-08-14T12:00:00+01:00\nExample: 2010-08-14T12:00:00Z\nExample: 2010-08-14T12:00:00-01:00\nThe value is expressed in the hotel local time zone, with the added time zone difference. So you can compute the deadline in UTC(GMT) if desired.", "example": "2026-08-15T10:30:00Z" }, "description": { "$ref": "#/definitions/QualifiedFreeText" } } } } } }, "rateFamilyEstimated": { "title": "HotelProduct_RateFamily", "type": "object", "description": "The estimated rate code family of the offer. Grouping various rate plan codes that belongs to the same family and indicates the type of the rate", "properties": { "code": { "description": "The estimated rate family (PRO,FAM,GOV)", "type": "string", "pattern": "[A-Z0-9]{3}", "example": "string-value" }, "type": { "description": "The type of the rate (public=P, negotiated=N, conditional=C)", "type": "string", "pattern": "[PNC]", "example": "string-value" } } } }, "required": [ "rateCode", "room", "price" ] }