HTTP Status Code Lookup
Developer Tools · Added 18 August 2026
Search the HTTP status codes by number, by name, or by the problem you are looking at. Each entry says what the code means, when you would deliberately return it, whether a response carrying it is cacheable by default, and which RFC defines it — so you can settle an argument about 401 versus 403 with a citation.
34 status codes
1xx Informational
The request was received and the process is continuing.
- 100
Continue
RFC 9110 §15.2.1The first part of the request was accepted; send the rest.
Sent automatically in response to an Expect: 100-continue header, so a large upload is not sent before the server has agreed to take it.
Cacheable by default: no
- 101
Switching Protocols
RFC 9110 §15.2.2The server is changing protocol as the client asked.
The handshake response that turns an HTTP connection into a WebSocket.
Cacheable by default: no
- 103
Early Hints
RFC 8297Preliminary headers sent before the real response.
Lets a browser start fetching CSS and fonts named in Link headers while the server is still generating the page.
Cacheable by default: no
2xx Success
The request was received, understood and accepted.
- 200
OK
RFC 9110 §15.3.1The request succeeded and the body is the result.
The default success response for GET, POST that returns a body, PUT and PATCH.
Cacheable by default: yes
- 201
Created
RFC 9110 §15.3.2A new resource was created as a result of the request.
The right answer to a POST that creates something. Include a Location header pointing at the new resource.
Cacheable by default: yes
- 202
Accepted
RFC 9110 §15.3.3The request was accepted but has not been acted on yet.
Queued or asynchronous work. Return a URL the client can poll rather than leaving it guessing.
Cacheable by default: no
- 204
No Content
RFC 9110 §15.3.5Success, and there is deliberately no body.
A DELETE that worked, or a PUT whose result the client already has. A 204 must not carry a body — some clients hang if it does.
Cacheable by default: yes
- 206
Partial Content
RFC 9110 §15.3.7Only the requested byte range is being returned.
Resumable downloads and video seeking, in response to a Range header.
Cacheable by default: yes
3xx Redirection
Further action is needed to complete the request.
- 301
Moved Permanently
RFC 9110 §15.4.2The resource has a new URL, permanently.
Domain moves, HTTP to HTTPS, and consolidating duplicate URLs. Search engines transfer ranking signals to the target and update the index.
Cacheable by default: yes
- 302
Found
RFC 9110 §15.4.3The resource is temporarily somewhere else.
Short-lived redirects. Note that browsers historically change the method to GET on a 302 — use 307 if the method must survive.
Cacheable by default: no
- 303
See Other
RFC 9110 §15.4.4Fetch the result from a different URL, with GET.
The POST-redirect-GET pattern, so refreshing the results page does not resubmit the form.
Cacheable by default: no
- 304
Not Modified
RFC 9110 §15.4.5The cached copy is still current, so no body is sent.
The response to a conditional request carrying If-None-Match or If-Modified-Since. The saved bandwidth is the entire point.
Cacheable by default: yes
- 307
Temporary Redirect
RFC 9110 §15.4.8Temporarily elsewhere, and keep the method and body.
A 302 that cannot be silently downgraded to GET. The right choice when redirecting a POST.
Cacheable by default: no
- 308
Permanent Redirect
RFC 9110 §15.4.9Permanently elsewhere, and keep the method and body.
A 301 that preserves the method. The modern default for a permanent move where non-GET requests matter.
Cacheable by default: yes
4xx Client error
The request is malformed or cannot be fulfilled as sent.
- 400
Bad Request
RFC 9110 §15.5.1The server cannot parse or will not process the request as sent.
Malformed JSON, a missing required field, a parameter of the wrong type. Say which field failed — a bare 400 is a support ticket.
Cacheable by default: no
- 401
Unauthorized
RFC 9110 §15.5.2Authentication is required and has failed or not been supplied.
Missing, expired or invalid credentials. Despite the name it means unauthenticated — the answer is to log in. Must include a WWW-Authenticate header.
Cacheable by default: no
- 403
Forbidden
RFC 9110 §15.5.4The server understood the request and refuses to authorise it.
The caller is authenticated but not allowed. Logging in again will not help, which is the whole difference from 401.
Cacheable by default: yes
- 404
Not Found
RFC 9110 §15.5.5There is no resource at this URL.
The correct answer for a URL that has never existed or no longer does. Also used deliberately to hide the existence of a resource from someone not allowed to know about it.
Cacheable by default: yes
- 405
Method Not Allowed
RFC 9110 §15.5.6The URL exists but does not support this method.
A POST to a read-only endpoint. The response must list what is supported in an Allow header.
Cacheable by default: yes
- 406
Not Acceptable
RFC 9110 §15.5.7No representation matches the client's Accept headers.
The client asked for XML and the endpoint only speaks JSON. Rare in practice — most servers send their default instead.
Cacheable by default: yes
- 408
Request Timeout
RFC 9110 §15.5.9The client took too long to send the request.
An idle connection the server closed. Distinct from 504, which is a timeout between two servers.
Cacheable by default: no
- 409
Conflict
RFC 9110 §15.5.10The request conflicts with the current state of the resource.
A duplicate signup email, or an edit based on a version that has since changed. Say what conflicts so the client can resolve it.
Cacheable by default: no
- 410
Gone
RFC 9110 §15.5.11The resource existed and has been permanently removed.
A stronger 404 for content you deliberately deleted. Google drops a 410 from the index faster than a 404.
Cacheable by default: yes
- 413
Content Too Large
RFC 9110 §15.5.14The request body exceeds the server's limit.
Upload size limits. Named Payload Too Large before RFC 9110 renamed it.
Cacheable by default: no
- 415
Unsupported Media Type
RFC 9110 §15.5.16The body is in a format the endpoint does not accept.
Almost always a missing or wrong Content-Type header on a POST — form encoding sent to a JSON endpoint.
Cacheable by default: yes
- 422
Unprocessable Content
RFC 9110 §15.5.21The syntax is valid but the content fails the server's rules.
Well-formed JSON that breaks a business rule — an end date before a start date. Many APIs use it for validation errors and reserve 400 for unparseable input.
Cacheable by default: no
- 429
Too Many Requests
RFC 6585The client has sent too many requests in a given period.
Rate limiting. Always send Retry-After, and clients should back off exponentially rather than retrying immediately.
Cacheable by default: no
- 451
Unavailable For Legal Reasons
RFC 7725Access is denied because of a legal demand.
Court-ordered blocks and takedowns. The number is a deliberate nod to Fahrenheit 451.
Cacheable by default: yes
5xx Server error
The request looked valid but the server failed to fulfil it.
- 500
Internal Server Error
RFC 9110 §15.6.1Something went wrong that the server has no better description for.
An unhandled exception. Log the detail server-side; never return a stack trace to the client.
Cacheable by default: no
- 501
Not Implemented
RFC 9110 §15.6.2The server does not support the functionality required.
A method the server does not recognise at all. Distinct from 405, which means this URL specifically does not allow it.
Cacheable by default: yes
- 502
Bad Gateway
RFC 9110 §15.6.3A proxy got an invalid response from the server behind it.
The application crashed or is not listening, and the reverse proxy or load balancer in front of it is reporting that. Check the upstream, not the proxy.
Cacheable by default: no
- 503
Service Unavailable
RFC 9110 §15.6.4The server is temporarily unable to handle the request.
Maintenance windows and overload. Send Retry-After — and use 503 rather than a redirect during a deploy, so search engines come back instead of reindexing the holding page.
Cacheable by default: no
- 504
Gateway Timeout
RFC 9110 §15.6.5A proxy did not get a response from upstream in time.
A slow query or a hung external call behind a proxy with a shorter timeout than the work takes.
Cacheable by default: no
- 505
HTTP Version Not Supported
RFC 9110 §15.6.6The HTTP version used in the request is not supported.
Rare outside protocol testing and misconfigured clients.
Cacheable by default: yes
To read the real status of a URL, run curl -I https://example.com in a terminal, or open the Network tab in your browser's developer tools. This page deliberately does not fetch anything: it would mean sending the address you are testing to a server, and a browser cannot read a cross-origin response's status code anyway unless the target site allows it.
How to use the http status code lookup
- 1Type a code, a name, or a phrase such as "rate limit" or "gateway".
- 2Type a single digit to see a whole class — 4 lists every client error.
- 3Use the class buttons to filter to 1xx through 5xx.
- 4Read the usage note for when to return the code deliberately, not just what it means.
Examples
Searching by problem
- Input
- "rate limit"
- Result
- 429 Too Many Requests, with the note that Retry-After should always be sent
Comparing two codes
- Input
- "40"
- Result
- Every 40x code side by side — the fastest way to settle 401 versus 403
A whole class
- Input
- "5"
- Result
- All 5xx server errors, including the difference between 502, 503 and 504
About the http status code lookup
What the first digit tells you
The classes are the useful part of the design. 1xx is informational and rarely seen by application code. 2xx means it worked. 3xx means look somewhere else. 4xx means the request was wrong. 5xx means the request was fine and the server failed.
That 4xx/5xx split is the one that matters operationally, because it decides who is responsible. A spike in 4xx is usually a client, an integration or a bad link. A spike in 5xx is yours. Alerting on the two separately is the difference between a useful dashboard and a noisy one.
Codes worth using more than people do
201 Created with a Location header, rather than 200 with the object in the body — it tells the client where the thing now lives. 202 Accepted for work that has been queued rather than done, with a URL to poll. 409 Conflict for a duplicate or a stale edit, which is far more actionable than a generic 400. And 429 with Retry-After, which turns an unhelpful rejection into an instruction a well-behaved client can follow.
The general principle: the status code is the part of the response every intermediary understands — proxies, CDNs, monitoring, client libraries and retry logic all branch on it before anyone reads the body. Returning 200 with an error inside means none of that machinery works.
Cacheability, and why it surprises people
RFC 9110 defines a set of codes as cacheable by default, and it includes some that look like errors — 404, 405, 410 and 501 among them. A proxy or CDN may cache a 404 without any explicit Cache-Control header, which is why a page that was broken for ten minutes can appear broken for hours afterwards.
The fix is to be explicit rather than to rely on defaults. Send Cache-Control on error responses, and remember that a 301 is cached aggressively and often permanently by browsers — a redirect deployed by accident can outlive the deployment that created it by a very long time.
Frequently asked questions
What is the difference between 401 and 403?
301 or 308, 302 or 307?
Should I return 404 or 410 for deleted content?
What should I return during a deployment?
Why can this page not check a URL for me?
Are there codes not listed here?
Related tools
JSON Formatter
Developer Tools
Pretty-print, minify and inspect JSON with precise error positions.
URL Encoder / Decoder
Developer Tools
Percent-encode and decode URLs and query parameters, with a query string breakdown.
JWT Decoder
Developer Tools
Decode a JSON Web Token's header, payload and claims, and see whether it has expired.