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)