Table of Contents

Category Availability

Request the available categories using the CruiseCategoryAvailRQ/RS message pair. A list of available categories will be returned by the cruise line and the traveler can then select a category.

Request Example

POST https://bookings-stage.sw.travelhx.com/ota/rest/OTA_CruiseCategoryAvailRQ
Content-Type: application/xml
<OTA_CruiseCategoryAvailRQ xmlns="http://www.opentravel.org/OTA/2003/05" CorrelationID="0d4a7548-9126-4467-b8fe-b863d0bd4b78" Version="1.0">
  <POS>
    [..]
  </POS>
  <Guest/>
  <Guest/>
  <GuestCounts>
    <GuestCount Quantity="2" Code="10"/>
  </GuestCounts>
  <SailingInfo>
    <SelectedSailing VoyageID="CS21711JUNKTN">
      <CruiseLine/>
    </SelectedSailing>
  </SailingInfo>
  <SelectedFare FareCode="BESTPRICE"/>
</OTA_CruiseCategoryAvailRQ>

Response Example

Response will contain a list of CategoryOption elements with available cabin categories:

<vx:OTA_CruiseCategoryAvailRS xmlns:ns3="http://www.versonix.com/ota" 
  xmlns:ns4="http://schemas.xmlsoap.org/soap/envelope/" 
  xmlns:vx="http://www.opentravel.org/OTA/2003/05" 
  CorrelationID="0d4a7548-9126-4467-b8fe-b863d0bd4b78" 
  TargetName="SW_OTA_TEST@ORADEV" 
  TimeStamp="2021-08-27T14:16:16.900" 
  Version="1.999">
  <vx:Success/>
  <vx:SailingInfo>
    [..]
  </vx:SailingInfo>
  <vx:FareOption FareCode="BESTPRICE">
    <vx:CategoryOptions>
      <vx:CategoryOption GenericCategoryCode="A_GNR" ListOfCategoryQualifierCodes="" MaxOccupancy="2" PricedCategoryCode="A" Status="36">
        <vx:PriceInfos>
          <vx:PriceInfo Amount="325.55" BreakdownType="DBL" ChargeTypeCode="30" CurrencyCode="USD"/>
          <vx:PriceInfo Amount="225.12" BreakdownType="1GT" ChargeTypeCode="7" CurrencyCode="USD"/>
          <vx:PriceInfo Amount="100.43" BreakdownType="2GT" ChargeTypeCode="7" CurrencyCode="USD"/>
        </vx:PriceInfos>
      </vx:CategoryOption>
      [..]
  </vx:CategoryOptions>
  </vx:FareOption>
</vx:OTA_CruiseCategoryAvailRS>

Including Waitlisted Categories

By default only categories that are available (OK) or sold on guarantee (GTY) are returned. To also see waitlisted categories for a sailing, add a SearchQualifiers element with the statuses you want. In OTA_CruiseCategoryAvailRQ this element is a direct child of the request (unlike Sailing Availability, where it sits inside CruiseLinePrefs/CruiseLinePref):

<OTA_CruiseCategoryAvailRQ Version="1.0" xmlns="http://www.opentravel.org/OTA/2003/05">
    <POS>
        <Source ISOCurrency="AUD">
            <RequestorID ID="242667" Type="5" ID_Context="SEAWARE"/>
            <BookingChannel Type="1">
                <CompanyName>DIRECT-AGENCY</CompanyName>
            </BookingChannel>
        </Source>
    </POS>
    <Guest/>
    <Guest/>
    <GuestCounts>
        <GuestCount Quantity="2" Code="10"/>
    </GuestCounts>
    <SailingInfo>
        <SelectedSailing VoyageID="_@FREUR01-270423">
            <CruiseLine/>
        </SelectedSailing>
    </SailingInfo>
    <SearchQualifiers>
        <Status Status="38"/>
        <Status Status="46"/>
        <Status Status="47"/>
    </SearchQualifiers>
    <SelectedFare FareCode="BESTPRICE"/>
</OTA_CruiseCategoryAvailRQ>

The statuses you list replace the default OK/GTY filter, so the search returns exactly the kinds of inventory you ask for — <Status Status="46"/> on its own returns waitlisted categories only.

Status Meaning Seaware inventory result Seaware availability mode
36 Available OK OK
38 Closed NO ALL
46 Waitlisted WTL WTL
47 Guaranteed GTY GTY

Status 38 maps to the Seaware ALL availability mode, which opens the search to every kind of inventory. That is why the request above returns everything — available, guarantee and waitlisted categories alike — and why 38/46/47 is the combination to use when you want waitlisted categories shown alongside normal availability.

