---
key: "case-study-air-canada-chatbot"
title: "Case study: Moffatt v. Air Canada, a chatbot that misstated the refund policy (2022-2024)"
url: "https://softwaresecurity.com/domains/ai-emerging/llm-security/case-study-air-canada-chatbot/"
api: "https://softwaresecurity.com/api/v1/articles/case-study-air-canada-chatbot.json"
domain: "ai-emerging"
topic: "AI security"
type: "Case study"
identifiers: ["LLM07:2026","ASI09:2026"]
tags: ["Incident response","LLM application security"]
stages: ["design","build","respond"]
roles: ["developer"]
license: "CC-BY-4.0"
license_url: "https://creativecommons.org/licenses/by/4.0/"
code_license: "MIT"
---

# Case study: Moffatt v. Air Canada, a chatbot that misstated the refund policy (2022-2024)

How an airline's website chatbot told a grieving customer they could claim a bereavement fare after travel, what the British Columbia Civil Resolution Tribunal decided in February 2024, and the grounding, testing and correction practices that keep an automated answer consistent with the policy it describes.

Canonical URL: https://softwaresecurity.com/domains/ai-emerging/llm-security/case-study-air-canada-chatbot/

## In short

In November 2022 a chatbot on Air Canada's website told a customer whose grandmother had just died that they could book now and apply for a reduced bereavement fare within 90 days. The airline's own Bereavement travel page, which the chatbot linked to, said the policy did not apply after travel. Air Canada refused the refund and argued it could not be held liable for the chatbot. On 14 February 2024 British Columbia's Civil Resolution Tribunal found negligent misrepresentation and ordered the airline to pay $812.02, saying it makes no difference whether information comes from a static page or a chatbot. Ground automated answers in the policy they describe, test that they agree, and fix wrong answers as defects.

- The chatbot said a ticket could be submitted for a reduced bereavement rate within 90 days of issue, even after travel; the linked policy page said the opposite.
- Air Canada argued it could not be held liable for information from its agents, including a chatbot. The tribunal called this "a remarkable submission" and said the chatbot "is still just a part of Air Canada's website".
- The tribunal found the airline did not take reasonable care to ensure the chatbot was accurate, and did not accept that customers should have to check one part of a website against another.
- The award was small, $812.02 including interest and fees, but the reasoning applies to any automated answer an organization publishes.
- The decision does not describe how the chatbot worked: Air Canada provided no information about its nature, so whether it used a language model is not established.
- The engineering lesson is OWASP LLM07:2026 Misinformation in practice: answers about policy must come from the policy, with tests that catch contradictions and a process that fixes them.

## Incident at a glance

- Date: 2022-11-11 to 2024-02-14
- Category: Incorrect automated output
- Organizations: Air Canada; Civil Resolution Tribunal (British Columbia)
- Impact: Air Canada's website chatbot told a customer they could claim a bereavement fare within 90 days, even after travel; the linked policy page said otherwise. The tribunal held the airline responsible for the chatbot's answer and ordered it to pay $812.02.
- How it was found: The customer's refund request was refused. They had kept a screenshot of the chatbot's answer, sent it to the airline and then filed a small claim.

### Timeline

1. 2022-11-11: The customer asks the website chatbot about bereavement fares and books a flight departing the next day.
2. 2022-11-16: The customer books the return flight, relying on the same answer.
3. 2022-11-17: The customer applies for the bereavement fare.
4. 2023-02-05: The customer emails Air Canada the chatbot screenshot.
5. 2023-02-08: An Air Canada representative admits the chatbot gave "misleading words" and says the airline will update it.
6. 2024-02-14: The tribunal finds negligent misrepresentation and orders Air Canada to pay $812.02 within 14 days.

## Recommended defaults

| Setting | Value | Note | Source |
| --- | --- | --- | --- |
| Source of policy answers | Retrieved from the current policy page or policy store, with a citation the user can open | Not from what a model remembers or a prompt someone wrote last year. | — |
| Policy questions with no supporting source | Say so and link the policy, or hand off to a person | Do not let the system improvise eligibility rules. | — |
| Consistency tests | A fixed set of policy questions run on every prompt, model or policy change, checked against the policy text | A contradiction with the linked page is a failing test. | — |
| Transcripts | Kept for the dispute period, with the model, prompt and source versions | The customer had a screenshot; you need your own record. | — |
| Reported wrong answers | Handled as defects: reproduce, fix, add a regression test, and honor or remediate affected customers | — | — |

## Verify it

