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 (1–4). |
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.