openapi: 3.0.0 info: title: Cruise Cabin Availability description: Cruise cabin availability API to get available cabins for a given itinerary, duration, cabin type, occupancy and board. version: "1.0" contact: email: NRCruiseTeam@TUIGroup.onmicrosoft.com name: "Cruise NR API Support" x-header: | This APIs returns physical cabins on a cruise for given search criteria. x-summary: | This API returns physical cabins on a cruise that is specific to the search criteria. servers: - url: https://prod.api.tui/v2/cruises/cabinsavailability - url: https://pre-prod.api.tui/v2/cruises/cabinsavailability paths: /v2/cruises/cabinsavailability: post: tags: - "Cruise Cabin availability" summary: API to get available cabins description: This API gives a list of available physical cabins and price for the given selection and occupancy. operationId: getCabinSelection parameters: - name: x-Correlation-Id in: header required: true description: Unique identifier for tracing requests (UUID format) schema: type: string format: uuid pattern: '^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$' - name: apiVersion description: Indicates the target version of the resource in: path required: true schema: type: string pattern: ^v([0-9]+)([.])([0-9]+)$ example: v1.0 requestBody: content: application/json: schema: $ref: '#/components/schemas/CabinAvailabilityRequest' required: true responses: '200': description: OK content: application/json: schema: "$ref": "#/components/schemas/CabinAvailabilityResponse" application/problem+json: schema: "$ref": "#/components/schemas/CabinAvailabilityResponse" '400': description: Bad request content: application/problem+json: schema: "$ref": "#/components/schemas/ValidationProblem" '401': description: Not authorised content: application/json: schema: "$ref": "#/components/schemas/CabinAvailabilityResponse" application/problem+json: schema: "$ref": "#/components/schemas/CabinAvailabilityResponse" '404': description: Not Found content: application/json: schema: "$ref": "#/components/schemas/CabinAvailabilityResponse" application/problem+json: schema: "$ref": "#/components/schemas/CabinAvailabilityResponse" '500': description: Internal server error content: application/problem+json: schema: "$ref": "#/components/schemas/Problem" '502': description: One or more backend systems not available content: application/problem+json: schema: "$ref": "#/components/schemas/Problem" components: schemas: Address: required: - city - countryIsoCode - houseNumber - postcode - streetName type: object properties: houseNumber: type: string streetName: type: string addressLine2: type: string description: For UK - optional. FlightOnly (WR) - not presented. city: type: string postcode: type: string countryIsoCode: type: string buildingName: type: string description: Packages (NR) - not presented. FlightOnly (WR) - optional. Assignment: required: - item type: object properties: travellerId: type: string example: adt1 item: "$ref": "#/components/schemas/Item" description: An assignment object that includes details about the traveller and product related to the message. Cabin: required: - cabinNo - cabinType type: object properties: deck: type: string example: '1' cabinNo: type: string example: '10002' cabinType: "$ref": "#/components/schemas/CabinType" travellers: type: array items: "$ref": "#/components/schemas/TravellerRef" prices: "$ref": "#/components/schemas/PriceDetail" CabinAvailabilityRequest: required: - metaInformation - cruise type: object properties: metaInformation: "$ref": "#/components/schemas/MetaInformation" cruise: "$ref": "#/components/schemas/Cruise" flights: type: array description: Flights are mandatory for cruise and flight bookings. items: "$ref": "#/components/schemas/Flight" inventory: "$ref": "#/components/schemas/CabinPackageInventory" CabinAvailabilityResponse: required: - cabins - message description: Response object containing the available cabins and price for the given selection and occupancy. type: object properties: cabins: type: array items: "$ref": "#/components/schemas/Cabin" messages: "$ref": "#/components/schemas/Message" CabinGrade: required: - code type: object properties: code: type: string example: Z101 name: type: string example: Deluxe Inside Cabin masterCabinGrade: "$ref": "#/components/schemas/MasterCabinGrade" CabinType: required: - code type: object properties: code: type: string example: Z101 name: type: string example: Deluxe Inside Cabin Decks 6 & 7 cabinGrade: "$ref": "#/components/schemas/CabinGrade" ContactPoint: required: - category - contactPointId - contactType - priority type: object properties: contactPointId: type: string priority: type: string enum: - Emergency - First - Second - Third category: type: string enum: - Personal - Business contactType: type: string enum: - PHONE - EMAIL - ADDRESS discriminator: propertyName: contactType Currency: required: - currencyCode type: object properties: currencyCode: maxLength: 3 minLength: 3 type: string Item: required: - id - itemType type: object properties: id: type: string description: Item id. itemType: type: string enum: - FLIGHT - OPTIONS - STAY - TRANSFER - INSURANCE - EXTRAS description: Details of the product associated with the assignment. example: 1 MasterCabinGrade: required: - code type: object properties: code: type: string example: INS name: type: string example: Inside Cabin Message: required: - code - text - type type: object properties: type: type: string example: GENERAL enum: - GENERAL - PRICE_JUMP text: type: string description: The detailed text of the message. code: type: string description: Message code that identifies what particular use case this message is about. example: OPTIONS-123456 assignments: maxItems: 2147483647 minItems: 1 type: array description: A list of assignments related to the message (particular traveller or product). items: "$ref": "#/components/schemas/Assignment" description: A message object that contains extra information about endpoint execution for 200 responses. discriminator: propertyName: type Person: required: - dateOfBirth - firstName - gender - lastName - nationality type: object properties: dateOfBirth: type: string format: date firstName: maxLength: 40 minLength: 2 type: string middleName: maxLength: 40 minLength: 2 type: string lastName: maxLength: 40 minLength: 2 type: string reference: type: string gender: type: string enum: - MALE - FEMALE - NUETRAL nationality: type: string example: BE vip: type: boolean lead: type: boolean infantNotBorn: type: boolean example: false type: type: string enum: - NORMAL - JUDICIAL - STAFF - EMERGENCY contactPoints: type: array items: "$ref": "#/components/schemas/ContactPoint" address: "$ref": "#/components/schemas/Address" phoneNumber: "$ref": "#/components/schemas/PhoneNumber" email: type: string marketingPreferences: type: array items: type: string enum: - EMAIL - TEXT_MESSAGE - TELEPHONE - POST PhoneNumber: required: - countryCode - countryISOCode - number type: object properties: countryCode: type: string example: "+32" number: type: string example: '50334002' countryISOCode: type: string description: in case of NR this field is not taken into account and skipped example: BE Price: required: - currency - priceCategory - value type: object properties: code: type: string example: POPM priceType: type: string example: PER_ADULT enum: - PER_ADULT - PER_CHILD - PER_INFANT - PER_PAX - PER_BOOKING - PER_ITEM priceCategory: type: string example: NET enum: - NET - TAX - FEE - DISCOUNT - GROSS aspect: type: string example: FLIGHT enum: - FLIGHT - SSR - INSURANCE - EXTRAS - TRANSFER value: type: number example: 100 default: 0 currency: "$ref": "#/components/schemas/Currency" travellers: type: array items: "$ref": "#/components/schemas/Traveller" PriceBreakdown: type: object properties: fare: type: array items: "$ref": "#/components/schemas/Price" tax: type: array items: "$ref": "#/components/schemas/Price" discount: type: array items: "$ref": "#/components/schemas/Price" fee: type: array items: "$ref": "#/components/schemas/Price" total: type: array items: "$ref": "#/components/schemas/Price" PriceDetail: required: - breakdown - total type: object properties: breakdown: "$ref": "#/components/schemas/PriceBreakdown" total: type: array items: "$ref": "#/components/schemas/Price" Traveller: required: - age - id - person - type type: object properties: id: type: string example: 26929514-237c-11ed-861d-0242ac120002 type: type: string example: ADULT enum: - ADULT - CHILD - INFANT person: "$ref": "#/components/schemas/Person" age: type: integer format: int32 example: 25 TravellerRef: required: - id type: object properties: id: type: string age: type: integer format: int32 type: type: string enum: - ADULT - CHILD - INFANT Problem: type: object properties: message: type: string location: "$ref": "#/components/schemas/Location" parseState: "$ref": "#/components/schemas/ParseState" rootCause: type: object properties: cause: type: object properties: stackTrace: type: array items: type: object properties: classLoaderName: type: string moduleName: type: string moduleVersion: type: string methodName: type: string fileName: type: string lineNumber: type: integer format: int32 nativeMethod: type: boolean className: type: string message: type: string suppressed: type: array items: type: object properties: stackTrace: type: array items: type: object properties: classLoaderName: type: string moduleName: type: string moduleVersion: type: string methodName: type: string fileName: type: string lineNumber: type: integer format: int32 nativeMethod: type: boolean className: type: string message: type: string localizedMessage: type: string localizedMessage: type: string stackTrace: type: array items: type: object properties: classLoaderName: type: string moduleName: type: string moduleVersion: type: string methodName: type: string fileName: type: string lineNumber: type: integer format: int32 nativeMethod: type: boolean className: type: string message: type: string suppressed: type: array items: type: object properties: stackTrace: type: array items: type: object properties: classLoaderName: type: string moduleName: type: string moduleVersion: type: string methodName: type: string fileName: type: string lineNumber: type: integer format: int32 nativeMethod: type: boolean className: type: string message: type: string localizedMessage: type: string localizedMessage: type: string resourceDescription: type: string ValidationProblem: type: object properties: problem: "$ref": "#/components/schemas/Problem" validationIssues: type: array items: type: string Location: type: object properties: resource: type: string format: binary source: type: object ParseState: type: object BaggageOption: required: - category - code - downstreamRefs - id - maxWeight - travellers type: object allOf: - "$ref": "#/components/schemas/BaseOption" - type: object properties: minWeight: type: string description: Minimum weight required for baggage. example: '0' maxWeight: type: string description: Maximum weight allowed for baggage. example: '20' BaseOption: required: - category - code - downstreamRefs - id - travellers type: object properties: id: type: string example: 26929514-237c-11ed-861d-0242bd120002 code: maxLength: 25 minLength: 1 type: string example: POPM category: type: string example: CABINS enum: - ANIMALS - ASSISTANCE - BAGGAGE - CABINS - FAST - LOUNGE - MEALS - MISC - SEATS - SPORTS included: type: boolean description: indicates if SSR is default one example: true upgradable: type: boolean description: indicates it replaces included or upgraded option example: false travellers: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/Traveller" prices: type: array items: "$ref": "#/components/schemas/Price" downstreamRefs: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/DownstreamRef" discriminator: propertyName: category CabinBoardRate: required: - boardType - cabinType - sequenceNumber - travellers type: object properties: sequenceNumber: type: string example: '1' cabinType: "$ref": "#/components/schemas/CabinType" boardType: type: string enum: - A24 - AB - AI - AI+ - BB - CB - FB - FB+ - HB - HB+ - IT - PI - RO - SC - SC+ - SSC - GT06-AI rateCode: type: string example: TUI travellers: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/TravellerRef" prices: "$ref": "#/components/schemas/PriceDetail" cabins: type: array items: "$ref": "#/components/schemas/Cabin" CapacityAssociation: required: - code type: object properties: code: maxLength: 5 minLength: 1 type: string description: SSR code example: BG25 individualCapacity: type: integer description: Value is provided by downstream options provider system format: int32 example: 5 capacityPoints: type: integer description: Configured value within the application format: int32 example: 1 CapacityGroup: required: - code - ssrAssociations - type type: object properties: code: maxLength: 5 minLength: 1 type: string description: Capacity group code configured within the application example: SPEQ type: type: string example: SHARED enum: - UNLIMITED - INDIVIDUAL - SHARED sharedCapacity: type: integer description: Value provided by downstream options provider system that identifies total capacity for whole group. format: int32 example: 10 ssrAssociations: type: array items: "$ref": "#/components/schemas/CapacityAssociation" Cruise: required: - id - sailings - travellers type: object properties: id: type: string sailings: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/Sailing" travellers: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/TravellerRef" prices: "$ref": "#/components/schemas/PriceDetail" CruiseItinerary: required: - code type: object properties: code: type: string example: DIS2 name: type: string example: Treasures of the Mediterranean itineraryGroup: "$ref": "#/components/schemas/CruiseItineraryGroup" days: type: array items: "$ref": "#/components/schemas/CruiseItineraryDay" CruiseItineraryDay: required: - dayNo type: object properties: code: type: string example: DAY1_DESC dayNo: type: integer format: int32 example: 1 portVisits: type: array items: "$ref": "#/components/schemas/PortVisit" CruiseItineraryGroup: required: - code - name type: object properties: code: type: string example: '123' name: type: string example: Group name DownstreamRef: required: - id - itemType - system type: object properties: id: type: string example: Aae88613d5b8665238a124059d1e77774 type: type: string itemType: type: string example: EXTERNAL/INTERNAL enum: - INTERNAL - EXTERNAL - MIXED system: type: string example: TUI_NR_ATCOM enum: - TUI_NR_ATCOM Duration: required: - checkInDate - checkOutDate type: object properties: checkInDate: type: string format: date example: '2023-06-07' checkInTime: "$ref": "#/components/schemas/LocalTime" checkOutDate: type: string format: date example: '2023-06-14' checkOutTime: "$ref": "#/components/schemas/LocalTime" Event: required: - code - id - travellers type: object properties: id: type: string code: type: string example: GALA_DINNER name: type: string example: Gala Dinner itineraryDay: type: integer format: int32 travellers: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/TravellerRef" prices: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/Price" Flight: required: - directions - id - prices type: object properties: id: type: string directions: maxItems: 2 minItems: 1 type: array items: "$ref": "#/components/schemas/FlightDirection" prices: "$ref": "#/components/schemas/PriceDetail" FlightDirection: required: - id - prices - segments - travellers - type type: object properties: duration: type: integer description: duration in minutes format: int32 example: 123 id: type: string type: type: string enum: - OUTBOUND - INBOUND travellers: type: array items: "$ref": "#/components/schemas/Traveller" segments: type: array items: "$ref": "#/components/schemas/FlightSegment" downstreamRefs: type: array items: "$ref": "#/components/schemas/DownstreamRef" prices: "$ref": "#/components/schemas/PriceDetail" FlightSegment: required: - arrivalDate - arrivalPoint - arrivalTime - capacityGroups - departureDate - departurePoint - departureTime - duration - flightNo - id - marketingCarrier - operatingCarrier - sectors - specialServiceRequests type: object properties: departureDate: type: string format: date example: '2024-03-28' departureTime: "$ref": "#/components/schemas/LocalTime" arrivalDate: type: string format: date example: '2024-03-29' arrivalTime: "$ref": "#/components/schemas/LocalTime" id: type: string operatingCarrier: maxLength: 3 minLength: 2 type: string example: TU marketingCarrier: maxLength: 3 minLength: 2 type: string example: TU flightNo: pattern: "\\d{1,4}" type: string description: if value will come with spaces it will be trimmed, e.g. " 111"->"111" departurePoint: "$ref": "#/components/schemas/Point" arrivalPoint: "$ref": "#/components/schemas/Point" duration: type: integer description: Duration in minutes format: int32 example: 123 sectors: type: array items: "$ref": "#/components/schemas/Sector" specialServiceRequests: type: array items: oneOf: - "$ref": "#/components/schemas/BaseOption" - "$ref": "#/components/schemas/BaggageOption" - "$ref": "#/components/schemas/SeatsOption" capacityGroups: type: array items: "$ref": "#/components/schemas/CapacityGroup" cabinClass: type: string example: M bookingClass: type: string example: M sourcingSystem: type: string example: MULTICOM LocalTime: type: object properties: hour: type: integer format: int32 minute: type: integer format: int32 second: type: integer format: int32 nano: type: integer format: int32 example: '11:00:00' MetaInformation: required: - agentId - brand - businessRelationship - channel - currency - decoratedContent - locale - market type: object properties: locale: pattern: "\\w{2}\\_\\w{2}" type: string example: nl_BE market: type: string example: BE enum: - NL - BE - FR - MA - UK - IE - DE - PL - CH - AT - SE - 'NO' - DK - FI brand: type: string example: TUI enum: - TUI - TUIFLY - VIP - FIRST_CHOICE - CRYSTAL_SKI - MARELLA_CRUISE - RIVER_CRUISE channel: type: string example: WEB enum: - WEB - PARTNERS - MOBILE businessRelationship: type: string example: B2C enum: - B2B - B2C decoratedContent: type: boolean description: If this flag is set to true, the response will contain SSR descriptions with the requested local. The default behavior is decoratedContent=false example: false currency: "$ref": "#/components/schemas/Currency" agentId: type: string Point: required: - codes - name - type type: object properties: codes: type: array items: "$ref": "#/components/schemas/PointCode" name: type: string example: London Heathrow type: type: string enum: - HOTEL - AIRPORT - PORT - POI - RESORT - CITY - DESTINATION - REGION - COUNTRY - CONTINENT PointCode: required: - code - type type: object properties: code: type: string example: LHR type: type: string example: IATA PortVisit: required: - port type: object properties: port: "$ref": "#/components/schemas/Point" portInTime: "$ref": "#/components/schemas/LocalTime" portOutTime: "$ref": "#/components/schemas/LocalTime" Sailing: required: - cabinBoardRates - duration - itinerary - ship type: object properties: id: type: string ship: "$ref": "#/components/schemas/Ship" itinerary: "$ref": "#/components/schemas/CruiseItinerary" cabinBoardRates: type: array items: "$ref": "#/components/schemas/CabinBoardRate" duration: "$ref": "#/components/schemas/Duration" theme: "$ref": "#/components/schemas/Theme" serviceBundles: type: array items: "$ref": "#/components/schemas/ServiceBundle" excursions: type: array items: "$ref": "#/components/schemas/ShoreExcursion" events: type: array items: "$ref": "#/components/schemas/Event" supplements: type: array items: "$ref": "#/components/schemas/Supplement" SeatsOption: required: - category - code - downstreamRefs - id - travellers type: object allOf: - "$ref": "#/components/schemas/BaseOption" - type: object properties: seatColumn: type: string description: Seat Column number. example: '1' seatRow: type: string description: Seat Row number. example: '7' Sector: required: - arrivalDate - arrivalPoint - arrivalTime - departureDate - departurePoint - departureTime - id type: object properties: id: type: string departurePoint: "$ref": "#/components/schemas/Point" arrivalPoint: "$ref": "#/components/schemas/Point" departureDate: type: string format: date example: '2024-03-28' departureTime: "$ref": "#/components/schemas/LocalTime" arrivalDate: type: string format: date example: '2024-03-28' arrivalTime: "$ref": "#/components/schemas/LocalTime" ServiceBundle: required: - code - id type: object properties: id: type: string code: type: string example: GALA_DINNER excursions: type: array items: "$ref": "#/components/schemas/ShoreExcursion" events: type: array items: "$ref": "#/components/schemas/Event" travellers: type: array items: "$ref": "#/components/schemas/TravellerRef" prices: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/Price" Ship: required: - code type: object properties: code: type: string example: DIS2 name: type: string example: Discovery 2 cruiseLine: type: string example: TUI Cruise line ShoreExcursion: required: - code - id - travellers type: object properties: id: type: string code: type: string example: Treasures of the Mediterranean name: type: string example: Ride to mountain portVisit: "$ref": "#/components/schemas/PortVisit" travellers: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/TravellerRef" prices: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/Price" Supplement: required: - code - prices type: object properties: code: type: string example: GPS name: type: string example: GPS indicator included: type: boolean example: true mandatory: type: boolean example: true travellers: maxItems: 2147483647 minItems: 1 type: array items: "$ref": "#/components/schemas/TravellerRef" prices: "$ref": "#/components/schemas/PriceDetail" Theme: required: - code type: object properties: code: type: string example: FOODIE name: type: string example: Food Heroes CabinSupplierProduct: type: object description: Supplier product information for cabin availability requests. Contains only the promo code field as other supplier product details are not required for cabin availability. properties: promoCode: type: string example: "BBRB" description: Optional promotional code to be applied to the cabin booking CabinPackageInventory: type: object description: Package inventory information for cabin availability requests. Contains supplier product details including promotional codes that can override system-configured promotional codes. required: - supplierProduct properties: supplierProduct: "$ref": "#/components/schemas/CabinSupplierProduct"