Put each GDS or other travel-content provider behind its own adapter, then expose a shared booking model to the rest of your engine. Normalize common data such as itineraries, travelers, offers, prices, and reservations—but retain provider identifiers, terms, and capability flags so provider-specific booking and servicing rules are not lost. Treat shopping, price confirmation, reservation commit, ticketing, and post-booking service as distinct stages.
Start with a provider-aware architecture
A Global Distribution System connects travel sellers with travel providers’ schedules, availability, fares, and reservation systems. It is an intermediary, not the authority on inventory: Amadeus states that “The GDS provider does not hold travel inventory.” Your engine should therefore treat search results as offers that can change, and rely on the provider workflow for confirmation.
As an Amazon Associate I earn from qualifying purchases.
Use a provider adapter as the boundary between each external API and your internal booking domain. The adapter translates requests and responses, while the rest of the application works with shared concepts. This limits duplicated integration logic without pretending that all providers expose the same content or workflows.
Normalize what is genuinely common
A shared model can represent an itinerary, traveler, offer, price, reservation, and booking state. Keep essential context alongside those common fields: the source provider, provider-native offer and reservation identifiers, currency and price details, offer conditions, expiry information, and any provider reference required for a later request. Preserve provider-native data when it affects pricing, booking, ticketing, or servicing.
#1 Best Overall
Travelport describes its Universal API as using a normalized schema across content providers, while also warning that provider functionality differs. That is the key design trade-off: a common schema can reduce repeated integration work, but a lowest-common-denominator model can hide capabilities the customer needs. Keep the shared interface stable and allow explicit provider-specific extensions.
Make capabilities part of the model
Track capabilities at the level needed to make a valid decision. A provider-level flag may be sufficient for some functions; NDC support can vary by airline and country, so servicing or ticketing capabilities may need to be recorded by carrier, market, and booking state. Useful capability categories include repricing, payment, ticketing, seats and ancillaries, cancellation, exchange, and refund.
Keep shopping separate from booking
Search providers enabled for the requested market, normalize the responses, and rank or deduplicate results without dropping their provenance. An offer should retain its source, provider offer identifier, terms, price context, expiry information, and any capability details needed to book it. A visually identical itinerary returned by two providers is not necessarily the same offer or interchangeable at booking time.
Recommended Free Tools
Rank #2
- Used Book in Good Condition
Before adding an offer to a booking, check whether it is still valid and obtain a fresh price when the provider requires it. A displayed search price is not a final price guarantee. Travelport’s Flights Booking Guide documents cache retention of 12 minutes for GDS search results and 34 minutes for NDC search results. Its NDC Guide says the airline booking time limit is generally 20 to 30 minutes and varies by carrier. These are Travelport-specific documented windows, not universal GDS or airline rules; implement the validity behavior specified for each connection.
Do not merge away meaningful differences
- Deduplicate only when the offers are equivalent for the user’s decision, including relevant terms and provider constraints.
- Retain the provider identity through sorting, selection, repricing, and booking. A selected offer must be sent back through the connection that supplied it.
- Show material differences in price, baggage, fare conditions, or booking options when the source data supports them; do not infer missing terms from another provider’s result.
Orchestrate the booking lifecycle as separate states
Represent booking as a sequence of provider-aware state transitions, not a single “book” operation. One documented Travelport workbench flow creates a workbench, adds traveler and offer information, allows optional supported steps, and then commits the workbench. A successful commit creates a held booking, returns supplier confirmation, and provides a locator for later transactions. The guide says pricing occurs at commit in that workflow, so neither a successful search nor an offer-add step should be presented as confirmation of the final price.
- Search: Fetch and normalize offers from eligible providers, retaining source and offer identifiers.
- Refresh or reprice: Confirm the selected offer remains usable and retrieve current price and terms as required by that provider.
- Prepare the booking: Submit traveler data and the selected offer using the provider’s supported workflow. Add optional items only when that connection supports them.
- Commit: Complete the provider’s reservation workflow and capture the confirmation, locator or locators, and returned booking state.
- Ticket: Perform ticket issuance as its own transition when the workflow requires it. Do not equate a held reservation with an issued ticket.
Travelport’s documented flows differ between GDS and NDC in when form of payment is added. Some NDC flows support booking and ticketing in one session, while a ticketless-carrier flow has no separate ticketing step. These behaviors are specific to the documented API and must be checked for the provider and carrier you support.
Make uncertain outcomes recoverable
Network timeouts can leave your engine unsure whether a commit succeeded. Persist the request context and each state transition, and use the provider’s retrieval or recovery mechanism before retrying an operation that might create a reservation. Do not assume that a timeout means failure or that repeating a commit is safe; duplicate prevention and recovery behavior must be verified for each API.
Quick wins for a faster PC:
Repair Windows errors before they cause bigger problemsFix Now →Fix the driver behind crashes, sound loss and screen glitchesFind Drivers →Preserve every reservation reference
Assign an internal booking ID and map it to the provider, booking channel, and all supplier references returned. Never assume there is exactly one locator or that references from different channels can be used interchangeably. In Travelport’s guide, a GDS booking returns one locator issued by Travelport, whereas an NDC booking returns a carrier locator and a Travelport passive locator. Store each reference with its role and use the appropriate one for retrieval or follow-up operations.
Design servicing before launch
Retrieval, cancellation, exchange, refund, and changes are part of a booking engine’s core workflow, not cleanup tasks. The provider or carrier that created the booking may determine which operations are available and who performs them. Travelport states that NDC carriers directly handle ticketing and servicing for NDC content, while Travelport handles those processes for GDS content; some post-ticketing functions use separate APIs. Its documentation also notes carrier-specific variation in NDC capabilities.
Rank #4
Build a servicing matrix that records the supported action, source connection, relevant carrier or market restrictions, required booking state, and expected reference for each operation. If an action is unsupported or requires a different service path, expose that limitation clearly rather than silently routing it through a generic endpoint.
Independent reader supportYour contribution helps us test, update, and keep practical guides available for everyone.Choose direct connections or an aggregator against real requirements
Compare connection approaches using the markets and customer journeys your engine actually needs. Travelport presents Universal API as a single connection to multiple content sources and says one contract can simplify the relationship; that is the vendor’s description of its product, not a neutral comparison of every aggregator or direct connection. Even with a normalized intermediary, provider differences still need to be handled.
Outdated Drivers Are Slowing You Down
One free scan finds every outdated or missing driver and matches the right update for your exact hardware.Free scan · exact hardware matchPC Slower Than It Used to Be?
A free scan shows the junk files, broken settings and background clutter dragging Windows down - then fixes them in one click.Free scan · Windows 10 & 11| Decision area | What to verify | Why it matters |
|---|---|---|
| Content and market coverage | Required providers, carriers, countries, and travel products | A connection is useful only if it covers the customers and itineraries you serve. |
| Workflow coverage | Search, repricing, booking, ticketing, seats and ancillaries, cancellation, exchange, and refund | Search coverage alone does not establish that the full customer journey is supported. |
| Normalization and control | Which fields and workflows are standardized, and where native details remain accessible | Abstraction can reduce repeated work, but can also constrain provider-specific functionality. |
| Commercial and operating model | Credentials, contracts, support, certification, and production-access requirements | These terms depend on the chosen providers and agreements; they cannot be assumed from the API model. |
| Reliability and recovery | Latency, error semantics, support paths, and booking recovery behavior | Operations teams need a way to diagnose provider failures and resolve uncertain booking states. |
Confirm country and market needs before choosing an architecture. Direct connections may offer more direct control over provider-specific behavior; an intermediary may reduce the number of integrations your team maintains. The right trade-off depends on actual coverage, serviceability, commercial terms, support, and engineering capacity—not on the number of APIs alone.
Best Value
Make provider selection configurable and observable
Keep provider enablement and routing policy out of hard-coded business logic. Configure eligibility by market and itinerary, timeout and retry behavior, fallback rules, and ranking criteria. A fallback should not silently substitute a materially different offer; preserve the source and revalidate the replacement before booking.
Record provider request IDs, offer IDs, response latency, errors, price changes, booking state transitions, and locator mappings. These records help support teams trace a search through commit and servicing, and help engineers distinguish a provider failure from a normalization or orchestration defect.
Validate the complete customer journey
Test each provider independently before testing cross-provider behavior. Include the normal path and failure boundaries so the engine does not treat search success as proof that booking or service will work.
- Search results preserve provider source, terms, identifiers, currency, and relevant capabilities.
- Expired or changed offers trigger the documented refresh or repricing path.
- Commit outcomes are reconciled after timeouts before a potentially duplicating retry.
- Held bookings and ticketed bookings are distinguishable in the interface and internal state.
- All returned locators are stored with their provider and purpose.
- Retrieval, cancellation, exchange, refund, and changes are tested for each applicable provider, carrier, and market.
- Errors and unsupported capabilities produce an actionable path rather than a misleading success state.
Provider credentials, certification, access terms, and production requirements vary by contract and implementation; confirm them directly with the connections under consideration.
Quick Recap
Product prices and availability are accurate as of the date/time indicated and are subject to change. Any price and availability information displayed on Amazon at the time of purchase will apply.




