Last edit by: hillrider
Here are some more hidden features of the ITA software.
The extensions to the itasoftware routing language are accessed by postpending commands after a '/'. There's a wide set of commands available, but there's no description of them available on the ITA web site. Unfortunately, each command applies only to one part of the trip, so they must usually be entered in each box.
EXCLUDE SPECIFIC AIRLINES
Command is "-airlines XX ..."
Ex: prohibit jetBlue or Delta
from: BOS ::/ -airlines B6 DL
to: LAX ::/ -airlines B6 DL
LIMIT TO SPECIFIC AIRLINES
Command is "airlines XX ..."
Ex: consider only jetBlue or Delta
from: BOS ::/ airlines B6 DL
to: LAX ::/ airlines B6 DL
LIMIT TO A SINGLE ALLIANCE
Command is "alliance star-alliance|oneworld|skyteam"
Ex: oneworld carriers only
from: BOS ::/ alliance oneworld
to: LAX ::/ alliance oneworld
EXCLUDE CODESHARES
Command is "-codeshare"
Ex: prohibit jetBlue or Delta
from: BOS ::/ -codeshare
to: LAX ::/ -codeshare
LIMIT DURATION OF ITINERARY, IN MINUTES
Command is "maxdur XXX"
Ex: no more than 5hrs for each part of trip
from: BOS ::/ maxdur 300
to: LAX ::/ maxdur 300
EXCLUDE OVERNIGHT STOPS, AIRPORT CHANGES, REDEYES, PROPELLER PLANES, TRAINS, HELICOPTERS, ANY KIND OF SURFACE TRAVEL
Commands are "-overnight", "-change", "-redeye", "-prop", "-train", "-helicopter", "-surface"
Ex: no overnight stops, no airport changes, no redeyes, no propeller planes
from: BOS ::/ -overnight, -change, -redeye, -prop
to: LAX ::/ -overnight, -change, -redeye, -prop
SET MINIMUM OR MAXIMUM TIME FOR CONNECTIONS, IN MINUTES
Commands are "minconnect XX", "maxconnect XX"
Ex: no less than one hour, no more than two hour connections
from: BOS ::/ minconnect 60, maxconnect 120
to: LAX ::/ minconnect 60, maxconnect 120
EXTRA CONNECTION TIME
Command is "padconnect XX"
Ex: require at least 20 minutes more than airline specified minimum connection time
from: BOS ::/ padconnect 20
to: LAX ::/ padconnect 20
PUTTING LOTS OF THINGS TOGETHER
Separate with commas.
Ex:
from: BOS :: UA UA / f bc=l|bc=y, -redeye, -prop
to: LAX :: UA+ / f ua.bos+lax.yup, padconnect 20, -overnight
The extensions to the itasoftware routing language are accessed by postpending commands after a '/'. There's a wide set of commands available, but there's no description of them available on the ITA web site. Unfortunately, each command applies only to one part of the trip, so they must usually be entered in each box.
EXCLUDE SPECIFIC AIRLINES
Command is "-airlines XX ..."
Ex: prohibit jetBlue or Delta
from: BOS ::/ -airlines B6 DL
to: LAX ::/ -airlines B6 DL
LIMIT TO SPECIFIC AIRLINES
Command is "airlines XX ..."
Ex: consider only jetBlue or Delta
from: BOS ::/ airlines B6 DL
to: LAX ::/ airlines B6 DL
LIMIT TO A SINGLE ALLIANCE
Command is "alliance star-alliance|oneworld|skyteam"
Ex: oneworld carriers only
from: BOS ::/ alliance oneworld
to: LAX ::/ alliance oneworld
EXCLUDE CODESHARES
Command is "-codeshare"
Ex: prohibit jetBlue or Delta
from: BOS ::/ -codeshare
to: LAX ::/ -codeshare
LIMIT DURATION OF ITINERARY, IN MINUTES
Command is "maxdur XXX"
Ex: no more than 5hrs for each part of trip
from: BOS ::/ maxdur 300
to: LAX ::/ maxdur 300
EXCLUDE OVERNIGHT STOPS, AIRPORT CHANGES, REDEYES, PROPELLER PLANES, TRAINS, HELICOPTERS, ANY KIND OF SURFACE TRAVEL
Commands are "-overnight", "-change", "-redeye", "-prop", "-train", "-helicopter", "-surface"
Ex: no overnight stops, no airport changes, no redeyes, no propeller planes
from: BOS ::/ -overnight, -change, -redeye, -prop
to: LAX ::/ -overnight, -change, -redeye, -prop
SET MINIMUM OR MAXIMUM TIME FOR CONNECTIONS, IN MINUTES
Commands are "minconnect XX", "maxconnect XX"
Ex: no less than one hour, no more than two hour connections
from: BOS ::/ minconnect 60, maxconnect 120
to: LAX ::/ minconnect 60, maxconnect 120
EXTRA CONNECTION TIME
Command is "padconnect XX"
Ex: require at least 20 minutes more than airline specified minimum connection time
from: BOS ::/ padconnect 20
to: LAX ::/ padconnect 20
PUTTING LOTS OF THINGS TOGETHER
Separate with commas.
Ex:
from: BOS :: UA UA / f bc=l|bc=y, -redeye, -prop
to: LAX :: UA+ / f ua.bos+lax.yup, padconnect 20, -overnight
TIP: More hidden features of ITA
#497
FlyerTalk Evangelist
Join Date: Mar 2013
Location: London
Posts: 17,007
You can use a semicolon to join multiple statements after the route specifier. In your example you would want
SFO :: DL /f bc=P ; f DL..M-
Last edited by Calchas; Jan 4, 2017 at 3:10 am
#498
Join Date: Jul 2009
Programs: M&M
Posts: 999
bc=P does not precisely specify the seat booking class, but rather the prime code of the fare component. For instance the prime code on the fare might be F but if F is not available on a certain segment covered by that fare, the booking class could be J or Y, depending on the booking code exceptions table.
SFO:: DL /F BC=P|DL..M-
will work and find the cheapest of M fares or any fare booking into P, but does not work with "&" even if there is a M-UP fare booking into P. If you only have a few legs it can be overcome by booking biz/f and specifying a lower fare, ie book biz and only use /F DL..M- but this fails at the moment when you have an economy only leg in the itin...BTW a similar question can be made, though, based on your explanation: if I'm looking for, say, SFO-FRA-DEL tickets with LH/UA and want to exclude the Y legs (UA likes to use LH Y legs in Biz itins), then using
SFO:: N FRA N /F BC=D&~BC=Y
will not do what you'd expect it to. Like the classic AND connection is not implemented.
#499
FlyerTalk Evangelist
Join Date: Mar 2013
Location: London
Posts: 17,007
But BA longhaul I- fares (with prime code "I") always books into "J" on shorthaul sectors, as per the booking codes table for the fare in question. This is enforced even though I specified bc=I:
I have given a more extreme example in a previous post in this thread: http://www.flyertalk.com/forum/24654440-post747.html
It explicitly specifies the booking class for the leg, if it's a nonstop, or one of the legs, if it's a connecting flight. ITA is smart and will use it on the leg that the fare is based on (ie longhaul instead of shorthaul) but sometimes that's not enough.
Quite maddeningly
SFO:: DL /F BC=P|DL..M-
will work and find the cheapest of M fares or any fare booking into P, but does not work with "&" even if there is a M-UP fare booking into P.
SFO:: DL /F BC=P|DL..M-
will work and find the cheapest of M fares or any fare booking into P, but does not work with "&" even if there is a M-UP fare booking into P.
Last edited by Calchas; Jan 5, 2017 at 11:48 am
#500
Join Date: Jul 2009
Programs: M&M
Posts: 999
That is not my experience. For example ... But BA longhaul I- fares (with prime code "I") always books into "J" on shorthaul sectors, as per the booking codes table for the fare in question.
DUB:: BA /F BC=I
LHR:: BA
JFK:: BA BA /F BC=I
will put LHR-JFK in Business (I) as well. Why? Because ITA is looking for these options:LHR:: BA
JFK:: BA BA /F BC=I
1) DUB-LHR in I, LHR-JFK in anything - there are no DUB-LHR I fares that allow a combination with LHR-JFK and the DUB-JFK fares require a diff booking code for that leg, and
2) a DUB-JFK fare that allows booking I on any single leg of the journey - obviously the DUB-JFK I fare satisfies this.
(in this case it's pretty straight forward which legs can be combined with what but as the number of flights grow so does complexity, and ITA is damned smart about picking fares for the flights in the itin)
But it doesn't have to be an I fare, it can be any fare that both includes DUB-LHR and allows a single leg to be booked into I. It can probably be better illustrated with United A fares that usually book into C or D ex-US, you specify A on an all economy flight, it will book the economy i Y, the longhaul into A and use a C/D fare.
(and this is where my dual booking class/fare specifying question is relevant, you can't pick First as class of service because some legs don't have it, but need to specify both the booking class for the longhaul and the fare used which is not the lowest. Also with 2+ stopovers and 7 legs on a single fare that uses higher booking codes than the fare code gets pretty complicated pretty fast and even ITA will lose track of what's what and starts breaking the journey.)
You are absolutely right, it works! I don't know what I did wrong when I tried it the first time but it most definitely works. Thank you!
#501
FlyerTalk Evangelist
Join Date: Mar 2013
Location: London
Posts: 17,007
That's what I mean. It requires the prime code of the fare covering the sector in question to be I. [That doesn't mean that the fare needs to start with the letter I-, just that the prime code is I.]
Then let us change the example a little. If I specify /f bc=J on DUB-LHR and nothing on LHR-DUB, and don't pick the EI-operated flight, now both legs are booked into full fare J. But according to point (2) of your logic, a much cheaper I- fare would suffice because it permits booking into J class on DUB-LHR as required.
According to my understanding, I have specified the prime code for DUB-LHR must be J, and in this case the cheapest option is to get a J through-fare on DUB-NYC, so both sectors go into J.
On the dual inventory fares, the higher inventory class is usually the prime code despite the fact that the code starts with the lower class. That may vary by carrier or how they implemented it of course. So taking what you said:
Do you have an example of such a fare? My suspicion is that although it is a C-/D- fare, it would actually have a prime code of "A" if we checked the booking codes table.
Well I'm happy it worked even though we disagree about why
In your example making an Economy class search with
1) DUB-LHR in I, LHR-JFK in anything - there are no DUB-LHR I fares that allow a combination with LHR-JFK and the DUB-JFK fares require a diff booking code for that leg, and
2) a DUB-JFK fare that allows booking I on any single leg of the journey - obviously the DUB-JFK I fare satisfies this.
[...]
But it doesn't have to be an I fare, it can be any fare that both includes DUB-LHR and allows a single leg to be booked into I.
DUB:: BA /F BC=I
LHR:: BA
JFK:: BA BA /F BC=I
will put LHR-JFK in Business (I) as well. Why? Because ITA is looking for these options:LHR:: BA
JFK:: BA BA /F BC=I
1) DUB-LHR in I, LHR-JFK in anything - there are no DUB-LHR I fares that allow a combination with LHR-JFK and the DUB-JFK fares require a diff booking code for that leg, and
2) a DUB-JFK fare that allows booking I on any single leg of the journey - obviously the DUB-JFK I fare satisfies this.
[...]
But it doesn't have to be an I fare, it can be any fare that both includes DUB-LHR and allows a single leg to be booked into I.
According to my understanding, I have specified the prime code for DUB-LHR must be J, and in this case the cheapest option is to get a J through-fare on DUB-NYC, so both sectors go into J.
(and this is where my dual booking class/fare specifying question is relevant, you can't pick First as class of service because some legs don't have it, but need to specify both the booking class for the longhaul and the fare used which is not the lowest. Also with 2+ stopovers and 7 legs on a single fare that uses higher booking codes than the fare code gets pretty complicated pretty fast and even ITA will lose track of what's what and starts breaking the journey.)
It can probably be better illustrated with United A fares that usually book into C or D ex-US, you specify A on an all economy flight, it will book the economy i Y, the longhaul into A and use a C/D fare.
You are absolutely right, it works! I don't know what I did wrong when I tried it the first time but it most definitely works. Thank you!
Last edited by Calchas; Jan 7, 2017 at 5:32 am
#502
Join Date: Jul 2009
Programs: M&M
Posts: 999
Then let us change the example a little. If I specify /f bc=J on DUB-LHR and nothing on LHR-DUB, and don't pick the EI-operated flight, now both legs are booked into full fare J. But according to point (2) of your logic, a much cheaper I- fare would suffice because it permits booking into J class on DUB-LHR as required.
According to my understanding, I have specified the prime code for DUB-LHR must be J, and in this case the cheapest option is to get a J through-fare on DUB-NYC, so both sectors go into J.
According to my understanding, I have specified the prime code for DUB-LHR must be J, and in this case the cheapest option is to get a J through-fare on DUB-NYC, so both sectors go into J.
Going over to UA, let's see these two cases. MKE-ORD-LHR-ORD, with MKE-ORD specified /F BC=A. If you select cheapest fares UA will book MKE-ORD in A and the rest of the itin in Y, because 1) it can break the fare in ORD and 2) MKE-ORD in A and ORD-LHR in cheapest possible is less than MKE-LHR in A.
Should you select First Class for cabin (or force A on the ORD-LHR leg too) you'll have an A through fare that costs more:
Now, it's time for some self flagellation as well. Seems /f BC=x doesn't force the actual booking code for any legs but the RBD for at least one leg. If we pick a flight with no F cabin and force A ITA will book in Y with an UP fare:
This might be true for most carriers/fares but some carriers/fares do not confirm and these outliers are some of the most interesting things to use.
#503
FlyerTalk Evangelist
Join Date: Mar 2013
Location: London
Posts: 17,007
I am beginning to wonder if we are actually secretly agreeing but we are using different words to mean the same thing . So let me put some definitions forward:
Prime code: The preferred booking class of the whole fare, for instance an I- fare on BA has I, a YUP- fare on UA has A, et c. But, the fare will specify other booking codes on a per-sector basis according to its booking code exceptions table.
Booking code: The actual booking class used to make the reservation on an individual leg, for instance an F- fare with prime code F may still book into Y on some legs. The actual booking code is calculated from a table that is attached to the fare.
I agree with this.
That's where we diverge on how we think this works (assuming we are not actually saying the same thing).
I think to get to the bottom of this we need to find a case which would distinguish between our two positions (or we could just ask ITA Hacker ).
But it doesn't need to insert a fare breakpoint to book DUB-LHR into J. It can take an I- through-fare on DUBNYC and use that to book into J on the DUB-LHR leg.
So I believe that bc=J requires the prime code of the covering fare to be J, independent of whatever booking classes are allocated for the sectors. Therefore we have to use a full J fare and this is consistent with what I would expect.
I think, and please correct me if I'm wrong, what you are saying is that at least one leg must actually be booked into J. So then, under your assumption, why not use the cheap I- fare to cover this leg, which happens to book into J on this leg, as specified?
So this remains consistent with my analysis as well. The fare it found, UAA7AFFN, does indeed bear the prime code A:
The other legs are unrestricted so it can find a cheap combination to cover the rest.
We agree here, our logic is the same; except that I would say it only needs to obtain a fare with prime code A covering MKE-ORD, it doesn't necessarily have to be booked into A.
None of your legs there are in A, so in what respect has it followed your logic? However again, looking at that YAA00UPY fare, the prime code is A (with Y also permissible):
Prime code: The preferred booking class of the whole fare, for instance an I- fare on BA has I, a YUP- fare on UA has A, et c. But, the fare will specify other booking codes on a per-sector basis according to its booking code exceptions table.
Booking code: The actual booking class used to make the reservation on an individual leg, for instance an F- fare with prime code F may still book into Y on some legs. The actual booking code is calculated from a table that is attached to the fare.
I think to get to the bottom of this we need to find a case which would distinguish between our two positions (or we could just ask ITA Hacker ).
This is, again, because DUB-LHR even in J will not allow combinations with transatlantic fares. As soon as ITA can break the fare it will price both ways and will give you the cheapest option.
So I believe that bc=J requires the prime code of the covering fare to be J, independent of whatever booking classes are allocated for the sectors. Therefore we have to use a full J fare and this is consistent with what I would expect.
I think, and please correct me if I'm wrong, what you are saying is that at least one leg must actually be booked into J. So then, under your assumption, why not use the cheap I- fare to cover this leg, which happens to book into J on this leg, as specified?
Going over to UA, let's see these two cases. MKE-ORD-LHR-ORD, with MKE-ORD specified /F BC=A. If you select cheapest fares UA will book MKE-ORD in A and the rest of the itin in Y
Code:
>$LB10 010 MKECHI 05FEB17 UA USD 249.00 UAA7AFFN STAY---/-- BK-A FARE CLS EXPLANATION BOOK CODES -------- ---------------------- ---------- UAA7AFFN FIRST CLASS SELL-UP OW NON-REF FARES A UAA7AFFN APPLIES FOR ONE WAY FARES UAA7AFFN FOR ADULT BOOKING CODE EXCEPTIONS VIA UA U/A PERMITTED A WHEN U AVAILABLE VIA UA U REQUIRED
, because 1) it can break the fare in ORD and 2) MKE-ORD in A and ORD-LHR in cheapest possible is less than MKE-LHR in A.
Should you select First Class for cabin (or force A on the ORD-LHR leg too) you'll have an A through fare that costs more:
Should you select First Class for cabin (or force A on the ORD-LHR leg too) you'll have an A through fare that costs more:
Seems /f BC=x doesn't force the actual booking code for any legs but the RBD for at least one leg. If we pick a flight with no F cabin and force A ITA will book in Y with an UP fare:
Code:
>$LB18 018 MKECHI 05FEB17 UA USD 600.00 YAA00UPY STAY---/-- BK-A Y FARE CLS EXPLANATION BOOK CODES -------- ---------------------- ---------- YAA00UPY ECONOMY UNRESTRICTED FARES A/Y YAA00UPY APPLIES FOR ONE WAY FARES YAA00UPY FOR ADULT NO BOOKING CODE EXCEPTIONS FOR CARRIER - USE PRIME
Last edited by Calchas; Jan 8, 2017 at 8:07 am
#504
Company Representative - ITA Software
Join Date: Feb 2006
Location: Cambridge, MA
Posts: 362
I didn't try to follow the examples in detail, but I agree with the way that Calchas has described the logic. As he says, it may be that you're actually agreeing except on the definitions of terms
#505
Join Date: Jul 2009
Programs: M&M
Posts: 999
Seems that we do, and seems I was wrong. So /F BC tells Matrix to use the cheapest fare that both includes the leg(s) in the fare and uses the prime RBD specified on at least one leg of the fare, not to actually book it in said booking class (ie downgrades allowed, etc).
Disagreement was mostly that it doesn't "set a fare" because Matrix is free to use any fare that will satisfy those things. /F CC.AAA+BBB.FFFFFF sets fares as in tells Matrix use fare FFFFFF on cx CC for AAA-BBB.
By the way, any chance to get O:[flightnumber] implemented? I think that would be a most useful improvement, especially now that we're looking at more JVs, ie BA/IB/JJ/LA for EU-LATAM and BA/IB/QR for EU-wherever QR flies.
eta:
And ofc thank your for all the info too, sir!
Disagreement was mostly that it doesn't "set a fare" because Matrix is free to use any fare that will satisfy those things. /F CC.AAA+BBB.FFFFFF sets fares as in tells Matrix use fare FFFFFF on cx CC for AAA-BBB.
By the way, any chance to get O:[flightnumber] implemented? I think that would be a most useful improvement, especially now that we're looking at more JVs, ie BA/IB/JJ/LA for EU-LATAM and BA/IB/QR for EU-wherever QR flies.
eta:
And ofc thank your for all the info too, sir!
Last edited by FrankTalk; Jan 14, 2017 at 8:06 am
#506
Join Date: Jan 2010
Posts: 243
one segment on specific alliance/carrier
Any idea how I do finding a connection where one flight is on a particular carrier.
i.e I want to fly from A to B on a indirect flight, I don't care how many stops or where the connection(s) is, but at least one sector must be on a particular alliance (or carrier if easier)
i.e I want to fly from A to B on a indirect flight, I don't care how many stops or where the connection(s) is, but at least one sector must be on a particular alliance (or carrier if easier)
#507
FlyerTalk Evangelist
Join Date: Mar 2013
Location: London
Posts: 17,007
Any idea how I do finding a connection where one flight is on a particular carrier.
i.e I want to fly from A to B on a indirect flight, I don't care how many stops or where the connection(s) is, but at least one sector must be on a particular alliance (or carrier if easier)
i.e I want to fly from A to B on a indirect flight, I don't care how many stops or where the connection(s) is, but at least one sector must be on a particular alliance (or carrier if easier)
F* AB F*
(Any number of flights on any carrier (possibly zero), followed by an Air Berlin flight, followed by any number of flights on any carrier (possibly zero).)However that will not guarantee that you get only indirect flights; a direct AB flight would be satisfactory under that query. I think you may have to run two separate searches to guarantee that and cover all bases:
F* AB F+
(Any number, possibly zero, of flights on any carrier, followed by an AB flight, followed by at least one flight on any carrier.)and
F+ AB F*
(At least one flight on any carrier, followed by an AB flight, followed by any number, possibly zero, of flights.)
#508
Join Date: May 2009
Posts: 205
I'm looking at a flight with 2 stops and rules allow stop over; I can use multicity search to get the stop over but I wonder if I can use monthly search. Is it possible? Maybe is it possible to use the max connect command for the first stop and the min connect command for the stop over?
#509
Join Date: May 2007
Location: ORD, DEL
Programs: AA (Plt Pro; 1.5 MM)
Posts: 6,210
Yes it is certainly possible to use different commands (like maxconnect and minconnect) for different segments, but you can only use monthly search with one-way and round-trip formats, not multi-city.
#510
Join Date: May 2009
Posts: 205
First of all, thanks
Probably my question is not clear
I know how to use different command for different segment in one way or multicity search
I would like to know if it's possible to use different command for different segmento in monthly round trip search