Discover/Thetravel API
live

Thetravel APIcrociere.thetravel.it ↗

Search MSC and Costa cruise departures on crociere.thetravel.it. Filter by destination, port, nights, dates, and guest counts. Returns prices, itineraries, and ports.

Endpoint health
monitored
list_sailing_ports
search_cruises
Checks pendingself-healing
Endpoints
2
Updated
1h ago

What is the Thetravel API?

The crociere.thetravel.it API exposes 2 endpoints for querying cruise departures and departure ports listed on the Italian travel site crociere.thetravel.it, which aggregates MSC and Costa cruise sailings. The search_cruises endpoint returns per-itinerary records including total EUR prices for a specified guest party, ship name, departure port, itinerary stops, and night count. The list_sailing_ports endpoint resolves available departure ports for any destination area code.

This call costs10 credits / call— charged only on success
Try it
Number of cruises to return in this slice; values above 20 are clamped to 20.
Number of adults (18+), at least 1. Prices are the total for the whole party.
Cruise length filter in nights. Omitted = any length.
Zero-based position in the full result list where the returned slice starts.
End of the departure date window, ISO date YYYY-MM-DD. Must be supplied together with date_from.
Number of infants aged 0-1.
Number of teenagers aged 12-17.
Number of children aged 2-11.
Start of the departure date window, ISO date YYYY-MM-DD. Must be supplied together with date_to.
Cruise company filter. Omitted = both companies.
Destination area code. Omitted = all destinations.
3-letter departure port code, port_code from list_sailing_ports.ports[*].port_code. Omitted = any port.
→ api.parse.bot/scraper/aa0826ba-07af-4fd5-82db-7b4c88d29abf/<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/aa0826ba-07af-4fd5-82db-7b4c88d29abf/search_cruises?destination=MED' \
  -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 crociere-thetravel-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: CrociereTheTravel SDK — search Mediterranean cruises and list departure ports."""
from parse_apis.crociere_thetravel_it_api import (
    CrociereTheTravel, Destination, CruiseLine, Nights, InputFormatInvalid,
)

client = CrociereTheTravel()

# List departure ports available for the Mediterranean destination.
try:
    for port in client.ports.list(destination=Destination.MEDITERRANEO, limit=5):
        print(port.port_code, port.name)
except InputFormatInvalid as e:
    print(f"Invalid input: {e.message}")

# Search for 7-night Costa cruises departing from the Mediterranean.
cruise = client.cruises.search(
    destination=Destination.MEDITERRANEO,
    cruise_line=CruiseLine.COSTA,
    nights=Nights.N7,
    limit=1,
).first()

if cruise is not None:
    print(cruise.cruise_code, cruise.ship_name, cruise.departure_port)
    print(f"  {cruise.nights} nights from €{cruise.price_from} {cruise.currency}")
    print(f"  Itinerary: {', '.join(cruise.itinerary or [])}")

    # Show alternative departure dates for the same itinerary.
    for dep in cruise.available_departures:
        print(f"  Also on {dep.departure_date} from €{dep.price_from}")

# Browse upcoming cruises with a date window, capped at 3 results.
for c in client.cruises.search(
    date_from="2027-03-01",
    date_to="2027-04-30",
    adults=2,
    limit=3,
):
    print(c.cruise_line, c.ship_name, c.departure_date, f"€{c.price_from}")

print("exercised: ports.list / cruises.search")
All endpoints · 2 totalmissing one? ·

Searches cruise departures and returns one record per cruise itinerary with its selected departure date, the 'from' price in EUR for the given guest party (port taxes included, agency discount label shown), ship name, departure port, itinerary stops/countries, nights, and the list of alternative departure dates of the same itinerary with their 'from' prices. The site returns the whole result set in one page; the scraper slices it locally with offset/limit (limit is clamped to 20) and fetches ship/port/itinerary details for each cruise in the returned slice (one extra request per cruise). total is the site's result count for the whole search; has_more tells whether a further offset slice exists. When date_from/date_to are omitted the site uses its default window of today to two months ahead, reported in search_window. Cruises whose detail fragment could not be loaded are listed in details_missing_for with their ship fields null. Ordering follows the site (special offers first).

