Booking Tickets

A booking is created by calling createBooking with a JourneyOffer id. The returned booking will include information on passenger details required to complete the booking.

Prefer WebSocket

When creating a booking for a JourneyOffer availability of fares needs to be verified and so the request can be slow and is recommended to be done over WebSocket.

Example: Create a booking
graphql
mutation CreateBooking {
  createBooking(journeyOffer: "d84d7fef-b2d0-495d-beaf-7ae916697779") {
    id
    passengers {
      id
      age
      type
    }
    requirements {
      passportNumber
      dateOfBirth
      nationality
      email
      tel
    }
    selections {
      ... on JourneyOfferSelection {
        fares {
          id
          name
          price {
            amount
            currency
          }
        }
        journey {
          ... on JourneySelection {
            itinerary {
              ... on Stopover {
                location {
                  name
                }
              }
              ... on SegmentCollection {
                status
                segments {
                  departureAt
                  arrivalAt
                  origin {
                    name
                  }
                  destination {
                    name
                  }
                }
                fares {
                  id
                  name
                  price {
                    amount
                    currency
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}
mutation CreateBooking {
  createBooking(journeyOffer: "6a9dd5ff-fb9c-43fd-b604-6ef104f4060a") {
    id
    passengers {
      id
      age
      type
    }
    requirements {
      passportNumber
      dateOfBirth
      nationality
      email
      tel
    }
    selections {
      ... on JourneyOfferSelection {
        fares {
          id
          name
          price {
            amount
            currency
          }
        }
        journey {
          ... on JourneySelection {
            itinerary {
              ... on Stopover {
                location {
                  name
                }
              }
              ... on SegmentCollection {
                status
                segments {
                  departureAt
                  arrivalAt
                  origin {
                    name
                  }
                  destination {
                    name
                  }
                }
                fares {
                  id
                  name
                  price {
                    amount
                    currency
                  }
                }
              }
            }
          }
        }
      }
    }
  }
}

Having successfully created a booking does not mean that the tickets have been prebooked. An order needs to be created to hold the tickets for you before finalizing the order. Refer to the expiresAt field of a Booking to see how long you have to create an order.

Selecting Fares

The booking will include the JourneyOfferSelection which contains details on the fares available for each segment of the journey. When first creating a booking an initial selection is automatically made, these are usually the most affordable fares but please note that this is not guaranteed.

To select a fare you update the booking with the selection(s) you wish to make.

Example: Selecting fares
graphql
mutation SelectFare {
  updateBooking(
    id: "0f275ad0-dd57-4ab4-a0d9-9b28d13285f3"
    selections: [{ fare: { id: "95c0c79c-666f-4fd9-aa94-ebcc9bf46049" } }]
  ) {
    selections {
      ... on JourneyOfferSelection {
        fares {
          id
          name
          placePreference {
            id
            name
          }
        }
      }
    }
  }
}
mutation SelectFare {
  updateBooking(
    id: "0f275ad0-dd57-4ab4-a0d9-9b28d13285f3"
    selections: [{ fare: { id: "706bf1b3-951b-4428-9dbc-c6526522e341" } }]
  ) {
    selections {
      ... on JourneyOfferSelection {
        fares {
          id
          name
          placePreference {
            id
            name
          }
        }
      }
    }
  }
}

Updating Passengers

Before a booking can be confirmed you need to provide passenger details. The booking will include the PassengerRequirements for the passengers.

Contact person

At least one passenger needs to be marked as the contact person. The contact persons details will be forwarded to the train carrier and is the person that will be contacted in case of any issues.

Example: Updating passengers
graphql
mutation UpdatePassengers {
  updateBooking(
    id: "0f275ad0-dd57-4ab4-a0d9-9b28d13285f3"
    passengers: [
      {
        id: "79bcac53-66b3-4617-80af-6de0a65c68f9"
        email: "jane.doe@example.com"
        isContactPerson: true
        birthDate: "1980-02-15"
        nationality: "NL"
        firstName: "Jane"
        lastName: "Doe"
        title: MS
      }
    ]
  ) {
    id
    passengers {
      ... on FullPassenger {
        id
        isContactPerson
        email
        birthDate
        nationality
        firtName
        lastName
        title
      }
    }
  }
}
mutation UpdatePassengers {
  updateBooking(
    id: "0f275ad0-dd57-4ab4-a0d9-9b28d13285f3"
    passengers: [
      {
        id: "79bcac53-66b3-4617-80af-6de0a65c68f9"
        email: "jane.doe@example.com"
        isContactPerson: true
        birthDate: "1980-02-15"
        nationality: "NL"
        firstName: "Jane"
        lastName: "Doe"
        title: MS
      }
    ]
  ) {
    id
    passengers {
      ... on FullPassenger {
        id
        isContactPerson
        email
        birthDate
        nationality
        firtName
        lastName
        title
      }
    }
  }
}

Create Order

Once you have a booking with all the fares selected and passengers updated, you can create an order. There are two ways of creating an order; either by creating a payment or by manually creating an order. The latter is a privileged operation and requires a special commercial configuration.

Get tickets

Once an order has been finalized tickets are automatically issued. Tickets come in several formats, depending on the carrier. The most common format is PDF but some train carriers will provide check-in link or a code that allows the passengers to fetch their tickets at the station from a ticketing machine.

Ticket issuing time

It may take 15 minutes or more for the tickets to be issued and collected from the train carriers.

Just like with all types that implement the Node interface, you can use the node query to fetch an Order. See the details on how to query anything for more information.

Example: Get tickets
graphql
query GetTickets {
  node(id: "d7b502f9-f040-4dc4-9298-e93ccce8528b") {
    ... on Order {
      items {
        ... on JourneyOrderItem {
          resources {
            ... on PdfTicket {
              url
            }
            ... on CheckInResource {
              url
            }
            ... on TicketOnDeparture {
              reference
              description
            }
          }
        }
      }
    }
  }
}
query GetTickets {
  node(id: "9668e704-2c6e-4417-8075-fc0f4fba4d4e") {
    ... on Order {
      items {
        ... on JourneyOrderItem {
          resources {
            ... on PdfTicket {
              url
            }
            ... on CheckInResource {
              url
            }
            ... on TicketOnDeparture {
              reference
              description
            }
          }
        }
      }
    }
  }
}

PDF Tickets

There are several types of tickets. An absolute majority of tickets are PDF files that the passenger can download and either show on their phone or print out before departure. See PdfTicket.

Check-in Resource

Some carriers do not issue tickets automatically but require a check-in via a website before departure. Additional information may need to be provided via this website before it's possible to check in and issue the ticket. See CheckInResource.

Ticket On Departure

Some carriers in the UK issue what is called a Ticket On Departure. These tickets are not issued as PDF files but as a ticket collection reference that the passenger can use to get their tickets at the station from a ticketing machine. See TicketOnDeparture for more information.