HTTP 418 'I am a Teapot': The Joke Status Code That Won't Die
Why HTTP status 418 exists, where it came from (an April Fools' RFC about coffee pots), and what it teaches you about how status codes are actually organized.
If you ask a teapot to brew coffee, what should it say? According to an actual internet standards document, it should reply 418 I'm a teapot. This is a real status code you can return from a real server, and yet it has never been part of HTTP proper. Here is the story, and what it quietly teaches you about how the web is organized.
Where 418 comes from
The code traces back to RFC 2324, the Hyper Text Coffee Pot Control Protocol (HTCPCP), published on April 1, 1998. It was an April Fools’ Day joke: a straight-faced specification for controlling and monitoring coffee pots over the network, complete with new request methods like BREW.
The relevant line is the punchline. HTCPCP defines status code 418 I'm a teapot: the response a device sends when it is asked to brew coffee but is, in fact, a teapot. The body of such a response, the RFC notes, “may be short and stout.” It is a joke with a setup, and the joke is delivered in the exact deadpan format of a genuine standard.
Because it lived in an RFC, 418 looked just official enough to be irresistible. Developers started wiring it into web frameworks and servers as an easter egg. Hit the right hidden route and you would get a teapot back. It became a small badge of taste, a wink between people who knew the reference.
Why it almost died, and didn’t
Around 2017, the popular Go web framework chi had StatusTeapot flagged for removal because 418 is not a “real” HTTP code and arguably did not belong in a serious library. That sparked a small revolt. A “Save 418” campaign argued the code was a reserved part of internet folklore worth protecting, and the site save418.com became the rallying point.
The pushback worked. The code stayed, and the episode became its own piece of lore: a reminder that developer culture has sentimental attachments, and that even a joke can earn enough standing to be defended. Today 418 remains officially reserved by IANA precisely so nobody assigns it a serious meaning, which means the joke is, in a sense, permanent.
What 418 teaches about status codes
The joke only lands if you know the system it parodies, so 418 is a surprisingly good way to learn that system. HTTP status codes are three-digit numbers grouped into five classes by their first digit:
1xxinformational: the request was received, processing continues.2xxsuccess: the request worked (200 OK,201 Created).3xxredirection: more action is needed, usually go somewhere else (301,304).4xxclient error: the request was wrong (400 Bad Request,404 Not Found,403 Forbidden).5xxserver error: the server failed on a valid request (500,503).
That grouping is the actual lesson. A client can look at just the first digit and know broadly what happened, even if it has never seen the specific code. This is why 418 is funny and coherent: it sits in the 4xx range, so it is framed as the client’s fault. You, the requester, made the mistake of expecting coffee from a teapot.
You can demonstrate the whole idea in one line:
curl -s -o /dev/null -w "%{http_code}\n" https://www.google.com/teapotGoogle has historically served a 418 from that path as its own nod to the joke. The takeaway is not the trivia, it is the mental model: status codes are a small, structured vocabulary, and once you internalize the five classes, most of HTTP error handling stops being memorization.
FAQ
FAQ
Can I actually use 418 in my own API?+
Is 418 part of the HTTP standard?+
Why do people care so much about a joke code?+
Related reading
2026-06-04
ACID vs BASE: What Database Guarantees Actually Promise
ACID and BASE describe two ends of a tradeoff between strict correctness and scalable availability. Learn what each guarantee means, when each fits, and why most modern databases sit somewhere in between.
2026-06-04
Big-Endian vs Little-Endian
Byte order explained: how big-endian and little-endian lay out multi-byte numbers in memory, why network protocols pick one, and when the difference actually bites you.
2026-06-04
Big-O Notation in Plain English
Big-O describes how an algorithm's runtime or memory grows as input grows. Learn the common classes — O(1), O(log n), O(n), O(n log n), O(n^2), O(2^n) — with plain examples.
2026-06-04
CORS in Plain English: Why the Browser Blocks Your Fetch
A clear walkthrough of CORS and the same-origin policy — what an origin is, why your fetch fails, how servers opt in, and the big misconception about who CORS actually protects.
2026-06-04
Environment Variables and PATH, Explained
What environment variables actually are, why they hold config and secrets, and how PATH decides which binary runs when you type a command.
Get the best tools, weekly
One email every Friday. No spam, unsubscribe anytime.