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: "84e0d5ef-55a2-43e5-9df2-dd1ad44c07c0") {
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: "7eddbf59-1318-4ae2-a8b3-7748fe99a280") {
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: "be99e034-12ce-4420-b2a3-3c6a219012f1"
selections: [{ fare: { id: "6d2ae2eb-7b39-4ea1-b9e2-d965fd9a41fa" } }]
) {
selections {
... on JourneyOfferSelection {
fares {
id
name
placePreference {
id
name
}
}
}
}
}
}
mutation SelectFare {
updateBooking(
id: "be99e034-12ce-4420-b2a3-3c6a219012f1"
selections: [{ fare: { id: "449c9666-8010-4b47-9a55-511a08db2d44" } }]
) {
selections {
... on JourneyOfferSelection {
fares {
id
name
placePreference {
id
name
}
}
}
}
}
}
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 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 the an Order
. See the details on how to query anything for more information.
Types of tickets
There are two types of tickets. An absolute majority of tickets are PDF files (Resource
) that the passenger can download and either show on their phone or print out.
Some carriers in the UK issue what is called Ticket On Departure. These tickets are not issued as PDF files but as a code that the passenger can use to fetch their tickets at the station from a ticketing machine. See TicketOnDeparture
for more information.
Example: Get tickets
graphql
query GetTickets {
node(id: "e985b4ed-1001-4559-bfcf-ad9c37b201b1") {
... on Order {
items {
... on JourneyOrderItem {
tickets {
... on Resource {
url
}
... on TicketOnDeparture {
description
}
}
}
}
}
}
}
query GetTickets {
node(id: "2b2b3130-d6c4-4284-8c16-986c68b11837") {
... on Order {
items {
... on JourneyOrderItem {
tickets {
... on Resource {
url
}
... on TicketOnDeparture {
description
}
}
}
}
}
}
}