Ticketcrociere APIticketcrociere.it ↗
Search cruise departures from ticketcrociere.it by company, ship, port, destination, price, and duration. Returns itinerary and pricing data via 2 endpoints.
What is the Ticketcrociere API?
The ticketcrociere.it API exposes 2 endpoints that cover cruise departure search across the Italian market. The search_cruises endpoint returns paginated departure records — up to 10 per page — filterable by company, ship, port, destination area, country, departure month, and price band. A companion list_search_filters endpoint returns the full filter vocabulary with IDs needed to drive those searches.
curl -X GET 'https://api.parse.bot/scraper/81f095a9-a362-4b97-b3aa-2ddf8607e4c7/list_search_filters?company_ids=1' \ -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 ticketcrociere-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: ticketcrociere cruise search — browse filters, then search departures."""
from parse_apis.ticketcrociere_it_api import (
Ticketcrociere, SortOrder, PriceRange, InputFormatInvalid,
)
client = Ticketcrociere()
# Fetch the full filter vocabulary (companies, destinations, ports, etc.)
filters = client.filter_catalogs.get()
for company in filters.companies:
print(company.id, company.name)
# Pick the first company and search its cheapest short cruises
company = filters.companies[0]
for cruise in client.cruises.search(
company_ids=company.id,
price_range=PriceRange.EUR_0_500,
sort=SortOrder.PRICE_ASC,
limit=5,
):
print(cruise.title, cruise.nights, "nights", cruise.price_from_eur, "EUR")
print(" stops:", " → ".join(cruise.itinerary_stops))
# Drill into one Mediterranean departure — guard against bad filter input
try:
med = client.cruises.search(
destination_ids=filters.destinations[0].id,
sort=SortOrder.DEPARTURE_ASC,
limit=1,
).first()
except InputFormatInvalid as e:
print("bad filter value:", e.message)
med = None
if med is not None:
print(med.title, "|", med.departure_date_text)
print("sold out:", med.sold_out, "ship:", med.ship_name)
if med.detail_url is not None:
print("details:", med.detail_url)
print("exercised: filter_catalogs.get / cruises.search")
Returns the vocabulary accepted by search_cruises: companies, ships (with their company), destination areas (sea or river), countries, departure ports, departure months, price bands and duration bands, each with the exact id to pass to search_cruises. One round trip. With no inputs it returns the full catalogue; passing the same filter inputs that search_cruises accepts narrows every list to the values still compatible with that selection (the site's contextual search menu), so e.g. passing one company id returns only that company's ships, ports and months. Lists are ordered as the site presents them. Unknown ids are accepted upstream and simply yield the unfiltered or empty lists.
| Param | Type | Description |
|---|---|---|
| periods | string | Comma-separated departure months in YYYYMM form (from periods[*].id), e.g. 202612 or 202701,202702. |
| duration | string | Cruise length band in nights (durations[*].id). |
| port_ids | string | Comma-separated departure port ids (from ports[*].id). |
| ship_ids | string | Comma-separated ship ids (from ships[*].id). |
| company_ids | string | Comma-separated cruise company ids (from companies[*].id), e.g. 2 or 1,2. Narrows the returned lists to that selection. |
| country_ids | string | Comma-separated country ids (from countries[*].id). |
| price_range | string | Per-person starting price band in EUR (price_ranges[*].id). |
| destination_ids | string | Comma-separated destination area ids (from destinations[*].id). |
{
"type": "object",
"fields": {
"ports": "array of {id, name, slug, country}; id is the value for port_ids",
"ships": "array of {id, name, slug, company_id, company_name}; id is the value for ship_ids",
"periods": "array of {id, name}; id is YYYYMM for the periods input, name is the Italian month label",
"companies": "array of {id, name, slug}; id is the value for company_ids",
"countries": "array of {id, name, slug}; id is the value for country_ids",
"durations": "array of {id, name}; id is the value for duration",
"destinations": "array of {id, name, slug, type}; type is 'Marittime' (sea) or 'Fluviali' (river); id is the value for destination_ids",
"price_ranges": "array of {id, name}; id is the value for price_range"
},
"sample": {
"data": {
"ports": [
{
"id": "10",
"name": "Ancona",
"slug": "ancona",
"country": "Italia"
}
],
"ships": [
{
"id": "24",
"name": "MSC Armonia",
"slug": "msc-armonia",
"company_id": "2",
"company_name": "MSC crociere"
}
],
"periods": [
{
"id": "202610",
"name": "ottobre 2026"
}
],
"companies": [
{
"id": "2",
"name": "MSC crociere",
"slug": "msc-crociere"
}
],
"countries": [
{
"id": "262",
"name": "Italia",
"slug": "italia"
}
],
"durations": [
{
"id": "7_10",
"name": "Da 7 a 10 notti"
}
],
"destinations": [
{
"id": "8",
"name": "Mediterraneo",
"slug": "mediterraneo",
"type": "Marittime"
},
{
"id": "48",
"name": "Rodano",
"slug": "rodano",
"type": "Fluviali"
}
],
"price_ranges": [
{
"id": "0_500",
"name": "Da 0 a 500 EUR"
}
]
},
"status": "success"
}
}About the Ticketcrociere API
What the API Covers
The API surfaces cruise departure listings from ticketcrociere.it, an Italian cruise booking platform. Each departure record in search_cruises maps to a specific sailing date of an itinerary and includes fields such as itinerary_code, departure_code, company and ship identity, departure port, destination, price, duration, and availability status (a null itinerary_code signals sold-out inventory). The endpoint returns total_count and total_pages alongside each page so you can walk the full result set.
Filtering and Pagination
search_cruises accepts any combination of company_ids, ship_ids, port_ids, destination_ids, country_ids, periods (YYYYMM month codes), duration (a night-band id), and a price_range band. All filters combine with AND. Multi-value filters accept comma-separated ids — for example company_ids=1,2 to match either company. Results are sorted via the sort parameter and paginated at a fixed page_size of 10; set page to walk forward, and check has_more to know whether more pages exist.
Filter Vocabulary via list_search_filters
list_search_filters is the companion endpoint that returns every accepted filter value with its id, name, and often a slug. It covers eight collections: companies, ships (each carrying its company_id and company_name), destinations (typed as Marittime for sea routes or Fluviali for river cruises), countries, ports (each with a country field), periods (Italian-labeled month names mapped to YYYYMM ids), durations, and price_ranges. You can pass the same subset of filters to list_search_filters to get a narrowed vocabulary — useful for building cascading UI dropdowns or validating filter combinations before calling search_cruises.
Language and Scope
Label fields such as period names and destination type strings (Marittime, Fluviali) are in Italian, reflecting the source platform. Coverage is limited to departures listed on ticketcrociere.it at the time of the request; the dataset represents the Italian cruise retail market as indexed by that site.
The Ticketcrociere API is a managed, monitored endpoint for ticketcrociere.it — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when ticketcrociere.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 ticketcrociere.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?+
- Build a cruise fare tracker that monitors price changes across specific ships or companies using
search_cruiseswithship_idsandcompany_ids. - Generate departure calendars by iterating
periodsfilter values returned fromlist_search_filtersand querying each month in turn. - Compare Mediterranean vs. river cruise inventory by filtering
destinationson typeMarittimevs.Fluviali. - Identify sold-out sailings by checking for null
itinerary_codein departure records returned bysearch_cruises. - Feed a cruise recommendation engine with departure, port, destination, duration, and price data from paginated
search_cruisesresults. - Populate cascading search UI dropdowns by passing active selections to
list_search_filtersto get contextually narrowed company, ship, and port lists. - Aggregate departure counts by port or company across all pages using
total_countfromsearch_cruisesresponses.
| 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.
Does ticketcrociere.it offer an official developer API?+
What does a single record in the `cruises` array actually contain?+
itinerary_code (null when the departure is sold out), a departure_code, company and ship identifiers, the departure port, destination, duration, per-person starting price, and the departure date. One itinerary with multiple sailing dates will appear as multiple separate records.How does the `list_search_filters` endpoint behave when filters are passed to it?+
company_ids or destination_ids, the endpoint narrows each returned collection to only the values that remain valid given those constraints. This lets you progressively refine a filter set — for example, passing a company_ids value will return only the ships and ports associated with that company rather than the full catalogue.Does the API return full itinerary details such as port call schedules, cabin categories, or onboard amenities?+
Is there a limit to how many results can be retrieved in one call?+
search_cruises returns a fixed page size of 10 departures per request. The response includes total_pages and has_more so you can iterate through the full result set page by page using the page parameter. There is no single-call option to return all matching departures at once.