Discover/MSC Crociere API
live

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.

Endpoint health
verified 2h ago
list_cruise_departures
list_filter_options
search_cruises
3/3 passing latest checkself-healing
Endpoints
3
Updated
2h ago

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.

This call costs1 credit / call— charged only on success
Try it
1-based page number.
Ship code(s) from list_filter_options.ships[*].code (one shape: PR). Comma-separated for several ships.
Result ordering, matching the site's 'Ordina per' menu.
Latest departure date, ISO YYYY-MM-DD (inclusive).
Earliest departure date, ISO YYYY-MM-DD (inclusive).
Itineraries per page; values above 50 are clamped to 50.
Maximum cruise length in nights (inclusive).
Minimum cruise length in nights (inclusive).
Destination area code(s) from list_filter_options.destinations[*].code (e.g. NOR for Nord Europa). Comma-separated for several areas.
Embarkation port code(s) from list_filter_options.embark_ports[*].code (one shape: GOA). Comma-separated for several ports.
→ api.parse.bot/scraper/0b0a6402-b89c-4315-b531-5350a966a312/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
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'
Python SDK · recommended

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")
All endpoints · 3 totalmissing one? ·

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.

Input
ParamTypeDescription
pageinteger1-based page number.
shipstringShip code(s) from list_filter_options.ships[*].code (one shape: PR). Comma-separated for several ships.
sortstringResult ordering, matching the site's 'Ordina per' menu.
date_tostringLatest departure date, ISO YYYY-MM-DD (inclusive).
date_fromstringEarliest departure date, ISO YYYY-MM-DD (inclusive).
page_sizeintegerItineraries per page; values above 50 are clamped to 50.
nights_maxintegerMaximum cruise length in nights (inclusive).
nights_minintegerMinimum cruise length in nights (inclusive).
destinationstringDestination area code(s) from list_filter_options.destinations[*].code (e.g. NOR for Nord Europa). Comma-separated for several areas.
embark_portstringEmbarkation port code(s) from list_filter_options.embark_ports[*].code (one shape: GOA). Comma-separated for several ports.
Response
{
  "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.

Reliability & maintenanceVerified

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.

Last verified
2h ago
Latest check
3/3 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • 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
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 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.

Frequently asked questions
Does MSC Crociere have an official developer API?+
MSC Crociere does not publish a public developer API. The msccrociere.it website is a consumer-facing booking site with no documented programmatic access for third parties.
What does list_cruise_departures return beyond a list of dates?+
For each departure it returns the same pricing fields as search_cruises (EUR fares per adult and per cabin, port charges, hotel service charge), plus a top-level cabin_category_counts object that maps cabin macro-category codes to the count of priced offers across all departures. ship, nights, and itinerary_name are also returned at the top level. If the itinerary_code has no available departures, those top-level fields are null and departures is an empty array.
Are cabin-level details or specific cabin categories returned per departure?+
The endpoints return the cheapest available cabin for 2 adults per itinerary or departure, plus the cabin_category_counts summary across departures. Individual cabin-category breakdowns per departure date are not currently exposed. The API covers itinerary-level and departure-level best-price rows. You can fork it on Parse and revise to add per-category pricing per departure.
Is there a limit on how many itineraries search_cruises can return per page?+
Yes. The page_size parameter is clamped to a maximum of 50 itineraries per page regardless of the value you pass. Use the has_more flag and total_pages fields in the response to paginate through the full result set.
Does the API cover MSC cruises sold on other regional sites, such as msccruises.com or msccruisesusa.com?+
No. The API covers only the Italian-market inventory from msccrociere.it, with prices in EUR and filter names in Italian. Other regional MSC sites are not currently included. You can fork this API on Parse and revise it to point at a different regional MSC domain.
Page content last updated . Spec covers 3 endpoints from msccrociere.it.
Related APIs in TravelSee all →