Atlas Ocean Voyages
Luxury expedition cruise voyage search from Atlas Ocean Voyages — filter the site's own 180 live itineraries by destination, ship, duration and departure…
Luxury expedition cruise voyage search from Atlas Ocean Voyages — filter the site's own 180 live itineraries by destination, ship, duration and departure date with real starting prices, then read one voyage's full port-by-port day itinerary, every cabin category the site has actually priced for that sailing, and the itinerary-code-keyed handoff URL into the real booking engine.
Domain: atlasoceanvoyages.com
Also known as: Atlas Ocean Voyages, Atlas Ocean Voyage, AtlasOceanVoyages, atlasoceanvoyages.com
Call it directly
bowmark.providers.atlasoceanvoyages.searchVoyages(args?: { destination?: string; ship?: string; minDurationNights?: number; maxDurationNights?: number; departAfter?: string; departBefore?: string; query?: string; limit?: number }): Promise<AtlasVoyageSearchResult>
bowmark.providers.atlasoceanvoyages.getVoyage(slug: string): Promise<AtlasVoyageDetail>Functions
| Function | What it does |
|---|---|
searchVoyages | Runs the /search voyage finder over all 180 currently-published itineraries, filtered by destination (substring, e.g. "Antarctica"), ship (substring, e.g. "World Voyager"), duration bounds,… |
getVoyage | Reads one voyage's full detail page: the port-by-port day-by-day schedule (arrival/departure times, or atSea: true for a scenic-cruising leg with no landing), every cabin category the… |
Types
// Atlas Ocean Voyages' OWN shapes — not a capability contract.
interface AtlasVoyageSummary {
code: string; // the site's own itinerary code, e.g. "WVO260815"
slug: string; // the key getVoyage takes
title: string;
destinations: string[];
ship: string;
durationNights: number;
departDate: string; // "2026-08-15"
endDate: string;
startingPrice: number | null; // null = call-for-fares, not a read failure
startingPriceFormatted: string | null;
detailUrl: string;
}
interface AtlasVoyageSearchResult { voyages: AtlasVoyageSummary[]; totalMatched: number }
interface AtlasPortStop { name: string; code: string; arriving: string | null; departing: string | null; atSea: boolean }
interface AtlasCabinPrice { code: string; name: string; totalPrice: number; totalPriceFormatted: string }
interface AtlasVoyageDetail {
code: string;
slug: string;
title: string;
heroTitle: string | null;
summary: string | null;
ship: string;
durationNights: number;
departDate: string;
endDate: string;
ports: AtlasPortStop[];
cabinPrices: AtlasCabinPrice[]; // only the categories THIS sailing has live pricing for
startingPrice: number | null;
startingPriceFormatted: string | null;
bookingUrl: string; // bookings.atlasoceanvoyages.com — the real handoff
detailUrl: string;
}Examples
// The query ANGLE found ChatGPT unable to answer for real: what's available and what does it cost?
const { voyages } = await bowmark.providers.atlasoceanvoyages.searchVoyages({
destination: "Iceland & Greenland",
departAfter: "2026-08-01",
departBefore: "2026-09-01",
});
return voyages.map((v) => ({ title: v.title, ship: v.ship, nights: v.durationNights, from: v.startingPriceFormatted }));// Actually get the per-cabin fares and the real booking link — where ChatGPT
// alone reported the cabin as "call for fares" and offered a phone script.
const { voyages } = await bowmark.providers.atlasoceanvoyages.searchVoyages({ query: "Reykjavik to Longyearbyen" });
const detail = await bowmark.providers.atlasoceanvoyages.getVoyage(voyages[0].slug);
return { cabins: detail.cabinPrices, bookHere: detail.bookingUrl };