Table of Contents

Voyages file

GET /voyages?market={market}market required.

A JSON array with one object per available voyage for the requested market. This is the dynamic file: each object carries the sailing's dates, ports, ship, availability, pricing, and day-by-day itinerary. It is regenerated daily at 07:00 CEST.

curl --location 'https://bookings.sw.travelhx.com/voyages?market=GB' \
  --header 'Authorization: Bearer YOUR_ACCESS_TOKEN'

Top-level fields

Every field below is always present (Name, Description, Map, and itinerary body may be null).

Field Type Description
VoyageID string Unique identifier for the voyage. E.g. _@FNALA04-260906, _@SCGALWNEU-260804.
DepartureDate string (date) Package start date, ISO YYYY-MM-DD. May be earlier than EmbarkationTime when the package opens with a pre-cruise hotel or land programme. E.g. 2026-09-06.
ArrivalDate string (date) Package end date, ISO YYYY-MM-DD. E.g. 2026-09-23.
EmbarkationTime string (date-time) Scheduled time you board the ship, ISO YYYY-MM-DDTHH:MM:SS. E.g. 2026-09-07T22:00:00.
DisembarkationTime string (date-time) Scheduled time the ship is left at the end of the cruise, ISO YYYY-MM-DDTHH:MM:SS. E.g. 2026-09-23T08:00:00.
DeparturePort string Embarkation port code → ports[].code. E.g. USOME, SJLYR.
ArrivalPort string Debarkation port code → ports[].code. E.g. CAVAN, SJLYR.
ShipCode string (enum) Ship operating the sailing → ships[].shipId. See ship codes.
Name string | null Marketing name of the voyage. null when unavailable. E.g. Alaska & British Columbia \| Inside Passage, Bears and Aleutian Islands \| Southbound.
Description string | null Sailing description. null when no description is available for the sailing.
Map string (uri) | null URL to the voyage's itinerary/route map image. null when no map is available.
Region string (enum) Geographic region. See regions.
itinerary array Day-by-day narrative. See itinerary.
Currency string ISO currency of every Rate_* value in this voyage's categories. Determined by market (see supported markets). E.g. GBP.
categories array Available cabin grades with pricing (at least one). See categories.

Ship codes

ShipCode is one of:

Code Ship
FN Fridtjof Nansen
FR Fram
RA Roald Amundsen
SP Spitsbergen
SC Santa Cruz II

Regions

Region is one of the following region names:

NORWAY, ALASKA, ANTARCTICA, SVALBARD, GALAPAGOS, GREENLAND, ICELAND, BRITISH ISLES, EUROPE, SOUTH AMERICA, NW PASSAGE, ARCTIC CANADA.

itinerary

An ordered array of day entries describing the voyage day by day.

Field Type Description
day integer | null Day number (e.g. 1, 2).
location string | null Free-text day location/title (e.g. "Germany to Quito"). Not a port code — do not join to /ports.
heading string | null Day title (e.g. "Scenic Seattle").
body string | null Day description; rich text flattened to plain text (paragraphs joined by newlines). null when empty.
mediaContent array of string (uri) Resolved absolute image URLs for the day.
Warning

itinerary[].location is descriptive day copy, not a port code. Only the top-level DeparturePort / ArrivalPort resolve against the ports file.

categories

The bookable cabin grades that returned a price for this voyage. One entry per priced cabin grade.

Field Type Description
Category string Cabin grade code → ships[].cabinCategories[].cabinGrades[].code. E.g. QJ, MA, XTJ, USP.
MaxOccupancy integer Maximum number of guests the cabin grade sleeps (14).
Rate_Sgl string | null Single-traveller rate: what one guest pays to occupy the cabin alone (a single supplement applies). Decimal string with 2 places, in Currency. null when this grade is not offered for single occupancy. E.g. 17416.51.
Rate_Dbl string Double-occupancy per-guest rate, decimal string with 2 places, in Currency. E.g. 10244.75.
RateCode string Always BESTPRICE. The fare code to use when booking the sailing through the Seaware API.

How the two rates relate. Rate_Dbl is the price per guest when two share the cabin, so a couple pays 2 × Rate_Dbl. Rate_Sgl is the all-in price for one guest occupying the same cabin alone: the single supplement makes it higher than a single Rate_Dbl share, but still less than buying the whole cabin (2 × Rate_Dbl). Not every grade is sold for single occupancy — Rate_Sgl is null for those.

Note

Rates are a snapshot from the daily generation. They are indicative — confirm the live fare with a quote against the Seaware API (SwOTA) before taking payment.

Example object

{
  "VoyageID": "_@FNALA04-260906",
  "DepartureDate": "2026-09-06",
  "ArrivalDate": "2026-09-23",
  "EmbarkationTime": "2026-09-07T22:00:00",
  "DisembarkationTime": "2026-09-23T08:00:00",
  "DeparturePort": "USOME",
  "ArrivalPort": "CAVAN",
  "ShipCode": "FN",
  "Name": "Alaska & British Columbia | Inside Passage, Bears and Aleutian Islands | Southbound",
  "Description": "18-day all-inclusive Alaska expedition cruise from Seattle to Vancouver",
  "Map": "https://images.eu.ctfassets.net/.../FNALA2703_FNALA2608_UK.png",
  "Region": "ALASKA",
  "Currency": "GBP",
  "itinerary": [
    {
      "day": 1,
      "location": "Seattle",
      "heading": "Scenic Seattle",
      "body": "Begin your expedition in Seattle...",
      "mediaContent": ["https://.../seattle.jpg"]
    }
  ],
  "categories": [
    { "Category": "I2", "MaxOccupancy": 2, "Rate_Sgl": "17416.51", "Rate_Dbl": "10244.75", "RateCode": "BESTPRICE" }
  ]
}

See Tying the data together for how to resolve ShipCode, Category, and the port codes against the reference files.