Inside the PNR System
A Passenger Name Record is just a database record that holds everything about a traveler's itinerary. It lives inside airline reservation systems called GDS platforms—Amadeus, Sabre, Travelport. When you book a flight through a travel agency or even directly through an airline's website, something creates a unique alphanumeric code. That code is the PNR. It links the passenger to flights, seat assignments, ticketing data, contact info, and sometimes special service requests. The PNR isn't one single thing. It's a collection of segments, each representing a flight booking. Every segment has its own details: departure and arrival airports, flight numbers, booking class, departure time. The PNR ties those segments together along with passenger name(s), ticket numbers, and a bunch of free-form text fields that agents use to communicate with each other.
What Is A Passenger Name Record and How Does It Actually Work?
I spent most of my early career pulling PNR data for a mid-sized travel management company. We handled corporate accounts that ran thousands of bookings a week. The system you interact with when creating a PNR through a GDS interface looks deceptively simple. You type in passenger names, select flights, choose a fare basis, add ticketing deadlines, and hit save. The system generates a six-character locator code—something like K7XTQ2—and that's your reference number for everything that follows. Here's what most people don't realize: the PNR is split into sections. There's the passenger name element, the itinerary segments, the ticketing information, the contact details, the remarks, and the service requests. Each section is addressed independently in the GDS command language. If you want to change a phone number without touching the flight details, you address just that field. If you want to delete a segment, you issue a delete command for that specific segment line. The remark field is where things get messy. It's a free-text area that any agent who touches the PNR can write into. Over a booking's lifetime, you might see thirty or forty lines of remarks from different agents at different times. One agent notes a meal preference. Another flags that the passenger needs a wheelchair. A third writes something completely unrelated about a billing discrepancy. When you're managing bookings at scale, parsing through that noise becomes a real problem.
I ran into this exact issue with a corporate account that had a strict policy requiring all special service requests to be logged in a particular format. Some agents ignored that. I wrote a script that extracted the PNR in raw form, parsed out the SSR elements using regular expressions, and cross-referenced them against the company's required codes. The script flagged mismatches and generated a report we sent back to the agents responsible. It caught about twelve percent of our bookings that had incomplete SSR data, which translated to actual service failures at airports when we didn't catch them. There are also edge cases in PNR construction that cause real headaches. One example: when a booking involves multiple passengers on the same PNR but separate ticket stock. This happens frequently with group travel or families where one person pays for everyone's flights but each passenger gets an individual e-ticket number. The PNR shows one booking reference, but the ticketing data splits across multiple records in the airline's system. If you're reconciling invoicing data, you need to match PNR-level information to individual ticket numbers, and the two datasets don't always line up cleanly. I learned this the hard way when a client asked me to produce a spend report that tracked costs per passenger. My initial query grouped by PNR and reported each booking as a single transaction, which understated the actual per-passenger costs because it averaged the total across all names on the booking. Another practical issue involves expired PNRs. Airlines typically purge inactive PNRs after a set period—usually between twenty-eight and seventy-two hours depending on the carrier's policy. If a booking is made but never ticketed, it disappears. This matters if you're trying to audit bookings that went nowhere or trace why a passenger showed up at the airport with a confirmed reservation that the airline couldn't find. The PNR was expired and gone. I've had to work with airline support teams to retrieve old PNR data through archived systems, and that process is slow, often taking three to five business days, and they only return what's still stored in their backup archives.
Get the Full Details

Where PNR Data Actually Lives
When you book through an OTA like Expedia or a corporate booking tool, the platform creates the PNR in the GDS on your behalf. The PNR exists in the GDS database, not on the OTA's servers. That distinction matters if you're doing any kind of integration work or audit trail analysis. You'll need access to the GDS system or an API that can query it directly. Most enterprise travel systems connect through APIs that pull PNR data on demand, but the data you receive is often a sanitized subset. Things like internal agent comments, pricing breakdowns in certain currencies, or commission details may be stripped out before they reach your reporting layer. If you're working with PNR data programmatically, you'll encounter the EDIFACT message format. It's the standard electronic data interchange format used by airlines and GDS providers to communicate PNR information. An EDIFACT message for a PNR looks like a dense wall of codes and segments. It's not human-readable without parsing tools, but it's the raw material you'll work with if you're building anything that ingests PNR data directly from airline or GDS sources. Sabre publishes a PNR extraction API that returns data in both legacy EDIFACT and JSON formats. Amadeus has a similar offering through its Resa API suite. Travelport offers theirs through the Apollo Global Distribution API. Each has different field coverage and update latency. Sabre tends to reflect changes within minutes. Amadeus can lag by fifteen to thirty minutes during peak booking periods. Travelport sits somewhere in between but has historically been less consistent with real-time updates across all segments.
Common Problems and Workarounds
Naming errors are the most frequent issue I see. A passenger books under a nickname or an incorrect middle name spelling, and by the time they show up at check-in, the name on the PNR doesn't match their government-issued ID. Most airlines allow minor corrections—fixing a typo, adding a middle name—but they won't change the primary name entirely. If someone booked under "Bob" instead of "Robert," that's usually fine. If they booked under "Mary Johnson" and their passport says "Maria Johnson," some airlines will make the change. Others require a full cancellation and rebooking, which means losing whatever fare rules applied to the original ticket. I've seen passengers stranded at airports because of this exact situation, and the rebooking cost was typically two to three times the original fare. Seat assignments are another area where things go sideways. A PNR can show a seat assignment, but that seat is only guaranteed if the airline's inventory system has allocated it. I once worked with a group booking where thirty seats were assigned on the PNR, but when the group arrived at the airport, only eighteen of those seats were actually held in the airline's seat map. The other twelve had been released back to general inventory due to a system sync issue between the GDS and the airline's internal seating database. This happens more often than you'd expect on high-volume routes where seat inventory updates rapidly. When tracking down PNR issues, having the right reference numbers is critical. The PNR locator code is the primary key, but you'll also need the record locator, the ticket number, and sometimes the booking creation timestamp. If you're dealing with a multi-segment itinerary that includes partner airline flights, the PNR might show segments from different carriers, each with its own reservation system. A United flight and a Lufthansa flight on the same PNR means two different internal systems are involved, and problems in one don't always reflect in the other.
For anyone doing PNR analysis at scale, I'd recommend building a lookup pipeline that pulls from at least two GDS sources if your contracts allow it. Relying on a single provider creates blind spots. I ran into this when a client was troubleshooting missing bookings that their corporate system claimed didn't exist. The PNR was active in Sabre but the Amadeus query returned nothing because the travel agency had originally booked through Sabre. The reconciliation tool was only checking Amadeus. Two days of investigation and we found the issue. After that, I made dual-source lookups standard practice for any audit work involving PNR data. The data quality problem with PNRs is real and largely unaddressed across the industry. Free-text fields, inconsistent naming conventions, missing SSR codes, incomplete contact information—it's all over the place. If you're processing PNR data for reporting, compliance, or analytics, budget significant time for data cleaning. A typical dataset of ten thousand PNR records usually requires anywhere from three to eight hours of manual or semi-automated cleanup before it's usable for any meaningful analysis. The cleanup time depends heavily on how long the bookings have been in the system and how many different agents have touched them.
