Finding Rail Passes
Rail passes offer flexible travel across Europe. Instead of booking specific train tickets, passengers buy a pass that allows travel on multiple days within a validity period. Suited for multi-city trips or flexible itineraries.
What are Rail Passes?
Rail passes are flexible travel products that let passengers travel on multiple days within a set period. Popular examples include:
- Interrail/Eurail Global Pass: Travel across 33 European countries
- Interrail/Eurail One Country Passes: Travel within a single country
Passes work well when:
- Travelers want flexibility (not locked to specific trains)
- Planning multi-city trips
- Traveling extensively over several days or weeks
For single, fixed journeys, regular tickets are usually better. See Finding Journeys for ticket booking.
Understanding Pass Bundles
The API returns passes as bundles (PassBundle), which are optimized combinations of passes for your passengers. The API automatically finds the cheapest combination that covers everyone.
The API considers passenger ages, nationalities, and countries of residence to find the best deals.
Pass optimization
The API finds the cheapest combination of passes automatically. Including passenger nationality and countryResidence helps the API determine which passes are available (some passes are only for residents of certain countries).
Getting Pass Bundles
Use the getPassBundles query to find available passes for your passengers:
Example: Get all available passes
graphql
query GetInterrailBundles {
getPassBundles(passengers: [{ type: ADULT }, { type: YOUTH, age: 9 }]) {
id
class
product
price {
amount
currency
}
travelDayCount
validityPeriod
}
}query GetInterrailBundles {
getPassBundles(passengers: [{ type: ADULT }, { type: YOUTH, age: 9 }]) {
id
class
product
price {
amount
currency
}
travelDayCount
validityPeriod
}
}Filtering Pass Results
If you're looking for specific types of passes, use filters to narrow results:
Filter by Product
Filter by pass product type (e.g., Interrail Global Pass, Eurail One Country Pass):
Example: Get only Interrail Global Passes
graphql
query GetInterrailBundles {
getPassBundles(
passengers: [{ type: ADULT }]
filter: { product: "interrail-global-pass" }
) {
id
class
product
price {
amount
currency
}
travelDayCount
validityPeriod
}
}query GetInterrailBundles {
getPassBundles(
passengers: [{ type: ADULT }]
filter: { product: "interrail-global-pass" }
) {
id
class
product
price {
amount
currency
}
travelDayCount
validityPeriod
}
}Filter by Class
Filter by travel class (first class or second class):
Example: Get only first class passes
graphql
query GetInterrailBundles {
getPassBundles(passengers: [{ type: ADULT }], filter: { class: "1stclass" }) {
id
class
product
price {
amount
currency
}
travelDayCount
validityPeriod
}
}query GetInterrailBundles {
getPassBundles(passengers: [{ type: ADULT }], filter: { class: "1stclass" }) {
id
class
product
price {
amount
currency
}
travelDayCount
validityPeriod
}
}Filter by Campaign
Pass providers occasionally run promotional campaigns (e.g., Black Friday sales). By default, only non-campaign passes are returned. To include campaign passes, specify the campaign code:
Campaign conditions
Campaign passes often have specific conditions (refundability, validity periods, etc.). Check the pass details before selling campaign passes to ensure you understand the terms.
Example: Get Black Friday campaign passes
graphql
query GetInterrailBundles {
getPassBundles(
passengers: [{ type: ADULT }]
filter: { campaignCode: "black-friday", product: "interrail-global-pass" }
) {
id
class
product
price {
amount
currency
}
travelDayCount
validityPeriod
}
}query GetInterrailBundles {
getPassBundles(
passengers: [{ type: ADULT }]
filter: { campaignCode: "black-friday", product: "interrail-global-pass" }
) {
id
class
product
price {
amount
currency
}
travelDayCount
validityPeriod
}
}Comparing Passes to Tickets
A common question: should travelers buy a pass or individual tickets? The API can help answer this.
Use getPassBundlesForJourneyOffer to find passes that work for a specific journey. The API ensures:
- Passes are valid in all countries traveled through
- Passes have enough travel days for the journey
- Passes match the passenger requirements
This lets you show travelers both options and help them choose:
Example: Compare passes to tickets for a journey
graphql
query GetApplicablePassBundles {
getPassBundlesForJourneyOffer(
journeyOffer: "61452363-c759-4257-9c47-af536ee77f05"
passengers: [{ type: ADULT }]
) {
id
class
product
price {
amount
currency
}
travelDayCount
validityPeriod
}
}query GetApplicablePassBundles {
getPassBundlesForJourneyOffer(
journeyOffer: "418c2b62-da74-4ae6-91d5-4008c32b55d2"
passengers: [{ type: ADULT }]
) {
id
class
product
price {
amount
currency
}
travelDayCount
validityPeriod
}
}Compare the pass price to the ticket price to help travelers decide. Passes are usually better for multi-city trips, while tickets are better for single journeys.
Using the Rail Pass List Embed
For a ready-made user interface, consider using the Rail Pass List Embed. The embed provides a fully responsive list of rail passes that can be added to any website without any programming. You can configure which passes to show and users can select one of the passes to complete the purchase.
html
<aa-passbundle-list
publicApiKey="my-api-key"
product="interrail-global-pass"
currency="EUR"></aa-passbundle-list><aa-passbundle-list
publicApiKey="my-api-key"
product="interrail-global-pass"
currency="EUR"></aa-passbundle-list>Next Steps
Once you've found a pass bundle, see Booking Rail Passes to complete the purchase.