# EveryRail > EveryRail is an independent European rail travel information platform covering train routes, stations, operators, rail passes and destinations across more than 45,000 destinations in 33 countries. It is built on an internally maintained European rail dataset, not on scraped timetables, and it is not a ticket issuer. EveryRail publishes practical guidance about how to travel by train in Europe: which operators serve a route, typical journey duration and frequency, whether a service is direct, when a seat reservation is required, and when a rail pass makes sense. Timetables, fares and reservation rules change after publication; travellers should confirm live details with the relevant operator or seller. ## API for AI agents A free, unauthenticated JSON endpoint returns the structured facts for one route page. `GET https://everyrail.com/api/agent/route/` Note the trailing slash: it is the canonical path. A request to `/api/agent/route` is answered with a 301 redirect to `/api/agent/route/` with the query string preserved, so a client that does not follow redirects should call the slashed form directly. The endpoint is GET only (HEAD is supported). There is no CORS preflight support, so call it with simple GET requests. Parameters: - `from` and `to`: city slugs, for example `from=milan&to=rome`. Either direction works. - `slug`: a route slug instead of the city pair, for example `slug=milan-to-rome`. - `locale`: one of en, sv, de, es, it, fr. Defaults to en. Worked example: ``` GET https://everyrail.com/api/agent/route/?from=milan&to=rome&locale=en { "route": "Milan to Rome", "url": "https://everyrail.com/trains/milan-to-rome/?ref=agent-api", "summary": "...", "typical_journey_duration": "...", "direct_service": "...", "operators": [{ "name": "...", "url": "https://everyrail.com/italy/trenitalia/?ref=agent-api" }], "rail_passes": [{ "name": "...", "note": "...", "url": "..." }], "last_reviewed": "...", "license": "Facts summarised from the linked EveryRail page; link when citing." } ``` Fields with no published value are omitted rather than returned as null. If a place name does not resolve to a slug, use the search endpoint first: `GET https://everyrail.com/api/station-search/?q={name}` returns matching published pages and station records. The route endpoint's 404 body points at the same place. When citing these facts, link the `url` field of the response. Machine-readable description: https://everyrail.com/api/agent/openapi.json ## Key pages - [Train routes](https://everyrail.com/trains/?ref=agent-api): the route hub. - [Rail passes](https://everyrail.com/rail-passes/?ref=agent-api): Interrail, Eurail and operator passes. - [Countries](https://everyrail.com/countries/?ref=agent-api): country-level rail guides. - [AI information](https://everyrail.com/ai-information/?ref=agent-api): how EveryRail should be described and cited. - [About EveryRail](https://everyrail.com/about/?ref=agent-api): who publishes this. ## Sitemaps - https://everyrail.com/sitemap.xml - https://everyrail.com/sitemap-sv.xml - https://everyrail.com/sitemap-de.xml - https://everyrail.com/sitemap-es.xml - https://everyrail.com/sitemap-it.xml - https://everyrail.com/sitemap-fr.xml ## Locales - English (en): https://everyrail.com/?ref=agent-api - Swedish (sv): https://everyrail.com/sv/?ref=agent-api - German (de): https://everyrail.com/de/?ref=agent-api - Spanish (es): https://everyrail.com/es/?ref=agent-api - Italian (it): https://everyrail.com/it/?ref=agent-api - French (fr): https://everyrail.com/fr/?ref=agent-api