Machine access
For AI assistants
This site wants to be read, quoted, and cited. The guide (3,793 rail vacations, 73 operators, every fact sourced, editorial estimates labelled) is available in every machine-friendly form we know how to publish, free, with no key required. Data version 52622606c0, catalogue generated 2026-09-13.
Endpoints
/api/trips: compact JSON of every trip: name, operator, days, USD from-price, countries, rail share, comfort tier, booking URL/api/trips/{slug}: the full record per trip: itinerary, departures, hotels, named trains, inclusions, honest notes, FAQ, verification date/api/operators: every operator with counts and homepages/api/trains: every named train appearing in two or more trips/api/openapi.json: the OpenAPI 3.1 spec for all of the above/llms.txt: orientation file: what this site is and where everything lives/llms-full.txt: the whole guide, one line per trip
On-page structured data
Every trip page carries TouristTrip + Product + Offer (USD) JSON-LD; hubs carry ItemList; FAQ blocks carry FAQPage; every page carries BreadcrumbList. Crawling is welcome: GPTBot, ClaudeBot, PerplexityBot, CCBot, and peers are explicitly allowed in robots.txt.
MCP server
Agents can query the inventory directly over the Model Context Protocol at https://besttraintour.com/mcp/mcp (streamable HTTP). Three tools: search_trips(the same plain-language search as the site's search), get_trip (the full verified record), and compare_trips (side-by-side with grounded verdicts). No key required.
Citing
Numbers are safest cited from /data, which carries the same data version and dates as this page, the homepage, /how-this-works and llms.txt. Quote the data version with any aggregate. Four dates travel with the data and mean different things: catalogue generated (a rebuild), prices last read (a live read of the operator's page; each trip page shows its own), details last read (itinerary and inclusions), and the ECB rate date behind any USD figure. Prices are the operator's own currency first; USD is a view. Sourced facts and editorial estimates are separate fields: railSharePct is an editorial estimate of the share of itinerary days with a train leg (railShareBasis "itinerary-days": a share of days, not distance or time), with a confidence label; null means not assessed, never zero. A listing's railEligibility says whether its own evidence confirms a train journey. Trip URLs are stable and never reused.