The Air Canada chatbot ruling: Moffatt v. Air Canada
In February 2024, Canada's Civil Resolution Tribunal held Air Canada liable for a bereavement refund policy that its website chatbot invented, and rejected the airline's argument that the chatbot was a separate entity responsible for its own words. Moffatt v. Air Canada is the legal anchor of AI agent liability: the company eats what the bot promises. The dollar amount was small. The precedent was not.
What happened
In November 2022, Jake Moffatt booked Air Canada flights after the death of their grandmother. While researching fares, Moffatt asked the airline's website chatbot about bereavement rates. The chatbot answered that Moffatt could buy a full-fare ticket now and apply for the bereavement discount retroactively, within 90 days of the ticket being issued.
That policy did not exist. Air Canada's actual bereavement policy, published on the same website, required the request to be made before travel. The chatbot's answer even linked to the page that contradicted it. When Moffatt later requested the partial refund, Air Canada refused and pointed to the real policy.
Moffatt took the airline to the British Columbia Civil Resolution Tribunal. On February 14, 2024, Tribunal Member Christopher Rivers ruled for Moffatt in Moffatt v. Air Canada, 2024 BCCRT 149.
The separate-entity defense
The defense is what made the case famous. Air Canada argued it could not be held liable for information provided by its chatbot, a position the tribunal read as suggesting the chatbot was a separate legal entity responsible for its own actions. Rivers called that "a remarkable submission" and rejected it: the airline is responsible for all information on its website, whether it comes from a static page or a chatbot. It did not matter that the correct policy was available elsewhere on the site. A customer has no obligation to cross-check one part of a company's website against another.
The tribunal found negligent misrepresentation: Air Canada failed to take reasonable care to ensure its chatbot was accurate. Legal analyses of the ruling, including the American Bar Association's summary, read it the same way: statements by a customer-facing AI system bind the company that deployed it.
What it cost
Air Canada was ordered to pay $650.88 CAD in damages, roughly the difference between the fare Moffatt paid and the bereavement fare, plus $36.14 in pre-judgment interest and $125 in tribunal fees: $812.02 all in. The direct cost was trivial for an airline. The real costs were the global news cycle, the discovery burden of litigating a chatbot transcript, and a precedent that now sits in every plaintiff brief and every enterprise procurement review involving customer-facing AI. When buyers ask agent vendors what stops the bot from inventing policy, this case is why.
The root cause in policy terms
Nothing malfunctioned in a technical sense. The model did what language models do: it produced a fluent, plausible, on-brand answer that happened to be false. The missing piece was a control layer between the model and the customer:
- No approved-claims list. Nothing constrained the bot to state only the published policy, so it could assert a refund right the company never offered.
- No forbidden-commitments rule. A refund promise is a commitment with direct financial consequence, and nothing classified it as one before it shipped.
- No approval gate. No human or system reviewed a policy-bearing answer before a grieving customer relied on it.
The policy that would have caught it
A pre-action authorization check runs the drafted answer against a commercial policy before the customer sees it. The policy for this failure is short:
{
"approved_claims": [
"Bereavement fares must be requested and approved before travel"
],
"forbidden_commitments": ["refund_promises", "retroactive_fare_adjustments"],
"required_disclaimers": ["Fare rules are governed by the published policy"]
}
The chatbot's sentence promising a retroactive refund fails two checks at once. It makes a refund commitment, which is on the forbidden list, and it asserts a policy claim that does not appear in approved_claims. Forbidden commitments are hard violations, so the decision ladder returns block, with a rewrite path available that answers from the approved claim instead: bereavement fares must be requested before travel, here is the policy page. The customer still gets an instant answer. It is just a true one. You can run an equivalent check against a sample policy in the live demo.
Lessons
- The separate-entity defense is dead. Courts treat an AI agent's statements as the company's statements, a theme developed further in the agent liability guide.
- Publishing the correct policy somewhere is not a defense when your agent states a different one. Consistency has to be enforced at the point of output.
- Policy-bearing statements, anything about refunds, fares, eligibility, or exceptions, deserve a gate even when ordinary answers flow freely.
- The control is cheap relative to the exposure. One authorization check costs about a cent. Air Canada's invented policy has been cited in courtrooms and boardrooms ever since.
Moffatt was the first clear ruling, not an isolated event. The same failure pattern, an agent inventing policy under no constraint, repeated at Cursor in 2025 and in the UK discount jailbreak in 2026. The full set is in the incident database.