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 elementMandatory?DefinitionNote
@ResponseTimeoutSecsNo, has default of 0Non 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).
@TargetBookingStageNo, default confirmed_costingpassenger_details or confirmed_costingCan 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.
@ReplaceExistingBasketNo, default falsemust be set to true if a Basket already exists in the current user session.-
ItineraryYesList of ComponentIdentity to basket-
Itinerary/ComponentIdentity@IdentityYesString of component identity taken from search response. For flights this is the ItineraryIdAmpersand must be correctly encoded
Itinerary/OptionalExtrasNoList of OptionalExtras to add/remove to the basket-
Itinerary/OptionalExtras/OptionalExtra[*]NoAn OptionalExtra to add/remove to the basket-
Itinerary/OptionalExtras/OptionalExtra[*]@CodeYesFrom OptionalExtra@Code FAB_BasketRS-
Itinerary/OptionalExtras/OptionalExtra[*]@SupplierYesFAB supplier code of OptionalExtra-
Itinerary/OptionalExtras/OptionalExtra[*]@QuantityYesLess than or equal to OptionalExtra@QuantityAvailableSometimes set to zero to remove an automatically selected optional extra.
Itinerary/OptionalExtras/OptionalExtra[*]@DirectionYes, if set on the respective extra in FAB_BasketRSFrom OptionalExtra@Direction FAB_BasketRS-
PartyInfo@NumberOfAdultsYesNumber of adults in partyAged 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@NumberOfInfantsYes if infants are presentNumber of infants in partyAn 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 presentList of ages of every young person in the partyA 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.
PassengerDetailsNo, but must be provided before bookingList containing exactly one LeadCustomer and zero or more Customer-
PassengerDetails/Customer[*]@GenderNo unless Title is non-gendered (Inf/Dr/Prof/Rev), but highly advised to always set.Male or FemaleIf gender is set but does not match the title (e.g Male Miss) then unexpected behaviour may occur.
PassengerDetails/Customer[*]@NationalityYes if NationalityMandatory="true" or PassengerIdMandatory="true"ISO 3166-1 alpha-2-
PassengerDetails/Customer[*]@FirstnameYesString-
PassengerDetails/Customer[*]@SurnameYesString-
PassengerDetails/Customer[*]@DOBYesDate of birth, yyyyMMdd-
PassengerDetails/Customer[*]@TitleYesInf Master Miss Ms Mrs Mr Dr Prof RevNon-gendered titles (Inf/Dr/Prof/Rev) can only be used if the Gender attribute is set
PassengerDetails/Customer[*]@MiddleInitialsYes, if passenger has middle name(s)Middle name(s) of passengerNote 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[*]@PassengerIDYes if PassengerIdMandatory="true"StringNormally passport number
PassengerDetails/Customer[*]@IDExpireDateYes if PassengerIdMandatory="true"yyyyMMdd ID expiration date-
PassengerDetails/Customer[*]@IDIssueDateYes if PassengerIdMandatory="true"yyyyMMdd ID issue date-
PassengerDetails/Customer[*]@FOIDYes if PassengerIdMandatory="true"See FOID tableNormally PP for passport
PassengerDetails/Customer[*]@IDIssueCountryYes if PassengerIdMandatory="true"ISO 3166-1 alpha-2 of issuing country-
PassengerDetails/Customer[*]@CountryOfResidenceYes if PassengerIdMandatory="true"ISO 3166-1 alpha-2 for country of residence-
PassengerDetails/Customer[*]/SeatOptions[*]NoElement for selecting a seat per pax per flightCan be repeated once per pax per flight. Populate based on FAB_BasketRS SeatOptions
PassengerDetails/Customer[*]/SeatOptions[*]@FlightNumberYes if SeatOptions is desiredFlight number from FAB_BasketRS SeatOptions@FlightNumber-
PassengerDetails/Customer[*]/SeatOptions[*]@SupplierYes if set on FAB_BasketRS SeatOptions@SupplierSupplier from FAB_BasketRS SeatOptions@Supplier-
PassengerDetails/Customer[*]/SeatOptions[*]@DeparturePointYes if set on FAB_BasketRS SeatOptions@DeparturePointSupplier from FAB_BasketRS SeatOptions@DeparturePoint-
PassengerDetails/Customer[*]/SeatOptions[*]/Seat@NumYes if SeatOptions is desiredNum from FAB_BasketRS SeatOptions/Seat@Num-
PassengerDetails/Customer[*]/SeatOptions[*]/Seat@MeetsRestrictionno, default falseboolean, must be set to true if selected seat is Access="Restricted" and this customer meets that restriction-
PassengerDetails/Customer[*]/OptionalExtrasNoList of OptionalExtra to select for this specific passenger/customerCannot 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[*]NoSee Itinerary/OptionalExtras/OptionalExtra[*] for structure-
PassengerDetails/LeadCustomerYesSame structure as Customer-
PassengerDetails/LeadCustomer/ContactDetailsNoContains contact detailsHow 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@EmailAddressNo, unless basket contains Norse or Ryanair flight.Contact email address-
PassengerDetails/LeadCustomer/ContactDetails@TelephoneNo, unless basket contains a Norse, Ryanair, Wizzair or Jet2 flight.E.164 formatted contact telephone numberE.g +441174960999
PassengerDetails/LeadCustomer/ContactDetails@MobilePhoneNo, unless basket contains a Norse, Ryanair, Wizzair or Jet2 flight.E.164 formatted contact mobile telephone numberE.g +441174960999. Only supported for select suppliers so generally advisable to set Telephone in addition.
PassengerDetails/LeadCustomer/ContactDetails/AddressNo, unless basket contains a Ryanair or Wizzair flight.See Address. Contact address.-
RemarksNoSee Remarks.See example
@ConsumersReferenceNoStringAllows syndicator to attach a reference that will be stored within the basket.

