
Who lost my lap infant? My attempt to reverse engineer a decade-long airline bug
We knew something was amiss when neither my partner nor I could check in for our flight online. For the past decade, we had made the same annual trip, flying from San Francisco through Frankfurt to Helsinki and back. Th…
以下正文同步自 Hacker News 最新,版权归原站所有,已转换为易读排版。
Julie
Oct 01, 2026
7
1
Share
Stress upon stress
We knew something was amiss when neither my partner nor I could check in for our flight online. For the past decade, we had made the same annual trip, flying from San Francisco through Frankfurt to Helsinki and back. This would be our first time traveling with a child — we were making the brave 18+ hour journey with our baby daughter on my lap.
We arrived early at the airport and hurried to the check-in desk to speak with a United agent. As the agent pulled up our reservation, her cheery confidence turned to concern. There was a puzzling issue: while my partner and I were booked correctly, our daughter did not have a ticket. The agent called over her supervisor, who reassured us that she could manually issue a ticket to secure a boarding pass for our daughter. The supervisor typed at the console with the intense focus of a software engineer as minute after minute dragged on. Finally, as promised, our boarding passes started to print. I figured this was all part of the experience — flying a baby across the Atlantic is not for those with fragile nerves, especially with a layover and a long drive. We prepared our daughter’s morning bottle and braced ourselves for a sleepless trip with more than a few diaper changes in a tiny, jiggling bathroom.
On our way back from Helsinki, the first leg of our journey was operated by Lufthansa through a codeshare with United. We again couldn’t check in online and arrived early to speak with a check-in agent. I was expecting a missing ticket, plus the same slow but workable manual fix. But the Lufthansa agent said something baffling: our baby was not only missing a ticket, there was no record of her at all on the reservation. Even worse, there was no way for them to fix the final cross-Atlantic segment, as only United could make the necessary updates. We held up the line for more than an hour as the agent worked to reach a United representative over the phone. As our desperation mounted, we somehow convinced her to let us board the first flight to Frankfurt, so we could speak with a United agent and sort out the broken final segment.
After another tense “programming session” at the Frankfurt United desk, we made it home. I wondered — was this just a one-off glitch with our booking? It sounded strangely similar to what my sister-in-law experienced the summer before, flying home from Germany with her two kids. At the airport near her parents’ house, Lufthansa had also told her there was no record of her baby. But she was less fortunate — Lufthansa refused to let her board the flight and made her rebook the trip. When she got back to the airport, the same issue happened again, but this time she persisted and boarded the flight.
It turns out my family is in good company. A quick internet search turned up more than ten posts where United appears to have booked a lap infant incorrectly, with examples spanning more than a decade [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]. Here are just a few quotes:
they could not print out tickets for the infant on Lufthansa because it appeared that the infant was not on Lufthansa’s reservation – ahhhh! (United Infant Ticket Problems, 2013) [1]
…but said that we couldn’t board the plane in POS because they couldn’t find my infant’s reservation in their system (Air Passenger Rights (Canada), 2019) [4]
… when I went to check in with LH at FRA, they said my infant did not have a ticket! (Paid for Infant in lap but no ticket at check in, 2023) [6]
Coming home, again couldn’t check in with the infant. Went to the airport and they told me the infant does not have a ticket. (Forced to pay for infant, 2024) [9]
Unbelievably, this agent said our baby was not booked for the flight. I told her I had a receipt for the $85 that I had paid to United Airlines for the lap child ticket. (Help! Why did United Airlines charge me twice for my lap baby?, 2025) [10]
The problem is too widespread and persistent to be a one-off booking error. And despite our nerve-wracking experience with Lufthansa, the evidence pointed largely to United.
This really smelled like a software bug, or perhaps a class of related bugs. The setup has classic components that make software defects more likely: a relatively uncommon input (lap infant on an international flight), coordination between distributed systems (due to interlining / codeshares), and a complex specification (infant ticketing rules, which depend on both the airline and the journey’s destination).
I was too curious. What could the issue plausibly be? Plus, if I could get a grasp of what’s happening technically, it could save us (and others) a lot of stress on future trips.
I began with something that had baffled me in our first chat with the United agent: how could our daughter be on the reservation but not have a ticket? When you book flights, aren’t you purchasing a ticket?
It turns out there are actually two separate steps to the booking process, which produce two separate records:
A reservation for an itinerary, which is what you typically see in a confirmation email. Reservations are identified by a confirmation number like MZXTIF, and hold information on who is flying, the exact flights they will take, as well as ancillary details around baggage, seat assignments, and more. A single reservation can include flights on multiple airlines, say a United flight from San Francisco to Frankfurt, then a Lufthansa flight from Frankfurt to Helsinki.
A ticket for each passenger’s journey. Once United accepts your reservation, it must then ticket the itinerary to finalize your trip — this is why some confirmation emails say “We’re processing your request and will issue your ticket soon.” The ticket is critical, as it’s what actually allows you to check in and board the flight. Ticketing a reservation is a nuanced process which involves checking the itinerary against the applicable fare rules (domestic or international) to compute the fare, taxes, and fees. While tickets are often issued quickly and without problems, it’s possible for the process to take several days, or to fail completely in (rare?) circumstances.
With this knowledge, I could more precisely categorize the issues with lap infants:
Missing ticket: you successfully make a reservation through United for both yourself and a lap infant. But your lap infant fails to be ticketed. Without a ticket, the baby isn’t allowed to board the flight.
Missing from reservation: again, the reservation process seems to have been successful. But when you go to check in with a partner airline like Lufthansa, they have no record of your baby on their copy of the reservation.
Both the reservation and ticketing processes are technically and operationally complex. Say you book a multi-airline itinerary — United must search and secure seats in Lufthansa’s inventory, then ticket the entire trip. In an interline trip or codeshare, the reservation must be copied from the ticketing airline’s system (United) to the operating airlines’ systems (like Lufthansa) and kept in sync. And before check-in, the ticketing airline must transfer some control of the ticket so the operating airline can board passengers.
It doesn’t help that several airlines still run their Passenger Service Systems (PSS) on IBM mainframe software. And it certainly doesn’t help that current standards for data exchange have their roots in teletype formats of the 1960s, the dawn of mass air travel.
Once I dug into how reservations are modeled and communicated between carriers, some problems came into focus. The main data type in a reservation is the passenger name record (PNR), which holds the itinerary for a group of passengers traveling together. The PNR includes each passenger’s name, plus information on all flight segments. Each passenger entry can then include special service requests, or SSRs, for one or more flight segments. According to Wikipedia, SSRs typically include “meal requirements, wheelchair assistance, and other similar requests”. The IATA AIRIMP standard governs how PNRs are structured when reservation messages are passed between systems.
So how are lap infants modeled? Naively, you’d expect them to always have their own passenger entry alongside the adult travelers, perhaps with a special type annotation like “infant”.
According to IATA’s messaging standards, a lap infant is actually a special service request. Lap infants are encoded as an SSR entry on the adult passenger they’ll sit on, for each segment they’re flying. So in messages between systems, the SSR data type might request a vegan meal (VGML), warn of bulky sports equipment (SPEQ), or … provide the main record of a tiny human being on your reservation (INFT).1
1TIBSHIRANI/JULIE MS SSR VGML UA NN1 SFOFRA 0058Y19JUL SSR INFT UA NN1 SFOFRA 0058Y19JUL.WAGER/SOFIA 01JUL24
A clear challenge with this data model is that it uses the same parent type for both nice-to-have information like meal preferences and absolutely critical information like “there is another person on this flight”. It’s also an exception to the usual rule of “one passenger entry to one ticket”.
It’s easy to imagine that an SSR could be lost when copying a reservation from one airline’s system to another: perhaps the receiving system doesn’t support the specific request code, or there’s an issue parsing and validating the content, resulting in the SSR being silently dropped. If I book through United, I half expect to have to remind Lufthansa that I’d like an Asian vegetarian meal (AVML, my favorite!)
Rebooking also presents a risk: if an adult is rebooked onto a new flight segment, then any associated SSR INFT must be carried over, or else a key record of the infant could be lost. Plus, the system must recognize that the infant needs to be re-ticketed along with the adult.
Around 2010, the US Transportation Security Administration (TSA) started requiring that reservations include additional information on each passenger for screening against government watch lists, a program called Secure Flight. To encode this Secure Flight data, the airlines reused an existing SSR called DOCS, which was already used to transmit document information like passport numbers. For every flight touching US airspace, each passenger on the PNR must have an SSR DOCS entry, specifying their full name, date of birth, and gender.
Secure Flight data is required for lap infants too. Given that infants are modeled as an SSR on the adult passenger, how should their document data be structured? If you just add another SSR DOCS entry to their associated adult, it’s not completely clear whether that information applies to the adult or to the lap infant. So the IATA AIRIMP standard defines two new genders: female infant (FI) and male infant (MI). If the Secure Flight data contains one of these “infant genders”, then the information is associated with the lap infant.
1TIBSHIRANI/JULIE MS SSR VGML UA NN1 SFOFRA 0058Y19JUL SSR INFT UA NN1 SFOFRA 0058Y19JUL.WAGER/SOFIA 01JUL24 SSR DOCS UA HK1/////01DEC91/F//TIBSHIRANI/JULIE SSR DOCS UA HK1/////01JUL24/FI//WAGER/SOFIA
This creates an unusual situation where a single adult passenger has two SSR DOCS entries, whose meaning is distinguished by gender. It’s the sort of decision you might see in a code review and say “hmm, maybe we shouldn’t be abusing this enum”, and it’s fascinating to see this in an international standard.
Further complicating the matter, the standard defines an undisclosed gender U, which in at least some systems has no “infant” equivalent. I hope no one tries to enter U for both the adult and the baby on their lap!
When my sister-in-law was turned away by Lufthansa, the agent told her something mysterious like “your baby’s birthdate is missing”. I also noticed references to “secure flight data” when reading other accounts online:
When I called them, they said that United Airlines had never put the secure flight data in the infant ticket information
正文由 探How 从来源站点 RSS 同步,内容未经改写;遇到排版缺失或需要图片、视频时请以原文为准。