1. List the policy topics your assistant answers and confirm each answer is generated from a current policy source and cites it.
2. Run a fixed set of policy questions, including ones with no supported answer, and confirm every answer agrees with the policy text or hands off.
3. Change a policy page in a test environment and confirm the assistant's answer changes and the consistency suite catches any stale answer.
4. Confirm transcripts are stored with model, prompt and source versions for at least your dispute or chargeback period.
5. Report a deliberately wrong answer through your support channel and confirm it reaches an owner who can fix and test it.

## What you will learn

- Describe what the chatbot said, what the policy page said and what the tribunal decided, from the decision itself.
- Separate what the decision establishes from what it does not, such as how the chatbot worked.
- Design grounding, consistency tests and a correction process so a support answer cannot contradict the policy it describes.
- Explain why treating every answer on your site as your own is the safe engineering assumption.

Audience: Product engineers, AI feature owners and support teams who put automated answers in front of customers

Before you start:

- Know how your support chatbot or assistant gets the policy text it answers from.
- No tools are needed for the exercise.

Time: About 25 minutes: 10 to read and 15 for the exercise

## A chatbot answer that contradicted the policy page

Jake Moffatt's grandmother died in Ontario on 11 November 2022. That day they visited Air Canada's website to book a flight from Vancouver to Toronto at the airline's bereavement rate and asked the site's support chatbot about bereavement fares. The parties agreed Mr. Moffatt was not chatting with an employee. According to the decision, the chatbot's answer included: "If you need to travel immediately or have already travelled and would like to submit your ticket for a reduced bereavement rate, kindly do so within 90 days of the date your ticket was issued by completing our Ticket Refund Application form."

The words "bereavement fares" in the answer linked to Air Canada's Bereavement travel page, which said the policy does not apply to requests for bereavement consideration after travel has been completed. Relying on the chatbot, Mr. Moffatt booked a flight departing 12 November for $794.98 and, on 16 November, a return flight departing 18 November for $845.38. They applied for the bereavement fare on 17 November, well within the 90 days the chatbot gave.

## How the airline responded

Mr. Moffatt corresponded with Air Canada through December 2022 and February 2023. On 5 February 2023 they sent the chatbot screenshot and confirmed they had filed the refund form and a death certificate. On 8 February an Air Canada representative replied, in the decision's words, that the chatbot had provided "misleading words", pointed to the link to the bereavement page, and said the airline had noted the issue so it could update the chatbot. The parties could not resolve the dispute; Air Canada later said it had offered a $200 coupon as a goodwill gesture, which Mr. Moffatt said they did not accept.

Before the tribunal, Air Canada argued that the customer had not followed the proper procedure, that it could not be held liable for information its chatbot provided, and that terms in its Domestic Tariff applied.

## What the tribunal decided

Tribunal Member Christopher C. Rivers treated the claim as negligent misrepresentation and found that Air Canada owed the customer a duty of care. On the liability argument, paragraph 27 reads in part: "In effect, Air Canada suggests the chatbot is a separate legal entity that is responsible for its own actions. This is a remarkable submission. While a chatbot has an interactive component, it is still just a part of Air Canada's website. It should be obvious to Air Canada that it is responsible for all the information on its website. It makes no difference whether the information comes from a static page or a chatbot."

The tribunal found that Air Canada "did not take reasonable care to ensure its chatbot was accurate". It noted that the airline did not explain why its Bereavement travel page was inherently more trustworthy than its chatbot, or "why customers should have to double-check information found in one part of its website on another part of its website", and it accepted that relying on the chatbot was reasonable. The tariff defence failed because Air Canada did not provide the relevant part of the tariff. The order, dated 14 February 2024, required Air Canada to pay $812.02 within 14 days: $650.88 in damages, $36.14 in pre-judgment interest and $125 in tribunal fees. The coupon was not set off because it had not been accepted.

## What the decision does not establish

The decision does not say how the chatbot worked. It notes that Air Canada "did not provide any information about the nature of its chatbot", so whether it used a large language model, retrieval or scripted answers is not known from the primary source; many summaries describe it as AI without evidence in the decision. There is no finding of a security breach, an attack or a defect in a specific component.

It is also a small-claims decision of one provincial tribunal on its facts. Whether and how its reasoning applies elsewhere is a legal question for counsel, not something this page answers. What it does show, from the record, is that an organization argued its chatbot's answer was not its own, and a tribunal disagreed.

## Where engineering controls would have caught it

