Garda Voyager APIgardavoyager.com ↗
Query live departure times, remaining seats, and per-party pricing for Garda Voyager Lake Garda experiences by date via a single REST endpoint.
What is the Garda Voyager API?
The Garda Voyager API exposes 1 endpoint — get_booking_availability — that returns 10 structured fields for any experience on gardavoyager.com, including departure times, live seat counts, per-party pricing, and day-level availability status for a requested calendar date. Pass an experience_slug, a date in ISO format, and an optional party breakdown (adults, children, infants) to get the full booking calendar record for that day without placing a reservation.
curl -X GET 'https://api.parse.bot/scraper/7d4aeb14-1e2e-471d-8bab-b56a302ec8bc/get_booking_availability?date=2026-10-10&experience_slug=lake-garda-cruise-from-peschiera-462' \ -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 gardavoyager-com-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: check Lake Garda experience availability and inspect departures."""
from parse_apis.gardavoyager_com_api import GardaVoyager, ExperienceNotFound
client = GardaVoyager()
# Check availability for a known cruise on a specific date with a custom party.
try:
avail = client.availabilities.check(
experience_slug="lake-garda-cruise-from-peschiera-462",
date="2026-10-04",
adults=2,
children=1,
)
except ExperienceNotFound:
print("Experience not found — check the slug")
raise SystemExit
print(avail.experience_title, "|", avail.day_status)
print("Duration:", avail.duration_text)
print("Cancellation:", avail.cancellation_policy)
print("Party:", avail.participants.adults, "adults,", avail.participants.children, "children")
print("Pricing categories:", ", ".join(avail.pricing_categories))
# Walk departures when the day is available.
if avail.date_availability_readable:
for dep in avail.departures:
print(
dep.start_time,
dep.total_price_text,
f"({dep.availability_count} seats left)",
)
for cat in dep.price_per_category:
print(f" {cat.category}: {cat.unit_price_text}")
else:
print("No departures on", avail.date)
print("exercised: availabilities.check")
Returns the booking calendar status of one Gardavoyager experience for one calendar date and one party composition. The result is a single day record: experience title, the public booking link the experience page points to, the day's availability status and a `departures` array with one entry per departure time offered that day, each carrying the live total price for the requested party (plus the per-category unit prices), the remaining seat count, the already-booked count and the minimum party size. `date_availability_readable` is true only when at least one departure is listed for that exact date; a date the calendar shows as not operating returns a successful result with `day_status` NOT_AVAILABLE and an empty `departures` array (this experience operates on selected days only, typically Sundays). Prices are the calendar's own figures in EUR for the party sent; counts default to two adults when no participant counts are given. Three round trips per call (experience page, product definition, month calendar). An unknown slug returns a not-found input error; nothing is submitted or booked.
| Param | Type | Description |
|---|---|---|
| daterequired | string | Calendar date to read, ISO YYYY-MM-DD, interpreted in the experience's local timezone (Europe/Rome). |
| adults | integer | Number of adult participants (0-30) used to price the calendar. |
| infants | integer | Number of infant participants (0-30). At least one participant across all categories is required. |
| children | integer | Number of child participants (0-30) used to price the calendar; the child age band is reported in `pricing_categories`. |
| experience_slugrequired | string | Last path segment of the experience page URL on the site (the part after /en/experience-at-lake-garda/), e.g. lake-garda-cruise-from-peschiera-462. Lower-case letters, digits and hyphens. |
{
"type": "object",
"fields": {
"date": "the requested date, ISO YYYY-MM-DD",
"timezone": "IANA timezone the departure times are expressed in",
"day_status": "calendar status of the whole day: AVAILABLE or NOT_AVAILABLE",
"departures": "array of departures that day; each has start_time (HH:MM local), status, availability_count (seats remaining), booked_count, closed, min_participants, total_price (number, for the whole party), currency, total_price_text, original_price_text, has_discount and price_per_category (array of category, unit_price_text, category_total_text)",
"booking_url": "public booking calendar link the experience page opens for 'Book now'",
"participants": "object with the adults/children/infants counts the prices were computed for",
"duration_text": "duration of the experience as text",
"experience_url": "public experience page on the site",
"experience_title": "name of the experience as shown in the booking calendar",
"pricing_categories": "array of participant category labels with their age bands",
"cancellation_policy": "title of the cancellation policy attached to the experience",
"date_availability_readable": "boolean, true when at least one departure is listed for the exact date"
},
"sample": {
"data": {
"date": "2026-10-04",
"timezone": "Europe/Rome",
"day_status": "AVAILABLE",
"departures": [
{
"closed": false,
"status": "AVAILABLE",
"currency": "EUR",
"start_time": "10:30",
"total_price": 116,
"booked_count": 0,
"has_discount": false,
"min_participants": 1,
"total_price_text": "€116.00",
"availability_count": 32,
"price_per_category": [
{
"category": "Adult",
"unit_price_text": "€58.00",
"category_total_text": "€58.00"
}
],
"original_price_text": "€116.00"
}
],
"booking_url": "https://widgets.bokun.io/online-sales/52a93856-2a34-4925-b997-aff7bd9a71b8/experience-calendar/1151539",
"participants": {
"adults": 2,
"infants": 0,
"children": 0
},
"duration_text": "4 hours",
"experience_url": "https://www.gardavoyager.com/en/experience-at-lake-garda/lake-garda-cruise-from-peschiera-462",
"experience_title": "Lake Garda Cruise from Peschiera",
"pricing_categories": [
"Adult (10 - 99)",
"Child (3 - 9)",
"Infant (0 - 2)"
],
"cancellation_policy": "Standard Viator policy",
"date_availability_readable": true
},
"status": "success"
}
}About the Garda Voyager API
What the API Returns
The get_booking_availability endpoint accepts two required parameters — experience_slug (the last path segment of any experience URL, e.g. lake-garda-cruise-from-peschiera-462) and date (ISO 8601 YYYY-MM-DD) — and returns a single-day record scoped to the Europe/Rome timezone. The top-level day_status field tells you immediately whether the day is AVAILABLE or NOT_AVAILABLE before you iterate the departures array.
Departure-Level Detail
Each object in the departures array carries a start_time in HH:MM local format, a per-departure status, an availability_count for remaining seats, a booked_count, and a closed flag. This lets you build time-slot pickers or trigger alerts when a specific departure reaches a seat threshold, without polling the booking page directly.
Party Composition and Pricing
Optional adults, children, and infants integer parameters (each 0–30, with at least one participant total) control how prices are computed. The response reflects those counts in the participants object and exposes pricing_categories — an array of participant category labels with their corresponding age bands, useful for rendering accurate category labels in a UI. The booking_url field returns the exact deep-link the experience page surfaces for its "Book now" button, so you can hand users directly to the checkout flow.
The Garda Voyager API is a managed, monitored endpoint for gardavoyager.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when gardavoyager.com 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 gardavoyager.com 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?+
- Display real-time seat availability for Lake Garda cruises on a travel aggregator by polling
availability_countper departure. - Send automated alerts when
availability_countdrops below a threshold for a high-demand experience slug. - Render a time-slot picker for a specific date using
start_timeandstatusfrom thedeparturesarray. - Calculate total trip cost for a family by passing
adults,children, andinfantscounts and reading the returned pricing data. - Check
day_statusacross a date range to surface the next available day for a particular experience. - Pre-populate a booking deep-link using the
booking_urlfield returned with each calendar response. - Validate child age-band labels in a booking UI by reading
pricing_categoriesfor each experience.
| 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 Garda Voyager offer an official developer API?+
What does `day_status` tell me and how does it relate to individual departures?+
day_status reflects the calendar-level availability for the whole requested date — either AVAILABLE or NOT_AVAILABLE. Even when day_status is AVAILABLE, individual objects in the departures array may carry their own status and closed flag, so a specific time slot can be full while others on the same day remain open.Can I retrieve availability for multiple dates or experiences in a single call?+
experience_slug and one date per request. Multi-date or multi-experience batch responses are not currently supported. You can fork this API on Parse and revise it to add a batch endpoint that loops over a date range or a list of slugs.Does the API return reviews, ratings, or experience descriptions?+
How current is the seat availability data?+
availability_count and booked_count values reflect the state of the public booking calendar at the time the request is made. There is no cached snapshot or scheduled refresh — each call reads the current calendar state for the requested date and experience.