Address

Attribute or elementMandatory?DefinitionNote
Address@Address1YesFirst line of the address-
Address@Address2NoSecond line of the address-
Address@Address3NoThird line of the address-
Address@Address4NoFourth line of the address-
Address@CityOrTownYesName of city or town-
Address@PostCodeYesPost code or equivalent-
Address@CountryYesISO 3166-1 alpha-2 country code-

FOID

FOIDDescription
CCCredit Card
FFFrequent Flight number
NINational Identity card
IDStaff Id card
PPPassport
GPGroup Passport
RDRefugee Document
DLDriving license

Remarks

Attribute or elementMandatory?DefinitionNote
Remarks@SupplierYesFAB supplier code of Remarks-
Remarks@ComponentIdMandatory for multi-component basketIdentifies componentUnique per basket. Used for multi-component flight baskets.
Remarks/RemarkNoRemark textNot blank

AmendBasketRequest

Once a basket has been created, it can only be changed through the use of an AmendBasketRequest.

Attribute or elementMandatory?DefinitionNote
Itinerary/AmendOptionalExtrasNoList of OptionalExtras to add/remove to the basketIf 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[*]NoAn OptionalExtra to add/remove to the basket-
Itinerary/AmendOptionalExtras/OptionalExtra[*]@CodeYesFrom OptionalExtra@Code FAB_BasketRS-
Itinerary/AmendOptionalExtras/OptionalExtra[*]@SupplierYesFAB supplier code of OptionalExtra-
Itinerary/AmendOptionalExtras/OptionalExtra[*]@QuantityYesLess than or equal to OptionalExtra@QuantityAvailableSet to zero to remove an already selected optional extra.
Itinerary/AmendOptionalExtras/OptionalExtra[*]@DirectionYes, if set on the respective extra in FAB_BasketRSFrom OptionalExtra@Direction FAB_BasketRS-
@ConsumersReferenceNoStringAllows syndicator to attach a reference that will be stored within the basket.
@BasketIdYesID of basket to amend-
@TargetBookingStageNo, default confirmed_costingpassenger_details or confirmed_costingCan 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.
@ResponseTimeoutSecsNo, default 30Non 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/PassengerDetailsNo, but must be provided before bookingSee PassengerDetails in CreateBasketRequest-
RemarksNoSee Remarks.See example

CheckBasketRequest

Used to poll an active basket until it becomes inactive.

Attribute or elementMandatory?DefinitionNote
@BasketIdYesString of Basket ID you wish to check-
@ResponseTimeoutSecsNo, default 5Non 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 elementMandatory?DefinitionNote
@BasketIdYesString of Basket ID you wish to book-
@TotalCostYesExpected total cost of bookingThis is used to validate that you, fab, and the supplier(s) are agreed on the booking cost
@ConsumersReferenceNoStringAllows syndicator to attach a reference that will be stored within the basket.
@ResponseTimeoutSecsNo, default 290Non 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@PaymentModeYesEnum indicating how you wish to pay the supplierSee PaymentMode section
Payment@PayOnlyDepositNo, default falsebooleanDeprecated
Payment/PaymentCardYes if PaymentMode="card_payment_override_lodged"--
Payment/PaymentCard@CardNumberYesThe card number-
Payment/PaymentCard@ExpiryDateYesMMyy-
Payment/PaymentCard@AuthorisationYesDescribes how the card payment should be authorisedShould be set to cv2_only
Payment/PaymentCard@CardTypeYesSee CardType-
Payment/PaymentCard@CardHoldersNameYesthe full name of the card holder as it appears on the card-
Payment/PaymentCard@IssueDateNoMMyy-
Payment/PaymentCard@Cv2SecurityNumberYes3 or 4 digit cv2-
Payment/PaymentCard@CardHoldersTelephoneNumberNoE.164 formatted telephone numberE.g +441174960999. How and when FAB uses this information will vary by supplier. Contact Customer Services to find out more.
Payment/PaymentCard@CardHoldersEmailAddressNo-How and when FAB uses this information will vary by supplier. Contact Customer Services to find out more.
Payment/PaymentCard/CardHoldersAddressYesSee AddressHow and when FAB uses this information will vary by supplier. Contact Customer Services to find out more.
ComponentNoProvides additional controls over the booking, e.g to make a held bookingMust list all components or none.
Component[*]@ComponentIdYesIdentifies componentUnique per basket
Component[*]@CurrentBookingStageNoconfirmed_costing-
Component[*]@SupplierYesSupplier code of component-
Component[*]@TargetTicketingStatusNoconfirmed or held. If supported allows control over ticket statusSee example
RemarksNoSee Remarks.See example

PaymentMode

PaymentModeDescription
syndicator_deferredIndicates 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_lodgedIndicates that any required card payments to supplier should be made with the passed in card.

FAB Payment Card Type

CardTypeNote
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

ModeDescription
card_onlyNeither CV2 nor AVS are carried out, only the card number and expiry dates are checked
cv2_onlyOnly card number, dates, and CV2 number is checked
address_onlyOnly card number, dates, address is checked
postcode_onlyOnly card number, dates, and postcode is checked
cv2_and_addressOnly card number, dates, CV2 number, and address is checked
cv2_and_postcodeOnly card number, dates, CV2 number, and postcode is checked
address_and_postcodeOnly card number, dates, postcode, and address is checked
allAll checks are performed and must all pass
Last modified February 20, 2026