Products

Travel distribution

Unified travel API aggregation engine

One canonical shop, price and book contract across multiple Tier-1 GDS, airline-direct NDC, LCC and consolidator feeds — the engine behind the B2B, B2C and developer-API channels.

Architecture diagram: GDS, NDC, LCC, consolidator and content-hub suppliers feeding a canonical shop, price and book contract with a Redis cache, serving B2B, B2C, developer API and white-label channels.

Overview

The engine sits between the suppliers that hold flight and hotel content and the channels that sell it. Every supplier is mapped into one internal contract at the edge, so the logic that prices, caches and books never needs to know which supplier a result came from. Behind that contract are all three major global distribution systems, multiple airline-direct NDC endpoints, an NDC retailing-platform AirShopping layer, a European LCC aggregator and a regional flight-content hub.

Approach

Canonical models over adapters everywhere. Supplier adapters handle protocol, envelope and namespace differences — SOAP/XML with C14N and XSD on one side, JSON REST on the other — and emit the same canonical shopping, pricing and booking structures. NDC proxies and clients were built and debugged end to end, including AirShopping request and response handling and auth-scheme rewrites.

Shopping that the front end can use directly. Results from concurrent supplier calls are merged, de-duplicated and ranked by a beautification pipeline. Branded fares and fare families are normalised — ancillaries, baggage and attributes — into an upsell matrix that compares like with like across carriers, and a baggage-allowance API reconciles piece-based and weight-based concepts.

Caching that stays correct. A 90-day rolling fare-calendar cache backs low-fare calendar search, with tiered TTLs balancing supplier look-to-book limits against freshness. Cache keys are derived only from semantically stable request fields: an investigation found that volatile per-call attributes such as TraceId and BookingTravelerRef were poisoning hashes, and that XML canonicalisation was silently returning empty strings and collapsing distinct requests onto one key.

Measured performance. The supplier JSON beautification hot path was benchmarked across PHP 7.4, PHP 8.4, Node.js and Go on identical payloads. The production PHP function was then optimised to byte-identical output at about 3.3x throughput, avoiding a cross-language rewrite while keeping a regression-safe diff.

Bookings in one shape. A supplier-sync and booking-details normalisation layer reconciles heterogeneous PNR and order structures into one canonical booking model, so post-booking operations work the same regardless of source.

Outcome

The same engine powers B2B agent distribution, a B2C booking portal, white-label channels and a public developer platform with documentation, a sandbox and key provisioning for resellers.

Discuss a similar project

For product, architecture, travel-technology or AI work, partnerships, speaking and media requests.