Delta has introduced new economy fares that are in E class. United has something similar. When we price in Sabre Red, we now have to add #MPC-ANY to our pricing commands (For bulk fares: WPPJCB‡NCB‡MPC-ANY‡RQ, and For published fares: WPNCB‡MPC-ANY‡RQ).
How can I prevent these from showing up in the SOAP OTA_AirLowFareSearchRS request? I've not been successful in finding what to put in my OTA_AirLowFareSearchRS request. I don't see this MPC-ANY command in the documentation (https://developer.sabre.com/docs/read/soap_apis/air/search/bargain_finder_max/resources).
I guess these fares are called "Basic Economy Fares". One of the pricing SOAP requests had /Price?requestInformation/OptionalQualifiers/PricingQualifiers/BasicEconomyExclude. However, I've not found something similar for the OTA_AirLowFareSearchRS.
I found this, but there is no way to exclude Basic Economy out of Economy.
http://files.developer.sabre.com/doc/providerdoc/shopping/BargainFinderMaxRQ_v3-1-0_Design.xml
CabinPref PreferLevel="Preferred" Cabin="Y"
If you're an existing customer, a request can be filed from eservices, to request classes of service from being filtered out:
American Form = https://agencyeservices.sabre.com/Manager/Ordering/Basic-Economy-Inhibit-Request-for-American.aspx
Delta Form = https://agencyeservices.sabre.com/Manager/Ordering/Basic-Economy-Inhibit-Request-for-Delta.aspx
United Form = https://agencyeservices.sabre.com/Manager/Ordering/Basic-Economy-Inhibit-Request-for-United.aspx
Related
Google deprecated the old GMB API v4.9 account.locations.get endpoint, and replaced it with Business Information API v1 locations.get.
Code change that affects me is:
Removal of LocationState object. The existing fields have been moved into Metadata.
The new Metadata object does not return the attributes LocationState object contained before. The ones I'm interested in are:
isVerified
isPublished
isSuspended
isDisabled
isDisconnected
etc...
My question is:
How could I get this data without using deprecated endpoints?
Try Verification API getVoiceOfMerchantState
isVerified (verify),
isPublished (hasVoiceOfMerchant=true AND hasBusinessAuthority=true),
isSuspended (complyWithGuidelines),
isDuplicate (resolveOwnershipConflict).
isDisabled & isDisconnected have no equivalent in new API
As far as I can see, based on the link you have sent it is written:
Endpoint URL:
Endpoints for all business information, attributes, categories, chains and locations search are accessible at https://mybusinessbusinessinformation.googleapis.com/v1/ instead of https://mybusiness.googleapis.com/v4/
The path name for locations endpoints has changed from
accounts/accountId/locations/locationId to locations/locationId
Maybe it was better if you could provide the request uri in the previous version so we could help you more precisely. Anyhow, what I tested in the google playground is as follows:
open [https://developers.google.com/oauthplayground]
after setting your clientId and Authorisation stuff, in the Request URI write
https://mybusinessbusinessinformation.googleapis.com/v1/locations/XXXXX?readMask=storeCode,metadata,profile,serviceArea,labels,adWordsLocationExtensions
instead of XXXXX, write your locationId
you can write different readMask fields, The possible fields for readMask are:
play with different fields to check if you have your desired one or not readMask="storeCode,regularHours,name,languageCode,title,phoneNumbers,categories,storefrontAddress,websiteUri,regularHours,specialHours,serviceArea,labels,adWordsLocationExtensions,latlng,openInfo,metadata,profile,relationshipData,moreHours";
If above does not help you, in the link below I see that all metadata attribute of a location might be:
Click [here] (https://developers.google.com/my-business/reference/businessinformation/rest/v1/accounts.locations#Location.Metadata)
When I do the GET Request to the here API with the below zip codes I am getting an empty list. But When I google these zip codes, I can see that they are valid.
Here is the GET Request URL: https://geocode.search.hereapi.com/v1/geocode?qq=postalCode=[Insert-zip-code];country=USA&apiKey=[Insert-API-Key]
Below are the fallowing Zip Codes:
75046
34988
68902
45258
19486
88102
32245
28603
68501
93403
68602
91365
Try with https://geocode.search.hereapi.com/v1/geocode?q=postalCode=zip_code+USA&apiKey=your_api_key
Notice that there is only one q.
The above will work, but in some cases it will give you results not only from the United States.
Keep in mind what the API documentation says for this service:
Address lookup by postal code (SGP, IRL)
(...) This feature is available for these two countries only.
It's only for Ireland and Singapore.
There is an alternative for the United States (and Netherlands), but it requires the zip+4 code.
What is a Zip+4 Code?
A ZIP+4 code uses the basic five-digit code plus four additional
digits to identify a geographic segment within the five-digit delivery
area, such as a city block, a group of apartments, an individual
high-volume receiver of mail, a post office box, or a specific
delivery route
Example: https://geocode.search.hereapi.com/v1/geocode?qq=postalCode=60606-1506&apiKey=your_api_key
Notice that there are two q's.
I'm using TravelItineraryReadRQ to get information about Price Quotes in pnr. In some cases service response hides number sequences with ("XXXX") even if it was not credit card information. For example:
PQ creation commatnd: WPASU‡EDUFS123456‡FINVOICE*QUW12345‡RQ«
and here is what I get in response:
<tir39:PricedItinerary DisplayOnly="false" InputMessage="WPASU¥EDUFS1XXXX6¥FINVOICE*QUW1XXX5¥RQ" RPH="1" StatusCode="A" StoredDateTime="2018-12-21T09:13" TaxExempt="false" ValidatingCarrier="SU">
<tir39:AirItineraryPricingInfo>
<tir39:ItinTotalFare>
<tir39:BaseFare Amount="1980" CurrencyCode="RUB"/>
<tir39:Taxes>
<tir39:Tax Amount="2541" TaxCode="XT"/>
<tir39:TaxBreakdownCode TaxPaid="false">2265YQ</tir39:TaxBreakdownCode>
<tir39:TaxBreakdownCode TaxPaid="false">276RI</tir39:TaxBreakdownCode>
</tir39:Taxes>
<tir39:TotalFare Amount="4521" CurrencyCode="RUB"/>
<tir39:Totals>
<tir39:BaseFare Amount="1980"/>
<tir39:Taxes>
<tir39:Tax Amount="2541"/>
</tir39:Taxes>
<tir39:TotalFare Amount="4521"/>
</tir39:Totals>
</tir39:ItinTotalFare>
<tir39:PassengerTypeQuantity Code="ADT" Quantity="01"/>
<tir39:PTC_FareBreakdown>
<tir39:Endorsements>
<tir39:Endorsement type="PRICING_PARAMETER">
<tir39:Text>WPASU$EDUFS1XXXX6$FINVOICE*QUW1XXX5$RQ</tir39:Text>
</tir39:Endorsement>
Is there any way to get those numbers?
I believe Sabre has logic on their end due to GDPR requirements that masks credit card info from being viewed unless you have the CC in the correct form of payment field AND your EPR has the "CCVIEW" attribute assigned.
Essentially, Sabre doesn't want CC data stored anywhere but the secured Form of Payment field and they control who can and cannot see that data by using the EPR Keywords (the login info you get from Sabre).
So, for your example, my guess is that Sabre's regex or whatever they use to identify credit card data sees your strings in those fields, assumes they are CC numbers, and masks them. You may want to open a ticket with Sabre to address this, or as Andy K suggested above, try adding CCVIEW to that EPR (although I think that probably won't work).
I'm trying to get the a list of current hotel prices but I can't get my API Key to work. I've had it for a couple days so I know it isn't too new. I even tried the example in the docs (after fixing the dates):
http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v2/UK/EUR/en-GB/27539733/2016-12-04/2016-12-10/2/1?apiKey=myKey
While it worked for the demo key it wouldn't work for mine. I also tried it on the ec2 micro I'm using for testing with Python and get a response with u'{"errors":["ApiKey invalid"]}':
SKY_SCAN_URL = "http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v2/"
sky_key = get_sky_scan_key()
def get_hotels(request):
entityid = request.GET['entityid']
checkindate = date_formatter(request.GET['start'])
checkoutdate = date_formatter(request.GET['end'])
rooms = request.GET['rooms']
guests = request.GET['guests']
FINAL_SKY_URL = "%s/%s/%s/%s/%s/%s/%s/%s/%s/?apiKey=%s" % (
SKY_SCAN_URL, 'US', 'USD', 'en-US', entityid, checkindate, checkoutdate, guests, rooms, sky_key)
sky_response = requests.get(FINAL_SKY_URL)
This function outputs a get request with a URL like this:
http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v2//US/USD/en-US/20.7983626,-156.3319253-latlong/2016-09-07/2016-09-14/1/1/?apiKey=myKey
Any advice on what the possible issue could be would be awesome, thanks!
Edit:
To be more specific I'm looking for reasons why my API Key is invalid. I'm not familiar with skyscan and while I've added an app from the skyscanner dashboard by clicking the travel api and copied the key into my project and directly into a valid url my key is showing as bad. Are there any additional steps or things that I need to take into account?
I don't know about how you're creating the URL but it seems like it shouldn't be built that way. (most likely due to their misleading documentation)
This:
http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v3/?apiKey=myKey&checkoutdate=2016-09-14&checkindate=2016-09-07¤cy=USD&rooms=1&entityid=20.7983626%2C-156.3319253-latlong&local=en-US&market=US&guests=1
Should be:
http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v3/US/USD/en-US/20.7983626,-156.3319253-latlong/2016-09-07/2016-09-14/1/1/?apiKey=myKey
Your code should be something like:
SKY_SCAN_URL = "http://partners.api.skyscanner.net/apiservices/hotels/liveprices/v3/"
FINAL_URL = "%s/%s/%s/%s/%s/%s/%s/%s/%s/?apiKey=%s" % (SKY_SCAN_URL, market, currency, locale, entityid, checkindate, checkoutdate, guests, rooms, apiKey)
sky_response = requests.get(FINAL_URL)
I also suggest you do some tests here.
From their help site as of 17 days ago -
https://support.business.skyscanner.net/hc/en-us/articles/209452689-Why-is-my-API-key-returning-no-results-for-hotels-
"Our Hotels API is currently being reworked, and access is not available at present. Apologies for any inconvenience, when the new API is ready for use we will update the Skyscanner for Business site, so please check back there for updates."
Unclear when this changes.
Since April 2017, skyScanner started re-working their Hotels API, thus stopping all ongoing API calls to LIVE Pricing APIs:
https://support.business.skyscanner.net/hc/en-us/articles/209452689-Why-is-my-API-key-returning-no-results-for-hotels-
Hotels and Flights Cached Pricing and Browse services still working, though I am not sure if it is enough for your business case.
It seems that Skyscanner has updated their Hotels API recently and the documentation can be found here: https://skyscanner.github.io/slate/#hotels-live-prices
I'm trying to do an international flight ticketing for Multicity, but trying to do book/ticket each segment individually, So which means am trying to call AirTicket for each Segment.
While doing it, I'm getting this error :-
UNABLE TO ISSUE PARTIAL CONNECTION-TKT ENTIRE CONNECTION-2032
So in this case what am I supposed to do.
Any help appreciated, Thanks.
It will help more if you post your requests, but it seems the segments (called 'married segments' if the below applies to your itinerary) you are trying to issue should be ticketed together, in a single, AirTicket call:
From the documentation at format-finder.sabre.com:
--------------------------------
Cause:
This response occurs if you are trying to break Married Connection logic at the time of ticketing.
Note: At time of fare storage there are no longer married segment validation checks. Segment selection is permitted and fares may be stored even if segment selection breaks married segment logic.
Instead, the Sabre ticketing system performs Married Connection validation checks against the segments selected for ticket issuance at the point at which the ticket is issued. If the segments selected break a marriage, then the error response displays:
UNABLE TO ISSUE PARTIAL CONNECTION-TKT ENTIRE CONNECTION-1330
The only exception to this rule applies when issuing a ticket from a phase IV record. In this case, there is no married segment validation check performed.
Solution:
Issue the ticket for the complete itinerary or for all selected segments that qualify as married segments.
-or-
Phase IV the itinerary and issue the ticket(s).
Note: Your agency is responsible for the phase IV and for breaking married segment logic if a debit memo is issued by the carrier. See SabreTravelNetworkGuarantees for more information.
--------------------------------
Normally, depending on the service you are using to 'shop' for flights, there is a 'MarriageGrp' indicator stating that the segments are 'married'.