Skip to content

HTTP Status Code Lookup

63 results
  • 100Continue

    1xx Informational · RFC 9110, §15.2.1

    Server has received the request headers and the client should proceed to send the request body. Used in conjunction with the Expect: 100-continue request header to avoid sending a large body if the server would reject it based on the headers alone.

  • 101Switching Protocols

    1xx Informational · RFC 9110, §15.2.2

    Server is switching protocols as requested by the Upgrade request header. Most commonly seen with WebSocket upgrades from HTTP.

  • 102Processing

    1xx Informational · RFC 2518

    WebDAV: server has accepted the request but processing will take time. Mostly deprecated — keep-alive is the modern equivalent.

  • 103Early Hints

    1xx Informational · RFC 8297

    Server is sending hint headers (typically Link: rel=preload) before the final response. Lets browsers start preloading critical resources before the server finishes processing.

  • 200OK

    2xx Success · RFC 9110, §15.3.1

    Request succeeded. The body of the response carries the result. The most common success status — used for GETs that return data, PUTs that update existing resources, and most application-level success cases.

  • 201Created

    2xx Success · RFC 9110, §15.3.2

    Request succeeded and a new resource was created. Response should include a Location header with the URL of the new resource. Standard reply for a POST that creates something.

  • 202Accepted

    2xx Success · RFC 9110, §15.3.3

    Request accepted for processing but not yet completed. The processing may end up succeeding or failing — the client must check back. Used for async/queued workflows.

  • 203Non-Authoritative Information

    2xx Success · RFC 9110, §15.3.4

    Response was modified by an intermediary (a proxy or CDN) from what the origin server sent. Rare in modern HTTP — most caches forward the original response and just add caching headers.

  • 204No Content

    2xx Success · RFC 9110, §15.3.5

    Request succeeded but there is no response body. Common for DELETEs, PUTs that update without returning the resource, and OPTIONS preflight responses where the server has nothing to return.

  • 205Reset Content

    2xx Success · RFC 9110, §15.3.6

    Request succeeded; client should reset the document view (clear the form, etc.). Rare in practice.

  • 206Partial Content

    2xx Success · RFC 9110, §15.3.7

    Server is returning part of a resource because the request used a Range header. Used for resumable downloads, video seeking, and large-file uploads/downloads.

  • 207Multi-Status

    2xx Success · RFC 4918

    WebDAV: response body contains multiple status codes for multiple sub-operations. Typically with XML body listing per-resource results.

  • 208Already Reported

    2xx Success · RFC 5842

    WebDAV: members of a binding have already been reported in a preceding response, so they are not enumerated again.

  • 226IM Used

    2xx Success · RFC 3229

    Server has fulfilled the GET request and the response is the result of one or more instance-manipulations applied to the current instance. Very rare in practice.

  • 300Multiple Choices

    3xx Redirection · RFC 9110, §15.4.1

    Multiple representations of the resource are available; the client must choose which one to use. The Location header may suggest a default. Rare in practice — most APIs don't do content negotiation this way.

  • 301Moved Permanently

    3xx Redirection · RFC 9110, §15.4.2

    Resource has permanently moved to the URL given in the Location header. Search engines update their index to use the new URL. Use for permanent URL changes; do NOT use for temporary moves.

  • 302Found

    3xx Redirection · RFC 9110, §15.4.3

    Resource is temporarily at a different URL given in Location. Original URL should still be used for future requests. Most browsers historically converted POST to GET on 302 — use 307/308 if you need explicit semantics.

  • 303See Other

    3xx Redirection · RFC 9110, §15.4.4

    Result of the request can be retrieved by GETing a different URL. Standard pattern after a POST: respond with 303 + Location to the resource page, so the browser does GET and the user can refresh safely.

  • 304Not Modified

    3xx Redirection · RFC 9110, §15.4.5

    Resource has not changed since the validators sent in the request (If-None-Match / If-Modified-Since). Client should use its cached copy. Body is empty.

  • 305Use Proxy

    3xx Redirection · RFC 9110, §15.4.6

    Deprecated. Originally meant to direct the client through a specific proxy. Modern HTTP doesn't use this status code.

  • 307Temporary Redirect

    3xx Redirection · RFC 9110, §15.4.8

    Resource is temporarily at a different URL. Unlike 302, the request method MUST NOT be changed (POST stays POST when retried at the new URL). Use this when method preservation matters.

  • 308Permanent Redirect

    3xx Redirection · RFC 9110, §15.4.9

    Resource has permanently moved AND the method must be preserved on retry. Like 301 but with strict method semantics. Use for permanent moves where the method matters (POST APIs, etc.).

  • 400Bad Request

    4xx Client Error · RFC 9110, §15.5.1

    Server cannot process the request because of malformed syntax — invalid JSON, missing required field, malformed URL parameter. Client should not retry without modification.

  • 401Unauthorized

    4xx Client Error · RFC 9110, §15.5.2

    Request requires authentication and either none was provided or the credentials provided are invalid. Server should include a WWW-Authenticate header indicating the required scheme. Despite the name, "unauthorized" really means "unauthenticated".

  • 402Payment Required

    4xx Client Error · RFC 9110, §15.5.3

    Reserved for future use. A handful of APIs (Stripe in some flows) use it for billing-related rejections, but no formal definition exists.

  • 403Forbidden

    4xx Client Error · RFC 9110, §15.5.4

    Server understood the request and the client is authenticated, but the client doesn't have permission. Use this when the user is logged in but lacks the role needed for the action. Different from 401 (which means "auth needed").

  • 404Not Found

    4xx Client Error · RFC 9110, §15.5.5

    Resource at this URL does not exist (or the server doesn't want to reveal it does). Used both for genuinely missing resources and as a privacy-preserving alternative to 403 when the server doesn't want to confirm existence.

  • 405Method Not Allowed

    4xx Client Error · RFC 9110, §15.5.6

    Resource exists but doesn't support the request method. Server MUST include an Allow header listing supported methods. Common when POSTing to a read-only endpoint.

  • 406Not Acceptable

    4xx Client Error · RFC 9110, §15.5.7

    Server cannot produce a response matching the Accept headers sent in the request. Most modern APIs ignore Accept negotiation entirely and respond with what they have.

  • 407Proxy Authentication Required

    4xx Client Error · RFC 9110, §15.5.8

    Like 401 but the proxy itself requires authentication. Client must authenticate with the proxy first.

  • 408Request Timeout

    4xx Client Error · RFC 9110, §15.5.9

    Server timed out waiting for the client to finish sending the request. Client may retry. Some servers use this to close idle keep-alive connections.

  • 409Conflict

    4xx Client Error · RFC 9110, §15.5.10

    Request conflicts with the current state of the resource. Common for: PUT with stale ETag, POST creating something that already exists, mutating a resource being concurrently modified.

  • 410Gone

    4xx Client Error · RFC 9110, §15.5.11

    Resource at this URL existed but has been permanently removed and won't be back. Stronger than 404 — tells search engines to drop the URL from their index.

  • 411Length Required

    4xx Client Error · RFC 9110, §15.5.12

    Server requires a Content-Length header but the request didn't include one. Client should add the header and retry.

  • 412Precondition Failed

    4xx Client Error · RFC 9110, §15.5.13

    Conditional request failed (If-Match, If-Unmodified-Since, etc. didn't match server state). Client should refresh and retry with current values.

  • 413Content Too Large

    4xx Client Error · RFC 9110, §15.5.14

    Request body exceeds server's configured maximum size. Sometimes used for upload size limits. Was called "Payload Too Large" pre-RFC 9110.

  • 414URI Too Long

    4xx Client Error · RFC 9110, §15.5.15

    Request URL is longer than the server is willing to interpret. Common cause: very long query strings. Switch to POST with a body if you need to send a lot of data.

  • 415Unsupported Media Type

    4xx Client Error · RFC 9110, §15.5.16

    Request body is in a format the server does not support (the Content-Type header). Common when an API expects JSON and receives form-encoded data, or vice versa.

  • 416Range Not Satisfiable

    4xx Client Error · RFC 9110, §15.5.17

    Range header specified a range that doesn't exist in the resource (e.g. requesting bytes 100-200 of a 50-byte file).

  • 417Expectation Failed

    4xx Client Error · RFC 9110, §15.5.18

    Server cannot meet the expectation in the Expect request header. Rarely seen in practice.

  • 418I'm a teapot

    4xx Client Error · RFC 2324

    April Fools' joke from the Hyper Text Coffee Pot Control Protocol (HTCPCP). Some sites return it for blocked or troll-detection responses, but it has no formal HTTP semantics.

  • 421Misdirected Request

    4xx Client Error · RFC 9110, §15.5.20

    Request was directed to a server that cannot produce a response for the requested authority (host). Common with HTTP/2 connection coalescing when a request reaches a backend that doesn't serve the requested host.

  • 422Unprocessable Content

    4xx Client Error · RFC 9110, §15.5.21

    Request was syntactically valid but semantically wrong — e.g. JSON body parsed but the values failed business validation. Common alternative to 400 in REST APIs that want to distinguish "malformed" from "invalid". Was "Unprocessable Entity" pre-RFC 9110.

  • 423Locked

    4xx Client Error · RFC 4918

    WebDAV: resource is locked. The lock owner may be different from the requester.

  • 424Failed Dependency

    4xx Client Error · RFC 4918

    WebDAV: request failed because a previous request in the same context failed.

  • 425Too Early

    4xx Client Error · RFC 8470

    Server is unwilling to process a request that might be replayed (used with TLS 1.3 0-RTT data). Client should retry over a fully-established TLS connection.

  • 426Upgrade Required

    4xx Client Error · RFC 9110, §15.5.22

    Server refuses to process the request without an upgraded protocol (e.g. requires HTTPS).

  • 428Precondition Required

    4xx Client Error · RFC 6585

    Server requires the request to be conditional (e.g. include an If-Match header). Used by APIs to enforce optimistic concurrency control on writes.

  • 429Too Many Requests

    4xx Client Error · RFC 6585

    Client has sent too many requests in a given time window — rate-limited. Server SHOULD include a Retry-After header indicating when to retry.

  • 431Request Header Fields Too Large

    4xx Client Error · RFC 6585

    Server is unwilling to process the request because the headers (collectively or one of them) are too large.

  • 451Unavailable For Legal Reasons

    4xx Client Error · RFC 7725

    Server is denying access for legal reasons (court order, GDPR, geo-blocking, copyright takedown). Status code number is a reference to Ray Bradbury's Fahrenheit 451.

  • 500Internal Server Error

    5xx Server Error · RFC 9110, §15.6.1

    Server encountered an unexpected condition. The catch-all "something went wrong on our end". Don't use 500 for client mistakes — use 4xx codes. 500 should mean genuine server bug.

  • 501Not Implemented

    5xx Server Error · RFC 9110, §15.6.2

    Server doesn't support the request method. Different from 405 (which means "this resource doesn't support the method") — 501 means "this server doesn't support the method at all".

  • 502Bad Gateway

    5xx Server Error · RFC 9110, §15.6.3

    Server (acting as proxy/gateway) received an invalid response from an upstream. Typical cause: backend service is down or returning malformed responses. Common with reverse-proxy setups.

  • 503Service Unavailable

    5xx Server Error · RFC 9110, §15.6.4

    Server is temporarily overloaded or down for maintenance. Includes a Retry-After header when possible. Clients SHOULD retry; load balancers may stop sending traffic when seeing 503.

  • 504Gateway Timeout

    5xx Server Error · RFC 9110, §15.6.5

    Server (proxy/gateway) timed out waiting for an upstream response. The upstream service might be slow or unresponsive. Different from 502 (got bad response) and 503 (server itself down).

  • 505HTTP Version Not Supported

    5xx Server Error · RFC 9110, §15.6.6

    Server doesn't support the HTTP protocol version used in the request. Rare — most servers are lenient about minor version differences.

  • 506Variant Also Negotiates

    5xx Server Error · RFC 2295

    Server has an internal configuration error: the chosen variant is itself configured to perform content negotiation (loop).

  • 507Insufficient Storage

    5xx Server Error · RFC 4918

    WebDAV: server is unable to store the representation needed to complete the request. Typically: out of disk space.

  • 508Loop Detected

    5xx Server Error · RFC 5842

    WebDAV: server detected an infinite loop while processing the request.

  • 510Not Extended

    5xx Server Error · RFC 2774

    Further extensions to the request are required for the server to fulfill it. Effectively unused.

  • 511Network Authentication Required

    5xx Server Error · RFC 6585

    Client needs to authenticate to gain network access (typically a captive portal at a wifi hotspot).

  • 599Network Connect Timeout

    5xx Server Error · Non-standard

    Non-standard. Used by some HTTP libraries and CDNs to indicate the connection to the upstream timed out before the response started. Not part of any RFC.

Estimates for educational purposes — not financial, medical, or legal advice. See terms.

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.

Frequently asked questions

What's the difference between 401 and 403?

401 means 'unauthenticated' — you didn't supply credentials, or they were invalid. The server is asking you to authenticate. 403 means 'authenticated but forbidden' — the server knows who you are and is refusing to serve the request because your account doesn't have permission. The naming is historically confusing ('Unauthorized' for 401), but the practical distinction is whether to prompt the user to log in (401) or show a 'you don't have access' page (403).

When should I return 422 instead of 400?

400 (Bad Request) means the request was syntactically wrong — malformed JSON, missing required fields, unparseable body. 422 (Unprocessable Content) means the request was syntactically valid but semantically invalid — the JSON parsed fine, but a value failed business rules (negative quantity, email already in use, date in the past). Many REST APIs use this distinction so clients can tell 'fix your serializer' (400) from 'fix your data' (422).

What's the difference between 502, 503, and 504?

All three are server-error responses from a proxy/gateway. 502 (Bad Gateway): the upstream service responded but with an invalid/garbled response. 503 (Service Unavailable): the server itself is down or overloaded — typically the server hosting the proxy. 504 (Gateway Timeout): the upstream took too long and the proxy gave up waiting. If you're debugging a Cloudflare/nginx error page, the specific code tells you where the problem is: 502 = backend bug, 503 = the proxy is overloaded, 504 = backend is slow.

Why isn't 451 about caching or rate-limiting like the others around it?

451 ('Unavailable For Legal Reasons') is a Ray Bradbury reference — Fahrenheit 451 is the temperature at which paper burns, and the code is for content censored or removed for legal reasons (court orders, GDPR takedowns, copyright takedowns, geo-blocking). It was deliberately placed near 4xx codes related to refusing requests but the number was chosen for the literary reference, not for any technical adjacency.

Should I use 301 or 308 for a permanent redirect?

Use 308 if you want method preservation (POST stays POST when retried at the new URL). Use 301 if you want browsers to follow the historical pattern of converting POST to GET on redirect — which is what most clients do, but it's not strictly per the spec. For URL canonicalization (moving /foo to /bar at the GET level), 301 is fine and cache-friendly. For API endpoints that need to preserve the request method, use 308.