Skip to content
ToolBoxGenie

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.

Search by code, name or what it means. Type a single digit to see a whole class.

Class

34 status codes

1xx Informational

The request was received and the process is continuing.

  • 100

    Continue

    RFC 9110 §15.2.1

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

    The 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 8297

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    The 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 6585

    The 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 7725

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

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

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

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

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

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

    The 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

  1. 1Type a code, a name, or a phrase such as "rate limit" or "gateway".
  2. 2Type a single digit to see a whole class — 4 lists every client error.
  3. 3Use the class buttons to filter to 1xx through 5xx.
  4. 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?
401 Unauthorized means the request lacks valid authentication — despite the name it means unauthenticated, and logging in fixes it. It must come with a WWW-Authenticate header saying how to authenticate. 403 Forbidden means the server knows who you are and refuses anyway; logging in again will not help, because the problem is permission rather than identity. The naming is a historical accident that has confused people for thirty years.
301 or 308, 302 or 307?
The pairs differ in one thing: whether the HTTP method survives. Browsers have historically turned a redirected POST into a GET on a 301 or 302, which was never specified but became universal. 307 and 308 forbid that, preserving the method and body. Use 308 for a permanent move and 307 for a temporary one where non-GET requests matter; 301 remains fine for plain page moves, and search engines treat 301 and 308 identically.
Should I return 404 or 410 for deleted content?
410 Gone if you deliberately removed it and it is not coming back — Google drops a 410 from the index faster than a 404, and the signal is unambiguous. 404 for anything else, including URLs that never existed. Neither should be a 200 with an error page in the body: a soft 404 keeps the URL in the index and tells crawlers the page is fine.
What should I return during a deployment?
503 Service Unavailable with a Retry-After header. It tells search engines the outage is temporary and to come back, which preserves the index. Redirecting to a maintenance page instead is the common mistake — it returns 200 or 302 for every URL on the site, and a crawler that arrives mid-deploy may reindex your entire site as the holding page.
Why can this page not check a URL for me?
Because a browser cannot read the status code of a cross-origin response unless the target site explicitly opts in with CORS headers, and because fetching would mean sending the address you are testing to a server. Running curl -I https://example.com in a terminal, or opening the Network tab in developer tools, answers the question on your own machine — which is where it belongs.
Are there codes not listed here?
Yes. This covers the codes defined by the RFCs and in general use. Omitted are the WebDAV extensions (207, 422's neighbours in RFC 4918), the joke 418 I'm a teapot, and various vendor-specific codes that only appear behind one particular CDN or framework. If you meet one of those, the vendor's documentation is the authority.