{"templateId":"markdown","sharedDataIds":{"sidebar":"sidebar-docs/stays/sidebars.yaml"},"props":{"metadata":{"markdoc":{"tagList":["admonition","sitelink"]},"type":"markdown"},"seo":{"title":"Migration Guide: Galileo Web Services (GWS) to TripServices Stays API","description":"Create AI-native travel products with Travelport's powerful, flexible APIs.","siteUrl":"https://developer.travelport.com/","llmstxt":{"hide":false,"sections":[{"title":"Table of contents","includeFiles":["**/*"],"excludeFiles":[]}],"excludeFiles":[]}},"dynamicMarkdocComponents":[],"compilationErrors":[],"ast":{"$$mdtype":"Tag","name":"article","attributes":{},"children":[{"$$mdtype":"Tag","name":"Heading","attributes":{"level":1,"id":"migration-guide-galileo-web-services-gws-to-tripservices-stays-api","__idx":0},"children":["Migration Guide: Galileo Web Services (GWS) to TripServices Stays API"]},{"$$mdtype":"Tag","name":"Admonition","attributes":{"type":"info"},"children":[{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This document provides general information about the Stays API. For the most current endpoints and examples, see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/getting-started/authentication"},"children":["Authentication"]},", ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/stays/general/stays-api-endpoints"},"children":["Stays Endpoints"]},", and the API References."]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"introduction","__idx":1},"children":["Introduction"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This migration guide assists developers in transitioning from Galileo Web Services (GWS) SOAP-based hotel booking to the modern TripServices Stays API. The TripServices API provides a RESTful interface with simplified request/response structures and improved performance."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Benefits of the TripServices API:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["REST/JSON instead of SOAP/XML - simpler integration"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["OAuth 2.0 authentication instead of WS-Security"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Cleaner, more intuitive data structures"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Better error handling with standard HTTP status codes"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Consolidated endpoints reduce complexity"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Two workflow options: v11 (multi-step) or SearchComplete (single call)"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"strong","attributes":{},"children":["Important:"]}," This guide covers migration to the TripServices Stays API, which has two versions:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["TripServices Stays API v11 - Multi-step workflow (Search > Availability > Rules)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["SearchComplete API - Single consolidated endpoint (recommended)"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This guide shows both paths so you can choose the best approach for your needs."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview-of-gws-hotel-booking-flow","__idx":2},"children":["Overview of GWS Hotel Booking Flow"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["As a quick refresher, GWS is a SOAP-based API using XML payloads:"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"class":"doc-table md","className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Step"},"children":["Step"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"SOAP Action"},"children":["SOAP Action"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What It Does"},"children":["What It Does"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Search"]}]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["HotelAvailability"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Find hotels with availability by location"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"ol","attributes":{"start":2},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Details"]}]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["HotelPropertyDescription"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Get property details and"," ","amenities"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"ol","attributes":{"start":3},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Rules"]}]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["HotelRateDescription"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Get rate rules and"," ","cancellation policies"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Characteristics:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Protocol: SOAP over HTTP"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Data Format: XML"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Authentication: SOAP headers with credentials"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Multiple SOAP operations for different functions"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Complex nested XML structures"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Property details require separate call"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Galileo-specific codes and formats"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"overview-of-tripservices-stays-api","__idx":3},"children":["Overview of TripServices Stays API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The TripServices Stays API is a modern RESTful API with two workflow options:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Option 1: TripServices API v11 (Multi-Step Workflow)"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"class":"doc-table md","className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Step"},"children":["Step"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Endpoint"},"children":["Endpoint"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What It Does"},"children":["What It Does"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"ol","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Search"]}]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["POST /search/properties/search"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Find hotels with property info"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"ol","attributes":{"start":2},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Availability"]}]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["POST /availability/catalogofferingshospitality"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Get available rates"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":[{"$$mdtype":"Tag","name":"ol","attributes":{"start":3},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Rules"]}]}]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["/rules/offershospitality/buildfromcatalogoffering"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Get rate policies"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Option 2: SearchComplete (Single Call)"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"class":"doc-table md","className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Step"},"children":["Step"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Endpoint"},"children":["Endpoint"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"What It Does"},"children":["What It Does"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Search"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["/search/searchcomplete"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Get everything - properties, rates, AND rules"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["TripServices API Characteristics:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Protocol: RESTful HTTP"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Data Format: JSON"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Authentication: OAuth 2.0 Bearer tokens"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Consolidated RESTful endpoints"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Simplified request/response structures"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Property details included in search response"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Standard HTTP status codes for errors"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Industry-standard codes and formats"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Recommendation: Use SearchComplete for new implementations. It reduces API calls from 3 to 1, simplifies state management, and provides better performance."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"key-differences-between-gws-and-tripservices-api","__idx":4},"children":["Key Differences Between GWS and TripServices API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Summary Comparison"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"class":"doc-table md","className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"Feature"},"children":["Feature"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"GWS (SOAP)"},"children":["GWS (SOAP)"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"TripServices API"},"children":["TripServices API"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Protocol"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SOAP/XML"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["REST/JSON"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Authentication"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SOAP headers with credentials"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["OAuth 2.0 Bearer tokens"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Request Format"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["XML with Galileo-specific structure"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JSON with industry-standard"," ","structure"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Response Format"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["XML"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["JSON"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Error Handling"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SOAP Faults"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["HTTP status codes + JSON errors"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Property Details"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Separate HotelPropertyDescription call"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Included in search response"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["API Calls for Shopping"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["2-3 calls (Availability, Description, Rules)"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["v11: 3 calls /"," ","SearchComplete: 1 call"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Endpoints"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Multiple SOAP operations"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["RESTful endpoints"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Documentation"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GWS"," ","specifications"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["OpenAPI/Swagger"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Code Format"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Galileo-specific codes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Industry-standard codes"]}]}]}]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"authentication-migration","__idx":5},"children":["Authentication Migration"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["GWS Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["GWS uses WS-Security with username/password in SOAP headers:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"xml","header":{"controls":{"copy":{}}},"source":"<soap:Header>\n  <wsse:Security>\n    <wsse:UsernameToken>\n      <wsse:Username>USERNAME</wsse:Username>\n      <wsse:Password>PASSWORD</wsse:Password>\n    </wsse:UsernameToken>\n  </wsse:Security>\n  <Header_v52_0:BranchCode>P1234567</Header_v52_0:BranchCode>\n</soap:Header>\n","lang":"xml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["TripServices API Authentication"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["TripServices API uses OAuth 2.0. First, obtain an access token (see ",{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"/docs/getting-started/authentication"},"children":["Authentication"]},"):"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"xml","header":{"controls":{"copy":{}}},"source":"Content-Type: application/x-www-form-urlencoded\n\ngrant_type=client_credentials &\nclient_id=YOUR_CLIENT_ID &\nclient_secret=YOUR_CLIENT_SECRET\n","lang":"xml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Then use the token in all API requests:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"xml","header":{"controls":{"copy":{}}},"source":"Authorization: Bearer YOUR_ACCESS_TOKEN\nXAUTH_TRAVELPORT_ACCESSGROUP: YOUR_PCC\n","lang":"xml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Differences:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["OAuth tokens expire in 24 hours and must be refreshed"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Access group (PCC) is now in XAUTH_TRAVELPORT_ACCESSGROUP header"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["No username/password in each authorization request - use token instead"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Token management required (cache tokens, refresh before expiry)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["More secure - tokens can be revoked without changing credentials"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"migration-path-1-tripservices-api-v11-multi-step-workflow","__idx":6},"children":["Migration Path 1: TripServices API v11 (Multi-Step Workflow)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This section shows how to migrate several GWS calls to the TripServices API v11 endpoints. This maintains the familiar multi-step workflow while modernizing the technology."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-1-hotel-search","__idx":7},"children":["Step 1: Hotel Search"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["GWS: HotelAvailability"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"xml","header":{"controls":{"copy":{}}},"source":"<soapenv:Envelope>\n    <soapenv:Body>\n        <HotelAvailability>\n            <CityCode>SFO</CityCode>\n            <CheckInDate>2025-03-15</CheckInDate>\n            <CheckOutDate>2025-03-17</CheckOutDate>\n            <NumAdults>2</NumAdults>\n            <NumRooms>1</NumRooms>\n            <RateCategory>STANDARD</RateCategory>\n        </HotelAvailability>\n    </soapenv:Body>\n</soapenv:Envelope>\n","lang":"xml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["TripServices API v11:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n \"PropertiesQuerySearch\": {\n  \"@type\": \"PropertiesQuerySearch\",\n  \"CheckInDate\": \"2025-03-15\",\n  \"CheckOutDate\": \"2025-03-17\",\n  \"SearchBy\": {\n   \"@type\": \"SearchByIATACode\",\n   \"IATACode\": \"SFO\"\n  },\n  \"RoomStayCandidate\": [\n   {\n    \"GuestCount\": {\n     \"AdultCount\": 2\n    }\n   }\n  ]\n }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Changes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["JSON instead of XML - simpler structure"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["SearchBy object for location (supports coordinates, city, airport)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["RoomStayCandidate structure replaces NumAdults/NumRooms"," ","Property details (images, amenities) included"," ","in response"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Property details (images, amenities) included in response"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["No separate HotelPropertyDescription needed"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-2-hotel-availability","__idx":8},"children":["Step 2: Hotel Availability"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["GWS: Availability in Search Response"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In GWS, availability is returned in the HotelAvailability response."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["TripServices API v11: Hotel Availability API"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["TripServices API v11 requires a separate availability call:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"{\n \"CatalogOfferingsQueryHospitality\": {\n  \"@type\": \"CatalogOfferingsQueryHospitality\",\n  \"PropertyIdentifier\": [\n   \"TVPT-12345\",\n   \"TVPT-67890\"\n  ],\n  \"HotelStay\": {\n   \"CheckInDate\": \"2025-03-15\",\n   \"CheckOutDate\": \"2025-03-17\"\n  },\n  \"GuestCount\": {\n   \"AdultCount\": 2\n  }\n }\n}\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Changes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Separate call required (different from GWS)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use PropertyIdentifier from search response"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Returns CatalogOfferingIdentifier needed for rules call"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Rate and room details in response"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["More detailed rate breakdown (base, taxes, fees)"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"step-3-rate-rules","__idx":9},"children":["Step 3: Rate Rules"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["GWS: HotelRateDescription"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"xml","header":{"controls":{"copy":{}}},"source":"<soapenv:Envelope>\n    <soapenv:Body>\n        <HotelRateDescription>\n            <HotelCode>12345</HotelCode>\n            <RatePlanCode>BAR</RatePlanCode>\n            <CheckInDate>2025-03-15</CheckInDate>\n            <CheckOutDate>2025-03-17</CheckOutDate>\n        </HotelRateDescription>\n    </soapenv:Body>\n</soapenv:Envelope>\n","lang":"xml"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["TripServices API v11:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"data-language":"json","header":{"controls":{"copy":{}}},"source":"{\n \"BuildFromCatalogOfferingsRequestHospitality\": {\n  \"CatalogOfferingIdentifier\": \"abc123-def456-ghi789\"\n }\n}\n","lang":"json"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Changes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use CatalogOfferingIdentifier from availability response"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Returns cancellation policies, deposit requirements, guarantees"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Simpler JSON structure vs XML"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["More detailed policy information than GWS"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Standard date/time formats (ISO 8601)"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"migration-path-2-searchcomplete-single-call","__idx":10},"children":["Migration Path 2: SearchComplete (Single Call)"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Recommended Approach"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["SearchComplete consolidates search, availability, and rules into a single endpoint. This is the recommended approach for new implementations as it reduces complexity and improves performance."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["GWS: Three Separate SOAP Calls"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["In GWS, you make:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["HotelAvailability - Search and get availability"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["HotelPropertyDescription - Get property details"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["HotelRateDescription - Get rate rules and policies"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["SearchComplete: Single REST Call"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["One call replaces all three"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"{\n \"stayDetails\": {\n  \"checkInDateLocal\": \"2025-03-15\",\n  \"checkOutDateLocal\": \"2025-03-17\",\n  \"guests\": {\n   \"numberOfAdults\": 2,\n   \"numberOfChildren\": 0\n  }\n },\n \"propertyFilter\": {\n  \"location\": {\n   \"iataCode\": \"SFO\"\n  },\n  \"returnOnlyAvailableProperties\": true,\n  \"returnRateSummaryInfo\": true\n },\n \"requestedCurrency\": \"USD\"\n}\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["What You Get Back:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Properties with all details (name, address, amenities, images)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Available rates with complete pricing"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Room type information"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Rate rules including cancellation and deposit policies"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["All in one unified JSON response"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Benefits vs GWS:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["One API call instead of three - reduced latency"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["No need to manage state between calls"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Simpler error handling (one point of failure)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Cleaner JSON structure vs XML"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Built-in caching for better performance"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Industry-standard codes instead of GWS-specific formats"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"booking-workflow-changes","__idx":11},"children":["Booking Workflow Changes"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The booking, retrieval, modification, and cancellation flows are similar between GWS and TripServices API, with the main differences being REST/JSON vs SOAP/XML format and modern data structures."]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"create-booking","__idx":12},"children":["Create Booking"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Changes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Use propertyKey and rateKey from search response"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Payment object structure simplified"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Guest details in cleaner JSON format"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Response includes reservation confirmation immediately"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Standard confirmation codes instead of GWS-specific formats"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"retrieve-booking","__idx":13},"children":["Retrieve Booking"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Changes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["RESTful GET instead of SOAP request"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Confirmation ID in URL path"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Complete reservation details in JSON response"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Standardized status codes"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"modify-booking","__idx":14},"children":["Modify Booking"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Changes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["RESTful PUT for updates"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Send only changed fields"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Response includes updated reservation"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Clearer modification rules and restrictions"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":3,"id":"cancel-booking","__idx":15},"children":["Cancel Booking"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Key Changes:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["RESTful DELETE for cancellation"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Cancellation penalties in response"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Standard HTTP status codes for success/failure"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Detailed cancellation confirmation"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"general-changes-and-considerations","__idx":16},"children":["General Changes and Considerations"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Error Handling"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"class":"doc-table md","className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"GWS"},"children":["GWS"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"TripServices API"},"children":["TripServices API"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SOAP Faults with error codes"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["HTTP status codes (400, 401, 404, 500, etc.)"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Error details in XML structure"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Error details in JSON errors array"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["TripServices API error response example:"]},{"$$mdtype":"Tag","name":"CodeBlock","attributes":{"header":{"controls":{"copy":{}}},"source":"{\n \"errors\": [\n  {\n   \"code\": \"INVALID_REQUEST\",\n   \"message\": \"Check-in date must be in the future\",\n   \"field\": \"stayDetails.checkInDateLocal\"\n  }\n ]\n}\n"},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Request/Response Size"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["TripServices API payloads are typically 40-60% smaller than equivalent SOAP/XML:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Faster transmission over network"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Reduced bandwidth costs"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Easier to parse and process"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["More human-readable for debugging"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Less verbose than GWS XML structure"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Development Tools"]},{"$$mdtype":"Tag","name":"div","attributes":{"className":"md-table-wrapper"},"children":[{"$$mdtype":"Tag","name":"table","attributes":{"class":"doc-table md","className":"md"},"children":[{"$$mdtype":"Tag","name":"thead","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"GWS"},"children":["GWS"]},{"$$mdtype":"Tag","name":"th","attributes":{"data-label":"TripServices API"},"children":["TripServices API"]}]}]},{"$$mdtype":"Tag","name":"tbody","attributes":{},"children":[{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["GWS"," ","specifications/documentation"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["OpenAPI/Swagger documentation"]}]},{"$$mdtype":"Tag","name":"tr","attributes":{},"children":[{"$$mdtype":"Tag","name":"td","attributes":{},"children":["SoapUI for testing"]},{"$$mdtype":"Tag","name":"td","attributes":{},"children":["Postman, Insomnia, curl for testing"]}]}]}]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Performance Improvements"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["OAuth token caching reduces authentication overhead"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["JSON parsing is faster than XML"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["SearchComplete API includes intelligent caching"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["RESTful architecture enables better CDN usage"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Smaller payload sizes improve network performance"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Reduced round trips with SearchComplete"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"migration-strategy-recommendations","__idx":17},"children":["Migration Strategy Recommendations"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Phase 1: Set up OAuth 2.0 authentication and test token management"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Phase 2: Create code/format mapping (GWS codes to industry standards)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Phase 3: Migrate search functionality (choose v11 or SearchComplete)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Phase 4: Test search thoroughly with various criteria"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Phase 5: Migrate booking workflow (create, retrieve, modify, cancel)"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Phase 6: Update error handling for HTTP status codes"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Phase 7: Performance testing and optimization"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Phase 8: Production cutover with monitoring"]}]},{"$$mdtype":"Tag","name":"Heading","attributes":{"level":2,"id":"conclusion","__idx":18},"children":["Conclusion"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Migrating from GWS to the TripServices Stays API modernizes your integration with significant benefits:"]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Technical Benefits:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Modern REST/JSON architecture vs legacy SOAP/XML"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Industry-standard codes and formats"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["OAuth 2.0 authentication with better security"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Significantly smaller payloads and faster performance"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Better development tools and documentation"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Standard HTTP status codes for errors"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Choice of workflow: v11 multi-step or SearchComplete single call"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Business Benefits:"]},{"$$mdtype":"Tag","name":"ul","attributes":{},"children":[{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Faster development and time-to-market"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Reduced bandwidth and infrastructure costs"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Easier maintenance and debugging"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Better performance for end users"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Modern architecture supporting future enhancements"]},{"$$mdtype":"Tag","name":"li","attributes":{},"children":["Alignment with industry standards"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["Recommendation: For new implementations, we strongly recommend using SearchComplete API. It provides the simplest integration path with best performance and represents the biggest leap forward from GWS. For existing v11 implementations, SearchComplete offers a clear upgrade path with significant benefits."]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["The Travelport team is available to assist with your migration. Contact your account manager or visit the developer portal for additional resources and support."]},{"$$mdtype":"Tag","name":"hr","attributes":{},"children":[]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":[{"$$mdtype":"Tag","name":"MarkdownLink","attributes":{"href":"mailto:john.callaway@travelport.com?subject=JSON%20API%20Hotel%20Feedback"},"children":["Provide feedback about this documentation"]}]},{"$$mdtype":"Tag","name":"p","attributes":{},"children":["This link does not provide Help Desk support. If you need immediate assistance with Travelport APIs, please create a support request in ",{"$$mdtype":"Tag","name":"Link","attributes":{"to":"https://my.travelport.com/","target":"_blank","rel":"noopener noreferrer"},"children":[" My Travelport "]}," or use your normal support path."]}]},"headings":[{"value":"Migration Guide: Galileo Web Services (GWS) to TripServices Stays API","id":"migration-guide-galileo-web-services-gws-to-tripservices-stays-api","depth":1},{"value":"Introduction","id":"introduction","depth":2},{"value":"Overview of GWS Hotel Booking Flow","id":"overview-of-gws-hotel-booking-flow","depth":2},{"value":"Overview of TripServices Stays API","id":"overview-of-tripservices-stays-api","depth":2},{"value":"Key Differences Between GWS and TripServices API","id":"key-differences-between-gws-and-tripservices-api","depth":2},{"value":"Authentication Migration","id":"authentication-migration","depth":2},{"value":"Migration Path 1: TripServices API v11 (Multi-Step Workflow)","id":"migration-path-1-tripservices-api-v11-multi-step-workflow","depth":2},{"value":"Step 1: Hotel Search","id":"step-1-hotel-search","depth":3},{"value":"Step 2: Hotel Availability","id":"step-2-hotel-availability","depth":3},{"value":"Step 3: Rate Rules","id":"step-3-rate-rules","depth":3},{"value":"Migration Path 2: SearchComplete (Single Call)","id":"migration-path-2-searchcomplete-single-call","depth":2},{"value":"Booking Workflow Changes","id":"booking-workflow-changes","depth":2},{"value":"Create Booking","id":"create-booking","depth":3},{"value":"Retrieve Booking","id":"retrieve-booking","depth":3},{"value":"Modify Booking","id":"modify-booking","depth":3},{"value":"Cancel Booking","id":"cancel-booking","depth":3},{"value":"General Changes and Considerations","id":"general-changes-and-considerations","depth":2},{"value":"Migration Strategy Recommendations","id":"migration-strategy-recommendations","depth":2},{"value":"Conclusion","id":"conclusion","depth":2}],"frontmatter":{"seo":{"title":"Migration Guide: Galileo Web Services (GWS) to TripServices Stays API"}},"lastModified":"2026-05-27T15:34:23.000Z","pagePropGetterError":{"message":"","name":""}},"slug":"/docs/stays/guides/migration/galileo-web-services-to-stays-json-api","userData":{"isAuthenticated":false,"teams":["anonymous"]},"isPublic":true}