Cruise API Specification¶
Overview¶
The Cruise API provides endpoints for cruise management including companies, areas, ships, cabin types, charge types, ports, ship cabins, cruises, itineraries, and pricing.
Base Path: /cruise
Content Types:
- Request: application/json
- Response: application/json
Response Format¶
All endpoints return a TlinqApiResponse object:
Legacy Search Endpoints¶
POST /cruise/listCompanies¶
Lists cruise companies with optional filters.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | companyCode | string | No | Filter by company code | | companyName | string | No | Filter by company name |
Response:
Returns a list of CCruiseCompany objects.
POST /cruise/searchCruises¶
Searches for available cruises.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | areaId | integer | No | Filter by cruise area | | minDuration | integer | No | Minimum duration in days | | maxDuration | integer | No | Maximum duration in days | | dateRangeStart | string | No | Start date (yyyy-MM-dd) | | dateRangeEnd | string | No | End date (yyyy-MM-dd) |
Response:
Returns a CCruiseSearch object with matching cruises.
POST /cruise/getCruiseArea¶
Gets a cruise area by ID or code.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | areaId | integer | No | Area ID | | areaCode | string | No | Area code |
*Either areaId or areaCode must be provided.
Response:
Returns the CCruiseArea object.
Company CRUD Endpoints¶
POST /cruise/company/list¶
Lists cruise companies.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | companyCode | string | No | Filter by code | | companyName | string | No | Filter by name |
POST /cruise/company/read¶
Reads a company by ID.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | companyId | integer | Yes | Company ID |
POST /cruise/company/write¶
Creates or updates a company.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | companyId | integer | No | Company ID (omit for create) | | companyCode | string | Yes | Unique company code | | companyName | string | Yes | Company name |
POST /cruise/company/delete¶
Deletes a company.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | companyId | integer | Yes | Company ID |
Area CRUD Endpoints¶
POST /cruise/area/list¶
Lists cruise areas.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | areaCode | string | No | Filter by code | | areaName | string | No | Filter by name |
POST /cruise/area/read¶
Reads an area by ID.
POST /cruise/area/write¶
Creates or updates an area.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | areaId | integer | No | Area ID (omit for create) | | areaCode | string | Yes | Unique area code | | areaName | string | Yes | Area name |
POST /cruise/area/delete¶
Deletes an area.
Ship CRUD Endpoints¶
POST /cruise/ship/list¶
Lists ships with optional filters.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | companyId | integer | No | Filter by company | | shipName | string | No | Filter by name |
POST /cruise/ship/read¶
Reads a ship by ID.
POST /cruise/ship/write¶
Creates or updates a ship.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | shipId | integer | No | Ship ID (omit for create) | | companyId | integer | Yes | Parent company ID | | shipCode | string | Yes | Unique ship code | | shipName | string | Yes | Ship name | | shipDescription | string | No | Description | | docUrl | string | No | Document/image URL |
POST /cruise/ship/delete¶
Deletes a ship.
Cabin Type CRUD Endpoints¶
POST /cruise/cabintype/list¶
Lists cabin types.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | typeCode | string | No | Filter by code | | typeName | string | No | Filter by name |
POST /cruise/cabintype/read¶
Reads a cabin type by ID.
POST /cruise/cabintype/write¶
Creates or updates a cabin type.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cabinTypeId | integer | No | Cabin type ID (omit for create) | | typeCode | string | Yes | Unique type code | | typeName | string | Yes | Type name |
POST /cruise/cabintype/delete¶
Deletes a cabin type.
Charge Type CRUD Endpoints¶
POST /cruise/chargetype/list¶
Lists charge types.
POST /cruise/chargetype/read¶
Reads a charge type by ID.
POST /cruise/chargetype/write¶
Creates or updates a charge type.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | chargeTypeId | integer | No | Charge type ID (omit for create) | | chargeTypeCode | string | Yes | Unique charge code | | chargeTypeName | string | Yes | Charge type name |
POST /cruise/chargetype/delete¶
Deletes a charge type.
Port CRUD Endpoints¶
POST /cruise/port/list¶
Lists cruise ports.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | portCode | string | No | Filter by code | | portName | string | No | Filter by name |
POST /cruise/port/read¶
Reads a port by ID.
POST /cruise/port/write¶
Creates or updates a port.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | portId | integer | No | Port ID (omit for create) | | portCode | string | Yes | Unique port code | | portName | string | Yes | Port name | | country | string | No | Country name | | imageUrl | string | No | Port image URL |
POST /cruise/port/delete¶
Deletes a port.
Ship Cabin CRUD Endpoints¶
POST /cruise/shipcabin/list¶
Lists cabins for a ship.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | shipId | integer | Yes | Ship ID |
POST /cruise/shipcabin/read¶
Reads a ship cabin by ID.
POST /cruise/shipcabin/write¶
Creates or updates a ship cabin.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | shipCabinId | integer | No | Ship cabin ID (omit for create) | | shipId | integer | Yes | Ship ID | | cabinTypeId | integer | Yes | Cabin type ID | | cabinCode | string | Yes | Cabin code | | cabinName | string | Yes | Cabin name | | capacity | integer | No | Cabin capacity | | description | string | No | Description |
POST /cruise/shipcabin/delete¶
Deletes a ship cabin.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | shipCabinId | integer | Yes | Ship cabin ID |
POST /cruise/shipcabin/bulkAssign¶
Bulk assigns cabin types to a ship.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | shipId | integer | Yes | Ship ID | | cabinTypeIds | array | Yes | List of cabin type IDs to assign | | defaultMaxPax | integer | No | Default max passengers (default: 2) |
Response:
Returns a list of created CShipCabin objects.
Itinerary CRUD Endpoints¶
POST /cruise/itinerary/list¶
Lists itineraries with optional filters.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | areaId | integer | No | Filter by area | | shipId | integer | No | Filter by ship | | minDuration | integer | No | Minimum duration in days | | maxDuration | integer | No | Maximum duration in days | | name | string | No | Filter by name (partial match) | | status | string | No | Filter by status |
Response:
Returns a list of CCruiseItinerary objects.
POST /cruise/itinerary/read¶
Reads an itinerary by ID.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | itineraryId | integer | Yes | Itinerary ID |
Response:
Returns a CCruiseItinerary object.
POST /cruise/itinerary/write¶
Creates or updates an itinerary.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | itineraryId | integer | No | Itinerary ID (omit for create) | | cruiseShipId | integer | Yes | Ship ID | | cruiseAreaId | integer | Yes | Area ID | | itineraryCode | string | Yes | Unique itinerary code | | itineraryName | string | Yes | Itinerary name | | duration | integer | Yes | Duration in days | | description | string | No | Description | | imageUrl | string | No | Image URL |
Response:
Returns the created/updated CCruiseItinerary object.
POST /cruise/itinerary/delete¶
Deletes an itinerary.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | itineraryId | integer | Yes | Itinerary ID |
Note: Only itineraries in Draft status with no cruises or templates can be deleted.
POST /cruise/itinerary/changeStatus¶
Changes an itinerary's status.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | itineraryId | integer | Yes | Itinerary ID | | status | string | Yes | New status (Draft, Active, Suspended, Archived) |
Valid Transitions:
- Draft → Active (requires at least one cruise template)
- Active → Suspended
- Suspended → Active
- Active/Suspended → Archived (if no future cruises)
Response:
Returns the updated CCruiseItinerary object.
POST /cruise/itinerary/tree¶
Returns hierarchical tree of companies → ships → itineraries.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | companyCode | string | No | Filter by company code | | areaId | integer | No | Filter by area | | status | string | No | Filter by itinerary status |
Response:
Returns a list of CItineraryTreeNode objects.
Cruise Template Endpoints¶
Cruise templates define the port stops for an itinerary.
POST /cruise/template/list¶
Lists cruise templates for an itinerary.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | itineraryId | integer | Yes | Itinerary ID |
Response:
Returns a list of CCruiseTemplate objects.
POST /cruise/template/read¶
Reads a cruise template by ID.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseTemplateId | integer | Yes | Template ID |
Response:
Returns a CCruiseTemplate object.
POST /cruise/template/write¶
Creates or updates a cruise template.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseTemplateId | integer | No | Template ID (omit for create) | | itineraryId | integer | Yes | Itinerary ID | | cruisePortId | integer | Yes | Port ID | | stopSeq | integer | Yes | Stop sequence number | | dayOffsetArrival | integer | No | Days from start for arrival | | dayOffsetDeparture | integer | No | Days from start for departure | | arrivalTime | string | No | Arrival time (HH:mm) | | departureTime | string | No | Departure time (HH:mm) | | description | string | No | Description |
Response:
Returns the created/updated CCruiseTemplate object.
POST /cruise/template/delete¶
Deletes a cruise template.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseTemplateId | integer | Yes | Template ID |
Cruise CRUD Endpoints¶
POST /cruise/cruise/list¶
Lists cruises with filters.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | shipId | integer | No | Filter by ship | | areaId | integer | No | Filter by area | | fromDate | string | No | Filter from date | | toDate | string | No | Filter to date |
POST /cruise/cruise/read¶
Reads a cruise by ID.
POST /cruise/cruise/write¶
Creates or updates a cruise.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | No | Cruise ID (omit for create) | | itineraryId | integer | Yes | Itinerary ID | | startDate | string | Yes | Start date (yyyy-MM-dd) | | generateSkeleton | boolean | No | Generate cruise points and charges from templates |
Response:
Returns the created/updated CCruise object.
When generateSkeleton is true, the system automatically creates:
- Cruise points from itinerary templates
- Cabin charges for all ship cabins
- Other charges from charge type templates
POST /cruise/cruise/delete¶
Deletes a cruise.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID |
Note: Only cruises in Draft status can be deleted.
POST /cruise/cruise/changeStatus¶
Changes a cruise's status.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID | | status | string | Yes | New status (Draft, Active, Cancelled, Completed) |
Valid Transitions:
- Draft → Active
- Active → Cancelled (must be at least 7 days before departure)
- Active → Completed (only after cruise end date)
Response:
Returns the updated CCruise object.
Cruise Point Endpoints¶
Cruise points are the actual port stops for a specific cruise instance.
POST /cruise/cruisepoint/list¶
Lists cruise points for a cruise.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID |
Response:
Returns a list of CCruisePoint objects.
POST /cruise/cruisepoint/write¶
Creates or updates a cruise point.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruisePointId | integer | No | Point ID (omit for create) | | cruiseId | integer | Yes | Cruise ID | | cruisePortId | integer | Yes | Port ID | | stopSeq | integer | Yes | Stop sequence number | | arrivalDatetime | string | No | Arrival datetime (yyyy-MM-dd HH:mm) | | departureDatetime | string | No | Departure datetime (yyyy-MM-dd HH:mm) | | description | string | No | Description |
Response:
Returns the created/updated CCruisePoint object.
POST /cruise/cruisepoint/delete¶
Deletes a cruise point.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruisePointId | integer | Yes | Point ID |
POST /cruise/cruisepoint/regenerate¶
Regenerates cruise points from itinerary templates.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID |
Note: Only allowed for cruises in Draft status. Existing points are deleted and recreated.
Response:
Returns a list of regenerated CCruisePoint objects.
Cabin Charge Endpoints¶
Cabin charges define the price for each cabin on a specific cruise.
POST /cruise/cabincharge/list¶
Lists cabin charges for a cruise.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID | | shipCabinId | integer | No | Filter by ship cabin | | available | boolean | No | Filter by availability |
Response:
Returns a list of CCabinCharge objects.
POST /cruise/cabincharge/write¶
Creates or updates a cabin charge.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cabinChargeId | integer | No | Charge ID (omit for create) | | cruiseId | integer | Yes | Cruise ID | | shipCabinId | integer | Yes | Ship cabin ID | | amount | number | Yes | Price amount | | currency | string | Yes | Currency code (e.g., USD) | | exRate | number | No | Exchange rate | | available | boolean | No | Whether cabin is available for booking |
Response:
Returns the created/updated CCabinCharge object.
POST /cruise/cabincharge/delete¶
Deletes a cabin charge.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cabinChargeId | integer | Yes | Charge ID |
POST /cruise/cabincharge/initForCruise¶
Initializes cabin charges for all ship cabins.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID | | defaultAmount | number | No | Default price amount | | defaultCurrency | string | No | Default currency (default: USD) |
Response:
Returns a list of created CCabinCharge objects.
Other Charge Endpoints¶
Other charges are additional fees (port fees, taxes, etc.) for a cruise.
POST /cruise/othercharge/list¶
Lists other charges for a cruise.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID | | chargeTypeId | integer | No | Filter by charge type | | mandatory | boolean | No | Filter by mandatory flag |
Response:
Returns a list of COtherCharge objects.
POST /cruise/othercharge/write¶
Creates or updates an other charge.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | otherChargeId | integer | No | Charge ID (omit for create) | | cruiseId | integer | Yes | Cruise ID | | chargeTypeId | integer | Yes | Charge type ID | | amount | number | Yes | Price amount | | currency | string | Yes | Currency code | | exRate | number | No | Exchange rate | | mandatory | boolean | No | Whether charge is mandatory | | paxType | string | No | Passenger type (all, adult, child, per_cabin) |
Response:
Returns the created/updated COtherCharge object.
POST /cruise/othercharge/delete¶
Deletes an other charge.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | otherChargeId | integer | Yes | Charge ID |
Cabin Price Template Endpoints¶
Cabin price templates define default pricing for itineraries.
POST /cruise/cabinpricetemplate/list¶
Lists cabin price templates for an itinerary.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | itineraryId | integer | Yes | Itinerary ID |
Response:
Returns a list of CCabinPriceTemplate objects.
POST /cruise/cabinpricetemplate/write¶
Creates or updates a cabin price template.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cabinPriceTemplateId | integer | No | Template ID (omit for create) | | itineraryId | integer | Yes | Itinerary ID | | shipCabinId | integer | Yes | Ship cabin ID | | amount | number | Yes | Default price amount | | currency | string | Yes | Currency code | | exRate | number | No | Exchange rate | | available | boolean | No | Default availability |
Response:
Returns the created/updated CCabinPriceTemplate object.
POST /cruise/cabinpricetemplate/delete¶
Deletes a cabin price template.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cabinPriceTemplateId | integer | Yes | Template ID |
POST /cruise/cabinpricetemplate/initForItinerary¶
Initializes cabin price templates for all ship cabins.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | itineraryId | integer | Yes | Itinerary ID | | defaultAmount | number | No | Default price amount | | defaultCurrency | string | No | Default currency (default: USD) |
Response:
Returns a list of created CCabinPriceTemplate objects.
Other Charge Template Endpoints¶
Other charge templates define default additional fees for itineraries.
POST /cruise/otherchargetemplate/list¶
Lists other charge templates for an itinerary.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | itineraryId | integer | Yes | Itinerary ID |
Response:
Returns a list of COtherChargeTemplate objects.
POST /cruise/otherchargetemplate/write¶
Creates or updates an other charge template.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | otherChargeTemplateId | integer | No | Template ID (omit for create) | | itineraryId | integer | Yes | Itinerary ID | | chargeTypeId | integer | Yes | Charge type ID | | amount | number | Yes | Default price amount | | currency | string | Yes | Currency code | | exRate | number | No | Exchange rate | | mandatory | boolean | No | Whether charge is mandatory | | paxType | string | No | Passenger type (all, adult, child, per_cabin) |
Response:
Returns the created/updated COtherChargeTemplate object.
POST /cruise/otherchargetemplate/delete¶
Deletes an other charge template.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | otherChargeTemplateId | integer | Yes | Template ID |
Pre-Booking Endpoints¶
Pre-bookings manage cabin inventory reserved for specific sailings.
POST /cruise/prebooking/list¶
Lists pre-bookings for a cruise.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID | | shipCabinId | integer | No | Filter by ship cabin | | status | string | No | Filter by status (Available, Reserved, Booked) |
Response:
Returns a list of CCabinPreBooking objects.
POST /cruise/prebooking/write¶
Creates or updates a pre-booking.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | preBookingId | integer | No | Pre-booking ID (omit for create) | | cruiseId | integer | Yes | Cruise ID | | shipCabinId | integer | Yes | Ship cabin ID | | costPerCabin | number | No | Cost per cabin | | pricePerCabin | number | No | Price per cabin | | commission | number | No | Commission percentage |
Response:
Returns the created/updated CCabinPreBooking object.
POST /cruise/prebooking/delete¶
Deletes a pre-booking.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | preBookingId | integer | Yes | Pre-booking ID |
POST /cruise/prebooking/manage¶
Smart pre-booking count management. Creates or deletes Available pre-bookings to match a target count.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID | | shipCabinId | integer | Yes | Ship cabin ID | | targetCount | integer | Yes | Desired total pre-booking count | | cost | number | No | Cost per cabin (for new pre-bookings) | | price | number | No | Price per cabin (for new pre-bookings) | | commission | number | No | Commission percentage (for new pre-bookings) | | applyPriceToAll | boolean | No | If true, update cost/price/commission on all existing pre-bookings |
Response:
Returns the updated list of CCabinPreBooking objects for the cruise + cabin type.
Validation:
- Target count cannot be less than the number of non-Available (Reserved + Booked) pre-bookings
- Error code CRU0200 if validation fails
Booking Endpoints¶
POST /cruise/booking/availability¶
Gets cruise availability for booking.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID |
Response:
Returns a CCruiseAvailability object containing:
- Cruise and itinerary details
- Ship and company information
- Available cabins with pricing
- Mandatory and optional charges
- Cruise points with port details
POST /cruise/booking/calculatePrice¶
Calculates total price for a booking.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID | | shipCabinId | integer | Yes | Selected cabin ID | | adults | integer | Yes | Number of adults | | children | integer | No | Number of children | | selectedOptionalChargeIds | array | No | List of selected optional charge IDs |
Response:
Returns a CPriceCalculation object with itemized pricing.
Booking CRUD Endpoints¶
POST /cruise/booking/list¶
Lists bookings for a cruise.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID | | status | string | No | Filter by booking status |
Response:
Returns a list of CCruiseBooking objects.
POST /cruise/booking/read¶
Reads a booking by ID.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | bookingId | integer | Yes | Booking ID |
Response:
Returns a CCruiseBooking object.
POST /cruise/booking/write¶
Creates or updates a booking.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | bookingId | integer | No | Booking ID (omit for create) | | cruiseId | integer | Yes | Cruise ID | | bookingNumber | string | Yes | Generated booking number (PT-DDMM-XXXXXXXX) | | leadPassengerName | string | No | Lead passenger display name | | totalPax | integer | No | Total passenger count | | totalAdults | integer | No | Adult count | | totalChildren | integer | No | Children count | | totalInfants | integer | No | Infant count | | totalAmount | number | No | Total booking amount | | status | string | No | Booking status | | voucherUrl | string | No | Voucher document URL |
Response:
Returns the created/updated CCruiseBooking object.
Note: New bookings are automatically assigned status "Documents pending" and current date as createdDate.
POST /cruise/booking/delete¶
Deletes a booking.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | bookingId | integer | Yes | Booking ID |
Note: Cascading deletion of passengers, booked cabins, and add-ons should be handled by the calling application before deleting the booking.
POST /cruise/booking/changeStatus¶
Changes a booking's status with transition validation.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | bookingId | integer | Yes | Booking ID | | status | string | Yes | New status value |
Valid Transitions:
- Documents pending → Availability pending, Payment pending, Cancelled-NonRefundable
- Availability pending → Payment pending, Cancelled-NonRefundable
- Payment pending → Voucher pending, Cancelled-NonRefundable, Cancelled-RefundPending
- Voucher pending → Vouchered, Cancelled-RefundPending
- Vouchered → Cancelled-RefundPending
- Cancelled-RefundPending → Cancelled-Refunded
Response:
Returns the updated CCruiseBooking object.
Passenger Endpoints¶
POST /cruise/passenger/list¶
Lists passengers for a booking.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | bookingId | integer | Yes | Booking ID |
Response:
Returns a list of CCruisePassenger objects.
POST /cruise/passenger/write¶
Creates or updates a passenger.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | passengerId | integer | No | Passenger ID (omit for create) | | bookingId | integer | Yes | Booking ID | | firstName | string | Yes | First name | | lastName | string | Yes | Last name | | nationality | string | No | ISO country code (alpha-2) | | dateOfBirth | string | No | Date of birth (yyyy-MM-dd) | | passportNumber | string | No | Passport number | | passportExpiry | string | No | Passport expiry date (yyyy-MM-dd) | | isLeadPassenger | boolean | No | Whether this is the lead passenger | | remarks | string | No | Additional remarks |
Response:
Returns the created/updated CCruisePassenger object.
POST /cruise/passenger/delete¶
Deletes a passenger.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | passengerId | integer | Yes | Passenger ID |
Booked Cabin Endpoints¶
POST /cruise/bookedcabin/list¶
Lists booked cabins for a booking.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | bookingId | integer | Yes | Booking ID |
Response:
Returns a list of CBookedCabin objects.
POST /cruise/bookedcabin/write¶
Creates or updates a booked cabin.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | bookedCabinId | integer | No | Booked cabin ID (omit for create) | | bookingId | integer | Yes | Booking ID | | shipCabinId | integer | Yes | Ship cabin ID | | numPax | integer | No | Number of passengers in cabin | | isOwn | boolean | No | Whether cabin is from pre-booked inventory | | price | number | No | Cabin price | | status | string | No | Cabin status | | preBookingId | integer | No | Associated pre-booking ID (when isOwn=true) |
Response:
Returns the created/updated CBookedCabin object.
POST /cruise/bookedcabin/delete¶
Deletes a booked cabin.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | bookedCabinId | integer | Yes | Booked cabin ID |
Booking Add-on Endpoints¶
POST /cruise/addon/list¶
Lists add-ons for a booking.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | bookingId | integer | Yes | Booking ID |
Response:
Returns a list of CBookingAddon objects.
POST /cruise/addon/write¶
Creates or updates a booking add-on.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | addonId | integer | No | Add-on ID (omit for create) | | bookingId | integer | Yes | Booking ID | | passengerId | integer | No | Passenger ID (optional, for per-passenger charges) | | chargeTypeId | integer | Yes | Charge type ID | | amount | number | Yes | Charge amount | | currency | string | Yes | Currency code |
Response:
Returns the created/updated CBookingAddon object.
POST /cruise/addon/delete¶
Deletes a booking add-on.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | addonId | integer | Yes | Add-on ID |
Data Models¶
CCruiseCompany¶
| Field | Type | Description |
|---|---|---|
| companyId | integer | Company ID |
| companyCode | string | Unique company code |
| companyName | string | Company name |
| color | string | Company color (hex code) |
CCruiseArea¶
| Field | Type | Description |
|---|---|---|
| areaId | integer | Area ID |
| areaCode | string | Unique area code |
| areaName | string | Area name |
CCruiseShip¶
| Field | Type | Description |
|---|---|---|
| shipId | integer | Ship ID |
| companyId | integer | Parent company ID |
| shipCode | string | Unique ship code |
| shipName | string | Ship name |
| shipDescription | string | Description |
| docUrl | string | Document URL |
CCabinType¶
| Field | Type | Description |
|---|---|---|
| cabinTypeId | integer | Cabin type ID |
| typeCode | string | Unique type code |
| typeName | string | Type name |
CChargeType¶
| Field | Type | Description |
|---|---|---|
| chargeTypeId | integer | Charge type ID |
| chargeTypeCode | string | Unique charge code |
| chargeTypeName | string | Charge type name |
CCruisePort¶
| Field | Type | Description |
|---|---|---|
| portId | integer | Port ID |
| portCode | string | Unique port code |
| portName | string | Port name |
| country | string | Country |
| imageUrl | string | Image URL |
CShipCabin¶
| Field | Type | Description |
|---|---|---|
| shipCabinId | integer | Ship cabin ID |
| shipId | integer | Ship ID |
| cabinTypeId | integer | Cabin type ID |
| cabinCode | string | Cabin code |
| cabinName | string | Cabin name |
| capacity | integer | Capacity |
| description | string | Description |
CCruise¶
| Field | Type | Description |
|---|---|---|
| cruiseId | integer | Cruise ID |
| itineraryId | integer | Itinerary ID |
| startDate | date | Start date |
| status | string | Status (Draft, Active, Cancelled, Completed) |
CCruiseItinerary¶
| Field | Type | Description |
|---|---|---|
| itineraryId | integer | Itinerary ID |
| cruiseShipId | integer | Ship ID |
| cruiseAreaId | integer | Area ID |
| companyId | integer | Company ID (derived from ship) |
| itineraryCode | string | Unique itinerary code |
| itineraryName | string | Itinerary name |
| duration | integer | Duration in days |
| description | string | Description |
| imageUrl | string | Image URL |
| status | string | Status (Draft, Active, Suspended, Archived) |
CCruiseTemplate¶
| Field | Type | Description |
|---|---|---|
| cruiseTemplateId | integer | Template ID |
| itineraryId | integer | Itinerary ID |
| cruisePortId | integer | Port ID |
| stopSeq | integer | Stop sequence |
| dayOffsetArrival | integer | Days from start for arrival |
| dayOffsetDeparture | integer | Days from start for departure |
| arrivalTime | string | Arrival time (HH:mm) |
| departureTime | string | Departure time (HH:mm) |
| description | string | Description |
CCruisePoint¶
| Field | Type | Description |
|---|---|---|
| cruisePointId | integer | Point ID |
| cruiseId | integer | Cruise ID |
| cruisePortId | integer | Port ID |
| stopSeq | integer | Stop sequence |
| arrivalDatetime | datetime | Arrival date/time |
| departureDatetime | datetime | Departure date/time |
| description | string | Description |
CCabinCharge¶
| Field | Type | Description |
|---|---|---|
| cabinChargeId | integer | Charge ID |
| cruiseId | integer | Cruise ID |
| shipCabinId | integer | Ship cabin ID |
| amount | number | Price amount |
| currency | string | Currency code |
| exRate | number | Exchange rate |
| available | boolean | Availability flag |
COtherCharge¶
| Field | Type | Description |
|---|---|---|
| otherChargeId | integer | Charge ID |
| cruiseId | integer | Cruise ID |
| chargeTypeId | integer | Charge type ID |
| amount | number | Price amount |
| currency | string | Currency code |
| exRate | number | Exchange rate |
| mandatory | boolean | Mandatory flag |
| paxType | string | Passenger type (all, adult, child, per_cabin) |
| indicator | string | Single-letter indicator badge |
CCabinPriceTemplate¶
| Field | Type | Description |
|---|---|---|
| cabinPriceTemplateId | integer | Template ID |
| itineraryId | integer | Itinerary ID |
| shipCabinId | integer | Ship cabin ID |
| amount | number | Default price amount |
| currency | string | Currency code |
| exRate | number | Exchange rate |
| available | boolean | Default availability |
COtherChargeTemplate¶
| Field | Type | Description |
|---|---|---|
| otherChargeTemplateId | integer | Template ID |
| itineraryId | integer | Itinerary ID |
| chargeTypeId | integer | Charge type ID |
| amount | number | Default price amount |
| currency | string | Currency code |
| exRate | number | Exchange rate |
| mandatory | boolean | Mandatory flag |
| paxType | string | Passenger type |
CCabinPreBooking¶
| Field | Type | Description |
|---|---|---|
| preBookingId | integer | Pre-booking ID |
| cruiseId | integer | Cruise ID |
| shipCabinId | integer | Ship cabin ID |
| costPerCabin | number | Cost per cabin |
| pricePerCabin | number | Price per cabin |
| commission | number | Commission percentage |
| status | string | Status (Available, Reserved, Booked) |
| createdDate | datetime | Creation date |
CCruiseBooking¶
| Field | Type | Description |
|---|---|---|
| bookingId | integer | Booking ID |
| bookingNumber | string | Generated booking number (PT-DDMM-XXXXXXXX) |
| cruiseId | integer | Cruise ID |
| leadPassengerName | string | Lead passenger display name |
| totalPax | integer | Total passenger count |
| totalAdults | integer | Adult count |
| totalChildren | integer | Children count |
| totalInfants | integer | Infant count |
| totalAmount | number | Total booking amount |
| status | string | Booking status |
| voucherUrl | string | Voucher document URL |
| createdDate | datetime | Creation date |
CCruisePassenger¶
| Field | Type | Description |
|---|---|---|
| passengerId | integer | Passenger ID |
| bookingId | integer | Booking ID |
| firstName | string | First name |
| lastName | string | Last name |
| nationality | string | ISO country code |
| dateOfBirth | date | Date of birth |
| passportNumber | string | Passport number |
| passportExpiry | date | Passport expiry date |
| isLeadPassenger | boolean | Lead passenger flag |
| remarks | string | Remarks |
CBookedCabin¶
| Field | Type | Description |
|---|---|---|
| bookedCabinId | integer | Booked cabin ID |
| bookingId | integer | Booking ID |
| shipCabinId | integer | Ship cabin ID |
| numPax | integer | Number of passengers |
| isOwn | boolean | Own (pre-booked) cabin flag |
| price | number | Cabin price |
| status | string | Cabin status |
| preBookingId | integer | Associated pre-booking ID |
CBookingAddon¶
| Field | Type | Description |
|---|---|---|
| addonId | integer | Add-on ID |
| bookingId | integer | Booking ID |
| passengerId | integer | Passenger ID (optional) |
| chargeTypeId | integer | Charge type ID |
| amount | number | Charge amount |
| currency | string | Currency code |
CCruiseAvailability¶
| Field | Type | Description |
|---|---|---|
| cruise | CCruise | Cruise details |
| itinerary | CCruiseItinerary | Itinerary details |
| ship | CCruiseShip | Ship details |
| company | CCruiseCompany | Company details |
| area | CCruiseArea | Area details |
| availableCabins | array | List of CCruiseCabinRecord |
| mandatoryCharges | array | List of CCruiseChargeRecord |
| optionalCharges | array | List of CCruiseChargeRecord |
| cruisePoints | array | List of CCruisePointRecord |
CPriceCalculation¶
| Field | Type | Description |
|---|---|---|
| cruiseId | integer | Cruise ID |
| shipCabinId | integer | Selected cabin ID |
| adults | integer | Number of adults |
| children | integer | Number of children |
| cabinCharge | number | Cabin price |
| cabinCurrency | string | Cabin currency |
| mandatoryChargesTotal | number | Total mandatory charges |
| optionalChargesTotal | number | Total optional charges |
| grandTotal | number | Grand total |
| lineItems | array | List of CPriceLineItem |
CPriceLineItem¶
| Field | Type | Description |
|---|---|---|
| description | string | Line item description |
| unitPrice | number | Unit price |
| quantity | integer | Quantity |
| totalPrice | number | Total price |
| currency | string | Currency code |
| chargeType | string | Type (cabin, mandatory, optional) |
CCruiseSearch¶
| Field | Type | Description |
|---|---|---|
| searchId | string | Search identifier |
| results | array | Matching cruises |
| totalResults | integer | Total count |
Front-End Super-APIs¶
These endpoints are designed for front-end client website consumption, providing aggregated data with calculated retail pricing.
Pricing Calculation¶
All prices are returned in AED using the following formula: 1. Take cabin price and divide by number of passengers 2. Add all mandatory other charges (per passenger) 3. Convert to AED (USD exchange rate: 3.67) 4. Add fixed 750 AED per passenger markup 5. Round up to nearest 100 and subtract 1 (e.g., 2754.6 → 2799)
POST /cruise/itinerary/cruises¶
Returns all available cruises with complete details and minimum pricing. Used for cruise search/listing functionality.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | companyId | integer | No | Company ID filter. If not provided, returns cruises from all companies. | | itineraryId | integer | No | Itinerary ID filter. If not provided, returns all available cruises. |
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"itineraries": [
{
"itinerary": {
"itineraryId": 1,
"cruiseShipId": 5,
"cruiseAreaId": 2,
"companyId": 3,
"itineraryCode": "MED-7D",
"name": "Mediterranean Explorer",
"duration": 7,
"imageUrl": "/images/med-cruise.jpg",
"status": "Active"
},
"ship": {
"cruiseShipId": 5,
"companyId": 3,
"shipCode": "HARMONY",
"shipName": "Harmony of the Seas",
"imageUrl": "/images/harmony.jpg"
},
"area": {
"cruiseAreaId": 2,
"areaCode": "MED",
"areaName": "Mediterranean",
"imageUrl": "/images/mediterranean.jpg"
},
"company": {
"companyId": 3,
"companyCode": "RCL",
"companyName": "Royal Caribbean",
"imageUrl": "/images/rcl-logo.png"
},
"cruises": [
{
"cruiseId": 101,
"itineraryId": 1,
"startDate": "2025-06-15",
"status": "Active",
"cruisePoints": [
{
"point": {
"cruisePointId": 501,
"cruiseId": 101,
"portId": 10,
"stopSeq": 1,
"arrivalTime": null,
"departureTime": "18:00"
},
"port": {
"cruisePortId": 10,
"portCode": "BCN",
"portName": "Barcelona",
"country": "Spain",
"imageUrl": "/images/barcelona.jpg"
}
},
{
"point": {
"cruisePointId": 502,
"cruiseId": 101,
"portId": 11,
"stopSeq": 2,
"arrivalTime": "08:00",
"departureTime": "17:00"
},
"port": {
"cruisePortId": 11,
"portCode": "MRS",
"portName": "Marseille",
"country": "France",
"imageUrl": "/images/marseille.jpg"
}
}
],
"minPricePerPax": 2599.0,
"priceCurrency": "AED"
}
]
}
],
"totalCruises": 1
}
}
Request Examples:
-
Get all available cruises (no filters):
-
Filter by company:
-
Filter by specific itinerary:
POST /cruise/detail¶
Returns complete cruise details with all available cabin pricing. Used for cruise detail/booking functionality.
Request Body: | Field | Type | Required | Description | |-------|------|----------|-------------| | session | string | No | User session token | | cruiseId | integer | Yes | Cruise ID |
Response Structure:
{
"apiStatus": { "errorCode": "OK", "errorMessage": "Success" },
"apiData": {
"cruiseId": 101,
"itineraryId": 1,
"startDate": "2025-06-15",
"status": "Active",
"itinerary": {
"itineraryId": 1,
"cruiseShipId": 5,
"cruiseAreaId": 2,
"companyId": 3,
"itineraryCode": "MED-7D",
"name": "Mediterranean Explorer",
"duration": 7,
"status": "Active"
},
"ship": {
"cruiseShipId": 5,
"companyId": 3,
"shipCode": "HARMONY",
"shipName": "Harmony of the Seas"
},
"area": {
"cruiseAreaId": 2,
"areaCode": "MED",
"areaName": "Mediterranean"
},
"company": {
"companyId": 3,
"companyCode": "RCL",
"companyName": "Royal Caribbean"
},
"cruisePoints": [
{
"point": {
"cruisePointId": 501,
"cruiseId": 101,
"portId": 10,
"stopSeq": 1,
"arrivalTime": null,
"departureTime": "18:00"
},
"port": {
"cruisePortId": 10,
"portCode": "BCN",
"portName": "Barcelona",
"country": "Spain"
}
},
{
"point": {
"cruisePointId": 502,
"cruiseId": 101,
"portId": 11,
"stopSeq": 2,
"arrivalTime": "08:00",
"departureTime": "17:00"
},
"port": {
"cruisePortId": 11,
"portCode": "MRS",
"portName": "Marseille",
"country": "France"
}
}
],
"availableCabins": [
{
"cabin": {
"shipCabinId": 201,
"cruiseShipId": 5,
"cabinTypeId": 1,
"maxPax": 2
},
"cabinType": {
"cabinTypeId": 1,
"typeCode": "INS",
"typeName": "Inside Cabin",
"imageUrl": "/images/inside-cabin.jpg"
},
"charge": {
"cabinChargeId": 301,
"cruiseId": 101,
"shipCabinId": 201,
"amount": 1000.00,
"currency": "USD"
},
"pricePerPax": 2599.0,
"priceCurrency": "AED",
"maxPax": 2
},
{
"cabin": {
"shipCabinId": 202,
"cruiseShipId": 5,
"cabinTypeId": 2,
"maxPax": 2
},
"cabinType": {
"cabinTypeId": 2,
"typeCode": "OCV",
"typeName": "Ocean View Cabin",
"imageUrl": "/images/oceanview-cabin.jpg"
},
"charge": {
"cabinChargeId": 302,
"cruiseId": 101,
"shipCabinId": 202,
"amount": 1500.00,
"currency": "USD"
},
"pricePerPax": 3499.0,
"priceCurrency": "AED",
"maxPax": 2
}
],
"mandatoryCharges": [
{
"charge": {
"otherChargeId": 401,
"cruiseId": 101,
"chargeTypeId": 1,
"amount": 50.00,
"currency": "USD",
"paxType": "ALL",
"mandatory": true
},
"chargeType": {
"chargeTypeId": 1,
"chargeTypeCode": "GRATTIP",
"chargeTypeName": "Gratuities"
}
}
]
}
}
Request Example:
CCruiseChargeRecord: | Field | Type | Description | |-------|------|-------------| | charge | COtherCharge | Charge details (amount, currency) | | chargeType | CChargeType | Charge type details (name) |
Error Codes¶
Business Logic Errors¶
| Code | Description |
|---|---|
| CRU0001 | Itinerary not found |
| CRU0002 | Cruise not found |
| CRU0003 | Entity not found (generic) |
| CRU0004 | Duplicate code (unique constraint) |
| CRU0005 | Cannot delete company with ships |
| CRU0006 | Cannot delete ship with itineraries |
| CRU0007 | Cannot delete ship with cabins |
| CRU0008 | Cannot delete area with itineraries |
| CRU0009 | Cannot delete cabin type in use |
| CRU0010 | Cannot delete charge type in use |
| CRU0011 | Cannot delete ship cabin with charges |
| CRU0012 | Cannot delete port used by templates |
| CRU0013 | Cannot delete port used by cruise points |
| CRU0014 | Cannot delete non-Draft itinerary |
| CRU0015 | Cannot delete itinerary with cruises |
| CRU0016 | Cannot delete non-Draft cruise |
| CRU0017 | Invalid itinerary status transition |
| CRU0018 | Cannot activate itinerary without templates |
| CRU0019 | Cannot delete itinerary with templates |
| CRU0020 | Cannot delete cruise with points |
| CRU0021 | Cannot delete cruise with cabin charges |
| CRU0022 | Cannot delete cruise with other charges |
| CRU0023 | Can only regenerate points for Draft cruises |
| CRU0024 | Cruise not available for booking |
| CRU0025 | At least one passenger required |
| CRU0026 | Cabin not available for cruise |
| CRU0027 | Booking not found |
| CRU0028 | Invalid booking status value |
| CRU0200 | Pre-booking target count below non-available minimum |
| CRU0201 | Booking not found (for status change) |
| CRU0202 | Invalid booking status transition |
Validation Errors¶
| Code | Description |
|---|---|
| CRU0100 | Code too long (max 10 characters) |
| CRU0101 | Name too long (max 200 characters) |
| CRU0102 | Description too long (max 2000 characters) |
| CRU0103 | URL too long (max 500 characters) |
| CRU0104 | Invalid URL protocol (must be http/https) |
| CRU0105 | URL contains blocked content |
| CRU0106 | Bulk operation exceeds limit (max 100 items) |
| CRU0107 | Invalid amount (negative or out of range) |
| CRU0108 | Invalid passenger count |
| CRU0109 | Invalid duration (must be 1-365 days) |
| CRU0110 | Invalid code format (alphanumeric only) |
| CRU0111 | Required field missing |
| CRU0112 | Invalid exchange rate |
| CRU0113 | Invalid date format |
| CRU0114 | Start date must be in the future |
| CRU0115 | End date must be after start date |
| CRU0116 | Invalid status value |
| CRU0117 | Invalid pax type value |
| CRU0118 | Invalid currency code |