Discover/Crocierissime API
live

Crocierissime APIcrocierissime.it ↗

Search cruises on Crocierissime.it by destination, port, ship, and dates. Get per-person EUR prices, cabin categories, and fare packages via 3 endpoints.

Endpoint health
monitored
get_cruise_prices
list_search_filters
search_cruises
Checks pendingself-healing
Endpoints
3
Updated
1h ago

What is the Crocierissime API?

The Crocierissime.it API gives programmatic access to the Italian cruise marketplace through 3 endpoints covering catalogue search, filter vocabulary, and per-cabin pricing. search_cruises returns one row per departure offer with the lowest per-person EUR price, ship details, cruise line, and itinerary metadata. get_cruise_prices drills into a specific offer to expose every cabin group, fare package, and category-level price grid including sold-out status.

This call costs2 credits / call— charged only on success
Try it
1-based page number.
Result ordering.
Latest departure date, ISO date YYYY-MM-DD (inclusive).
Comma-separated departure port ids from list_search_filters.ports[*].port_id (e.g. 443,466). The site treats some neighbouring ports as one group (Genova and Savona return the same set).
Comma-separated ship ids from list_search_filters.companies[*].ships[*].ship_id.
Earliest departure date, ISO date YYYY-MM-DD (inclusive).
Rows per page, maximum 50 (larger values are clamped).
Comma-separated cruise line ids from list_search_filters.companies[*].company_id (e.g. 2,5).
Per-person price band key as listed by list_search_filters.price_ranges (confirmed values: 0-450, 451-1000, 1001-2500, 2501+). Passed to the site unchecked; an unknown key yields an empty result.
Maximum cruise length in days (inclusive).
Minimum cruise length in days (inclusive).
Restrict to departures in one calendar month, format YYYY-MM. Use date_from/date_to instead for an arbitrary range.
Comma-separated destination ids: a macro-region id such as g-173 (from list_search_filters.destinations[*].destination_id), a sub-destination id such as g-173-71 (sub_destinations[*].destination_id), or the bare numeric form emitted in search results destinations[*].destination_id (e.g. 35). Example of one shape: 35,77.
→ api.parse.bot/scraper/d260be27-8ee0-4268-b16a-d4cc736e2ba2/<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/d260be27-8ee0-4268-b16a-d4cc736e2ba2/search_cruises?sort=PRICE_ASC&destination_ids=g-173' \
  -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 crocierissime-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: crocierissime.it cruise SDK — discover filters, search, then drill into prices."""
from parse_apis.crocierissime_it_api import Crocierissime, SortOrder, InputNotFound

client = Crocierissime()

# 1. Fetch the site's filter vocabulary (destinations, ports, companies).
filters = client.search_filters.get()
print(f"Catalogue size: {filters.total_cruises} cruises, currency: {filters.currency}")
for dest in filters.destinations[:3]:
    print(f"  {dest.destination_id}: {dest.name}")

# 2. Search cruises in the first destination, cheapest first.
first_dest = filters.destinations[0]
for cruise in client.cruises.search(
    destination_ids=first_dest.destination_id,
    sort=SortOrder.PRICE_ASC,
    limit=5,
):
    print(f"{cruise.name} — {cruise.ship_name}, {cruise.duration_days}d, €{cruise.price_per_person}/pp")

# 3. Drill down: take one cruise and list its departure price grid.
hit = client.cruises.search(
    destination_ids=first_dest.destination_id,
    sort=SortOrder.PRICE_ASC,
    limit=1,
).first()

if hit is not None:
    try:
        for dep in hit.departures.list(limit=3):
            best = dep.best_price
            print(
                f"Departure {dep.departure_date} — "
                f"{best.cabin_name} €{best.price_per_person}/pp, sold_out={dep.sold_out}"
            )
            for grp in dep.cabin_groups:
                print(f"  {grp.cabin_name} ({grp.cabin_group_code}): sold_out={grp.sold_out}")
    except InputNotFound:
        print(f"Cruise {hit.cruise_id} not found upstream")

print("exercised: search_filters.get / cruises.search / departures.list")
All endpoints · 3 totalmissing one? ·

