Royal Caribbean APIroyalcaribbean.com ↗
Search Royal Caribbean cruises by destination, ship, and duration. Get port-by-port itineraries, sailing dates, and fare data via 3 structured endpoints.
What is the Royal Caribbean API?
The Royal Caribbean API provides 3 endpoints to search cruise listings and retrieve detailed itinerary and pricing data from royalcaribbean.com. Use search_cruises to filter sailings by destination code, ship code, and voyage length, then call get_cruise_details with a package code and sail date to get the full port-by-port schedule, ship information, onboard experience details, and all available fares for that itinerary.
curl -X GET 'https://api.parse.bot/scraper/9c21e4c9-f0dc-44b3-a60a-8ab7756efd77/search_cruises?page=1&ship=FR&skip=0&limit=5&nights=4-5&destination=CARIB' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace royalcaribbean-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""Royal Caribbean Cruise API — search cruises, get itinerary details, explore transpacific routes."""
from parse_apis.royal_caribbean_cruise_api import RoyalCaribbean, Destination, CruiseNotFound
client = RoyalCaribbean()
# Search Caribbean cruises with a duration filter
for cruise in client.cruises.search(destination=Destination.CARIBBEAN, nights="4-5", limit=5):
print(cruise.name, cruise.ship_name, cruise.lowest_price, cruise.departure_port)
# Take the first result and drill into its full itinerary
cruise = client.cruises.search(destination=Destination.ALASKA, limit=1).first()
if cruise:
# Parse sailing ID to get package_code and sail_date
sailing_id = cruise.sailings[0]
pkg, date = sailing_id.split("_", 1)
detail = client.cruisedetails.get(package_code=pkg, sail_date=date)
print(detail.name, detail.total_nights, detail.destination_name)
for port in detail.chapters[:3]:
print(port.name, port.activity)
# Typed error handling for an invalid package/date combo
try:
client.cruisedetails.get(package_code="INVALID99", sail_date="2099-01-01")
except CruiseNotFound as exc:
print(f"Cruise not found: {exc}")
# Explore Asia-Pacific and Transpacific cruises
for match in client.asiapacificmatches.list(limit=3):
print(match.cruise_name, match.ship_name, match.total_nights, match.departure_port)
print("exercised: cruises.search / cruisedetails.get / asiapacificmatches.list")Search for cruises with optional filters for destination, ship, and number of nights. Returns paginated results including cruise IDs, itinerary names, ship details, lowest prices, and available sailing dates. Pagination is manual via skip/limit. Each cruise includes a list of sailing IDs that encode the package code and sail date needed for get_cruise_details (format: 'packageCode_YYYY-MM-DD').
| Param | Type | Description |
|---|---|---|
| ship | string | Ship code to filter by (e.g. 'FR' for Freedom of the Seas, 'AN' for Anthem of the Seas, 'QN' for Quantum of the Seas). |
| skip | integer | Number of results to skip for pagination. |
| limit | integer | Maximum number of results to return per page. |
| nights | string | Number of nights to filter by. Single value (e.g. '7') or range (e.g. '5-9'). |
| destination | string | Destination code to filter by (e.g. 'CARIB' for Caribbean, 'ALASK' for Alaska, 'FAR.E' for Far East, 'SOPAC' for South Pacific, 'TPACI' for Transpacific, 'EUROP' for Europe). |
{
"type": "object",
"fields": {
"total": "integer, total number of matching cruises",
"cruises": "array of cruise objects with id, name, package_code, ship_name, ship_code, departure_port, lowest_price, sailings, product_view_link"
},
"sample": {
"data": {
"total": 359,
"cruises": [
{
"id": "FR05MIA-2694211651",
"name": "Western Caribbean Cruise",
"sailings": [
"FR05W655_2026-08-31"
],
"ship_code": "FR",
"ship_name": "Freedom of the Seas",
"lowest_price": 347.72,
"package_code": "FR05W655",
"departure_port": "Miami",
"product_view_link": "itinerary/5-night-western-caribbean-cruise-from-miami-on-freedom-FR05W655?sailDate=2026-08-31&packageCode=FR05W655&groupId=FR05MIA-2694211651&country=USA"
}
]
},
"status": "success"
}
}About the Royal Caribbean API
Searching and Filtering Cruises
The search_cruises endpoint accepts optional filters including destination (e.g. 'CARIB' for Caribbean, 'ALASK' for Alaska, 'FAR.E' for Far East), ship (e.g. 'EN' for Enchantment of the Seas, 'AN' for Anthem of the Seas), and nights (a single value like '7' or a range like '5-9'). Results are paginated via skip and limit parameters. Each cruise object in the response includes an id, a productViewLink, lowestPriceSailing with a price value, and a masterSailing containing itinerary details such as the itinerary name and code.
Cruise Itinerary Details
The get_cruise_details endpoint takes two required inputs — package_code (found in masterSailing.itinerary.code from search results) and sail_date in YYYY-MM-DD format — and returns a structured itinerary object. This includes packageCode, name, overviewDescription, totalNights, destination, ship, and chapters which represent the port-by-port schedule with individual port descriptions. The response also includes countries_visited (an array of country names derived from port addresses) and all_available_sailings with pricing data for each departure date.
Asia-Pacific and World Cruise Coverage
The get_asia_pacific_world_cruise endpoint requires no input parameters and returns all sailings across Far East, South Pacific, and Transpacific routes in a single call. Each item in the matches array contains both a cruise_info summary (equivalent to a search result) and a details object with the complete port schedule, ship details, and pricing — making it suitable for building destination-specific views or fare comparison tools without chaining multiple requests.
The Royal Caribbean API is a managed, monitored endpoint for royalcaribbean.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when royalcaribbean.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official royalcaribbean.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Build a cruise fare tracker that monitors
lowestPriceSailingprices across Caribbean and Alaska routes over time. - Generate itinerary comparison pages using
chapters(port schedule) data fromget_cruise_detailsfor multiple sailings. - Populate a trip-planning app with
countries_visitedand port descriptions for a selected package code and sail date. - Aggregate all Asia-Pacific and Transpacific sailing options and fares in one request using
get_asia_pacific_world_cruise. - Filter cruises by ship code and voyage length to surface sailings that match a traveler's availability and preferred vessel.
- Extract
all_available_sailingspricing arrays to display a date-based fare calendar for a specific itinerary. - Support destination research tools by mapping destination codes to itinerary names, port stops, and current fares.
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does Royal Caribbean have an official developer API?+
What does `get_cruise_details` return beyond basic itinerary info?+
chapters schedule and totalNights, the endpoint returns overviewDescription, ship details, destination, countries_visited (as a plain array of country names), and an all_available_sailings array that includes fare data for each available departure date on that itinerary. If no sailings are available, that field is null.How does pagination work in `search_cruises`?+
total integer representing the full count of matching cruises, and a cruises array for the current page. Use the skip parameter to offset results and limit to control page size. To retrieve all results for a given filter combination, increment skip by your limit value until you have consumed total records.Does the API cover onboard pricing, cabin categories, or availability by cabin type?+
lowestPriceSailing fare values and all_available_sailings pricing at the sailing level, but does not break down fares by cabin category or expose individual cabin availability. You can fork this API on Parse and revise it to add an endpoint targeting cabin-level pricing if that detail is needed.Are shore excursions or dining package data included in the response?+
get_cruise_details response covers port schedules, ship details, and sailing fares, but does not include shore excursion listings or onboard dining package options. You can fork this API on Parse and revise it to add coverage for those data types.