Each CategoryOption in the response carries its own Status attribute, so waitlisted categories can be told apart from bookable ones. See OTA Code Lists for the full status list and SwOTA Shopping for further examples.

Multiple Fare Codes

If several SelectedFare elements provided in the request the behavior depends on the SwOtaFareCodeModeEnabled Seaware setting configured by the cruise line:

  • Fare Code mode (SwOtaFareCodeModeEnabled=Y): Each SelectedFare triggers a separate category search, returning separate FareOption elements in response. This lets you query available categories for several different promotions in a single request.
  • Promotions mode (SwOtaFareCodeModeEnabled=N): All promotion codes are applied at the same time, resulting in a single FareOption element in response with only categories that use all provided promotions.

Price Itemization

There is a limited ability to view itemized pricing in category availability results. By default the result will only contain per booking and per guest totals.

If the setting CatAvailPriceGroupingCode is configured in Seaware (per booking source) then that grouping will be applied to this response and SwOta will show itemized pricing in PriceInfos using code value as grouping.

Limitations

The limitation here occurs from the OTA specification restriction on the number of PriceInfo elements (maxOccurs="8"), the public specification limits it to just 8 elements.

Integration partners that adhere strictly to those limits and work with SwOTA in VXAdditions=off mode will be effectively unable to use this feature due to this limit. If the VXAdditions are allowed the SwOTA specification lifts this restriction (maxOccurs="unbounded").

Example Grouping Setup

Price Grouping Configuration

Example Itemized Response

<vx:CategoryOption Status="36" MaxOccupancy="4" ListOfCategoryQualifierCodes="4" PricedCategoryCode="CS">
    <vx:PriceInfos>
        <vx:PriceInfo BreakdownType="DBL" ChargeTypeCode="30" CurrencyCode="USD" Amount="31410"/>
        <vx:PriceInfo BreakdownType="DBL/DSC" ChargeTypeCode="30" CurrencyCode="USD" Amount="-12780"/>
        <vx:PriceInfo BreakdownType="DBL/CRUI" ChargeTypeCode="30" CurrencyCode="USD" Amount="43840"/>
        <vx:PriceInfo BreakdownType="DBL/PORT" ChargeTypeCode="30" CurrencyCode="USD" Amount="350"/>
        <vx:PriceInfo BreakdownType="1GT" ChargeTypeCode="7" CurrencyCode="USD" Amount="15705"/>
        <vx:PriceInfo BreakdownType="1GT/DSC" ChargeTypeCode="7" CurrencyCode="USD" Amount="-6390"/>
        <vx:PriceInfo BreakdownType="1GT/CRUI" ChargeTypeCode="7" CurrencyCode="USD" Amount="21920"/>
        <vx:PriceInfo BreakdownType="1GT/PORT" ChargeTypeCode="7" CurrencyCode="USD" Amount="175"/>
        <vx:PriceInfo BreakdownType="2GT" ChargeTypeCode="7" CurrencyCode="USD" Amount="15705"/>
        <vx:PriceInfo BreakdownType="2GT/DSC" ChargeTypeCode="7" CurrencyCode="USD" Amount="-6390"/>
        <vx:PriceInfo BreakdownType="2GT/CRUI" ChargeTypeCode="7" CurrencyCode="USD" Amount="21920"/>
        <vx:PriceInfo BreakdownType="2GT/PORT" ChargeTypeCode="7" CurrencyCode="USD" Amount="175"/>
    </vx:PriceInfos>
</vx:CategoryOption>
Note
  • The BreakdownType field is limited by 8 characters
  • First part is always 3 character breakdown type (DBL, SGL, 1GT etc.) and the separator character
  • Invoice item group codes should be limited in setup by 4 characters so they always fit into the field
  • Longer values will be cut to first 4 characters
  • All invoice needs to be grouped in setup, otherwise SwOTA will return invoice item types like "PORT" and "CRUI" for "PORT CHARGES" and "CRUISE FARE" invoice item types that were not mapped in OTA grouping

Price Itemization for Cached SailAvail

The OTA_CruiseSailAvailRQ call with IncludeCategoriesInd="true" will include category availability for each returned SailingOption.

Warning

Use with caution, as it may take a while to calculate all that availability.

The price breakdown for the categories in that call is calculated (and configured) the same way as for the OTA_CruiseCategoryAvailRQ/RS described above.

For the cached version of that call (<TPA_Extensions IncludeCategoriesInd="true" UseCacheInd="true"/>) the price breakdown is configured in Seaware Quoting Rules. Set up fields there with same names as Invoice Group names in the non-cached setup to make the pricing consistent between cached and non-cached call.