> ## Documentation Index
> Fetch the complete documentation index at: https://docs.d-edge.com/llms.txt
> Use this file to discover all available pages before exploring further.

> ## Agent Instructions
> This site documents the D-EDGE APIs for technology partners (web agencies, OTAs, PMS and RMS vendors, booking and CRM tools). It is written for developers integrating with hotels that use the D-EDGE platform.
> Seven APIs, grouped by domain. Connectivity: Channel Manager API (distribute a hotel's inventory to your channel and send bookings back). Pricing & Availability: Best Price API (best offers to highlight), Quotation API (all bookable offers for a stay), Daily Rates API (daily availability between two dates). Booking: Booking Engine API (a hotel's full direct booking funnel), Gift Shop API (gift vouchers from catalogue to payment). Guest Management: CRM API (guest profiles).
> Pick the API by the need: to display prices, use the Best Price API or the Daily Rates API; to quote a specific stay, use the Quotation API; to book, use the Booking Engine API; to sell gift vouchers, use the Gift Shop API; to manage guest profiles, use the CRM API; to receive hotel inventory and send bookings back as a distribution channel, use the Channel Manager API.
> Base URLs, hotel identifiers, and credentials are delivered by the D-EDGE partnership team during onboarding. Do not invent base URLs, endpoints, parameters, or example credentials that do not appear on these pages.
> Authentication differs per API: OAuth 1.0 for Best Price, Quotation, Daily Rates, and Booking Engine; an X-API-KEY header for Gift Shop; OAuth 2.0 client credentials for CRM; partner-defined credentials carried in the XML message for the Channel Manager API. Read each API's Authentication page before writing code.
> A mock environment returns realistic but fictitious data without credentials. The Postman and Insomnia collections on the API collections page target it by default. Use it for exploration and tests, never for production traffic.
> Use the official names exactly: D-EDGE, D-EDGE platform, Channel Manager API, partnership team. Do not use Back Office or Extranet.
> Each API has a Changelog page. Check it for the current behaviour before relying on an older answer. For questions these pages do not answer, direct the reader to the Contact us page.

# Stay quotation

> Quote every room and rate combination for a known stay



## OpenAPI

````yaml quotation-api/open-api/quotation-api.json POST /Planning/2018A/Quotation/GetStayPlanning
openapi: 3.0.1
info:
  title: Quotation Service
  version: 2018A
servers:
  - url: https://{apiBaseUrl}
    variables:
      apiBaseUrl:
        default: api.example.com
        description: Base URL delivered by D-EDGE during partnership setup
security: []
paths:
  /Planning/2018A/Quotation/GetStayPlanning:
    post:
      tags:
        - Quotation
      summary: >-
        Retrieve availability, pricing, and detailed information for all room
        and rate combinations for a specific arrival date, length of stay, and
        guest configuration.
      description: >-
        Retrieve availability, pricing, and detailed information for all room
        and rate combinations for a specific arrival date, length of stay, and
        guest configuration.
      requestBody:
        description: >-
          The stay to quote: arrival date, number of nights and guests, the rate
          plans, rooms and rates to look at, and the layout listing the
          properties to compute and return.
        content:
          application/json:
            schema:
              allOf:
                - $ref: '#/components/schemas/StayQuotationRequest'
              description: Request for a stay quotation, for a given number of guests
      responses:
        '200':
          description: >-
            The room and rate combinations matching the request, grouped by rate
            plan and hotel, with the properties requested in the layout.
          content:
            application/json:
              schema:
                $ref: >-
                  #/components/schemas/QuotationStayEntityResponsePlanningResponse
        '400':
          description: >-
            The request is malformed, or a required field is missing or out of
            range. The response body lists the fields in error.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/HttpValidationProblemDetails'
        '401':
          description: The authentication token is missing or invalid.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
        '403':
          description: >-
            The impersonation is not consistent with the scope of the
            authentication token.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ProblemDetails'
