{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition"]},"type":"markdown"},"seo":{"title":"Paid ancillaries for hotel booking","meta":[{"name":"robots","content":"noindex"}],"llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"paid-ancillaries-for-hotel-booking","__idx":0},"children":["Paid ancillaries for hotel booking"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Travelers can purchase ancillaries (or add-ons) along with their hotel booking. Common ancillaries include early check-in, late checkout, Wi-Fi access, breakfast, and parking. Spotnana APIs allow you to fetch the available ancillaries for an available rate, include them when creating a new booking, or modify them as part of an existing reservation."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Paid ancillaries are currently only supported for Travelodge bookings. To use this feature, it must first be enabled for your company profile. Contact your Spotnana representative to enable it."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"paid-ancillary-categories","__idx":1},"children":["Paid ancillary categories"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each ancillary returned by the API belongs to an ancillary ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["category"]}," (listed below). The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["category"]}," field indicates the type of service offered and is useful when deciding how to group or display them in your user interface."]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"width":"30%","data-label":"Category"},"children":["Category "]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EARLY_CHECKIN"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Allows the traveler to check in before the hotel's standard check-in time."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["LATE_CHECKOUT"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Allows the traveler to check out after the hotel's standard checkout time."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WIFI"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Provides Wi-Fi access for the duration of the stay. It's usually sold as a package (e.g., 24-hour Wi-Fi add-on) or as a per-night item."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BREAKFAST"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Breakfast for the entire stay. The service is priced per night. However, the traveler can only purchase this ancillary for their entire stay (i.e., if a traveler is staying for 3 nights they cannot purchase breakfast for just one night)."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"fetching-available-ancillaries","__idx":2},"children":["Fetching available ancillaries"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Use the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/hotelapi/hotel/hotelancillaries"},"children":["get hotel ancillaries"]}," API to retrieve the list of paid ancillaries available for a selected hotel rate. The request takes the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["priceValidateKey"]}," returned from step 2 of the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/spotnana/hotel_booking_workflow"},"children":["creating a hotel booking"]}," workflow."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Here's a sample request body of the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/hotelapi/hotel/hotelancillaries"},"children":["get hotel ancillaries"]}," API:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","data-title":"/v2/hotel/ancillaries","header":{"title":"/v2/hotel/ancillaries","controls":{"copy":{}}},"source":"{\n  \"priceValidateKey\": \"Cg5TUE9UTkFOQTozMDc3NhIgCgIIARIMCgoyMDI0LTA=\"\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The response contains an ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ancillaries"]}," array, where each item describes an ancillary available to purchase for the selected room. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["totalRate"]}," object holds the price information for each ancillary. The key fields are:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"width":"25%","data-label":"Field"},"children":["Field "]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Description"},"children":["Description"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ancillaryKey"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A unique identifier for the ancillary. This is the value that needs to be passed when creating or modifying a booking."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["category"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The type of ancillary (see ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"#paid-ancillary-categories"},"children":["paid ancillary categories"]}," for the list of supported categories)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["displayName"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The name of the ancillary which will be displayed to the traveler in the UI (e.g., \"Early check-in from 12pm.\")."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["description"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["A detailed description that provides additional context about the ancillary."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["refundability"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Indicates whether the ancillary purchase can be refunded if the booking is canceled. Possible values are ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FULLY_REFUNDABLE"]},", ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PARTIALLY_REFUNDABLE"]},", and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NON_REFUNDABLE"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["purchaseStatus"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Indicates whether the ancillary is available for purchase. Possible values are: ",{"$$mdtype":"Tag","name":"br","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AVAILABLE"]},": Can be purchased."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALREADY_PURCHASED"]},": Already purchased as part of this booking. This value is applicable when you're modifying a hotel booking that already has the same purchased ancillary."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INCLUDED_IN_RATE"]},": Already part of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["totalRate"]}," and doesn't need to be purchased separately."]}]}]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentType"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Indicates whether the ancillary is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PREPAID"]}," (charged at the time of booking) or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POSTPAID"]}," (charged at the property)."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["totalRate"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The full rate breakdown of the ancillary, including base, tax, and other fees."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["prepaidRate"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The prepaid price structure of the ancillary. This object is populated when the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentType"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PREPAID"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["postpaidRate"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The postpaid price structure of the ancillary. This object is populated when the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["paymentType"]}," is ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["POSTPAID"]},"."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The current status of the ancillary associated with the booking. It can contain one of the following values:",{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACTIVE"]},": The ancillary has been purchased and is active along with the hotel reservation."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CANCELLED"]},": The ancillary purchase has been canceled and is no longer associated with the booking. The hotel booking reservation may still be active."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MODIFIED"]},": The ancillary purchase has been modified (e.g., Wi-Fi purchased for 2 additional days)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":[{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NOT_PURCHASED"]},": The ancillary hasn't been purchased yet."]}]}]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Here's a sample response from the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/hotelapi/hotel/hotelancillaries"},"children":["get hotel ancillaries"]}," API containing two available ancillaries:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","data-title":"/v2/hotel/ancillaries","header":{"title":"/v2/hotel/ancillaries","controls":{"copy":{}}},"source":"{\n  \"ancillaries\": [\n    {\n      \"ancillaryKey\": \"EICHK001\",\n      \"category\": \"EARLY_CHECKIN\",\n      \"displayName\": \"Early check-in from 12pm\",\n      \"description\": \"Check in from 12 noon to 2:30pm instead of the standard 3pm. Subject to availability.\",\n      \"totalRate\": {\n        \"base\":  { \"amount\": 15.00, \"currencyCode\": \"GBP\" },\n        \"tax\":   { \"amount\":  0.00, \"currencyCode\": \"GBP\" },\n        \"total\": { \"amount\": 15.00, \"currencyCode\": \"GBP\" }\n      },\n      \"prepaidRate\": {\n        \"base\":  { \"amount\": 15.00, \"currencyCode\": \"GBP\" },\n        \"tax\":   { \"amount\":  0.00, \"currencyCode\": \"GBP\" },\n        \"total\": { \"amount\": 15.00, \"currencyCode\": \"GBP\" }\n      },\n      \"refundability\": \"FULLY_REFUNDABLE\",\n      \"purchaseStatus\": \"AVAILABLE\",\n      \"paymentType\": \"PREPAID\"\n    },\n    {\n      \"ancillaryKey\": \"BFAST002\",\n      \"category\": \"BREAKFAST\",\n      \"displayName\": \"Full English Breakfast\",\n      \"description\": \"Cooked-to-order breakfast included for every night of the stay.\",\n      \"totalRate\": {\n        \"base\":  { \"amount\": 19.00, \"currencyCode\": \"GBP\" },\n        \"tax\":   { \"amount\":  0.00, \"currencyCode\": \"GBP\" },\n        \"total\": { \"amount\": 19.00, \"currencyCode\": \"GBP\" }\n      },\n      \"prepaidRate\": {\n        \"base\":  { \"amount\": 19.00, \"currencyCode\": \"GBP\" },\n        \"tax\":   { \"amount\":  0.00, \"currencyCode\": \"GBP\" },\n        \"total\": { \"amount\": 19.00, \"currencyCode\": \"GBP\" }\n      },\n      \"refundability\": \"FULLY_REFUNDABLE\",\n      \"purchaseStatus\": \"AVAILABLE\",\n      \"paymentType\": \"PREPAID\"\n    }\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["totalPrice"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["dailyPrice"]}," fields (in the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/hotelapi"},"children":["hotel"]}," APIs and the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/tripapi/trip-pnrs/getpnrv3"},"children":["get PNR"]}," API) have been deprecated. Use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["totalRate"]}," instead to identify the price of the ancillaries, room, and other fees."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"understanding-purchasestatus-and-status","__idx":3},"children":["Understanding ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["purchaseStatus"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Each ancillary returned by the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/hotelapi/hotel/hotelancillaries"},"children":["get hotel ancillaries"]}," API carries two distinct state fields: ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["purchaseStatus"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]},". These two fields work together. Collectively, they can be used to understand the overall status of the ancillary before and after purchase."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The following are some possible combinations you can expect:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"width":"40%","data-label":"Status"},"children":["Status "]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Context"},"children":["Context"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["purchaseStatus"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["AVAILABLE"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NOT_PURCHASED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The hotel offers this ancillary but it has not been purchased and included in the booking."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["purchaseStatus"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALREADY_PURCHASED"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACTIVE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The ancillary has been purchased and is currently active on the hotel booking."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["purchaseStatus"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALREADY_PURCHASED"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["CANCELLED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The ancillary was purchased earlier but it has been canceled during a hotel booking modification. This ancillary is no longer included with the hotel booking. Refunds may be applicable as per the hotel policies."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["purchaseStatus"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ALREADY_PURCHASED"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["MODIFIED"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The ancillary was purchased and it has been modified after the purchase."]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["If ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["purchaseStatus"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["INCLUDED_IN_RATE"]}," and ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["status"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ACTIVE"]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["The ancillary is already bundled with the room's total rate and is currently active with the hotel booking. No separate purchase is required."]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"booking-a-hotel-with-ancillaries","__idx":4},"children":["Booking a hotel with ancillaries"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["To include ancillaries in a new hotel booking, pass the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ancillaryKeys"]}," array in the request when ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/hotelapi/hotel/hotelcreatepnr"},"children":["creating a new hotel PNR"]},"."]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","data-title":"/v2/hotel/create-pnr","header":{"title":"/v2/hotel/create-pnr","controls":{"copy":{}}},"source":"{\n  \"bookingKey\": \"example_booking_key\",\n  \"travelers\": [\n    // ... traveler details\n  ],\n  \"tripData\": {\n    \"tripId\": { \"id\": \"2783425534\" }\n  },\n  \"ancillaryKeys\": [\n    \"EICHK001\",\n    \"BFAST002\"\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Once a new booking is created, you can use the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/tripapi/trip-pnrs/getpnrv3"},"children":["get PNR"]}," API to review the rate of the purchased ancillary in the following places:"]},{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hotelPnr"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ancillaries"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["totalRate"]}," field. Each ancillary uses a dedicated ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hotelPnr"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ancillaries"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["totalRate"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["roomFees"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["feeType"]}," field. This makes it easy to distinguish ancillary charges from other charges (e.g., taxes) when displaying the price breakdown (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["feeType"]}," can contain ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["HOTEL_ANCILLARY_EARLY_CHECK_IN_FEE"]}," which indicates the price of the early check-in fee)."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hotelPnr"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["room"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rateInfo"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["totalRate"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["extras"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]}," field. Use the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["extras"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," field to find the ancillary category (e.g., ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["type"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["HOTEL_ANCILLARY_EARLY_CHECK_IN_FEE"]},")."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hotelPnr"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["room"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rateInfo"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["prepaidRate"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["extras"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]}," field if the purchase is prepaid."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["hotelPnr"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["room"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["rateInfo"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["postpaidRate"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["extras"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["amount"]}," field if the purchase is postpaid and will be charged when checking into the property."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"modifying-ancillaries-on-an-existing-booking---overview","__idx":5},"children":["Modifying ancillaries on an existing booking - Overview"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Ancillaries can be added, removed, or modified as part of an existing hotel booking. For the full step-by-step API sequence to do this, see the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/spotnana/hotel_modify_ancillaries_workflow"},"children":["modifying ancillaries in a hotel booking"]}," workflow."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The key behavior to understand is that the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/openapi/hotelapi/hotel/hotelmodifybooking"},"children":["modify hotel booking"]}," endpoint reconciles ancillaries using a delete-and-add pattern. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ancillaryKeys"]}," array in the request body represents the complete state of the booking's ancillaries after the modification is applied, not a list of changes to make."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"sample-use-case","__idx":6},"children":["Sample use case"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["A traveler has an existing booking with early check-in (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ancillaryKey"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["EICHK001"]},") and breakfast (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ancillaryKey"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["BFAST002"]},") already purchased. They want to cancel the early check-in, keep the breakfast, and add a Wi-Fi package (",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ancillaryKey"]}," = ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["WIFI007"]},"). The intended final state of the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["ancillaryKeys"]}," array will be breakfast and Wi-Fi as shown below in the sample API request:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","data-title":"/v2/hotel/pnrs/{pnrId}/modify-book","header":{"title":"/v2/hotel/pnrs/{pnrId}/modify-book","controls":{"copy":{}}},"source":"{\n  \"bookingKey\": \"example_booking_key\",\n  \"travelers\": [\n    // ... traveler details\n  ],\n  \"tripData\": {\n    \"tripId\": { \"id\": \"2783425534\" }\n  },\n  \"ancillaryKeys\": [\n    \"BFAST002\",\n    \"WIFI007\"\n  ]\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This API call will cancel the early check-in ancillary (issuing a refund if applicable) and will add the new Wi-Fi package service to the booking. The booking also retains the breakfast service which was originally purchased. The final cost the traveler has to pay for this modification will be reflected in the ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["totalRate"]}," > ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["roomFees"]},"."]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Some ancillaries may behave differently based on the updated stay duration. For example, a per-night ancillary like breakfast automatically adjusts to cover all nights of the new stay. The ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["totalRate"]}," returned in the modified ancillary list reflects the updated cost."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"cancellation-and-refunds","__idx":7},"children":["Cancellation and refunds"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Ancillaries can be canceled using the ",{"$$mdtype":"Tag","name":"a","attributes":{"href":"/spotnana/hotel_modify_ancillaries_workflow"},"children":["modifying ancillaries"]}," workflow. Also, the purchased ancillaries will be canceled automatically if the hotel booking is canceled. The refund process for each ancillary is treated according to its ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["refundability"]}," value:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Applicable refunds are processed for ancillaries if ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["refundability"]}," is set to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["FULLY_REFUNDABLE"]}," or ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["PARTIALLY_REFUNDABLE"]},"."]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Ancillaries with ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["refundability"]}," set to ",{"$$mdtype":"Tag","name":"code","attributes":{},"children":["NON_REFUNDABLE"]}," are not refunded."]}]}]},"headings":[{"value":"Paid ancillaries for hotel booking","id":"paid-ancillaries-for-hotel-booking","depth":1},{"value":"Paid ancillary categories","id":"paid-ancillary-categories","depth":2},{"value":"Fetching available ancillaries","id":"fetching-available-ancillaries","depth":2},{"value":"Understanding purchaseStatus and status","id":"understanding-purchasestatus-and-status","depth":2},{"value":"Booking a hotel with ancillaries","id":"booking-a-hotel-with-ancillaries","depth":2},{"value":"Modifying ancillaries on an existing booking - Overview","id":"modifying-ancillaries-on-an-existing-booking---overview","depth":2},{"value":"Sample use case","id":"sample-use-case","depth":3},{"value":"Cancellation and refunds","id":"cancellation-and-refunds","depth":2}],"frontmatter":{"seo":{"title":"Paid ancillaries for hotel booking"}},"lastModified":"2026-05-19T13:27:30.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/guides/hotel_guides/hotel_addons_guide","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}