FAB_BasketRQ
Once an itinerary has been chosen by the end user, it can be booked by creating a FAB Basket. The FAB_BasketRQ is an example of a FABRequestResponse but also requires one of the following:
CreateBasketRequest
In order to start the booking process a CreateBasketRequest is required. It must contain the Itinerary that will eventually be booked. A CreateBasketRequest will return with a response only once the TargetBookingStage has been reached except if more information is required to reach the target stage or if the ResponseTimeoutSecs has been reached.
CreateBasketRequest structure:
| Attribute or element | Mandatory? | Definition | Note |
|---|---|---|---|
@ResponseTimeoutSecs | No, has default of 0 | Non negative integer. If timeout is reached FAB will return the basket even if processing is not complete (so basket is still “active”). | FAB will continue to process in the background. Advisable to set no lower than 5 seconds. Generally set to the maximum time your consumer or operator is willing to wait for a response (with some margin for your own processing). |
@TargetBookingStage | No, default confirmed_costing | passenger_details or confirmed_costing | Can generally be left unset. If set to confirmed_costing (default) but PassengerDetails have not been provided then FAB will automatically stop at passenger_details stage instead. |
@ReplaceExistingBasket | No, default false | must be set to true if a Basket already exists in the current user session. | - |
Itinerary | Yes | List of ComponentIdentity to basket | - |
Itinerary/ComponentIdentity@Identity | Yes | String of component identity taken from search response. For flights this is the ItineraryId | Ampersand must be correctly encoded |
Itinerary/OptionalExtras | No | List of OptionalExtras to add/remove to the basket | - |
Itinerary/OptionalExtras/OptionalExtra[*] | No | An OptionalExtra to add/remove to the basket | - |
Itinerary/OptionalExtras/OptionalExtra[*]@Code | Yes | From OptionalExtra@Code FAB_BasketRS | - |
Itinerary/OptionalExtras/OptionalExtra[*]@Supplier | Yes | FAB supplier code of OptionalExtra | - |
Itinerary/OptionalExtras/OptionalExtra[*]@Quantity | Yes | Less than or equal to OptionalExtra@QuantityAvailable | Sometimes set to zero to remove an automatically selected optional extra. |
Itinerary/OptionalExtras/OptionalExtra[*]@Direction | Yes, if set on the respective extra in FAB_BasketRS | From OptionalExtra@Direction FAB_BasketRS | - |
PartyInfo@NumberOfAdults | Yes | Number of adults in party | Aged 16 years or older at datetime of itinerary, or for a return flight trip; at datetime of final flight. Note that this differs from FAB_PkgAvailRQ, hence YoungPersonAge is mandatory. |
PartyInfo@NumberOfInfants | Yes if infants are present | Number of infants in party | An infant is less than 2 years at datetime of itinerary, or for a return flight trip; at datetime of final flight. |
PartyInfo/YoungPersonAge[*] | Yes if young person is present | List of ages of every young person in the party | A young person is aged 2 years or older but less than 16 years old at datetime of itinerary or, for a return flight trip, at datetime of final flight. Excludes party members that have been counted by NumberOfAdults or NumberOfInfants. Can be approximate but this may cause price changes if it deviates greatly from later @DOB. |
PassengerDetails | No, but must be provided before booking | List containing exactly one LeadCustomer and zero or more Customer | - |
PassengerDetails/Customer[*]@Gender | No unless Title is non-gendered (Inf/Dr/Prof/Rev), but highly advised to always set. | Male or Female | If gender is set but does not match the title (e.g Male Miss) then unexpected behaviour may occur. |
PassengerDetails/Customer[*]@Nationality | Yes if NationalityMandatory="true" or PassengerIdMandatory="true" | ISO 3166-1 alpha-2 | - |
PassengerDetails/Customer[*]@Firstname | Yes | String | - |
PassengerDetails/Customer[*]@Surname | Yes | String | - |
PassengerDetails/Customer[*]@DOB | Yes | Date of birth, yyyyMMdd | - |
PassengerDetails/Customer[*]@Title | Yes | Inf Master Miss Ms Mrs Mr Dr Prof Rev | Non-gendered titles (Inf/Dr/Prof/Rev) can only be used if the Gender attribute is set |
PassengerDetails/Customer[*]@MiddleInitials | Yes, if passenger has middle name(s) | Middle name(s) of passenger | Note attribute’s reference to “Initials” is misleading/incorrect. Also note best to always set this attribute if passenger has middle name(s), regardless of PassengerFullMiddleNameMandatory. |
PassengerDetails/Customer[*]@PassengerID | Yes if PassengerIdMandatory="true" | String | Normally passport number |
PassengerDetails/Customer[*]@IDExpireDate | Yes if PassengerIdMandatory="true" | yyyyMMdd ID expiration date | - |
PassengerDetails/Customer[*]@IDIssueDate | Yes if PassengerIdMandatory="true" | yyyyMMdd ID issue date | - |
PassengerDetails/Customer[*]@FOID | Yes if PassengerIdMandatory="true" | See FOID table | Normally PP for passport |
PassengerDetails/Customer[*]@IDIssueCountry | Yes if PassengerIdMandatory="true" | ISO 3166-1 alpha-2 of issuing country | - |
PassengerDetails/Customer[*]@CountryOfResidence | Yes if PassengerIdMandatory="true" | ISO 3166-1 alpha-2 for country of residence | - |
PassengerDetails/Customer[*]/SeatOptions[*] | No | Element for selecting a seat per pax per flight | Can be repeated once per pax per flight. Populate based on FAB_BasketRS SeatOptions |
PassengerDetails/Customer[*]/SeatOptions[*]@FlightNumber | Yes if SeatOptions is desired | Flight number from FAB_BasketRS SeatOptions@FlightNumber | - |
PassengerDetails/Customer[*]/SeatOptions[*]@Supplier | Yes if set on FAB_BasketRS SeatOptions@Supplier | Supplier from FAB_BasketRS SeatOptions@Supplier | - |
PassengerDetails/Customer[*]/SeatOptions[*]@DeparturePoint | Yes if set on FAB_BasketRS SeatOptions@DeparturePoint | Supplier from FAB_BasketRS SeatOptions@DeparturePoint | - |
PassengerDetails/Customer[*]/SeatOptions[*]/Seat@Num | Yes if SeatOptions is desired | Num from FAB_BasketRS SeatOptions/Seat@Num | - |
PassengerDetails/Customer[*]/SeatOptions[*]/Seat@MeetsRestriction | no, default false | boolean, must be set to true if selected seat is Access="Restricted" and this customer meets that restriction | - |
PassengerDetails/Customer[*]/OptionalExtras | No | List of OptionalExtra to select for this specific passenger/customer | Cannot be used if the passenger is an infant. When used in FAB_BasketRS indicates what has been selected for this specific passenger/customer. |
PassengerDetails/Customer[*]/OptionalExtras/OptionalExtra[*] | No | See Itinerary/OptionalExtras/OptionalExtra[*] for structure | - |
PassengerDetails/LeadCustomer | Yes | Same structure as Customer | - |
PassengerDetails/LeadCustomer/ContactDetails | No | Contains contact details | How and when FAB uses this information will vary by supplier. By default FAB will avoid using it where possible. Contact Customer Services to find out more. |
PassengerDetails/LeadCustomer/ContactDetails@EmailAddress | No, unless basket contains Norse or Ryanair flight. | Contact email address | - |
PassengerDetails/LeadCustomer/ContactDetails@Telephone | No, unless basket contains a Norse, Ryanair, Wizzair or Jet2 flight. | E.164 formatted contact telephone number | E.g +441174960999 |
PassengerDetails/LeadCustomer/ContactDetails@MobilePhone | No, unless basket contains a Norse, Ryanair, Wizzair or Jet2 flight. | E.164 formatted contact mobile telephone number | E.g +441174960999. Only supported for select suppliers so generally advisable to set Telephone in addition. |
PassengerDetails/LeadCustomer/ContactDetails/Address | No, unless basket contains a Ryanair or Wizzair flight. | See Address. Contact address. | - |
Remarks | No | See Remarks. | See example |
@ConsumersReference | No | String | Allows syndicator to attach a reference that will be stored within the basket. |
Address
| Attribute or element | Mandatory? | Definition | Note |
|---|---|---|---|
| Address@Address1 | Yes | First line of the address | - |
| Address@Address2 | No | Second line of the address | - |
| Address@Address3 | No | Third line of the address | - |
| Address@Address4 | No | Fourth line of the address | - |
| Address@CityOrTown | Yes | Name of city or town | - |
| Address@PostCode | Yes | Post code or equivalent | - |
| Address@Country | Yes | ISO 3166-1 alpha-2 country code | - |
FOID
Tip
Passport (PP) is the most common Form Of ID required for FAB bookings.| FOID | Description |
|---|---|
| CC | Credit Card |
| FF | Frequent Flight number |
| NI | National Identity card |
| ID | Staff Id card |
| PP | Passport |
| GP | Group Passport |
| RD | Refugee Document |
| DL | Driving license |
Remarks
| Attribute or element | Mandatory? | Definition | Note |
|---|---|---|---|
| Remarks@Supplier | Yes | FAB supplier code of Remarks | - |
| Remarks@ComponentId | Mandatory for multi-component basket | Identifies component | Unique per basket. Used for multi-component flight baskets. |
| Remarks/Remark | No | Remark text | Not blank |
AmendBasketRequest
Once a basket has been created, it can only be changed through the use of an AmendBasketRequest.
| Attribute or element | Mandatory? | Definition | Note |
|---|---|---|---|
Itinerary/AmendOptionalExtras | No | List of OptionalExtras to add/remove to the basket | If used then you must list all optional extras that you wish to keep from the current basket, unlisted selected extras are removed. |
Itinerary/AmendOptionalExtras/OptionalExtra[*] | No | An OptionalExtra to add/remove to the basket | - |
Itinerary/AmendOptionalExtras/OptionalExtra[*]@Code | Yes | From OptionalExtra@Code FAB_BasketRS | - |
Itinerary/AmendOptionalExtras/OptionalExtra[*]@Supplier | Yes | FAB supplier code of OptionalExtra | - |
Itinerary/AmendOptionalExtras/OptionalExtra[*]@Quantity | Yes | Less than or equal to OptionalExtra@QuantityAvailable | Set to zero to remove an already selected optional extra. |
Itinerary/AmendOptionalExtras/OptionalExtra[*]@Direction | Yes, if set on the respective extra in FAB_BasketRS | From OptionalExtra@Direction FAB_BasketRS | - |
@ConsumersReference | No | String | Allows syndicator to attach a reference that will be stored within the basket. |
@BasketId | Yes | ID of basket to amend | - |
@TargetBookingStage | No, default confirmed_costing | passenger_details or confirmed_costing | Can generally be left unset unless you intend to amend the basket multiple times in which case set to to passenger_details and only change to confirmed_costing once you are ready to book as a confirmed_costing basket cannot be further amended. If set to confirmed_costing (default) but PassengerDetails have not been provided then FAB will automatically stop at passenger_details stage instead. |
@ResponseTimeoutSecs | No, default 30 | Non negative integer. If timeout is reached FAB will return the basket even if processing is not complete (so basket is still “active”). | FAB will continue to process in the background. Advisable to set no lower than 5 seconds. Generally set to the maximum time your consumer or operator is willing to wait for a response (with some margin for your own processing). |
Itinerary/PassengerDetails | No, but must be provided before booking | See PassengerDetails in CreateBasketRequest | - |
Remarks | No | See Remarks. | See example |
CheckBasketRequest
Used to poll an active basket until it becomes inactive.
| Attribute or element | Mandatory? | Definition | Note |
|---|---|---|---|
@BasketId | Yes | String of Basket ID you wish to check | - |
@ResponseTimeoutSecs | No, default 5 | Non negative integer. If timeout is reached FAB will return the basket even if processing is not complete (so basket is still “active”). | FAB will continue to process in the background. Advisable to set no lower than 5 seconds. Generally set to the maximum time your consumer or operator is willing to wait for a response (with some margin for your own processing). |
BookBasketRequest
In order to actually do the booking, the basket must be inactive at the confirmed_costing booking stage, at which point you can send a BookBasketRequest message. A Basket can only be booked once.
| Attribute or element | Mandatory? | Definition | Note |
|---|---|---|---|
@BasketId | Yes | String of Basket ID you wish to book | - |
@TotalCost | Yes | Expected total cost of booking | This is used to validate that you, fab, and the supplier(s) are agreed on the booking cost |
@ConsumersReference | No | String | Allows syndicator to attach a reference that will be stored within the basket. |
@ResponseTimeoutSecs | No, default 290 | Non negative integer. If timeout is reached FAB will return the basket even if processing is not complete, with success status of pending. | Generally set to the maximum time your consumer or operator is willing to wait for a response (with some margin for your own processing). |
Payment@PaymentMode | Yes | Enum indicating how you wish to pay the supplier | See PaymentMode section |
Payment@PayOnlyDeposit | No, default false | boolean | Deprecated |
Payment/PaymentCard | Yes if PaymentMode="card_payment_override_lodged" | - | - |
Payment/PaymentCard@CardNumber | Yes | The card number | - |
Payment/PaymentCard@ExpiryDate | Yes | MMyy | - |
Payment/PaymentCard@Authorisation | Yes | Describes how the card payment should be authorised | Should be set to cv2_only |
Payment/PaymentCard@CardType | Yes | See CardType | - |
Payment/PaymentCard@CardHoldersName | Yes | the full name of the card holder as it appears on the card | - |
Payment/PaymentCard@IssueDate | No | MMyy | - |
Payment/PaymentCard@Cv2SecurityNumber | Yes | 3 or 4 digit cv2 | - |
Payment/PaymentCard@CardHoldersTelephoneNumber | No | E.164 formatted telephone number | E.g +441174960999. How and when FAB uses this information will vary by supplier. Contact Customer Services to find out more. |
Payment/PaymentCard@CardHoldersEmailAddress | No | - | How and when FAB uses this information will vary by supplier. Contact Customer Services to find out more. |
Payment/PaymentCard/CardHoldersAddress | Yes | See Address | How and when FAB uses this information will vary by supplier. Contact Customer Services to find out more. |
Component | No | Provides additional controls over the booking, e.g to make a held booking | Must list all components or none. |
Component[*]@ComponentId | Yes | Identifies component | Unique per basket |
Component[*]@CurrentBookingStage | No | confirmed_costing | - |
Component[*]@Supplier | Yes | Supplier code of component | - |
Component[*]@TargetTicketingStatus | No | confirmed or held. If supported allows control over ticket status | See example |
Remarks | No | See Remarks. | See example |
Note
If passing in a card, only cards exempt from SCA (Strong Customer Authentication) are supported.PaymentMode
| PaymentMode | Description |
|---|---|
| syndicator_deferred | Indicates that FAB should handle any required supplier payments. This could by generating Pax2Pay virtual cards or by sending account details (e.g BSP Cash). |
| card_payment_override_lodged | Indicates that any required card payments to supplier should be made with the passed in card. |
FAB Payment Card Type
| CardType | Note |
|---|---|
| American_Express | - |
| American_Express_Corporate | - |
| Debit_Mastercard | - |
| Laser | - |
| Maestro | - |
| Mastercard | - |
| Mastercard_Credit_Corporate | - |
| Mastercard_Debit_Corporate | - |
| Pre_Paid_Mastercard | - |
| Solo | - |
| Switch | - |
| Visa_Credit | - |
| Visa_Credit_Corporate | - |
| Visa_Debit | - |
| Visa_Debit_Corporate | - |
| Visa_Delta | - |
| Visa_Electron | - |
| Diners_Club | - |
| JCB | - |
| UATP | - |
| IATA_Easy_Pay | - |
FAB Card Authorisation Modes
| Mode | Description |
|---|---|
| card_only | Neither CV2 nor AVS are carried out, only the card number and expiry dates are checked |
| cv2_only | Only card number, dates, and CV2 number is checked |
| address_only | Only card number, dates, address is checked |
| postcode_only | Only card number, dates, and postcode is checked |
| cv2_and_address | Only card number, dates, CV2 number, and address is checked |
| cv2_and_postcode | Only card number, dates, CV2 number, and postcode is checked |
| address_and_postcode | Only card number, dates, postcode, and address is checked |
| all | All checks are performed and must all pass |