If you are nerdy enough, then you should be able to imagine how this cracked me up when I saw it from a list of HTTP status code. Remember 7XX status codes: Developer Errors, that is good one, too, right?

It was an April Fools' Joke in 1998 as RFC 2324 Hyper Text Coffee Pot Control Protocol. The definition of status code 418:

tiny tea!
tiny tea! by tseyg
(one of my Flickr contacts)
2.3.2 418 I'm a teapot

Any attempt to brew coffee with a teapot should result in the error
code "418 I'm a teapot". The resulting entity body MAY be short and
stout.

Decaf? Get outta here! ;)

2.2.3 Omitted Header Fields

No options were given for decaffeinated coffee. What's the point?

And the header Accept-Additions is just awesome, pretty much cover all additions, even this protocol was written in 1998. Coffee hasn't changed a lot.

Accept-Additions = "Accept-Additions" ":"
#( addition-range [ accept-params ] )

addition-type = ( "*"
| milk-type
| syrup-type
| sweetener-type
| spice-type
| alcohol-type
) *( ";" parameter )
milk-type = ( "Cream" | "Half-and-half" | "Whole-milk"
| "Part-Skim" | "Skim" | "Non-Dairy" )
syrup-type = ( "Vanilla" | "Almond" | "Raspberry"
| "Chocolate" )
alcohol-type = ( "Whisky" | "Rum" | "Kahlua" | "Aquavit" )

I really want to see a tea machine has built-in support of RFC 2324. However, that doesn't make much sense since this RFC is for coffee pot, so the protocol coffee: shouldn't be known by a tea machine, therefore no way it can respond with 418.

If the coffee pot is unable to brew or can't do certain type of coffee, maybe it can return 301/302 for redirecting user to Starbucks?