Skip to content

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:

{
  "apiStatus": {
    "errorCode": "OK",
    "errorMessage": "Success"
  },
  "apiData": { ... }
}

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: - DraftActive (requires at least one cruise template) - ActiveSuspended - SuspendedActive - Active/SuspendedArchived (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: - DraftActive - ActiveCancelled (must be at least 7 days before departure) - ActiveCompleted (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 pendingAvailability pending, Payment pending, Cancelled-NonRefundable - Availability pendingPayment pending, Cancelled-NonRefundable - Payment pendingVoucher pending, Cancelled-NonRefundable, Cancelled-RefundPending - Voucher pendingVouchered, Cancelled-RefundPending - VoucheredCancelled-RefundPending - Cancelled-RefundPendingCancelled-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:

  1. Get all available cruises (no filters):

    { "session": "" }
    

  2. Filter by company:

    { "session": "", "companyId": 3 }
    

  3. Filter by specific itinerary:

    { "session": "", "itineraryId": 1 }
    


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:

{ "session": "", "cruiseId": 101 }

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