Providers - MikkoParkkola/trvl GitHub Wiki

Providers

trvl has 10 flight integrations, 6 hotel sources, 22 ground/ferry providers, airport-transfer estimates, and optional rental cars. No personal API key is required for the default flight, hotel, or ground paths. A provider that fails or times out reports a typed status; it does not silently turn a provider failure into "no results."

Flights

The default search merges Google Flights, Kiwi, and Skiplagged into one sorted list. The low-cost carriers and AFKLM are solo or opt-in paths.

Source How it's reached In default search?
Google Flights batchexecute (gRPC-over-HTTP) with Chrome TLS fingerprint Yes (default)
Kiwi MCP, virtual-interlining merge Yes (default)
Skiplagged MCP, hidden-city candidates Yes (--provider skiplagged to isolate)
Ryanair Public API Solo --provider ryanair search
Wizz Air Public unauthenticated API Solo --provider wizzair; self-heals on version rotation
easyJet Opt-in (EASYJET_API_BASE) No — public API is bot-defended; returns an honest "blocked" status until configured
Air France–KLM Flying Blue Offers API v3 Opt-in (award-availability scans)
Transavia Official API Opt-in
Vueling Availability API Opt-in (VUELING_API_BASE); public path is bot-defended
Norwegian Availability API Opt-in (NORWEGIAN_API_BASE); public path is bot-defended

All flight results are ranked on all-in price — checked-bag fees added, frequent-flyer benefits subtracted, currency normalized.

Hotels

Source How it's reached
Google Hotels batchexecute + AF_initDataCallback parsing
Booking.com Direct GraphQL (auto-detects browser cookies)
Airbnb Server-side render (Niobe cache)
Hostelworld Autocomplete + availability API
Trivago Streamable HTTP MCP
HomeToGo Public SSR + JSON (vacation rentals)

Use search_accommodations for traveller-facing stay decisions. It starts from the requested room/apartment type, occupancy, amenities, location, budget, currency, and refundability, then ranks only criteria-matched room-level offers. Broad search_hotels prices are discovery lead-ins unless verified by search_accommodations, search_hotels_with_details, hotel_rooms, or trvl serpapi.

Hotel results carry cancellation policy, explicit refundability, board type, fees, room metadata, and an upstream official-property-site signal where the provider exposes them. Missing values remain unknown. Price ordering does not use a manually maintained OTA reputation tier.

Ground transport — 22 providers in parallel

Provider Protocol Coverage From Auth
FlixBus REST Pan-European buses (40+ countries) €5+ None
RegioJet REST CZ/SK/AT/HU/DE/PL buses + trains €5+ None
Eurostar GraphQL London ↔ Paris/Brussels/Amsterdam/Cologne £39+ Browser cookies
Deutsche Bahn REST (Vendo) All European rail €37+ None
ÖBB REST (shop + HAFAS) Austrian Railjet + cross-border €38+ None
NS REST Dutch rail €5+ Public key (embedded)
VR GraphQL (Digitransit) Finnish rail €14+ Public key (embedded)
Renfe REST Spanish AVE + regional €36+ None
SNCF REST French TGV, TER, Intercity Varies None
Trainline REST Aggregated SNCF, DB, Eurostar, Trenitalia Varies None
Transitous MOTIS2 REST Pan-European transit (schedule-based) — None
Trenitalia REST Italian high-speed, intercity, and regional rail Varies None
Italo REST Italian high-speed rail Varies None
European Sleeper REST Night trains (Brussels–Berlin–Prague and more) €49+ None
Snälltåget REST Swedish + cross-border night trains €39+ None
Tallink REST Baltic ferries (Helsinki, Tallinn, Stockholm, Riga) €16+ None
Viking Line Schedule Baltic ferries (Helsinki, Tallinn, Stockholm, Turku) €22+ None
Eckerö Line Magento AJAX Helsinki ↔ Tallinn €19+ None
Finnlines REST Baltic + North Sea freight-passenger ferries €40+ None
Stena Line Schedule North Sea + Baltic €25+ None
DFDS REST North Sea + Baltic €49+ None
Ferryhopper REST Mediterranean + Aegean ferries Varies None

Airport transfers add taxi fare estimates on top.

Together, the 22 ground/ferry providers, airport-transfer estimates, and optional Skyscanner Car Hire make 24 marketed transport providers. Flight and hotel sources are separate rosters.

Browser and provider trust controls

Some protected hotel and rail paths reuse cookies from an installed browser, and disabling those reads can materially reduce results. TRVL_NO_BROWSER_COOKIES=1 disables the reads and prevents trvl from opening the user's browser. TRVL_NO_TIER2_CDP=1 separately disables the empty-profile headless fallback used to fetch fresh cookies after a bot challenge. The headless process reads no existing session, opens no window, and takes no focus. Visible-browser recovery is separate, provider-specific, and opt-in.

Optional provider definitions are reviewed files embedded in the binary. trvl providers enable <id> records consent for a shipped definition. Files under ~/.trvl/providers are retained for rollback but are not loaded or executed as of v1.21.0.

Rental cars

Provider How it's reached
Skyscanner Car Hire Opt-in (SKYSCANNER_API_KEY); returns a typed "not configured" status when the key is unset

Destination intelligence (free, keyless)

Used by destination_info, get_weather, and friends:

  • Open-Meteo (forecasts up to 14 days) · air quality · sunrise/sunset · bike-share availability
  • REST Countries · Nager.Date public holidays · travel-advisory safety · ExchangeRate currency

Rate limiting

Per-provider token buckets with exponential backoff on 429/5xx:

Provider Limit
FlixBus, RegioJet 10 req/s
Deutsche Bahn 1 req / 2s
SNCF, Transitous 1 req / 6s
Eurostar 1 req / 20s