Skip to article

A price used to be data. Now it is a function call.

For forty years an airfare was a filed artifact: you could fetch it, cache it, diff it and argue with it. It is becoming a per-query model output, and almost everything built on top of travel quietly assumed the old thing.

For about forty years, an airfare was a row in a file. An airline filed it, a distributor published it, and everyone downstream fetched the same artifact. You could cache it. You could diff last night's file against this morning's. When a customer said the price changed, you could open the record and see exactly which rule moved.

That object is being replaced by a model call. Not a faster lookup of the same thing: a different kind of thing, computed on request, for that request.

Almost every system in travel assumes the old one. Most of them will keep running and quietly stop being correct.

What a filed fare actually was

Strip the romance and a fare was a small program. A base amount, plus rules: book fourteen days ahead, stay a Saturday night, no changes, no refund. Those rules were published in the filing, identical for every buyer, and they were the mechanism.

Economists call this second-degree price discrimination, and the distinction matters more than the jargon suggests. The seller publishes a menu; buyers sort themselves by choosing which restrictions to accept. The airline never had to work out who you were. It made you declare it, by picking the cheap fare and living with the Saturday night.

That is why the rule had to be readable. A menu nobody can read is not a menu. Every "book on a Tuesday" tip anyone ever gave you was a person playing a game whose rules were posted, and the posting was not a courtesy. It was load-bearing.

What replaces it

A generative pricing engine does not file a rule and wait. It takes demand signal, route, competitive position, booking window and time to departure, and returns a number for this query. Then it does it again, differently, because the inputs moved.

There is no menu. There is no restriction to accept in exchange for a discount. There is an output, and the inputs are not things you control.

WHAT YOU SEE HOW THE PRICE IS SET WHAT YOU CAN DO THE FILED FARE a rule in the fare filing stay a Saturday night full fare, no restriction lower fare, Saturday stay you pick the one you qualify for change the trip, change the price the rule is public and the same for everyone THE GENERATED PRICE no rule is shown only a number demand, route, competition, booking window, time to departure a model, retrained continuously nothing to satisfy, no lower bucket no input you control THE DISCRIMINATION IS NOT NEW. WHAT WENT AWAY IS THE RULE YOU COULD READ AND ANSWER.
Both systems charge different people different prices. Only one of them publishes a rule, and only one leaves the buyer a move.

The part that breaks your systems

This is not a pricing story. It is a story about an interface changing shape underneath a lot of code that was written against the old one.

You assumedBecause a fare was dataWhat is true of a model output
A price can be cachedThe filing changed a few times a dayIt is valid for the query that produced it
Two searches agreeSame file, same answerDivergence is normal, not a bug
A price is reproducibleRe-read the recordYou cannot re-run yesterday's inputs
Tests can assert amountsFixtures were stableGolden-file tests rot immediately
A change is explainablePoint at the rule that movedThere is no rule to point at
Offers are comparableEveryone fetched the same artifactEach comparison is a fresh inference

Read the third row twice, because it is the one that will cost you a support team. "It was cheaper an hour ago" used to be a checkable claim. Someone opened the fare history and either agreed or did not. Against a per-query price, that sentence is unfalsifiable in the strict sense: there is no artifact to check, and the honest answer is that nobody can reconstruct what you were shown.

That answer is unacceptable to a customer, so somebody will invent a better-sounding one. Cache what you displayed, with the inputs and a timestamp, or accept that your support desk is going to start guessing.

The rule was the product

The consumer story hiding inside the architecture is simpler than the privacy debate suggests, and worse.

Charging different people different prices does not require knowing anything personal about them. It requires knowing the shape of their trip. A one-way out Tuesday morning and back Thursday evening, booked eleven days ahead, on a route with one nonstop, is a business trip. No name, no browsing history, no loyalty number, no cookie. The itinerary is the profile.

So a system can price you precisely while touching nothing a privacy lawyer would recognise as personal data, which is exactly what makes the current wave of regulation slide off it.

The FTC published its surveillance pricing study on 17 January 2025, finding data as fine as mouse movements and abandoned baskets used to set individual prices. New York's Algorithmic Pricing Disclosure Act took effect on 10 November 2025, requiring the notice "This price was set by an algorithm using your personal data." Maryland signed the first outright ban on 28 April 2026, enforceable from 1 October, scoped to grocery. Connecticut followed on 27 May 2026.

Read the trigger in every one of them. Personal data. A model that reads only the shape of your trip discloses nothing, bans nothing and triggers nothing, while producing the outcome people object to. That is not a loophole anyone exploited. It is what happens when a rule is drafted against a story about creepy data collection and the actual mechanism turns out to be arithmetic on a booking window.

Why your shopping agent does not fix this

The comforting version is that it evens out. They get a pricing model, you get an AI agent, the arms race nets to zero.

It does not, and the reason has nothing to do with model quality. The seller's model is trained on years of its own transactions: every fare offered, every one accepted, every one abandoned, across every route and season. It has seen the distribution. Your agent sees one session. It cannot know what the passenger in 14B paid, and it cannot know what you would have paid, which is the only number the other side is trying to find.

The testing is blunt about where agentic booking actually is. When Bain put large language models against real flight search in March 2026, airline sites were reached directly only about 5% of the time, autonomous browser agents ran 5 to 30 minutes before hitting a date picker or a login wall, and no tool completed a booking reliably.

There is a second-order problem underneath that, and it is the one that will decide how this settles. Travel search has always been rationed by a human being having to sit down and click. An agent has no such limit: it does not tire, does not settle for good enough, and does not care what a query costs the system answering it. Every serious shopping agent makes the seller's search economics worse, and the rational response to that is to meter, throttle or charge for the looking.

So the buyer's agent degrades the seller's economics, and the seller's fix is to restrict the buyer's agent. That is not an arms race. One side has a model and a meter. The other has a chat window.

What to build instead

None of this argues for pretending the old world still exists. It argues for treating a price as what it now is.

  • Store the offer, not the number. An amount with no inputs, timestamp and expiry is not a record of anything.
  • Make expiry explicit in your API. A price without a TTL is a lie your own client will believe.
  • Revalidate before commit, always. The gap between shown and charged is now the product.
  • Test behaviour, not amounts. Assert that a stale offer is rejected, not that a fare equals a fixture.
  • Log what the customer saw. When the record and the display disagree, the display is the promise you made.

The industry spent forty years building on the assumption that a price was a fact you could look up. It is becoming a claim generated for one person at one moment, and the only durable version of it is the copy you kept.

Source