HTTP 418 I'm a teapot
Updated Free mock REST & WebSocket APIs
HTTP 418 I'm a teapot — A joke code from the 1998 Hyper Text Coffee Pot Control Protocol: the server refuses to brew coffee because it is a teapot.
- Class
- 4xx Client Error
- Defined in
- RFC 2324 (April Fools'); reserved in RFC 9110 §15.5.19
- Official
- Yes (IANA registry)
- Cacheable by default
- No (unless Cache-Control/Expires say so)
- Safe to retry
- Not without changing the request
Try it: get a real 418 response
Our test endpoint answers every request with 418 I'm a teapot.
curl -i https://mockfox.dev/api/status/418Use it in tests, health-check monitors or to see how your client handles a 418. Add ?delay=2000 to slow it down.
What does HTTP 418 mean?
418 I'm a teapot comes from RFC 2324, the Hyper Text Coffee Pot Control Protocol (HTCPCP/1.0), an April Fools' joke published in 1998. Any attempt to brew coffee with a teapot should result in the error "418 I'm a teapot", and the response body may be short and stout.
It was never part of HTTP proper, but it's implemented as an easter egg in countless frameworks and websites. When a 2017 proposal suggested removing it from Node.js and Go, the "Save 418" campaign kept it; RFC 9110 now lists 418 as reserved ("Unused") so nobody can assign it a real meaning.
When is 418 used?
- Easter eggs (google.com/teapot famously returned 418).
- Some sites and WAFs return 418 to bots and scrapers they've decided to block, as a deliberately unhelpful answer.
- Test suites and tutorials that need an obviously unusual status code.
Common causes of a 418
- An easter egg on the site, or you've been identified as an automated client and blocked with a tongue-in-cheek response.
How to fix 418 I'm a teapot
If you're visiting the site
- If you hit 418 on a real site unexpectedly, you were probably flagged as a bot: disable VPNs or aggressive privacy extensions and try again, or contact the site.
If you run the site or API (developers)
- Don't use 418 for real errors — clients won't know what to do. Use 403 (blocked) or 429 (rate-limited) instead.
- It's fine for jokes, demos and tests; most libraries know the reason phrase.
Returning or handling 418: server examples
nginx
location = /coffee {
return 418 "I'm a teapot\n";
}Express
app.get("/coffee", (req, res) => res.status(418).send("I'm a teapot ☕"));Next.js
// app/api/example/route.ts (Next.js App Router)
export function GET() {
return new Response("I'm a teapot", { status: 418 });
}Example 418 response
HTTP/1.1 418 I'm a teapot Content-Type: text/plain I'm a teapot. Short and stout.
Related status codes
- 400 Bad RequestThe server can't process the request because it's malformed or invalid.
- 403 ForbiddenThe server understood the request but refuses to authorize it.
- 501 Not ImplementedThe server doesn't support the functionality (usually the HTTP method) needed to fulfill the request.
Related tools
Frequently asked questions
Is 418 a real HTTP status code?
It's real in the sense that it's reserved in the IANA registry and supported by most libraries, but it has no official semantics in HTTP. It originated as an April Fools' joke in RFC 2324.
Why do I get 418 from a website?
Either it's an easter egg or the site's bot protection is answering requests it considers automated with a joke status.
Can I use 418 in my API?
Technically yes, but don't use it for real error conditions. Clients and monitoring tools treat it as an unknown 4xx.