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/teapot
Google 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-22
TCP vs UDP, Explained Through What Breaks When You Pick Wrong
TCP and UDP aren't interchangeable. We walk through the exact failure modes — head-of-line blocking, silent packet loss, Nagle delays — that show up when you pick the wrong transport.
2026-06-22
Write-Ahead Logging: How Databases Survive a Power Cut
How write-ahead logging keeps your data intact when the machine dies mid-write — the log-first rule, fsync, checkpoints, and why PostgreSQL and SQLite both rely on it.
2026-06-22
Backpressure, Explained Through a Queue That Won't Fall Over
What backpressure actually is, why an unbounded queue is a memory leak in disguise, and the four strategies a producer can take when a consumer falls behind.
2026-06-22
What a Bloom Filter Actually Saves You (and When It Lies)
A bloom filter trades a small false-positive rate for big memory savings. Here is the math behind the trade, where it pays off, and the failure mode that bites people.
2026-06-22
Idempotency, Explained Through the Retry That Doesn't Double-Charge
A practical look at idempotency keys: why a retried payment request shouldn't charge a card twice, how the pattern works, and where it quietly breaks in production.
Get the best tools, weekly
One email every Friday. No spam, unsubscribe anytime.