A café counter API: browse drinks, place orders — and GET /teapot, which proudly returns HTTP 418 "I'm a teapot".
The Coffee Shop API is the catalog's rate-limiting playground and the home of HTTP 418. Its rush endpoint enforces a real quota: exceed it and you get a 429 with Retry-After and the usual X-RateLimit headers, refreshed on a live window. Client-side throttling and backoff are almost impossible to test against a well-behaved API, and this one misbehaves on request.
Base URL: https://funapi.dev/api/coffee/v1 · 6 endpoints · OpenAPI 3.1 spec and Postman collection available. New here? Read the getting started guide.
GET https://funapi.dev/api/coffee/v1/drinks — List drinks, filter by type. No token, no signup:
curl -i https://funapi.dev/api/coffee/v1/drinks
answers 200 OK with:
{
"total": 8,
"data": [
{
"id": 1,
"name": "Espresso",
"type": "hot",
"price": 2.5
},
{
"id": 2,
"name": "Latte",
"type": "hot",
"price": 4
},
{
"id": 3,
"name": "Cappuccino",
"type": "hot",
"price": 3.8
},
{
"id": 4,
"name": "Flat White",
"type": "hot",
"price": 4.2
},
{
"id": 5,
"name": "Cold Brew",
"type": "cold",
"price": 4.5
},
{
"id": 6,
"name": "Iced Matcha Latte",
"type": "cold",
"price": 4.8
},
{
"id": 7,
"name": "Mocha",
"type": "hot",
"price": 4.4
},
{
"id": 8,
"name": "Turkish Coffee",
"type": "hot",
"price": 3
}
]
}
hot and cold
GET /coffee/v1/drinks — List drinks, filter by type · Responds with 200 400 Link to this endpointGET /coffee/v1/drinks/{id} — Get one drink · Responds with 200 404 Link to this endpointname on the cup
POST /coffee/v1/orders — Order a drink · Responds with 201 400 Link to this endpointPUT /coffee/v1/orders/{id}/ready — Mark an order ready (409 if already ready) · Responds with 200 404 409 412 Link to this endpointhammer it and watch the 429s
GET /coffee/v1/rush-hour — Rush hour special — max 3 requests per 10s · Responds with 200 429 Link to this endpointRFC 2324 compliance
GET /coffee/v1/teapot — Try to brew coffee in a teapot · Responds with 418 Link to this endpointLast updated