Searches the cruise catalogue and returns one row per cruise departure offer with its lowest per-person price (EUR), ship, cruise line, departure port and date, duration and itinerary. All filters are optional and combine with AND; multi-value filters are comma-separated id lists taken from list_search_filters. Pagination is page/page_size (page_size is clamped to 50); total_count is the site's total for the filters and has_more tells whether a further page exists. A filter value the site does not know returns an empty cruises list with total_count 0. Default ordering is the site's popularity order (BEST_SELLER). other_departures lists sibling offers of the same itinerary starting at a different port, each with its own cruise_id usable in get_cruise_prices. One upstream round trip per call (plus a cheap configuration read).

Input
ParamTypeDescription
pageinteger1-based page number.
sortstringResult ordering.
date_tostringLatest departure date, ISO date YYYY-MM-DD (inclusive).
port_idsstringComma-separated departure port ids from list_search_filters.ports[*].port_id (e.g. 443,466). The site treats some neighbouring ports as one group (Genova and Savona return the same set).
ship_idsstringComma-separated ship ids from list_search_filters.companies[*].ships[*].ship_id.
date_fromstringEarliest departure date, ISO date YYYY-MM-DD (inclusive).
page_sizeintegerRows per page, maximum 50 (larger values are clamped).
company_idsstringComma-separated cruise line ids from list_search_filters.companies[*].company_id (e.g. 2,5).
price_rangestringPer-person price band key as listed by list_search_filters.price_ranges (confirmed values: 0-450, 451-1000, 1001-2500, 2501+). Passed to the site unchecked; an unknown key yields an empty result.
duration_maxintegerMaximum cruise length in days (inclusive).
duration_minintegerMinimum cruise length in days (inclusive).
departure_monthstringRestrict to departures in one calendar month, format YYYY-MM. Use date_from/date_to instead for an arbitrary range.
destination_idsstringComma-separated destination ids: a macro-region id such as g-173 (from list_search_filters.destinations[*].destination_id), a sub-destination id such as g-173-71 (sub_destinations[*].destination_id), or the bare numeric form emitted in search results destinations[*].destination_id (e.g. 35). Example of one shape: 35,77.
Response
{
  "type": "object",
  "fields": {
    "page": "integer, echoed page number",
    "cruises": "array of offers: cruise_id (string, use in get_cruise_prices), name, company_name, ship_name, ship_rating (0-5 float, 0 when unrated), review_count, departure_port, departure_date (YYYY-MM-DD), duration_days, price_per_person (lowest price, number), taxes, taxes_excluded, cabin_group_code of the priced cabin (int/ext/balcony/suite), full_board, flight_included, departs_from_italy, itinerary (ordered port names), destinations (destination_id + name), advantages (site promotional labels, Italian), other_departures (cruise_id + departure_port of the same itinerary from other ports), url (offer page)",
    "currency": "ISO currency code of all prices (EUR)",
    "has_more": "boolean, true when page*page_size < total_count",
    "page_size": "integer, effective rows per page after clamping",
    "total_count": "integer, site-wide number of offers matching the filters"
  },
  "sample": {
    "data": {
      "page": 1,
      "cruises": [
        {
          "url": "https://www.crocierissime.it/offerta-crociere/crociera-costa-crociere-costa-smeralda-isole-canarie-12219706",
          "name": "Isole Canarie, Madera, Spagna",
          "taxes": 0,
          "cruise_id": "12219706",
          "itinerary": [
            "St Cruz de Tenerife",
            "Funchal",
            "Arrecife",
            "Las Palmas",
            "Santa Cruz de la Palma",
            "St Cruz de Tenerife"
          ],
          "ship_name": "Costa Smeralda",
          "advantages": [
            "Bambini Gratis",
            "Mini Club bambini gratis",
            "All Inclusive disponibile"
          ],
          "full_board": true,
          "ship_rating": 4.445945739746094,
          "company_name": "Costa Crociere",
          "destinations": [
            {
              "name": "Isole Canarie",
              "destination_id": "77"
            }
          ],
          "review_count": 74,
          "duration_days": 7,
          "departure_date": "2027-01-10",
          "departure_port": "St Cruz de Tenerife",
          "taxes_excluded": false,
          "flight_included": true,
          "cabin_group_code": "int",
          "other_departures": [
            {
              "cruise_id": "12219608",
              "departure_port": "St Cruz de Tenerife"
            }
          ],
          "price_per_person": 579,
          "departs_from_italy": false
        }
      ],
      "currency": "EUR",
      "has_more": true,
      "page_size": 3,
      "total_count": 12
    },
    "status": "success"
  }
}