The failure was an answer that contradicted the policy it linked to. That is a testable property, and it is the core of OWASP LLM07:2026 Misinformation: plausible but unsupported output that someone trusts and acts on. /domains/ai-emerging/llm-security/llm-misinformation/ covers the controls in depth; the table maps them to this case.

| Control | What it would have done here |
| --- | --- |
| Answer policy questions from the current policy text, with a citation | The answer would have quoted the Bereavement travel page, which excluded requests after travel |
| Check that each cited source supports the claim | A claim of a 90-day retroactive window would have had no supporting sentence and been withheld |
| Consistency tests on every change | "Can I claim the bereavement rate after I travel?" would have failed against the policy page |
| Hand off when unsure | A bereavement question with money at stake would have gone to an agent or the policy page |
| Treat reported wrong answers as defects | The February 2023 report would have produced a fix, a regression test and a look at other customers given the same answer |

## Treat every automated answer on your site as your own, and test it against your policy

The decision is about one chatbot, but the engineering lessons apply to any assistant that answers customers.

- Assume your organization owns what its chatbot says. Design, test and monitor the chatbot as a publisher of policy, not as a separate system with its own voice.
- Answer from the source of truth. Retrieve the current policy, quote it, and refuse to state eligibility rules it does not contain.
- Test for contradictions. Keep a suite of policy questions whose answers must agree with the policy pages, and run it on every prompt, model, retrieval or policy change.
- Keep evidence. Store transcripts with the model, prompt and source versions so you can reconstruct what a customer was told.
- Close the loop. A reported wrong answer is a defect with affected users: fix it, add a test, and decide how to make the affected customers whole.
- Do not count on a link to correct a wrong answer: here the correct policy was one click away, and the tribunal still found the customer's reliance on the chatbot reasonable.

## Guided practice

Your company's support assistant answers questions about refunds and cancellations. After reading this case, the support lead asks you to check whether the same failure could happen and to propose controls.

### Supplied material

```text
Assistant design (current)
  Model with a system prompt written in March: tone rules and a summary of refund policies.
  No retrieval; links to policy pages are added from a fixed list when a keyword matches.
  No tests of answers; customer complaints go to a shared inbox.

Refund policy page (updated in August)
  Cancellations within 24 hours of booking: full refund.
  After 24 hours: travel credit only, valid 12 months.
  Medical or bereavement exceptions: request before travel, with documents.

Sample transcript (last week)
  Customer: My father passed away last month and I already flew. Can I still get money back?
  Assistant: I'm sorry for your loss. You can request a bereavement refund within 60 days after travel. Here is our refund policy: [link]
```

### 1. Find the defect

Compare the transcript with the policy page and the design.

Worked answer: The answer invents a 60-day post-travel refund that the policy page excludes, the same pattern as the Air Canada case. The cause is a stale prompt summary with no retrieval or check against the current page.

### 2. Ground the answer

Redesign how refund questions are answered.

Worked answer: Retrieve the current policy text, answer from it with a quoted citation, withhold claims no sentence supports, and hand bereavement and medical cases to a person.

### 3. Add tests

Write five consistency questions and the expected outcome of each.

Worked answer: For example: after-travel bereavement refund (no; request before travel), cancellation within 24 hours (full refund), after 24 hours (credit only, 12 months), refund of a credit (not stated: hand off), and a question about another airline's policy (out of scope). Each runs on every change.

### 4. Close the loop

Say what happens to last week's customer and any others.

Worked answer: Treat it as a defect: find every conversation with the wrong answer, decide with the business how to honor or remediate them, fix the design, and add the transcript as a regression test.

Deliverable: The defect analysis, the grounded answering design, the consistency test set and the remediation plan for affected customers.

Scope: The company and transcript are fictional. How a court or tribunal would treat a specific answer depends on the facts and the jurisdiction; ask counsel, not this exercise.

Articles and teaching material: CC BY 4.0. Original executable code: MIT. Attribution: Software Security.

## Sources

- [Moffatt v. Air Canada, 2024 BCCRT 149 (Civil Resolution Tribunal, small claims decision SC-2023-005609)](https://decisions.civilresolutionbc.ca/crt/crtd/en/item/525448/index.do). 14 February 2024.
- [OWASP Top 10 for LLM Applications 2026 (LLM07:2026 Misinformation)](https://genai.owasp.org/resource/owasp-genai-llm-top-10-2026/). v1.0, 3 August 2026.
- [OWASP Top 10 for Agentic Applications for 2026 (ASI09 Human-Agent Trust Exploitation)](https://genai.owasp.org/resource/owasp-top-10-for-agentic-applications-for-2026/). Version 2026, December 2025.