devkult_
tools29converters34

418 I'm a teapot

4xx client error

An April Fools' joke from 1998: the server refuses to brew coffee because it is a teapot.

418 comes from RFC 2324, the Hyper Text Coffee Pot Control Protocol — an April Fools' RFC from 1998. It was never part of HTTP proper, but it became so beloved that when people proposed removing it from Node.js and Go in 2017, developers pushed back under the banner 'Save 418'.

RFC 9110 now lists 418 as reserved and unused, so it can never be given a real meaning.

Class4xx Client Error
Retry?No — change the request first
Cacheable by defaultNo — only with explicit Cache-Control
Response bodyAllowed
Defined inRFC 9110 §15.5.19 — 418 (Unused)
Example response
HTTP/1.1 418 I'm a teapot
Content-Type: application/json
Content-Length: 24

{"error":"I'm a teapot"}

Common causes

  • Easter eggs — Google has served a teapot page with 418.
  • Some APIs and WAFs return 418 to bots and scrapers they want to brush off.

How to fix it

  1. If an API returns 418, you're probably being blocked or rate-limited as a bot — check its documentation.
  2. Don't use 418 for real errors; clients won't know what to do with it.

Send a 418 from your server

Express
res.status(418).json({ error: "I'm a teapot" });
Next.js route handler
return Response.json({ error: "I'm a teapot" }, { status: 418 });
Flask
return {"error": "I'm a teapot"}, 418
Go net/http
http.Error(w, "I'm a teapot", http.StatusTeapot)
nginx
return 418;

Check what a URL returns

Print just the status line from the command line, or check a whole list of URLs at once, with their response headers, in the HTTP Status Checker.

curl -sI https://example.com/your-path | head -n 1

Frequently asked questions

Is 418 a real HTTP status code?

It's reserved but unused: RFC 9110 lists 418 as 'Unused' so it can't be assigned. Most frameworks still know its name, and it lives on as an easter egg.

Related status codes