About the Crocierissime API

Searching the Cruise Catalogue

search_cruises accepts up to eight optional filters that combine with AND logic. Pass destination_ids, port_ids, company_ids, or ship_ids as comma-separated id strings sourced from list_search_filters. Date bounds use ISO YYYY-MM-DD format via date_from and date_to. Results are paginated with a maximum page_size of 50; the has_more flag and total_count field tell you whether additional pages exist. Each row in the cruises array includes cruise_id (needed for get_cruise_prices), name, company_name, ship_name, ship_rating (0–5 float, 0 when unrated), departure_port, departure_date, duration_nights, and the lowest per-person price in EUR.

Filter Vocabulary

Call list_search_filters once to retrieve every id you can pass to search_cruises. It returns destinations as a two-level hierarchy — macro-regions (destination_id prefixed g-NNN) with nested sub_destinations (prefixed g-NNN-MMM) that carry is_country and is_river flags. The companies array nests a ships list per cruise line, with ship_id, commissioning_year, and capacity. The endpoint also returns price_ranges, duration_ranges, and sort_options — the exact key strings accepted by search_cruises filters — plus the total_cruises count for the whole catalogue.

Cabin and Fare Pricing

get_cruise_prices takes a single required cruise_id and returns a departures array where each entry carries departure_date, operator_reference (the cruise line's own booking code), a sold_out flag, and best_price. Within each departure, cabin data is structured in three levels: cabin group (interior, outside, balcony, suite), fare packages per group with inclusion details, and individual cabin categories each with a per-person EUR price. A cabin with sold_out: true still appears in the response so you can see what was offered. The other_departures array on search results supplies additional cruise_id values for alternate sailing dates of the same voyage.

Reliability & maintenance

The Crocierissime API is a managed, monitored endpoint for crocierissime.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when crocierissime.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 crocierissime.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-alert tool that monitors search_cruises for a specific company_ids and date_from/date_to window and notifies users when the per-person price drops.
  • Populate a destination-picker UI by loading list_search_filters destinations hierarchy and mapping macro-regions to their sub-destinations including river cruise flags.
  • Compare cabin category prices across interior, outside, balcony, and suite groups for a given departure using get_cruise_prices fare package data.
  • Aggregate lowest per-person prices by cruise line by looping search_cruises with each company_ids value from list_search_filters.
  • Track cabin availability over time by polling get_cruise_prices and recording when sold_out changes from false to true for specific categories.
  • Filter Mediterranean vs. river cruise inventory by using is_river sub-destination flags from list_search_filters to segment destination_ids before calling search_cruises.
  • Surface the operator booking reference (operator_reference) alongside per-cabin prices to pre-fill a partner booking deep-link for a specific departure.
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 Crocierissime.it offer an official developer API?+
Crocierissime.it does not publish an official public developer API or documented data feed. This Parse API provides structured access to the data available on the site.
How do destination ids work in search_cruises, and where do I get them?+
Call list_search_filters first. It returns a destinations array of macro-regions each with a destination_id in the format g-NNN, and nested sub_destinations with ids like g-NNN-MMM. Pass one or more of those ids as a comma-separated string to the destination_ids parameter of search_cruises. The is_country and is_river flags on sub-destinations help you distinguish river itineraries from ocean routes.
What happens to sold-out cabins in get_cruise_prices?+
Sold-out cabin categories still appear in the response with a sold_out: true flag. The per-person price field is present so you can see the last listed rate, but the cabin is not bookable. This makes it possible to track inventory changes over successive calls.
Does the API return cruise reviews or user ratings beyond the ship_rating field?+
Not currently. The API exposes ship_rating (a 0–5 float per ship) from search_cruises, but individual user reviews, review counts, or detailed rating breakdowns are not included in any endpoint. You can fork this API on Parse and revise it to add an endpoint that retrieves review detail for a specific ship or cruise.
Is itinerary port-of-call detail available, such as the list of stops on a sailing?+
Not currently. search_cruises returns the departure port and overall itinerary name, and get_cruise_prices covers the pricing grid, but neither endpoint returns a day-by-day port sequence or stop list for the voyage. You can fork this API on Parse and revise it to add a dedicated itinerary endpoint that returns per-day port-of-call data.
Page content last updated . Spec covers 3 endpoints from crocierissime.it.
Related APIs in TravelSee all →