MSC Crociere APImsccrociere.it ↗
Search MSC Crociere Italian market cruises by destination, ship, dates, and duration. Get EUR fares, itinerary codes, and all departure dates via 3 endpoints.
What is the MSC Crociere API?
The MSC Crociere IT API exposes 3 endpoints that surface cruise inventory from msccrociere.it, including filtered search results, per-itinerary departure listings, and the complete filter vocabulary. The search_cruises endpoint returns one row per itinerary with EUR fares per adult and per cabin, port charges, hotel service charges, and the itinerary_code needed to drill into individual sailing dates via list_cruise_departures.
curl -X GET 'https://api.parse.bot/scraper/0b0a6402-b89c-4315-b531-5350a966a312/search_cruises?sort=recommended&page_size=5&destination=ALA' \ -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 msccrociere-it-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.
"""Walkthrough: MSC Crociere cruise search — discover filters, search, drill into departures."""
from parse_apis.msccrociere_it_api import MscCrociere, CruiseSort, InputFormatInvalid
client = MscCrociere()
# Discover available filter vocabularies (destinations, ports, ships).
options = client.filter_options.get()
for dest in options.destinations[:3]:
print(dest.code, dest.name)
# Search cruises for the first destination, sorted by price, capped at 5 results.
dest_code = options.destinations[0].code
for cruise in client.cruises.search(destination=dest_code, sort=CruiseSort.PRICE, limit=5):
print(cruise.itinerary_name, cruise.departure_date, cruise.price_per_adult, cruise.currency)
print(" ship:", cruise.ship.name, "| nights:", cruise.nights)
# Drill down: take one cruise and list all departures for its itinerary.
cruise = client.cruises.search(destination=dest_code, sort=CruiseSort.DATE, limit=1).first()
if cruise is not None:
try:
itinerary = cruise.itinerary()
except InputFormatInvalid as e:
print("Invalid itinerary code:", e.message)
else:
print(f"\n{itinerary.itinerary_name} — {itinerary.total} departures on {itinerary.ship.name if itinerary.ship else 'N/A'}")
for dep in itinerary.departures[:5]:
print(f" {dep.departure_date} €{dep.price_per_adult}/adult embark: {dep.embarkation_port.name}")
print("\nexercised: filter_options.get / cruises.search / cruise.itinerary")
Filtered cruise search mirroring the msccrociere.it search page. One row per itinerary (the site's de-duplicated result card): the cheapest available cabin for 2 adults on the representative departure, with fares in EUR per adult and per cabin, port charges, hotel service charge and mandatory insurance per adult, discount codes, and the ports visited. Prices are always for a 2-adult cabin with no children (the only passenger configuration the public search index publishes). All filters are optional and combine with AND; destination, embark_port and ship accept one code or several comma-separated codes (OR within the filter) using the codes returned by list_filter_options. An unrecognised code simply yields an empty result (total 0), which is a valid success. Pagination is caller-controlled through page (1-based, default 1) and page_size (default 10, clamped to 50); total and total_pages describe the itinerary count for the current filters and has_more tells whether a further page exists. One upstream request per call. Each row's itinerary_code feeds list_cruise_departures.
| Param | Type | Description |
|---|---|---|
| page | integer | 1-based page number. |
| ship | string | Ship code(s) from list_filter_options.ships[*].code (one shape: PR). Comma-separated for several ships. |
| sort | string | Result ordering, matching the site's 'Ordina per' menu. |
| date_to | string | Latest departure date, ISO YYYY-MM-DD (inclusive). |
| date_from | string | Earliest departure date, ISO YYYY-MM-DD (inclusive). |
| page_size | integer | Itineraries per page; values above 50 are clamped to 50. |
| nights_max | integer | Maximum cruise length in nights (inclusive). |
| nights_min | integer | Minimum cruise length in nights (inclusive). |
| destination | string | Destination area code(s) from list_filter_options.destinations[*].code (e.g. NOR for Nord Europa). Comma-separated for several areas. |
| embark_port | string | Embarkation port code(s) from list_filter_options.embark_ports[*].code (one shape: GOA). Comma-separated for several ports. |
{
"type": "object",
"fields": {
"page": "page returned (1-based)",
"sort": "sort applied",
"total": "number of itineraries matching the filters",
"cruises": "array of itinerary rows: itinerary_code (feeds list_cruise_departures), cruise_id (representative departure), destination/ship/embarkation_port/disembarkation_port/cabin_category/cabin_macro_category as {code,name}, nights, departure_date (ISO), visiting_ports [{code,name}], price_per_adult and price_per_cabin (EUR, 2 adults), strikethrough_price_per_adult (null when no crossed-out price), port_charges_per_adult, hotel_service_charge_per_adult, insurance_per_adult, currency, price_type/price_label (fare family), ribbons (badge texts), discount_codes [{code,price_per_adult,percent}], flights_available, kids_sail_free, drinks_included, accessible_cabins, season, image_url",
"has_more": "true when a later page exists",
"page_size": "effective page size after clamping",
"total_pages": "number of pages available"
},
"sample": {
"data": {
"page": 1,
"sort": "price",
"total": 11,
"cruises": [
{
"ship": {
"code": "PR",
"name": "MSC Preziosa"
},
"nights": 7,
"season": "WIN2627",
"ribbons": [],
"currency": "EUR",
"cruise_id": "PR20261122HAMHAM",
"image_url": "https://assets.msccruises.com/is/image/msccruises/msc21007922",
"price_type": "EARLYBKG",
"destination": {
"code": "NOR",
"name": "Nord Europa"
},
"price_label": "PREZZO BASE",
"cabin_category": {
"code": "IB",
"name": "Interna"
},
"departure_date": "2026-11-22",
"discount_codes": [],
"itinerary_code": "UYFQ",
"itinerary_name": "Nord Europa",
"kids_sail_free": true,
"visiting_ports": [
{
"code": "ZEE",
"name": "Zeebrugge"
},
{
"code": "RTM",
"name": "Rotterdam"
},
{
"code": "LEH",
"name": "Le Havre"
},
{
"code": "SOU",
"name": "Southampton"
}
],
"drinks_included": false,
"price_per_adult": 514,
"price_per_cabin": 1028,
"embarkation_port": {
"code": "HAM",
"name": "Amburgo"
},
"accessible_cabins": false,
"flights_available": false,
"disembarkation_port": {
"code": "HAM",
"name": "Amburgo"
},
"insurance_per_adult": 41,
"cabin_macro_category": {
"code": "INS",
"name": "Interna"
},
"port_charges_per_adult": 180,
"strikethrough_price_per_adult": null,
"hotel_service_charge_per_adult": 84
}
],
"has_more": true,
"page_size": 5,
"total_pages": 3
},
"status": "success"
}
}About the MSC Crociere API
Cruise Search and Filtering
The search_cruises endpoint mirrors the msccrociere.it search page. Each result row represents a de-duplicated itinerary card showing the cheapest available cabin for 2 adults on the representative departure. You can filter by ship (using codes from list_filter_options), date_from / date_to (ISO YYYY-MM-DD), nights_min / nights_max, and paginate with page and page_size (clamped to 50 per page). The response includes total, total_pages, has_more, and the effective sort applied, so you can build a complete paginated crawler.
Departure Listings per Itinerary
list_cruise_departures takes a single itinerary_code from search_cruises.cruises[*].itinerary_code and returns every available sailing date for that itinerary, sorted by departure_date ascending. Each departure row carries the same pricing fields as the search results. The response also includes cabin_category_counts, an object mapping cabin macro-category codes to the number of priced offers across all departures — useful for understanding available cabin types without iterating each date individually. When no departures exist for a code, ship, nights, and itinerary_name are returned as null.
Filter Vocabulary
list_filter_options takes no inputs and returns the full set of valid values for search_cruises filters: destinations, embark_ports, and ships as {code, name} pairs with Italian-language names, plus the sorts array of accepted sort values. This endpoint reads from the live inventory, so only values with at least one available cruise are returned. Use it to build a dynamic filter UI or to validate codes before passing them to search_cruises.
The MSC Crociere API is a managed, monitored endpoint for msccrociere.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when msccrociere.it 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 msccrociere.it 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?+
- Aggregate and compare MSC Crociere EUR fares across departure dates for a specific itinerary using list_cruise_departures
- Build a fare-alert system that tracks price changes for a given itinerary_code over time
- Filter Mediterranean cruises by nights_min and nights_max to surface short-break sailings
- Enumerate all active MSC ships serving Italian embarkation ports via list_filter_options.ships and embark_ports
- Paginate the full cruise catalogue with search_cruises to index itinerary names, destinations, and representative fares
- Identify which cabin macro-categories have the most priced offers across departures using cabin_category_counts
- Populate a dynamic search UI with live destination and embarkation port options from list_filter_options
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 200 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
| Team | $300/mo | 20,000 | 300 req/min |
| Company | $1,000/mo | 100,000 | 500 req/min |
Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.