Air Canada's Chatbot Hallucination: How a RAG Support Bot Created Legal Liability in Production
Air Canada's support chatbot invented a bereavement fare policy that didn't exist; a tribunal held the airline liable. The lesson: LLM outputs need guardrails and legal accountability before going to production.
AI & MLOps · beginner · 12 min read · 2145 words · By Sandip Das · Published
Public postmortem: based on what the organisation published. Sources are listed below.
What this covers
- Background
- What Happened
- Root Cause
- Detection and Response
- Impact
- The Fix
- Lessons for Your Team
- Apply It Yourself
Key numbers
| Metric | Before | After |
|---|---|---|
| Damages awarded to customer | Full fare paid, bereavement claim denied | CAD $650.88 ordered by tribunal (damages plus fees) |
| Legal precedent set | No Canadian tribunal ruling on chatbot operator liability | BC CRT ruled operator liable; 'separate entity' defence rejected |
Key components
- LLM Chatbot (RAG pipeline) — Generated customer-facing policy answers by combining retrieved FAQ chunks with an LLM; produced a fabricated retroactive refund policy.
- Knowledge Base / FAQ Store — Vector-indexed policy documents used as retrieval context; the canonical advance-booking requirement was either absent or not retrieved.
- Output Validation Layer — Was absent; no faithfulness check compared generated claims to retrieved context before serving the response.
- Escalation / Human Agent Path — Existed in the architecture but was not triggered when the chatbot made a specific financial policy commitment.
- Conversation Audit Log — Stored the exchange but no automated reconciliation against canonical policy was run, so the error was never detected internally.
- BC Civil Resolution Tribunal — External adjudicator that reviewed the chatbot transcript and issued the liability ruling that became public record.
Background
In November 2022, Jake Moffatt contacted Air Canada's website support chatbot to ask about bereavement fares after the death of his grandmother. He wanted to know whether he could book a flight immediately and then apply for a reduced bereavement fare retroactively. The chatbot told him he could — that Air Canada allowed customers to apply for a bereavement fare within 90 days of travel. Moffatt booked the flight, paid full price, and later submitted a bereavement fare claim. Air Canada denied it, saying its policy required the fare to be requested *before* travel.
Moffatt took the dispute to the British Columbia Civil Resolution Tribunal. In February 2024, Tribunal Member Kristin Gardner ruled in his favour, ordering Air Canada to pay him CAD $650.88 in damages plus fees. The ruling is notable not because of the dollar amount — it is small — but because of the legal reasoning: Air Canada argued that its chatbot was a "separate legal entity" responsible for its own statements. The tribunal rejected this argument entirely.
The public record does not disclose which LLM vendor, embedding model, or infrastructure provider Air Canada used for the chatbot. What the tribunal decision does document is the conversational exchange itself, the policy that actually existed, and the gap between the two.
The rest of this case study — the trade-offs, the scaling numbers and the build prompt — is available to LearnXops members. Create an account or see membership.
Sources
Topics: llm, chatbot, mlops, ai-safety, production-incident, rag
Related case studies
- How a B2B SaaS Team Cut LLM API Spend by 65% with Model Routing, Prompt Caching, and Request Batching
- How a B2B SaaS Team Cut LLM Inference Costs by 71% by Moving to Self-Hosted vLLM
- How a B2B SaaS Team Cut Model Deployment Time from 3 Days to 4 Hours with MLflow and Kubeflow
- How a B2B SaaS Team Cut Prompt Regression Escapes by 94% with an Automated LLM Eval Pipeline in CI
- How a B2B SaaS Team Took a RAG Support Assistant from Demo to Production
- How a Feature Store Eliminated Training-Serving Skew and Cut Model Errors by 34%