Checking the BFM v4 Rest API docs we find that we can set a 'ResponseType' field to decide how the response will be formatted.
However, when testing this in Postman, we found some oddities. A request with the following Body to the endpoint /v4/offers/shop:
{
"OTA_AirLowFareSearchRQ": {
"POS": {
"Source": [
{
"PseudoCityCode": "{{pcc}}",
"RequestorID": {
"ID": "1",
"Type": "1",
"CompanyName": {
"Code": "TN",
"CodeContext": "TN"
}
}
}
]
},
"OriginDestinationInformation": [
{
"TPA_Extensions": {
"SegmentType": { "Code": "O"}
},
"RPH": "1",
"Fixed": false,
"DepartureDateTime": "{{start_date}}T11:00:00",
"OriginLocation": {
"AllAirports": false,
"LocationCode": "MIA",
"CodeContext": "IATA"
},
"DestinationLocation": {
"AllAirports": false,
"LocationCode": "MCO",
"CodeContext": "IATA"
}
}
],
"TravelPreferences": {
"CabinPref": [
{
"Cabin": "Y",
"PreferLevel": "Preferred"
}
],
"LookForAlternatives": false,
"TPA_Extensions": {
"TripType": { "Value": "OneWay" },
"JumpCabinLogic": { "Disabled": false },
"KeepSameCabin": { "Enabled": true },
"DiversityParameters": {
"AdditionalNonStopsNumber": 30
},
"ExcludeVendorPref": [
{
"Code": "G3"
}
]
},
"ETicketDesired": false,
"Hybrid": true,
"ValidInterlineTicket": true
},
"TravelerInfoSummary": {
"AirTravelerAvail": [
{
"PassengerTypeQuantity": [
{
"Code": "ADT",
"Quantity": 1,
"TPA_Extensions": {
"VoluntaryChanges": {
"Match": "Any"
}
}
}
]
}
],
"PriceRequestInformation": {
"NegotiatedFareCode": [],
"AccountCode": [{ "Code": "PROMAO" }],
"CurrencyCode": "BRL",
"TPA_Extensions": {
"BrandedFareIndicators": {
"SingleBrandedFare": true,
"MultipleBrandedFares": true
},
"Indicators": {
"MinMaxStay": { "Ind": true },
"RefundPenalty": { "Ind": true },
"ResTicketing": { "Ind": true }
},
"Priority": {
"Price": { "Priority": 1 },
"DirectFlights": { "Priority": 2 },
"Time": { "Priority": 3 },
"Vendor": { "Priority": 4 }
}
}
}
},
"TPA_Extensions": {
"IntelliSellTransaction": {
"RequestType": { "Name": "50ITINS" },
"CompressResponse": {
"Value": false
}
},
"AlternateAirportMileage": {
"Number": "25"
}
},
"DirectFlightsOnly": false,
"ResponseType": "OTA",
"SeparateMessages": false,
"Version": "v4"
}
}
produces a response in the GroupedItineraries format ("GIR" value), which is an undesired behavior for us. Weirdly, the API accepts any string to this field 'ResponseType', not indicating any misuse, but always returning the GroupedItineraries format. The response contains the following messages:
{
"groupedItineraryResponse": {
"version": "6.5.2",
"messages": [
{
"severity": "Info",
"type": "SERVER",
"code": "ASE032LPSCIL549.ATSE.CERT.ASCINT.SABRECIRRUS.COM",
"text": "27138"
},
{
"severity": "Info",
"type": "WORKERTHREAD",
"code": "TRANSACTIONID",
"text": "7100110708344235563"
},
{
"severity": "Info",
"type": "DRE",
"code": "RULEID",
"text": "18411"
},
{
"severity": "Info",
"type": "DEFAULT",
"code": "RULEID",
"text": "25916"
},
{
"severity": "Info",
"type": "SCHEDULES",
"code": "MSG",
"text": "NO FLIGHT SCHEDULES FOR JOURNEY 2022-06-24 [FLL]-[ISM]"
},
{
"severity": "Info",
"type": "SCHEDULES",
"code": "MSG",
"text": "NO FLIGHT SCHEDULES FOR JOURNEY 2022-06-24 [MIA]-[ISM]"
},
{
"severity": "Info",
"type": "SCHEDULES",
"code": "MSG",
"text": "NO FLIGHT SCHEDULES FOR JOURNEY 2022-06-24 [OPF]-[ISM]"
},
{
"severity": "Info",
"type": "SCHEDULES",
"code": "MSG",
"text": "NO FLIGHT SCHEDULES FOR JOURNEY 2022-06-24 [OPF]-[MCO]"
},
{
"severity": "Info",
"type": "SCHEDULES",
"code": "MSG",
"text": "NO FLIGHT SCHEDULES FOR JOURNEY 2022-06-24 [OPF]-[ORL]"
},
{
"severity": "Info",
"type": "SCHEDULES",
"code": "MSG",
"text": "NO FLIGHT SCHEDULES FOR JOURNEY 2022-06-24 [TMB]-[ISM]"
},
{
"severity": "Info",
"type": "SCHEDULES",
"code": "MSG",
"text": "NO FLIGHT SCHEDULES FOR JOURNEY 2022-06-24 [TMB]-[MCO]"
},
{
"severity": "Info",
"type": "SCHEDULES",
"code": "MSG",
"text": "NO FLIGHT SCHEDULES FOR JOURNEY 2022-06-24 [TMB]-[ORL]"
}
] ...
Informing that there's no support for OTA using REST, the REST service answers will always be on GIR format.
Best regards.