HTTP status codes are the universal language of web requests, but the formal spec (RFC 9110) is a slow read and the codes you actually need to know change with the kind of system you’re working on. This is a quick searchable lookup with descriptions written for people writing servers and debugging APIs, not for spec lawyers.
The table covers all the commonly-encountered codes — every 1xx, 2xx, 3xx, 4xx, and 5xx code defined in RFC 9110, plus the WebDAV codes (RFC 4918) and a handful of widely-used extension codes (418 I’m a Teapot, 451 Unavailable For Legal Reasons, 599 Network Connect Timeout from CDN convention).
How to read an entry
Each row shows the code number, the canonical name, an RFC reference (so you can cite the spec when you need to), a kind tag (informational / success / redirection / client-error / server-error), and a paragraph that explains:
- When to return it — the situation that calls for this status code, from the server’s perspective
- How clients should respond — whether to retry, look at headers, refresh, or surface an error to the user
- Common confusions — distinctions from neighboring codes that people frequently get wrong
Example: debugging an API call that returns 422
You hit an endpoint and get back 422 with no further documentation. Search “422” in the lookup. The entry tells you: syntactically valid request, semantically wrong values. Now you know to inspect your request body for fields that pass JSON validation but fail business rules — out-of-range values, conflicting flags, references to records that don’t exist. That’s a different debugging path than 400 (which would mean “your JSON didn’t parse”).
Example: writing a REST API and choosing a status code
You’re writing a POST that creates a new resource. Search “201” — Created, with a Location header pointing to the new resource. Search “200” — also success but for general-purpose responses. Search “204” — success with no body. Pick the one that matches your semantic.
For a delete: 204 if you return nothing, 200 if you return the deleted resource, 202 if the delete is async.
For a conflict on PUT: 409 if the resource already changed (concurrent modification), 412 if the client’s preconditions failed.
Example: explaining a 502 error to a non-technical colleague
A page is showing “502 Bad Gateway.” Look it up: server got an invalid response from an upstream service. That tells you the failure is in the backend (the upstream returned malformed data), not in the proxy or the user’s browser. Different from 503 (proxy is down), 504 (backend timed out), or 500 (unhandled exception in the actual service code). The 502 narrows the failure surface.
Common confusions
401 vs 403. “Unauthorized” (401) means unauthenticated — the spec name is misleading. 403 means authenticated-but-not-allowed.
302 vs 303 vs 307. Three different temporary-redirect codes with different semantics. 303 forces a method change to GET (the standard “POST → see other → GET” pattern). 307 preserves the method (POST stays POST). 302 historically converted to GET in browsers but the spec is ambiguous; new code should use 303 or 307 depending on intent.
500 vs 503. 500 is a server bug (uncaught exception, internal logic error). 503 is server overload or maintenance — a load shedding / availability signal, not a bug. Don’t return 500 for things you can predict (use 503, 429, or 4xx); save 500 for genuine “I don’t know what happened” responses.
429 vs 503. Both mean “back off and try later,” but 429 is per-client rate limiting (you specifically are sending too much) and 503 is server-wide overload (everyone needs to back off). 429 should always include a Retry-After header so clients can throttle correctly.
What this tool does not do
It does not show real-world frequency — there’s no usage data here, just the formal definitions. If you need to know which codes you’ll actually encounter in your stack, look at your server’s logs.
It does not include every extension code ever proposed (Cloudflare’s 520-527, Apache’s 509). It covers the standard codes plus the most common extensions you’ll encounter in practice.
It does not simulate requests or test endpoints — for that you need a tool like cURL or Postman. If your API returns a JSON error body alongside the status code, the JSON formatter & validator is the quickest way to pretty-print it.