If you've ever seen "TBA/TBA" as a passenger name in a flight booking, it's not a glitchโit's a feature. After booking a cheap group fare on Yatra.com, I discovered the hidden world of airline group bookings, and uncovered a real bug with same-name passengers.
In this post, we'll unpack:
- How group fare booking systems work
- Why "TBA" exists in airline PNRs
- What developers building travel systems should know
- A critical bug I found: Same-name passengers causing seat swaps
โ๏ธ 1. What Are Group Fares?
Group fares are special airline rates for 10+ passengers traveling together on the same flight and date.
Common use cases:
- ๐ข Corporate trips
- ๐ Weddings and family gatherings
- ๐ Pilgrimage or religious tours
- ๐ School or sports teams
Unlike individual bookings, group fares are:
- Negotiated directly with airlines or via GDS
- More flexible with payment schedules
- Allow placeholder names initially
2. Business Logic: The Group Booking Flow
Here's how it works from an OTA or travel agent's perspective:
| Step | Process | Description |
|---|---|---|
| 1๏ธโฃ | Group Quote Request | Agency requests fare for route, date, and passenger count |
| 2๏ธโฃ | PNR Creation (TBA stage) | Airline/GDS creates group PNR with placeholders like TBA/TBA
|
| 3๏ธโฃ | Deposit & Hold | Group pays deposit to hold seats |
| 4๏ธโฃ | Name Finalization | 12โ72 hours before flight, replace "TBA" with real names |
| 5๏ธโฃ | Ticketing | Once names finalized, tickets are issued |
๐ 3. What Does "TBA" Actually Mean?
TBA = To Be Advised
When creating a group booking, actual passenger details may not be known yet.
Example in GDS (Amadeus/Sabre):
Each entry reserves a seat while allowing the agent to:
- Hold inventory without final names
- Track blocked seats in airline systems
- Display flight details before passenger confirmation
How GDS Systems Power This Magic
Behind the scenes, OTAs don't talk directly to each airline. They use GDS (Global Distribution System) โ think of it as the "API gateway" of the travel industry.
The Big Three:
- Amadeus (European dominance)
- Sabre (Strong in Americas)
- Travelport (Galileo/Worldspan/Apollo)
โฐ 4. The 12-Hour Rule
Most airlines require final passenger names no later than 12 hours before departure.
What happens at finalization:
- โ All "TBA" placeholders updated with real names
- โ ๏ธ Unnamed passengers may auto-cancel
- ๐ซ Group PNR transitions to ticketed state
This is why Yatra/MMT show "flight details visible before 12 hours" โ the system holds the group block, but names are pending.
5. System Architecture Flow
Key technical points:
- Placeholders stored in PNR until replaced
- Airlines track via group booking IDs (not individual tickets)
- Background jobs handle PNR sync and updates
๐ป 6. How OTAs Handle This (Developer View)
For platforms like Yatra or MakeMyTrip:
// Simplified model
const groupBooking = {
pnr: "ABC123",
status: "TBA_PENDING",
passengers: [
{ firstName: "TBA", lastName: "TBA", title: "MR" },
{ firstName: "TBA", lastName: "TBA", title: "MS" }
],
finalizationDeadline: "2025-11-08T10:00:00Z",
flightDetails: { visible: false } // visible after name update
};
Backend requirements:
- Handle placeholder data models
- Schedule PNR refresh/update jobs
- Implement deadline alerts
- Validate against duplicate names (see bug below!)
7. CRITICAL BUG I DISCOVERED: Same-Name Collision
The Problem
When booking through Yatra's group fare system, I found:
If two passengers have the same name:
- โ During web check-in, the system will display both passengers names when the PNR and last name are entered together.
- โ Boarding passes get mixed up
- โ Airport staff can't distinguish passengers
- โ Potential security and check-in issues
Example Scenario
// Booking for two people with same name
passengers: [
{ firstName: "Amit", lastName: "Kumar", seat: "12A" },
{ firstName: "Amit", lastName: "Kumar", seat: "12B" }
]
// What happens in airline system:
// PNR shows: KUMAR/AMIT MR + KUMAR/AMIT MR
// Boarding pass generates wrong seat for one passenger
Why This Happens
-
GDS Name Formatting: Airlines use
PNR and LASTNAMEcombination - Duplicate Detection: System may treat as duplicate entry
- Seat Assignment Logic: Uses last name as primary key
- Group PNR Merge: Multiple "AMIT KUMAR" entries cause confusion
Recommended fixes for OTAs:
- ๐ Pre-booking validation for duplicate last names
- ๐ Force middle name or mobile number for duplicates
๐ฎ 8. Future: NDC and Modern APIs
IATA's NDC (New Distribution Capability) is modernizing group fares:
- โก Real-time quotes and seat holds
- ๐ Easier passenger data updates via REST APIs
- ๐ Reduced reliance on "TBA" placeholders
- ๐ค Direct airline-to-OTA connections
Though many airlines still support TBA for backward compatibility.
9. Key Takeaways
| Point | Reality Check |
|---|---|
| โ "TBA" is a feature, not a bug | Intentional placeholder system for group inventory management |
| โฐ The 12-hour rule has a twist | Names often start reflecting from midnight (not exactly 12 hours), which can frustrate travelers expecting earlier updates |
| ๐ฐ How OTAs really make money | Indian OTAs like Yatra/MMT book group fares and mark them upโthis is on top of convenience charges. That "cheap fare" might just be a group booking arbitrage |
| ๐จ Same-name = system chaos | Multiple passengers with identical last names create PNR conflicts, seat swaps, and boarding issues |
| ๐ญ The agent model | OTAs aren't always direct airline partnersโmany operate as super-agents booking group blocks and reselling individually |
๐ฌ Discussion
For developers building travel systems:
- How does your system handle group booking placeholders?
- Ever encountered the same-name bug I found?
Drop your experiences in the comments! ๐
๐ Useful Resources
This post is based on real-world experience booking through Yatra.com. If you found this helpful, consider sharing it with your travel-tech friends! โ๏ธ
Tags: #traveltech #backend #systemdesign #api #devstory
Top comments (0)