Go Back  FlyerTalk Forums > Miles&Points > Mileage Run Deals > Mileage Run Discussion
Reload this Page >

TIP: More hidden features of ITA

Community
Wiki Posts
Search
Old Jan 21, 2015, 10:55 am
FlyerTalk Forums Expert How-Tos and Guides
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
Print Wikipost

TIP: More hidden features of ITA

Thread Tools
 
Search this Thread
 
Old Jan 3, 2017, 9:16 pm
  #496  
 
Join Date: May 2014
Posts: 50
Originally Posted by FrankTalk
Hi, is it possible to specify both fare to be used and booking class for the seat? Ie something like:

SFO:: DL /F BC=P&DL..M-

Above does nothing, that's why I'm wondering.
Try a comma instead of ampersand.
s2w0w is offline  
Old Jan 4, 2017, 3:00 am
  #497  
FlyerTalk Evangelist
 
Join Date: Mar 2013
Location: London
Posts: 17,007
Originally Posted by FrankTalk
Hi, is it possible to specify both fare to be used and booking class for the seat? Ie something like:

SFO:: DL /F BC=P&DL..M-

Above does nothing, that's why I'm wondering.
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.

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
Calchas is offline  
Old Jan 4, 2017, 3:17 pm
  #498  
 
Join Date: Jul 2009
Programs: M&M
Posts: 999
Originally Posted by s2w0w
Try a comma instead of ampersand.
Originally Posted by Calchas
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-
Neither of these have any search results, unfortunately.

Originally Posted by Calchas
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.
It most definitely does not do that. 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. 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.
FrankTalk is offline  
Old Jan 5, 2017, 11:39 am
  #499  
FlyerTalk Evangelist
 
Join Date: Mar 2013
Location: London
Posts: 17,007
Originally Posted by FrankTalk
It most definitely does not do that. It explicitly specifies the booking class for the leg
That is not my experience. For example, here I am explicitly forcing every leg under "bc=I" (I am splitting up to be very explicit, even though I know a through-fare from DUB-JFK will cover all legs):



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.
As far as I am aware, ITA does not try to understand what a connecting flight is or what a shorthaul/longhaul flight is. It simply applies the booking codes table from the fare.

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.
Using the syntax in my previous post, I did not have a problem finding exclusively M- fares with a prime code of "P" for DL. Perhaps you could specify the route you are having trouble with?

Last edited by Calchas; Jan 5, 2017 at 11:48 am
Calchas is offline  
Old Jan 6, 2017, 10:38 am
  #500  
 
Join Date: Jul 2009
Programs: M&M
Posts: 999
Originally Posted by Calchas
Originally Posted by FrankTalk
It most definitely does not do that. 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.
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.
You are not correct here, unless you're saying it specifies the prime RBD for any fare. In your example making an Economy class search with
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:
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.)

Originally Posted by Calchas
As far as I am aware, ITA does not try to understand what a connecting flight is or what a shorthaul/longhaul flight is. It simply applies the booking codes table from the fare.
It does, kind of, see above. It takes the segments you feed it and starts iterating through valid fares to see which one is the cheapest that satisfies your criteria. In that way it does understand.

Originally Posted by Calchas
Using the syntax in my previous post...
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!
FrankTalk is offline  
Old Jan 7, 2017, 5:23 am
  #501  
FlyerTalk Evangelist
 
Join Date: Mar 2013
Location: London
Posts: 17,007
Originally Posted by FrankTalk
unless you're saying it specifies the prime RBD for any fare.
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.]

In your example making an Economy class search with
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:
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.
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.

(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.)
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:

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.
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.

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!
Well I'm happy it worked even though we disagree about why

Last edited by Calchas; Jan 7, 2017 at 5:32 am
Calchas is offline  
Old Jan 8, 2017, 7:41 am
  #502  
 
Join Date: Jul 2009
Programs: M&M
Posts: 999
Originally Posted by Calchas
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.]
Yes, but this is not "setting the fare", at least not more than changing the date or route or class of service, because diff availability can also "set the fare". /F carrier.origin+destination.farecode sets the fare, but not the booking codes. /f bc=x sets the booking code (edit: RBD I guess) on at least one of the legs. These are not the same.

Originally Posted by Calchas
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.
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.

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:



Originally Posted by Calchas
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.
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.
FrankTalk is offline  
Old Jan 8, 2017, 8:01 am
  #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.

Originally Posted by FrankTalk
Yes, but this is not "setting the fare", at least not more than changing the date or route or class of service, because diff availability can also "set the fare". /F carrier.origin+destination.farecode sets the fare, but not the booking codes
I agree with this.

Originally Posted by FrankTalk
/f bc=x sets the booking code (edit: RBD I guess) on at least one of the legs.
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 ).

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.
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?

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
So this remains consistent with my analysis as well. The fare it found, UAA7AFFN, does indeed bear the prime code A:

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
The other legs are unrestricted so it can find a cheap combination to cover the rest.

, 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:
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.

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:
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):

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
Calchas is offline  
Old Jan 11, 2017, 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
ITA Hacker is offline  
Old Jan 13, 2017, 9:25 am
  #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:
Originally Posted by Calchas
...
And ofc thank your for all the info too, sir!

Last edited by FrankTalk; Jan 14, 2017 at 8:06 am
FrankTalk is offline  
Old Mar 15, 2017, 9:27 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)
nigelw is offline  
Old Mar 15, 2017, 9:34 am
  #507  
FlyerTalk Evangelist
 
Join Date: Mar 2013
Location: London
Posts: 17,007
Originally Posted by nigelw
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)
Say your desired carrier is Air Berlin (AB):
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.)
Calchas is offline  
Old Mar 19, 2017, 5:50 pm
  #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?
sario is offline  
Old Mar 20, 2017, 12:13 am
  #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.
aktchi is offline  
Old Mar 20, 2017, 2:25 am
  #510  
 
Join Date: May 2009
Posts: 205
Originally Posted by aktchi
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.

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
sario is offline  


Contact Us - Manage Preferences Archive - Advertising - Cookie Policy - Privacy Statement - Terms of Service -

This site is owned, operated, and maintained by MH Sub I, LLC dba Internet Brands. Copyright © 2024 MH Sub I, LLC dba Internet Brands. All rights reserved. Designated trademarks are the property of their respective owners.