components:
  schemas:
    StayQuotationRequest:
      required:
        - filter
        - layout
      type: object
      properties:
        filter:
          allOf:
            - $ref: '#/components/schemas/QuotationFilter'
        layout:
          allOf:
            - $ref: '#/components/schemas/PlanningLayout'
          description: List of fields sent back
        impersonation:
          allOf:
            - $ref: '#/components/schemas/Impersonation'
          description: Impersonation information to restrict the scope of the request
          nullable: true
        guests:
          type: array
          items:
            $ref: '#/components/schemas/Guests'
          description: "Number of guests the price is requested for. One item per \"party\". At least one item mandatory.\r\nThis field is mandatory for all hotels using price with supplements"
          nullable: true
        arrivalDate:
          type: string
          description: First night of the stay
          format: date
          example: '2027-08-31'
        nightCount:
          type: integer
          description: Number of nights of the stay (minimum 1)
          format: int32
          example: 3
      additionalProperties: false
      description: Request for a stay quotation, for a given number of guests
    QuotationStayEntityResponsePlanningResponse:
      type: object
      properties:
        defaultCurrency:
          type: string
          description: "The most used currency among the entities in the response, as an ISO 4217 code.\r\nIf there is no entity returned, EUR is returned."
          nullable: true
          example: EUR
        ratePlans:
          type: array
          items:
            $ref: '#/components/schemas/QuotationStayEntityResponseRatePlanResponse'
          nullable: true
      additionalProperties: false
    HttpValidationProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
        errors:
          type: object
          additionalProperties:
            type: array
            items:
              type: string
          nullable: true
      additionalProperties: {}
    ProblemDetails:
      type: object
      properties:
        type:
          type: string
          nullable: true
        title:
          type: string
          nullable: true
        status:
          type: integer
          format: int32
          nullable: true
        detail:
          type: string
          nullable: true
        instance:
          type: string
          nullable: true
      additionalProperties: {}
    QuotationFilter:
      required:
        - ratePlans
      type: object
      properties:
        ratePlans:
          type: array
          items:
            $ref: '#/components/schemas/RatePlanFilter'
          description: List of rate plans to request
        rooms:
          allOf:
            - $ref: '#/components/schemas/RoomIdEntityFilter'
          description: List of rooms to request
          nullable: true
        occupancies:
          allOf:
            - $ref: '#/components/schemas/OccupancyIdEntityFilter'
          description: List of occupancies to request
          nullable: true
        rates:
          allOf:
            - $ref: '#/components/schemas/RateIdEntityFilter'
          description: List of rates to request
          nullable: true
        currencies:
          allOf:
            - $ref: '#/components/schemas/StringEntityFilter'
          description: List of currencies to request
          nullable: true
        status:
          type: array
          items:
            enum:
              - Available
              - OnRequest
              - NotAvailable
            type: string
            description: "Whether the entity can be booked\r\n- Available: Room is available for booking\r\n- OnRequest: Hotel must confirm availability before booking\r\n- NotAvailable: Room is not available for booking"
          description: List of statuses to request
          nullable: true
        planningQualifiers:
          type: array
          items:
            $ref: '#/components/schemas/PlanningQualifierSet'
          description: "Named sets of qualifiers used to tag the returned entities.\r\nEach entity matching a set is returned with that set name in its QualifierSets field."
          nullable: true
        options:
          type: array
          items:
            enum:
              - SalesAgentAccess
              - PrivateRatesIncluded
              - TestHotelsIncluded
              - MobileOffersIncluded
            type: string
            description: "Options affecting the results\r\n- SalesAgentAccess: Add SalesAgentAccess value in the Options field in order to indicate that the client is a sales agent and that the entities should be returned only if the hotel accepts bookings coming from sales agents.\r\n- PrivateRatesIncluded: Private rates are excluded by default. Add this option to include private rates in the response.\r\n- TestHotelsIncluded: Test hotels are excluded by default.\n            To be returned the test hotels need to be explicitly requested by using the filter / rateplan / hotels / exceptions or by adding the TestHotelsIncluded value in the Options field.\r\n- MobileOffersIncluded: Mobile offers are excluded by default. Add this option to include eligible mobile offers (public or private) in the response."
          description: Options affecting the rates that can be returned
          nullable: true
        customerLocation:
          allOf:
            - $ref: '#/components/schemas/CustomerLocation'
          description: Geographical location of the client trying to access the pricing
          nullable: true
        loyaltyProgram:
          allOf:
            - $ref: '#/components/schemas/LoyaltyProgram'
          description: >-
            Loyalty program information of the client trying to access the
            pricing
          nullable: true
      additionalProperties: false
    PlanningLayout:
      required:
        - levels
      type: object
      properties:
        levels:
          type: array
          items:
            $ref: '#/components/schemas/PlanningLayoutLevel'
      additionalProperties: false
      description: List of fields sent back
    Impersonation:
      type: object
      properties:
        hotelId:
          allOf:
            - $ref: '#/components/schemas/HotelId'
          description: "Restrict the scope of the request to this hotel.\r\nMandatory with a Hotel token, optional otherwise; when set with a HotelView token, GroupId must be set as well."
          nullable: true
          example: 1234
        groupId:
          allOf:
            - $ref: '#/components/schemas/GroupId'
          description: "Restrict the scope of the request to this distribution group.\r\nMandatory with a System token, optional otherwise; when set with a HotelView token, HotelId must be set as well."
          nullable: true
          example: 9876
        userId:
          allOf:
            - $ref: '#/components/schemas/UserId'
          nullable: true
          deprecated: true
        bookingEngineId:
          allOf:
            - $ref: '#/components/schemas/BookingEngineId'
          description: Restrict the scope of the request to this booking engine.
          nullable: true
          example: 1XXA
      additionalProperties: false
      description: "Narrows the scope of the request to a single group, hotel or booking engine.\r\nImpersonation does not grant access: it selects, inside the scope your authentication token\r\nalready allows, the context the call must run in.\r\n            \r\nEach token carries a scope, and impersonation must be consistent with it:\r\n            \r\n- System token (internal applications only): GroupId is mandatory, HotelId optional.\r\n- Group token: GroupId is optional but must match the token group; HotelId is optional; BookingEngineId must be empty.\r\n- Hotel token: HotelId is mandatory and must match the token hotel; GroupId is optional and can be the group rate plan; BookingEngineId must be empty.\r\n- HotelView token: GroupId and HotelId are both optional, but if one is set the other must be set too, and both must match the token; BookingEngineId must be empty.\r\n- BookingEngine token: impersonation is ignored. The scope is entirely defined by the booking engine of the token, whatever is sent in this object.\r\n            \r\nIf your application has access to multiple tokens with different scopes, always set your\r\nimpersonation with the group and hotel of that scope. This avoids issues with token reuse and\r\nimproves performance.\r\n            \r\nAn impersonation inconsistent with the token scope is rejected with a 403 Forbidden. For\r\nexample, with a HotelView token on hotel 2 of group 1, setting GroupId without HotelId (or\r\nHotelId without GroupId) is forbidden."
    Guests:
      required:
        - adults
      type: object
      properties:
        adults:
          maximum: 2147483647
          minimum: 1
          type: integer
          description: Number of adults in the room, minimum 1
          format: int32
          example: 2
        children:
          type: array
          items:
            $ref: '#/components/schemas/Child'
          description: List of children in the room
          nullable: true
        infants:
          maximum: 2147483647
          minimum: 0
          type: integer
          description: Number of babies in the room, minimum 0
          format: int32
          example: 0
      additionalProperties: false
    QuotationStayEntityResponseRatePlanResponse:
      type: object
      properties:
        groupId:
          allOf:
            - $ref: '#/components/schemas/GroupId'
          description: The group identifier.
          example: 9876
        referenceRateCode:
          type: string
          description: The rate code or promo code used for the request.
          nullable: true
        hotels:
          type: array
          items:
            $ref: '#/components/schemas/QuotationStayEntityResponseHotelResponse'
          nullable: true
      additionalProperties: false
    RatePlanFilter:
      type: object
      properties:
        hotels:
          allOf:
            - $ref: '#/components/schemas/HotelIdEntityFilter'
          description: List of hotels to request
          nullable: true
        groupId:
          allOf:
            - $ref: '#/components/schemas/GroupId'
          description: Group identifier of the rate plan
          example: 9876
        referenceRateCode:
          type: string
          description: Either a Rate Code or a Private Offer Code Rate
          nullable: true
          example: RACKPRI
      additionalProperties: false
    RoomIdEntityFilter:
      type: object
      properties:
        exceptions:
          type: array
          items:
            $ref: '#/components/schemas/RoomId'
          description: "List of identifiers to include or exclude.\r\nMust be combined with the Default field, which decides how this list is read."
          nullable: true
        default:
          enum:
            - Included
            - Excluded
          type: string
          description: "How the Exceptions list is applied\r\n- Included: Items are returned if they are not mentioned in the Exceptions list. An empty list means all items\r\n- Excluded: Items are returned only if they are mentioned in the Exceptions list"
      additionalProperties: false
    OccupancyIdEntityFilter:
      type: object
      properties:
        exceptions:
          type: array
          items:
            $ref: '#/components/schemas/OccupancyId'
          description: "List of identifiers to include or exclude.\r\nMust be combined with the Default field, which decides how this list is read."
          nullable: true
        default:
          enum:
            - Included
            - Excluded
          type: string
          description: "How the Exceptions list is applied\r\n- Included: Items are returned if they are not mentioned in the Exceptions list. An empty list means all items\r\n- Excluded: Items are returned only if they are mentioned in the Exceptions list"
      additionalProperties: false
    RateIdEntityFilter:
      type: object
      properties:
        exceptions:
          type: array
          items:
            $ref: '#/components/schemas/RateId'
          description: "List of identifiers to include or exclude.\r\nMust be combined with the Default field, which decides how this list is read."
          nullable: true
        default:
          enum:
            - Included
            - Excluded
          type: string
          description: "How the Exceptions list is applied\r\n- Included: Items are returned if they are not mentioned in the Exceptions list. An empty list means all items\r\n- Excluded: Items are returned only if they are mentioned in the Exceptions list"
      additionalProperties: false
    StringEntityFilter:
      type: object
      properties:
        exceptions:
          type: array
          items:
            type: string
          description: "List of identifiers to include or exclude.\r\nMust be combined with the Default field, which decides how this list is read."
          nullable: true
        default:
          enum:
            - Included
            - Excluded
          type: string
          description: "How the Exceptions list is applied\r\n- Included: Items are returned if they are not mentioned in the Exceptions list. An empty list means all items\r\n- Excluded: Items are returned only if they are mentioned in the Exceptions list"
      additionalProperties: false
    PlanningQualifierSet:
      type: object
      properties:
        name:
          type: string
          description: "Name of the set, reported in the QualifierSets field of the matching entities.\r\nMandatory as soon as the set contains at least one qualifier."
          nullable: true
          example: cheapest
        qualifiers:
          type: array
          items:
            $ref: '#/components/schemas/PlanningQualifier'
          description: >-
            Qualifiers an entity must all match to belong to this set. An empty
            list matches every entity
          nullable: true
      additionalProperties: false
      description: >-
        A named set of qualifiers. Entities matching every qualifier of the set
        carry its name in the response.
    CustomerLocation:
      type: object
      properties:
        geonameId:
          allOf:
            - $ref: '#/components/schemas/ToponymId'
          description: "Customer Country Identifier\r\nIf missing, Geo Pricing restrictions are not enforced."
      additionalProperties: false
      description: Geographical location of the client trying to access the pricing
    LoyaltyProgram:
      type: object
      properties:
        membershipLevel:
          type: integer
          description: Customer Membership level (default is 0)
          format: int32
          example: 0
      additionalProperties: false
      description: Loyalty program information of the client trying to access the pricing
    PlanningLayoutLevel:
      required:
        - properties
      type: object
      properties:
        name:
          enum:
            - Hotel
            - Article
            - ArticleRate
          type: string
          description: The level of entity the properties apply to. Use ArticleRate
        properties:
          type: array
          items:
            enum:
              - Status
              - Availability
              - TotalPrice
              - MinimumPrice
              - MaximumPrice
              - DiscountPrice
              - DiscountNightCount
              - CrossedOutPrice
              - Price
              - MixedRates
              - ClosedOnArrival
              - ClosedOnDeparture
              - MinimumStayOnArrival
              - MinimumStayThrough
              - MinimumStayOnDeparture
              - MaximumStayOnArrival
              - MaximumStayThrough
              - MaximumStayOnDeparture
              - Occupancies
              - Taxes
              - PublicOffer
              - OriginalPrice
              - IncludedArticles
              - DiscountNightPrice
              - DailyOriginalPrice
              - DailyTotalPrice
              - DailyCrossedOutPrice
              - DailyRoomPrice
              - DailyIncludedArticlesPrice
              - Promotions
              - AlternativeAvailableGuests
              - CancellationCondition
              - TaxesAndFees
              - DailyTaxesAndFeesPrice
            type: string
            description: "A property to compute and return. Requesting a property drives both the computation performed\r\nby the service and the fields present in the response.\r\n- Status: Return availability status and unavailability reasons\r\n- Availability: Return number of available units\r\n- TotalPrice: Return price for the stay\r\n- MinimumPrice: Return cheapest night of the stay\r\n- MaximumPrice: Return most expensive night of the stay\r\n- DiscountPrice: [Obsolete] Use Promotions instead.\r\n- DiscountNightCount: Return number of free nights applied to the stay\r\n- CrossedOutPrice: Compute and return price for linked crossed out rate\r\n- Price: [Obsolete] Use TotalPrice instead\r\n- MixedRates: Compute and return mixed rates.\r\n- ClosedOnArrival: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- ClosedOnDeparture: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MinimumStayOnArrival: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MinimumStayThrough: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MinimumStayOnDeparture: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MaximumStayOnArrival: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MaximumStayThrough: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MaximumStayOnDeparture: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- Occupancies: Check alternate occupancies for availability\r\n- Taxes: [Obsolete] Use TaxesAndFees layout if the hotel has migrated to the Tax Center.\r\n- PublicOffer: Compute and return applicable public campaigns and promotions\r\n- OriginalPrice: Return original prices for promotions\r\n- IncludedArticles: Return meal plans and other mandatory services.\n            WARN: If omitted, prices returned will not include meals\r\n- DiscountNightPrice: Return discount caused by free nights\r\n- DailyOriginalPrice: Daily breakdown of original price\r\n- DailyTotalPrice: Daily breakdown of total price\r\n- DailyCrossedOutPrice: Daily breakdown of crossed out price\r\n- DailyRoomPrice: Daily breakdown of room price\r\n- DailyIncludedArticlesPrice: Daily breakdown of included articles price\r\n- Promotions: Compute and return applicable private promotions\r\n- AlternativeAvailableGuests: Return other lodging possibilities for that room/rate.\n            WARN: This has a strong impact on performance and should only be used for a secondary quotation after failing to accommodate guests.\r\n- CancellationCondition: Return cancellation condition applicable to the stay.\n            Note: This is only applicable for hotels that support Cancellation Conditions by letter\r\n- TaxesAndFees: Compute and return applicable taxes and fees.\n            Note: This is only applicable for hotels that have migrated to the Tax Center.\r\n- DailyTaxesAndFeesPrice: Daily breakdown of Taxes and Fees prices"
          description: List of entity properties to compute and return
      additionalProperties: false
      description: The properties to return for one level of entity
    HotelId:
      type: integer
      description: Hotel identifier.
      example: 1234
    GroupId:
      type: integer
      description: Distribution group identifier.
      example: 9876
    UserId:
      type: integer
      description: Obsolete. User identifier.
      example: 1357
    BookingEngineId:
      type: string
      description: Booking engine reference.
      example: 1XXA
    Child:
      type: object
      properties:
        age:
          maximum: 2147483647
          minimum: 0
          type: integer
          description: "Age of the child. \r\nIf missing, the service will assume the maximum age for a child on the given hotel"
          format: int32
          nullable: true
          example: 10
        count:
          maximum: 2147483647
          minimum: 0
          type: integer
          description: Number of children with that age in the room, minimum 0
          format: int32
          example: 1
      additionalProperties: false
    QuotationStayEntityResponseHotelResponse:
      type: object
      properties:
        hotelId:
          allOf:
            - $ref: '#/components/schemas/HotelId'
          description: The hotel identifier.
          example: 1234
        entities:
          type: array
          items:
            $ref: '#/components/schemas/QuotationStayEntityResponse'
          nullable: true
      additionalProperties: false
    HotelIdEntityFilter:
      type: object
      properties:
        exceptions:
          type: array
          items:
            $ref: '#/components/schemas/HotelId'
          description: "List of identifiers to include or exclude.\r\nMust be combined with the Default field, which decides how this list is read."
          nullable: true
        default:
          enum:
            - Included
            - Excluded
          type: string
          description: "How the Exceptions list is applied\r\n- Included: Items are returned if they are not mentioned in the Exceptions list. An empty list means all items\r\n- Excluded: Items are returned only if they are mentioned in the Exceptions list"
      additionalProperties: false
    RoomId:
      type: integer
      description: Room identifier.
      example: 3456
    OccupancyId:
      type: integer
      description: Occupancy identifier.
      example: 7890
    RateId:
      type: integer
      description: Rate identifier.
      example: 5678
    PlanningQualifier:
      type: object
      properties:
        propertyName:
          enum:
            - Status
            - Availability
            - TotalPrice
            - MinimumPrice
            - MaximumPrice
            - DiscountPrice
            - DiscountNightCount
            - CrossedOutPrice
            - Price
            - MixedRates
            - ClosedOnArrival
            - ClosedOnDeparture
            - MinimumStayOnArrival
            - MinimumStayThrough
            - MinimumStayOnDeparture
            - MaximumStayOnArrival
            - MaximumStayThrough
            - MaximumStayOnDeparture
            - Occupancies
            - Taxes
            - PublicOffer
            - OriginalPrice
            - IncludedArticles
            - DiscountNightPrice
            - DailyOriginalPrice
            - DailyTotalPrice
            - DailyCrossedOutPrice
            - DailyRoomPrice
            - DailyIncludedArticlesPrice
            - Promotions
            - AlternativeAvailableGuests
            - CancellationCondition
            - TaxesAndFees
            - DailyTaxesAndFeesPrice
          type: string
          description: "The property the qualifier is evaluated on\r\n- Status: Return availability status and unavailability reasons\r\n- Availability: Return number of available units\r\n- TotalPrice: Return price for the stay\r\n- MinimumPrice: Return cheapest night of the stay\r\n- MaximumPrice: Return most expensive night of the stay\r\n- DiscountPrice: [Obsolete] Use Promotions instead.\r\n- DiscountNightCount: Return number of free nights applied to the stay\r\n- CrossedOutPrice: Compute and return price for linked crossed out rate\r\n- Price: [Obsolete] Use TotalPrice instead\r\n- MixedRates: Compute and return mixed rates.\r\n- ClosedOnArrival: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- ClosedOnDeparture: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MinimumStayOnArrival: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MinimumStayThrough: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MinimumStayOnDeparture: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MaximumStayOnArrival: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MaximumStayThrough: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- MaximumStayOnDeparture: Compute and return restrictions for the stay. Restrictions are computed if any of the items is requested\r\n- Occupancies: Check alternate occupancies for availability\r\n- Taxes: [Obsolete] Use TaxesAndFees layout if the hotel has migrated to the Tax Center.\r\n- PublicOffer: Compute and return applicable public campaigns and promotions\r\n- OriginalPrice: Return original prices for promotions\r\n- IncludedArticles: Return meal plans and other mandatory services.\n            WARN: If omitted, prices returned will not include meals\r\n- DiscountNightPrice: Return discount caused by free nights\r\n- DailyOriginalPrice: Daily breakdown of original price\r\n- DailyTotalPrice: Daily breakdown of total price\r\n- DailyCrossedOutPrice: Daily breakdown of crossed out price\r\n- DailyRoomPrice: Daily breakdown of room price\r\n- DailyIncludedArticlesPrice: Daily breakdown of included articles price\r\n- Promotions: Compute and return applicable private promotions\r\n- AlternativeAvailableGuests: Return other lodging possibilities for that room/rate.\n            WARN: This has a strong impact on performance and should only be used for a secondary quotation after failing to accommodate guests.\r\n- CancellationCondition: Return cancellation condition applicable to the stay.\n            Note: This is only applicable for hotels that support Cancellation Conditions by letter\r\n- TaxesAndFees: Compute and return applicable taxes and fees.\n            Note: This is only applicable for hotels that have migrated to the Tax Center.\r\n- DailyTaxesAndFeesPrice: Daily breakdown of Taxes and Fees prices"
        qualifier:
          enum:
            - Lowest
            - Highest
          type: string
          description: "Whether the lowest or the highest value of that property qualifies\r\n- Lowest: The lowest value of the property qualifies\r\n- Highest: The highest value of the property qualifies"
      additionalProperties: false
      description: >-
        Selects the entities holding the lowest or the highest value of a given
        property
    ToponymId:
      type: integer
      description: GeoNames identifier of the customer country.
      example: 3017382
    QuotationStayEntityResponse:
      type: object
      properties:
        level:
          enum:
            - Hotel
            - Article
            - ArticleRate
          type: string
          description: >-
            Level of the entity. Only entities of level ArticleRate are
            returned.
        roomId:
          allOf:
            - $ref: '#/components/schemas/RoomId'
          description: The room identifier.
          example: 3456
        occupancyId:
          type: string
          description: "The optional occupancy identifier.\r\nOnly set when the entity is about an advanced occupancy and the hotel uses Occupancy Based Pricing.\r\nNot set when the entity is about a default occupancy or if the hotel uses Price Per Person.\r\nReturned as a string, for backward compatibility with the previous version of the service."
          nullable: true
          example: '7890'
        rateId:
          allOf:
            - $ref: '#/components/schemas/RateId'
          description: The rate identifier.
          example: 5678
        currency:
          type: string
          description: The currency code using ISO 4217.
          nullable: true
          example: EUR
        status:
          enum:
            - Available
            - OnRequest
            - NotAvailable
          type: string
          description: "Whether the stay can be booked at this price.\r\n- Available: Room is available for booking\r\n- OnRequest: Hotel must confirm availability before booking\r\n- NotAvailable: Room is not available for booking"
          nullable: true
        unavailabilityReason:
          enum:
            - None
            - MinStay
            - MaxStay
            - Other
            - GuestsDoNotFitInRoom
          type: string
          description: "The unavailability reason.\r\n- None: No unavailability reason applies, the entity is available\r\n- MinStay: Minimum stay constraint is not met\r\n- MaxStay: Maximum stay constraint is not met\r\n- Other: Entity is not available for another reason\r\n- GuestsDoNotFitInRoom: Entity is not available for this number of guests"
          nullable: true
        availability:
          type: integer
          description: The optional count of available rooms.
          format: int32
          nullable: true
          example: 3
        totalPrice:
          type: number
          description: "Total price of the entity for all the stay for the number of guests requested\r\nIf PublicOffer property is requested and if the DiscountNightCount or the DiscountPrice property is requested then the public offer code discounts will be applied.\r\nIf ReferenceRateCode is set and if the DiscountNightCount property or the DiscountPrice property is requested then the private offer code discount will be applied.\r\nIf the DiscountNightCount property or the DiscountPrice property is requested then the free nights will be applied.\r\nIf IncludedArticles property is requested, the total price of the entity includes the price of the included articles."
          format: double
          nullable: true
          example: 100.5
        minimumPrice:
          type: number
          description: "Cheapest night of the stay.\r\nSet only if MinimumPrice property is requested."
          format: double
          nullable: true
          example: 30
        maximumPrice:
          type: number
          description: "Most expensive night of the stay.\r\nSet only if the MaximumPrice property is requested."
          format: double
          nullable: true
          example: 40.5
        discountPrice:
          type: number
          description: >-
            [Obsolete] Total discount price for all the stay for the number of
            guests requested
          format: double
          nullable: true
          example: 19.5
          deprecated: true
        discountNightPrice:
          type: number
          description: Discount that is caused by free nights
          format: double
          nullable: true
          example: 30
        discountNightCount:
          type: integer
          description: Number of free nights
          format: int32
          nullable: true
          example: 1
        crossedOutPrice:
          type: number
          description: "If the rate has a crossed out rate defined, TotalPrice of the entity for that rate for the number of guests requested\r\nSet only if the total price of the current rate is lower than the total price of the rate used for the crossed out price.\r\nThe base price is not discounted, even if a discount is applicable\r\nSet only if the CrossedOutPrice property is requested.\r\nIf IncludedArticles property is requested, the CrossedOutPrice will include the included articles prices of the crossed out rate"
          format: double
          nullable: true
          example: 130
        originalPrice:
          type: number
          description: "Total price of the entity for all the stay, for the number of guests requested, without the included articles or the discount.\r\nSet only if TotalPrice and OriginalPrice properties are requested, and it is different from RoomPrice."
          format: double
          nullable: true
          example: 120
        roomPrice:
          type: number
          description: "Price of the entity for all the stay, without the included articles and with the discount applied if it is applicable, for the number of guests requested.\r\nIf PublicOffer property is requested and if the DiscountNightCount or the DiscountPrice property is requested then the public offer code discounts will be applied.\r\nIf ReferenceRateCode is set and if the DiscountNightCount property or the DiscountPrice property is requested then the private offer code discount will be applied.\r\nIf the DiscountNightCount property or the DiscountPrice property is requested then the free nights will be applied.\r\nOnly returned if the IncludedArticles property is requested"
          format: double
          nullable: true
          example: 90
        crossedOutRoomPrice:
          type: number
          description: "If the rate has a crossed out rate defined, RoomPrice of the entity for that rate\r\nThe base price is not discounted, even if a discount is applicable\r\nSet only if the CrossedOutPrice property is requested."
          format: double
          nullable: true
          example: 110
        mixedRates:
          type: array
          items:
            $ref: '#/components/schemas/TemporalRateResponse'
          description: "Best Mixed Rate for the stay.\r\nSet only if MixedRates property is requested and the mixed rate is better than all other rates"
          nullable: true
        minimumStayThrough:
          type: string
          description: "The highest MinimumStayThrough for the stay.\r\nSet only if MinimumStayThrough property is requested."
          nullable: true
          example: '2'
        maximumStayThrough:
          type: string
          description: "The smallest MaximumStayThrough for the stay.\r\nSet only if MaximumStayThrough property is requested."
          nullable: true
          example: '15'
        occupancy:
          allOf:
            - $ref: '#/components/schemas/OccupancyResponse'
          description: "Maximum number of people that can stay with the returned RoomPrice\r\nSet only if Occupancies property is requested.\r\nAdultCount and ChildCount are set only if PersonCount is not set.\r\nIf the room is not available,\r\nTotalPrice, RoomPrice, DiscountPrice, OriginalPrice, CrossedOutPrice, CrossedOutRoomPrice correspond to that occupancy"
          nullable: true
        taxes:
          allOf:
            - $ref: '#/components/schemas/TaxesResponse'
          description: "Obsolete. Taxes returned here are not complete for all properties.\r\nAlways read TaxesAndFees first and fall back to this field only when TaxesAndFees is absent from the response,\r\nwhich happens for hotels that have not migrated to the Tax Center yet."
          nullable: true
          deprecated: true
        isOfferCode:
          type: boolean
          description: >-
            The optional check to know if the discount come from a public or a
            private offer.
          nullable: true
          deprecated: true
        offerCodeId:
          type: string
          description: The optional offer code identifier.
          format: uuid
          nullable: true
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
          deprecated: true
        articles:
          allOf:
            - $ref: '#/components/schemas/StayArticleResponseArticlesResponse'
          description: Included articles (meal plans, etc).
          nullable: true
        membershipLevel:
          type: integer
          description: "Membership level number of the loyalty program the rate belongs to.\r\nDefault value is 0 if there is no loyalty program for this rate."
          format: int32
          example: 0
        isLoyalty:
          type: boolean
          description: True when the rate belongs to a loyalty program.
        canUseRedemption:
          type: boolean
          description: >-
            True when the rate belongs to a loyalty program where the customer
            can spend reward points.
        dailyOriginalPrice:
          allOf:
            - $ref: '#/components/schemas/DecimalITemporal'
          description: The daily original room price
          nullable: true
        dailyTotalPrice:
          allOf:
            - $ref: '#/components/schemas/DecimalITemporal'
          description: The daily total price
          nullable: true
        dailyCrossedOutPrice:
          allOf:
            - $ref: '#/components/schemas/DecimalITemporal'
          description: The daily crossed out price
          nullable: true
        dailyRoomPrice:
          allOf:
            - $ref: '#/components/schemas/DecimalITemporal'
          description: The daily room price
          nullable: true
        guests:
          allOf:
            - $ref: '#/components/schemas/Guests'
          description: "If the room is available,\r\nTotalPrice, RoomPrice, DiscountPrice, OriginalPrice, CrossedOutPrice, CrossedOutRoomPrice are valid for this number of guests.\r\nThis always matches the Guests sent in the request, to allow you to find the appropriate stays when requesting multiple Guests items"
          nullable: true
        promotions:
          allOf:
            - $ref: '#/components/schemas/PromotionResponses'
          description: "Promotions that are applicable to the entity.\r\nSet only if promotions property is requested and if the entity has an applicable promotion"
          nullable: true
        taxesAndFees:
          type: array
          items:
            $ref: '#/components/schemas/TaxesAndFeesResponse'
          description: "Taxes and fees that are applicable to the entity.\r\nSet only if the TaxesAndFees property is requested and if the entity is using the Tax Center feature.\r\nAlways read this field first; fall back to the obsolete Taxes field only when it is absent from the response."
          nullable: true
        alternativeAvailableGuests:
          type: array
          items:
            $ref: '#/components/schemas/AlternativeAvailableGuestsResponse'
          description: "If the room is available, other possible number of guests that can stay. Pricing may vary\r\nThis is useful to redirect the client to another search, if their initial request is not available. For example taking 2 double rooms instead of a quadruple room.\r\nWARN: This has a strong impact on performance and should only be used for a second search"
          nullable: true
        cancellationCondition:
          allOf:
            - $ref: '#/components/schemas/CancelConditionResponse'
          description: "Cancellation condition applicable to the stay.\r\nSet only if the CancellationCondition property is requested."
          nullable: true
        originalTotalPrice:
          type: number
          description: "Total price of the entity for all the stay, without discounts, for the number of guests requested\r\nSet only if TotalPrice and OriginalPrice properties are requested, and it is different from TotalPrice."
          format: double
          nullable: true
          example: 120
        dailyOriginalTotalPrices:
          allOf:
            - $ref: '#/components/schemas/DecimalITemporal'
          description: Daily breakdown of OriginalTotalPrice
          nullable: true
      additionalProperties: false
    TemporalRateResponse:
      type: object
      properties:
        rateId:
          allOf:
            - $ref: '#/components/schemas/RateId'
          description: The rate identifier.
          example: 5678
        beginDate:
          type: string
          format: date
          example: '2027-08-31'
        endDate:
          type: string
          format: date
          example: '2027-08-31'
      additionalProperties: false
    OccupancyResponse:
      type: object
      properties:
        adultCount:
          type: integer
          description: The optional number of adults.
          format: int32
          nullable: true
          example: 2
        childCount:
          type: integer
          description: The optional number of children.
          format: int32
          nullable: true
          example: 1
        infantCount:
          type: integer
          description: The optional number of infants.
          format: int32
          nullable: true
          example: 0
        personCount:
          type: integer
          description: The optional number of people.
          format: int32
          nullable: true
          example: 3
      additionalProperties: false
      description: Maximum number of people that can stay with the returned RoomPrice
    TaxesResponse:
      type: object
      properties:
        includedTaxes:
          type: array
          items:
            $ref: '#/components/schemas/TaxResponse'
          nullable: true
          deprecated: true
        excludedTaxes:
          type: array
          items:
            $ref: '#/components/schemas/TaxResponse'
          nullable: true
          deprecated: true
        onSiteTaxes:
          type: array
          items:
            $ref: '#/components/schemas/TaxResponse'
          nullable: true
          deprecated: true
      additionalProperties: false
      description: >-
        Obsolete. Use TaxesAndFees for hotels migrated to the Tax Center; Taxes
        only show complete and accurate results for hotels not yet migrated.
    StayArticleResponseArticlesResponse:
      type: object
      properties:
        includedArticles:
          type: array
          items:
            $ref: '#/components/schemas/StayArticleResponse'
          nullable: true
      additionalProperties: false
    DecimalITemporal:
      type: array
      items:
        type: object
        properties:
          value:
            type: number
            format: double
          start:
            type: string
            format: date
            example: '2027-08-31'
          end:
            type: string
            format: date
            example: '2027-08-31'
    PromotionResponses:
      type: object
      properties:
        excluded:
          type: array
          items:
            $ref: '#/components/schemas/PromotionResponse'
          description: Promotions that were not applied and must be applied to a stay
          nullable: true
        included:
          type: array
          items:
            $ref: '#/components/schemas/PromotionResponse'
          description: Promotions that were applied to the entity
          nullable: true
      additionalProperties: false
    TaxesAndFeesResponse:
      type: object
      properties:
        taxId:
          type: string
          description: Tax identifier
          format: uuid
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
        totalPrice:
          type: number
          description: Total tax amount for the stay
          format: double
          example: 9.15
        currency:
          type: string
          description: Iso Currency code for the amount
          nullable: true
          example: EUR
        applicationRule:
          enum:
            - OncePerStay
            - OncePerEntity
          type: string
          description: "Which part of the booking the taxes applies to, and its recurrence.\r\n- OncePerStay: The tax must be only collected once, even when booking multiple entities (for example: booking fee)\r\n- OncePerEntity: The tax must be collected for each entity (for example: VAT, stay tax, cleaning fee)"
        type:
          enum:
            - VAT
            - StayTax
            - CityTax
            - LocalTax
            - StateTax
            - GovernmentTax
            - GeneralServiceTax
            - TouristTax
            - ServiceCharge
            - AccommodationTax
            - ConsumptionTax
            - CustomTax
            - ResortFee
            - ServiceFee
            - CleaningFee
            - CustomFee
          type: string
          description: "Precise type of the tax or fee\r\n- VAT: Value added tax\r\n- StayTax: Tax on the stay itself, usually charged per guest and per night\r\n- CityTax: Tax levied by the city\r\n- LocalTax: Tax levied by a local authority\r\n- StateTax: Tax levied by the state, region or province\r\n- GovernmentTax: Tax levied by the national government\r\n- GeneralServiceTax: General tax on services, such as a goods and services tax\r\n- TouristTax: Tax levied on tourists\r\n- ServiceCharge: Charge for the service provided by the hotel staff\r\n- AccommodationTax: Tax on the accommodation\r\n- ConsumptionTax: Tax on consumption\r\n- CustomTax: Tax that does not match any other type, either configured as a custom tax or not mapped to a Tax Center type\r\n- ResortFee: Fee for the facilities and services of a resort\r\n- ServiceFee: Fee for a service provided by the hotel\r\n- CleaningFee: Fee for cleaning the room or the property\r\n- CustomFee: Fee that does not match any other type, configured as a custom fee"
        category:
          enum:
            - Tax
            - Fee
          type: string
          description: "Whether this is a tax or a fee\r\nIn some countries, fees must be displayed as part of the room price.\r\n- Tax: The amount is a tax\r\n- Fee: The amount is a fee"
        paymentRule:
          enum:
            - Included
            - PaidAtBooking
            - PaidOnSite
          type: string
          description: "When the tax is due for collection\r\n- Included: Tax is included in total and daily prices for this entity, and is not collected separately\r\n- PaidAtBooking: Tax is paid at the time of booking\r\n- PaidOnSite: Tax is paid on site upon check-in or check-out"
        dailyAmount:
          allOf:
            - $ref: '#/components/schemas/DecimalITemporal'
          description: detail of the amount of the tax/fee per day
          nullable: true
      additionalProperties: false
      description: Taxes and fees that are applicable to the entity.
    AlternativeAvailableGuestsResponse:
      type: object
      properties:
        adults:
          type: integer
          description: Number of adults in the room
          format: int32
          example: 2
        children:
          type: integer
          description: Number of children in the room
          format: int32
          example: 1
        infants:
          type: integer
          description: Number of babies in the room
          format: int32
          example: 0
      additionalProperties: false
      description: Another number of guests that can stay in that room and rate
    CancelConditionResponse:
      type: object
      properties:
        code:
          allOf:
            - $ref: '#/components/schemas/CancelConditionId'
          description: "Code of the cancellation condition that applies to the stay according to the planning.\r\nThis is only applicable to hotels that use “Legacy” cancellation conditions. Most hotels use a cancellation condition that is defined at the rate level. In that case, the code is null\r\nNote: The cancellation condition may be overriden by the selling condition of the group"
      additionalProperties: false
    TaxResponse:
      type: object
      properties:
        type:
          enum:
            - Percent
            - ArticlePercent
            - PerAdultPerStay
            - PerAdultPerNight
            - PerPersonPerStay
            - PerPersonPerNight
            - PerStay
            - PerNight
            - PerRoomPerNight
          type: string
          description: The type of the tax.
        nominal:
          allOf:
            - $ref: '#/components/schemas/Money'
          description: The fix amount of money to tax.
        percent:
          allOf:
            - $ref: '#/components/schemas/Percent'
          description: The percentage to tax.
        category:
          enum:
            - None
            - RateTax
            - StayTax
            - OtherTax
          type: string
          description: >-
            Obsolete. Which part of the booking a legacy tax applies to. Use
            TaxCategory with the TaxesAndFees layout instead.
      additionalProperties: false
    StayArticleResponse:
      type: object
      properties:
        articleId:
          allOf:
            - $ref: '#/components/schemas/ArticleId'
          description: Article identifier
        type:
          enum:
            - None
            - PerAdultPerStay
            - PerAdultPerNight
            - PerChildPerStay
            - PerChildPerNight
            - PerInfantPerStay
            - PerInfantPerNight
            - PerAllPersonsPerStay
            - PerAllPersonsPerNight
          type: string
          description: "Article price model\r\n- None: No price model is defined for the article\r\n- PerAdultPerStay: The price is charged once per adult for the whole stay\r\n- PerAdultPerNight: The price is charged per adult and per night of the stay\r\n- PerChildPerStay: The price is charged once per child for the whole stay\r\n- PerChildPerNight: The price is charged per child and per night of the stay\r\n- PerInfantPerStay: The price is charged once per infant for the whole stay\r\n- PerInfantPerNight: The price is charged per infant and per night of the stay\r\n- PerAllPersonsPerStay: The price is charged once per guest for the whole stay, whatever the age category\r\n- PerAllPersonsPerNight: The price is charged per guest and per night of the stay, whatever the age category"
        totalPrice:
          type: number
          description: Total price for one unit of the article for all the stay
          format: double
          nullable: true
          example: 20
        totalOriginalPrice:
          type: number
          description: "Price for one unit of the article for all the stay, before any discount.\r\nSet only if the OriginalPrice property is requested and it is different from TotalPrice."
          format: double
          nullable: true
          example: 25
        dailyPrice:
          allOf:
            - $ref: '#/components/schemas/DecimalITemporal'
          description: Daily breakdown of TotalPrice
          nullable: true
        dailyOriginalPrice:
          allOf:
            - $ref: '#/components/schemas/DecimalITemporal'
          description: Daily breakdown of TotalOriginalPrice
          nullable: true
        crossedOutPrice:
          type: number
          description: >-
            If the rate has a crossed out rate defined, price for one unit of
            the article in the crossed out rate
          format: double
          nullable: true
          example: 25
        dailyCrossedOutPrice:
          allOf:
            - $ref: '#/components/schemas/DecimalITemporal'
          description: Daily breakdown of CrossedOutPrice
          nullable: true
      additionalProperties: false
    PromotionResponse:
      type: object
      properties:
        offerCodeId:
          type: string
          description: Offer code identifier
          format: uuid
          example: 3fa85f64-5717-4562-b3fc-2c963f66afa6
        totalPrice:
          type: number
          description: The amount to be deducted from the booking
          format: double
          example: 19.5
        currency:
          type: string
          description: Iso Currency code for the amount
          nullable: true
          example: EUR
        scope:
          enum:
            - PerBooking
            - PerRoom
          type: string
          description: "Which part of the booking the promotion applies to, and its recurrence (PerBooking, PerRoom)\r\n- PerBooking: The promotion is deducted once from the whole booking, whatever the number of entities booked\r\n- PerRoom: The promotion is deducted for each entity booked"
      additionalProperties: false
      description: A promotion applicable to the entity
    CancelConditionId:
      type: string
    Money:
      type: object
      properties:
        amount:
          type: number
          format: double
        currency:
          type: string
      additionalProperties: false
    Percent:
      type: number
      description: A percentage.
      example: 10
    ArticleId:
      type: integer
      description: Article identifier, for a meal plan or another mandatory service.
      example: 2468

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.