# HTTP 418 I'm a teapot — Meaning, Causes & Fixes

> 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.

- Class: 4xx Client Error
- Retry: No — change the request first
- Cacheable by default: no
- Defined in: [RFC 9110 §15.5.19 — 418 (Unused)](https://www.rfc-editor.org/rfc/rfc9110.html#section-15.5.19)

## Example response

```http
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;
```

## FAQ

### 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

- [403 Forbidden](https://www.devkult.com/http/403.md)
- [429 Too Many Requests](https://www.devkult.com/http/429.md)
- [400 Bad Request](https://www.devkult.com/http/400.md)

Open the interactive page: https://www.devkult.com/http/418