Input
ParamTypeDescription
limitintegerNumber of cruises to return in this slice; values above 20 are clamped to 20.
adultsintegerNumber of adults (18+), at least 1. Prices are the total for the whole party.
nightsstringCruise length filter in nights. Omitted = any length.
offsetintegerZero-based position in the full result list where the returned slice starts.
date_tostringEnd of the departure date window, ISO date YYYY-MM-DD. Must be supplied together with date_from.
infantsintegerNumber of infants aged 0-1.
juniorsintegerNumber of teenagers aged 12-17.
childrenintegerNumber of children aged 2-11.
date_fromstringStart of the departure date window, ISO date YYYY-MM-DD. Must be supplied together with date_to.
cruise_linestringCruise company filter. Omitted = both companies.
destinationstringDestination area code. Omitted = all destinations.
sailing_portstring3-letter departure port code, port_code from list_sailing_ports.ports[*].port_code. Omitted = any port.
Response
{
  "type": "object",
  "fields": {
    "limit": "integer, limit applied after clamping",
    "total": "integer, the site's total number of matching cruises",
    "offset": "integer, offset applied",
    "cruises": "array of cruise records: cruise_line, cruise_code, departure_date (ISO), price_from (number, EUR total for the party), currency, detail_url, ship_name, departure_port, itinerary (array of stop or country names), nights (integer), discount_label, available_departures (array of {departure_date, price_from, detail_url} for the same itinerary)",
    "has_more": "boolean, whether cruises exist beyond offset+limit",
    "search_window": "object {date_from, date_to} ISO dates of the departure window the site applied",
    "details_missing_for": "array of cruise_code values whose ship/port/itinerary details could not be loaded"
  },
  "sample": {
    "data": {
      "limit": 3,
      "total": 11,
      "offset": 2,
      "cruises": [
        {
          "nights": 7,
          "currency": "EUR",
          "itinerary": [
            "Italia",
            "Spagna",
            "Francia"
          ],
          "ship_name": "Msc Sinfonia",
          "detail_url": "https://crociere.thetravel.it/msc/cruise/Q1EI/SX20270330GOAGOA",
          "price_from": 1298,
          "cruise_code": "SX20270330GOAGOA",
          "cruise_line": "msc",
          "departure_date": "2027-03-30",
          "departure_port": "Genova (Portofino), Italia",
          "discount_label": "Sconto THETRAVEL (-6%)",
          "available_departures": [
            {
              "detail_url": "https://crociere.thetravel.it/msc/cruise/Q1EI/SX20270330GOAGOA",
              "price_from": 1298,
              "departure_date": "2027-03-30"
            }
          ]
        }
      ],
      "has_more": true,
      "search_window": {
        "date_to": "2027-04-30",
        "date_from": "2027-03-01"
      },
      "details_missing_for": []
    },
    "status": "success"
  }
}

About the Thetravel API

What the API covers

The API covers MSC and Costa cruise sailings listed on crociere.thetravel.it. Each record returned by search_cruises corresponds to a specific cruise itinerary with a selected departure date, and includes: cruise_line, cruise_code, departure_date (ISO format), price_from (total EUR for the full guest party, port taxes included), currency, ship name, departure port, itinerary stops and countries, and number of nights. Prices reflect the agency discount label shown on the site.

Filtering and pagination

search_cruises accepts filters for nights (cruise duration), date_from/date_to (ISO date window, both required when used), and guest composition broken down as adults (18+, minimum 1), children (2–11), juniors (12–17), and infants (0–1). Results are paginated via offset and limit, with limit clamped to a maximum of 20. The response includes total (site-level match count), has_more (boolean), and a search_window object reflecting the date range the site applied. If detail data could not be loaded for any cruise code, those codes are listed in details_missing_for.

Departure ports

list_sailing_ports takes a destination area code and returns an array of {port_code, name} pairs, where name is the Italian display label and port_code is a three-letter code accepted by search_cruises as a sailing_port filter. If the destination has no ports listed on the site, an empty ports array is returned alongside the echoed destination code.

Reliability & maintenance

The Thetravel API is a managed, monitored endpoint for crociere.thetravel.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when crociere.thetravel.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 crociere.thetravel.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?+
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
  • Build a cruise price tracker comparing MSC vs Costa sailings for a given destination and date range.
  • Populate a departure-port selector UI using list_sailing_ports for a given destination area code.
  • Alert users when a sailing matches a target night count and EUR price threshold using search_cruises with nights and price_from.
  • Aggregate cruise itinerary stop data across destinations to map coverage for Mediterranean or Caribbean routes.
  • Calculate per-person price by dividing price_from against total guest count (adults + children + juniors + infants) for comparison displays.
  • Paginate through all available sailings for a departure port using offset and has_more to build a complete inventory snapshot.
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 crociere.thetravel.it offer an official developer API?+
No. crociere.thetravel.it does not publish an official public API or developer documentation. This Parse API provides structured programmatic access to the cruise data the site exposes.
What does `details_missing_for` mean in the `search_cruises` response?+
details_missing_for is an array of cruise_code values for which ship name, departure port, or itinerary detail data could not be retrieved during that request. The cruise still appears in the cruises array with its price and date, but those detail fields may be null or incomplete for the listed codes.
Are cruise lines other than MSC and Costa covered?+
Not currently. The API covers MSC and Costa departures as listed on crociere.thetravel.it. You can fork it on Parse and revise it to add support for additional cruise lines if the source site adds them.
Can I filter by a specific departure port in `search_cruises`?+
Yes. Pass a sailing_port value (a three-letter port code) to search_cruises. Use list_sailing_ports with the relevant destination code first to obtain valid port codes and their Italian display names for that destination area.
Does the API return cabin categories, availability counts, or individual sailing schedules beyond a single departure date per record?+
Not currently. Each record in search_cruises represents one itinerary at one selected departure date with a single price_from figure. Cabin-level breakdown, availability counts, and multi-date sailing calendars are not exposed. You can fork the API on Parse and revise it to add an endpoint targeting those details if the source site surfaces them.
Page content last updated . Spec covers 2 endpoints from crociere.thetravel.it.
Related APIs in TravelSee all →