Search sailings and cabin fares from Celebrity Cruises, Royal Caribbean, Virgin Voyages, Norwegian Cruise Line and MSC Cruises, and get the results as JSON. You don’t need a key or an account.
curl "https://cruisepricecheck.com/api/v1/cruises?line=celebrity&cabin=balcony&limit=5"Try this requestJSON over HTTPS · 30 requests an hour per IP address · OpenAPI 3.1 description
The base URL is https://cruisepricecheck.com/api/v1. Both endpoints answer GET requests with JSON.
/cruises searches sailings and returns a page of results with their latest recorded fares./cruises/{id} returns one sailing, its fares and the ports it visits each day.Sailing IDs match the sailing pages on this site, so /cruise/123 and /api/v1/cruises/123 describe the same sailing.
Every parameter is optional. Without any, you get the next 10 departures from today, sorted by date. An unrecognised parameter returns an error, so a misspelt filter can’t quietly return unfiltered results.
Scroll the table sideways to read every column.
| Parameter | What it does | Example |
|---|---|---|
line | Cruise line IDs, separated by commas: celebrity, royal, virgin, ncl, msc. | celebrity,royal |
from | Earliest departure date, YYYY-MM-DD. Defaults to today in the UK. | 2027-05-01 |
to | Latest departure date, YYYY-MM-DD. | 2027-09-30 |
minNights | Shortest trip length in nights. | 7 |
maxNights | Longest trip length in nights. | 14 |
maxPrice | Only sailings whose lowest fare is at or below this amount, compared in the fare's own currency. | 1500 |
cabin | Cabin category: inside, outside (ocean view), balcony or suite. Only fares in that category are returned. | balcony |
sort | Use date to sort by departure date or price to sort by lowest fare, both ascending. Defaults to date. | price |
page | Page number, from 1 to 100. | 2 |
limit | Sailings per page, from 1 to 25. Defaults to 10. | 25 |
Each sailing lists its cruise line, ship, itinerary, dates, departure port and destination, followed by its fares, cheapest first. checkedAt is when we last checked a fare, and url opens the sailing’s page on Cruise Price Check, with its price history.
{
"data": [
{
"id": 123,
"url": "https://cruisepricecheck.com/cruise/123",
"cruiseLine": { "id": "celebrity", "name": "Celebrity Cruises" },
"ship": "Celebrity Apex",
"itinerary": "7 Night Western Mediterranean",
"nights": 7,
"departureDate": "2027-06-18",
"returnDate": "2027-06-25",
"departurePort": "Barcelona",
"destination": "Europe",
"taxesIncluded": false,
"fares": [
{
"cabin": "balcony",
"name": "Veranda",
"price": 1249,
"currency": "GBP",
"checkedAt": "2026-09-28T08:00:00.000Z"
}
]
}
],
"pagination": { "page": 1, "limit": 5, "total": 212, "totalPages": 43 },
"notice": "Fares are the latest prices we recorded…",
"attribution": "Cruise Price Check by Codify Limited"
}Example response. The values are illustrative, not a current fare.
A single sailing also includes days. Each day lists the ports visited, and an empty list means a day at sea.
Errors return a code and a message, such as invalid_request, not_found or rate_limited.
Each IP address can make 30 requests an hour. IPv6 addresses share one allowance per /64 network. The API as a whole also accepts at most 1,000 requests an hour. Every request counts, including ones that return an error.
Each response reports your allowance in the RateLimit-Limit, RateLimit-Remaining and RateLimit-Reset headers. Once you reach the limit, requests return HTTP 429 with a Retry-After header in seconds.
A page holds up to 25 sailings, and a search can go up to page 100. Successful responses can be cached for five minutes, so reuse them rather than repeating a request.
Fares are recorded observations, not live quotes. Price checks are scheduled every four hours, and a fare can change between checks. The data doesn’t say whether a fare is per person or for the cabin. Confirm the price, fare basis, taxes and fees with the cruise line before booking. Every response repeats this notice.
Our terms of service apply to the API as they do to the rest of the site. Read how we record and compare prices for coverage and freshness.
Any agent that can make HTTP requests can call the API directly. These machine-readable files describe it: