We are happy to announce our latest TripBuilder release. Please see these release notes for the most significant changes. Let us know if you have any questions, feedback, or ideas for features or improvements!
By email: [email protected]
Via help center: https://help.tripbuilder.app/en/
.DISCOVERY
Full-screen photo viewer for hotel galleries
Hotel detail pages in the new hotel only flow now open a full-screen photo viewer when you click a gallery image, letting you browse every photo of the hotel — not just the first five. Navigate with arrows, thumbnails, or your keyboard.
NTP-70076
.PLANNER
Filter hotel search results by property and room amenities
Hotel-only search flow now supports filtering by property and room amenities (e.g. pool, wifi, kitchen), so users can narrow results to hotels that have exactly what they’re looking for.
NTP-69758
.SMART PLANNER
Fixed hotel meal info incorrectly showing “No meals included”
Hotel recommendation cards and the hotel details view sometimes showed “No meals included” even when a meal plan like breakfast was part of the offer. This is now fixed — Smart Planner displays the correct meal information for every hotel offer.
NTP-69844
Fixed “Customise” on multi-day activities falling back to the wrong view
“Customise” on a multi-day activity used to silently jump to the “Change activity” list instead of showing its details, due to a failed request. It now correctly shows the activity details, with a clear error message if loading ever fails.
NTP-70087
“Scheduled” and “Time set later” tags on ground transport offers
Ground transport offers now show whether pickup time is fixed (“Scheduled”) or confirmed later by the agent/supplier (“Time set later”), with a clear message replacing the timeline for on-request offers.
NTP-69143
.COCKPIT
Rental cars support per-day markup
We've added a "per day" markup option only for rental car components in the Cockpit markup editor and default markup table, alongside the existing percentage, per-booking, and per-pax options.
Users now set a rental car markup that scales with rental duration instead of only as a flat percentage or fixed amount.
Existing rental car markup configurations are unaffected and remain visible and applicable as before.
NTP-68969
Cancellations with a permanently-failed component are now visible in Cockpit
When a cancellation completes despite one or more components permanently failing to cancel at the supplier, Cockpit now records what happened: an itinerary audit entry, a note listing the affected components, and a system event with the underlying technical error.
Previously the only signal was a "cancellation failed" email that was immediately followed by a second "cancellation confirmed" email, with no persistent record anywhere that a component was still booked at the supplier.
This applies to distribution channels using the "Ignore Failed Cancellations" setting, where a full itinerary cancellation is allowed to complete even when some components couldn't be cancelled.
NTP-69705
Component Status Report and On Request queue no longer duplicate or misreport statuses
We improved an area of Customer Care with issues where a booking change could leave stale rows behind in the Cockpit Component Status Report and the Components > On Request queue with the same component showing twice, or showing an outdated status that didn't match the itinerary itself.
In the main each component now appears once, with the status the itinerary detail view already shows. We have some small follow up scenarios we continue to work on.
NTP-69870
Configure a fixed promo code on templates
Template creators can now attach a fixed promo code to a template. At checkout, customers simply check a box to self-declare and apply it — no manual code entry needed. Available per company via a new merchant setting.
NTP-68788
.APIs
Booking API no longer fails on a component dated on a daylight-saving changeover day
Fixed a Booking API crash affecting bookings with a manually added component whose date falls on a day when the destination's local midnight doesn't exist because of a daylight-saving transition — for example, Egypt's spring-forward date. The API now serialises these dates correctly instead of returning a server error.
NTP-69926
Booking API enhancements
Integrators relying on the Booking API for language rendering or supplier reconciliation get more complete and accurate data as a result.
We introduced a new ?lang=itinerary option returns booking content in the itinerary's own preferred language in a single call, instead of requiring an extra request just to discover it.
And externalReferences, which are used to reconcile supplier IDs, are now included on components inside booking history, including cancelled ones.
NTP-67650, NTP-67649
Distribution channel now available on Planner API itinerary responses
The Planner API now returns the distribution channel that owns an itinerary — including for itineraries still in planning, before booking. This lets integrators theme documents and content correctly earlier in the process.
NTP-69465
More amenity and pricing detail on activity offers via the API
The activities/offers API endpoint now returns amenity details, inclusion policy, and pricing dimensions (per pax/group, per stay/night) — matching what’s already available on the activities endpoint.
NTP-60501
Rental car search, offers & vehicle details now available via API
The product API now supports rental cars — search, offers and vehicle details — covering supplier, filters (transmission, kitchen, bathroom, and more), and vehicle types.
NTP-69209
.INTEGRATIONS
Rental car search results now show the supplier name for Alamo and Sunnycars
We now return the rental brand name (for example Alamo, National or Enterprise) on Alamo offers, and the rental company name on Sunnycars offers, through the Product API. Previously these offers carried no supplier name, so searches filtered by supplier could never match them.
An unknown Sunnycars offer reference now returns a proper not-found response instead of a generic error, so partner integrations can tell a missing offer apart from a real failure.
NTP-70263
Travel Exchange search no longer returns tours that can never be booked for the selected room
We fixed Travel Exchange activity search so it no longer lists tours that room availability always rejects. Previously, searching with 3 or 4 travelers in one room could return tours that failed with "this activity is not available anymore" the moment an agent tried to select one.
Search now filters out tour dates that don't offer the required room type, so agents only see tours they can actually book.
NTP-69393
Expedia hotel content updates land faster overnight
We rewrote a slow text-conversion step in the nightly Expedia hotel import, cutting run time by roughly 44%. The previous version scaled poorly with long hotel descriptions, and the import was taking about 10.5 hours.
Other importers that share the same conversion step, such as GIATA, benefit from the same speed-up. Imported content itself is unchanged — only the processing time improved.
NTP-70088
Flight bookings from TravelFusion now return the correct PNR
We now populate the pnrLocator field with the supplier's own booking reference on Connect API transport bookings from TravelFusion, instead of leaving it empty. The booking ID field continues to carry TravelFusion's own reference.
This lets partner integrations reliably retrieve and refresh the PNR for TravelFusion bookings through the Connect API.
NTP-70072
Expedia hotel photos are now labeled with the room they show
We now title Expedia hotel pictures with the name of the room they belong to, for example "Apartment, 2 Bedrooms, Terrace." Previously these pictures carried only a generic caption such as "Room," or no caption at all.
Pictures that aren't tied to a specific room keep the best available label from Expedia's own content.
NTP-70016
Accommodation content rules now narrow hotel search results earlier
We now apply accommodation content rules for hotel star rating, guest rating, country, and area directly on the hotel search itself, rather than only after candidates have already been retrieved. Previously, a strict rule (for example, requiring hotels rated 4 stars and above, or restricted to a specific country or area) could discard most of the fetched candidates after the fact, so agents sometimes saw fewer or lower-quality options than the inventory actually had available.
With the rules applied earlier, the search retrieves hotels that already satisfy them whenever possible, so agents see a more complete and relevant set of results. The existing check after the search still runs as a safeguard, so nothing that should be filtered out can slip through.
NTP-69155, NTP-69620, NTP-69910, NTP-69970
Hotel add and replace is reliable again on TravelGateX-connected channels
We fixed a configuration error that set the TravelGateX quote timeout to 19 milliseconds instead of 20 seconds, which made every hotel add or replace attempt fail with "not available" on TravelGateX-connected distribution channels.
The timeout is now correctly set, and hotel selection in the planner and at checkout works as expected again.
NTP-69913
Checkout availability checks no longer fail outright when a supplier takes too long to respond
Checking availability during checkout for accommodation bookings routed through TravelGateX could return a generic failure if the supplier's response took longer than our internal deadline. Bookings were blocked outright with no way for the agent to continue, even though other suppliers timing out on the same screen were already handled by marking the affected item unavailable and letting the agent replace it.
We now handle a slow TravelGateX response the same way we handle other supplier failures on this screen: the affected component is marked unavailable so the agent can swap it out and continue the booking, instead of the whole checkout failing.
NTP-69887
Accommodation properties without guest rating data now import correctly
Some accommodation content we receive through the Connect API does not include guest rating information for every property. Our import previously treated ratings as a required field, so a property missing this data could fail to import even though nothing else was wrong with it.
We no longer require ratings on import, so properties without guest rating data are added to the catalogue as expected.
NTP-69889
Hotel location details now show the correct country name for AlliedTPro properties
The Location panel on AlliedTPro hotel detail pages was showing a raw text key, such as "enum.country.United States", instead of the country name. This also meant country-based content rules never matched AlliedTPro hotels, since the system was not storing a recognized country code for them.
We fixed how the country is imported, so the Location panel now shows the correct country name and country-based content rules apply correctly to AlliedTPro properties.
NTP-69672
Star ratings now display for AlliedTPro hotels
AlliedTPro hotel cards in search results and detail pages were showing no star rating, even when the same property already had a rating on file elsewhere. This made it hard for agents to compare AlliedTPro hotels against other options.
Star ratings now display correctly for AlliedTPro hotels throughout search and details. Amenity icons for these properties remain out of scope for now and are tracked separately.
NTP-69671
Flight bookings through TravelFusion are less likely to fail when supplier confirmation is slow
TravelFusion booking confirmations can occasionally take longer than our system previously allowed, which meant the booking request could time out before we knew the real outcome. We now keep checking for a result in the background after responding, and confirm the final booking outcome once it is available, in line with what TravelFusion's certification requires.
This does not change how quickly a normal booking completes; it only affects the small number of cases where supplier confirmation is unusually slow.
NTP-70074
Trip creation from a selected flight no longer crashes outright when fare verification is slow
Creating a trip from a selected SOFTCONEX flight offer runs a live fare check with the supplier before the trip is created. When that check took longer than our internal limit, the request failed with an unclear error and no trip was created.
We now handle this case the same way as other supplier failures: the trip is created with the flight marked as unavailable so the agent can recheck or retry, instead of the request failing outright. This does not address the underlying supplier response time itself, which remains a separate, ongoing investigation.
NTP-69959
Koob room configurations for children now select correctly
We fixed how Koob's child-inclusive room configurations are handled in TripBuilder. Rooms that include a child could previously appear in the room selection list but could not be selected, and the number of adults shown for the room was inflated by one for each child in it.
Room configurations are now selectable whenever a searched child's age is at or below the maximum age Koob sets for that room, matching how the Connect API defines the field. Adult and child counts shown for each room now match exactly what Koob sends.
NTP-69700, NTP-69618
Fixed selecting TravelExchange multi-night packaged tours
We fixed an issue where selecting certain TravelExchange multi-night packaged tour activities failed with an "Updating activity failed" error. The request TripBuilder sent to TravelExchange for these products was missing required room allocation information, which TravelExchange needs to calculate a price.
Agents can now select these multi-night tour activities without errors. This fix covers the Select action in the activity list; the same products failing during template-based itinerary creation is tracked separately.
NTP-67214
Costa Cruises activities added to templates now appear correctly for travellers
We fixed an issue where a Costa Cruises activity added to a module or template did not appear in the Travel Planner once a traveller created an itinerary from that template. The activity was configured correctly in the template but was silently dropped during itinerary creation.
Costa Cruises activities added to a template are now instantiated with the correct product, dates, and price when a traveller starts planning from that template.
NTP-69702
Activity search results respect the requested date range more consistently
We improved how multi-day activity searches apply their date range. Previously, some searches only checked that an activity started within the requested window, so a multi-day tour or cruise could be returned even though it ran well beyond the dates asked for.
Connection searches along a route now apply the full date range consistently with how other activity searches already worked, making results more accurate for multi-day products.
NTP-69614
Room selections are preserved correctly when itineraries are rebuilt
We fixed an issue where certain itinerary changes — such as adjusting stay length or dates — could silently drop a room from an itinerary with more than one room booked, without any visible warning. The missing room's price and traveller allocation were lost even though the itinerary still showed the original number of travellers.
Itineraries now restore any missing room automatically when they are rebuilt, keeping room count, pricing, and traveller allocation consistent.
NTP-68751
Musement activity bookings are no longer rejected for a phone number the customer already answered
We fixed a booking rejection affecting Musement activities that ask for a phone number as part of the checkout questions. Previously, some activities correctly showed and required a phone number field during checkout, but the answer wasn't reaching the field Musement validates at booking time, so the booking was rejected with a "blank" error even though the customer had filled it in.
Bookings for these activities now complete successfully with the phone number the customer provided.
NTP-68403
Musement activity bookings can now be retried after an initial failure
We fixed a bug that made a failed Musement activity booking non-retryable. Previously, once a Musement activity booking failed for any reason, retrying it — manually or automatically — immediately failed again with an unrelated internal error ("No cartId provided") instead of attempting the booking again.
Retries now re-establish what's needed before attempting the booking, so a failed Musement activity booking can succeed on retry instead of being permanently stuck.
NTP-68400
Added the Hainan Airlines (HU) logo to flight displays
We added the missing carrier logo for Hainan Airlines (IATA code HU). Flight cards in the Planner previously showed blank space where this airline's logo should appear; they now display the correct logo.
NTP-68738
Added Divi Divi Air (3R) airline details and logo
We added Divi Divi Air N.V. (IATA code 3R, ICAO DVR) to our airline database with its logo, name and country details, so flights on this carrier now display correctly instead of showing incomplete or missing airline information.
NTP-68360
Nezasa AI hotel suggestions now respect star-rating filters
We fixed how Nezasa AI applies star-rating filters when suggesting hotels. Previously, when a traveler asked for hotels within a specific star rating (for example, "only 4-star hotels"), the filter wasn't applied to an instance's recommended hotels, so non-recommended hotels could be suggested even when matching recommended hotels existed.
Recommended hotels that match the requested star rating are now preferred over non-recommended ones, while trip planning without a star-rating filter and searches for a specific hotel by name continue to work as before.
NTP-64253
