# HTTP status codes reference

> Every HTTP status code in the IANA registry, from 100 Continue to 511 Network Authentication Required, with its reason phrase, its RFC and what it means.

HTTP status codes are three-digit numbers a server returns to say how a request went: 1xx informational, 2xx success, 3xx redirection, 4xx client error and 5xx server error. This page lists every code the IANA registry assigns, each with its official reason phrase, the RFC that defines it and a one-line meaning.

Source: [IANA HTTP Status Code Registry](https://www.iana.org/assignments/http-status-codes/http-status-codes.xhtml), checked 2026-10-21.

| Code | Reason phrase | Reference | Meaning |
| --- | --- | --- | --- |
| 100 | Continue | RFC 9110, Section 15.2.1 | The server has received the request headers and the client should send the body. |
| 101 | Switching Protocols | RFC 9110, Section 15.2.2 | The server is switching to the protocol the client asked for in its Upgrade header, such as WebSocket. |
| 102 | Processing | RFC 2518 | A WebDAV server has accepted the request and is still working on it. |
| 103 | Early Hints | RFC 8297 | Headers, usually Link preloads, sent before the final response so the client can start fetching resources early. |
| 104 | Upload Resumption Supported (TEMPORARY - registered 2024-11-13, extension registered 2025-09-15, expires 2026-11-13) | draft-ietf-httpbis-resumable-upload-05 | The server supports resumable uploads for this request; a temporary registration tied to an Internet-Draft. |
| 200 | OK | RFC 9110, Section 15.3.1 | The request succeeded. |
| 201 | Created | RFC 9110, Section 15.3.2 | The request succeeded and created a new resource, usually named in the Location header. |
| 202 | Accepted | RFC 9110, Section 15.3.3 | The request was accepted for processing, which has not finished yet. |
| 203 | Non-Authoritative Information | RFC 9110, Section 15.3.4 | The request succeeded, but a proxy modified the content returned by the origin. |
| 204 | No Content | RFC 9110, Section 15.3.5 | The request succeeded and there is no content to send back. |
| 205 | Reset Content | RFC 9110, Section 15.3.6 | The request succeeded and the client should reset the document view, such as clearing a form. |
| 206 | Partial Content | RFC 9110, Section 15.3.7 | The server is returning only the byte range the client asked for with a Range header. |
| 207 | Multi-Status | RFC 4918 | A WebDAV response carrying a separate status for each of several resources. |
| 208 | Already Reported | RFC 5842 | A WebDAV binding member was already listed earlier in the same multi-status response. |
| 226 | IM Used | RFC 3229 | The response is the result of instance manipulations (a delta) applied to the current resource. |
| 300 | Multiple Choices | RFC 9110, Section 15.4.1 | The resource has several representations and the client may choose one. |
| 301 | Moved Permanently | RFC 9110, Section 15.4.2 | The resource has a new permanent URL; clients may change POST to GET when following it. |
| 302 | Found | RFC 9110, Section 15.4.3 | The resource is temporarily at another URL; clients may change POST to GET when following it. |
| 303 | See Other | RFC 9110, Section 15.4.4 | The client should GET another URL, typically after a form submission. |
| 304 | Not Modified | RFC 9110, Section 15.4.5 | A conditional request found no change since the cached copy, so the client can reuse it. |
| 305 | Use Proxy | RFC 9110, Section 15.4.6 | Deprecated: it once told the client to repeat the request through a proxy. |
| 306 | (Unused) | RFC 9110, Section 15.4.7 | Reserved; it was used in an earlier draft and is no longer used. |
| 307 | Temporary Redirect | RFC 9110, Section 15.4.8 | The resource is temporarily at another URL and the client must repeat the same method there. |
| 308 | Permanent Redirect | RFC 9110, Section 15.4.9 | The resource has a new permanent URL and the client must repeat the same method there. |
| 400 | Bad Request | RFC 9110, Section 15.5.1 | The server will not process the request because it is malformed or invalid. |
| 401 | Unauthorized | RFC 9110, Section 15.5.2 | The request lacks valid authentication credentials for the resource. |
| 402 | Payment Required | RFC 9110, Section 15.5.3 | Reserved for future use; some APIs use it when a plan or quota needs payment. |
| 403 | Forbidden | RFC 9110, Section 15.5.4 | The server understood the request but refuses to fulfil it, whoever is asking. |
| 404 | Not Found | RFC 9110, Section 15.5.5 | The server has no current representation of the requested resource. |
| 405 | Method Not Allowed | RFC 9110, Section 15.5.6 | The resource exists but does not support this method; the Allow header lists the ones it does. |
| 406 | Not Acceptable | RFC 9110, Section 15.5.7 | No representation matches what the request’s Accept headers asked for. |
| 407 | Proxy Authentication Required | RFC 9110, Section 15.5.8 | The client must authenticate with the proxy before the request can continue. |
| 408 | Request Timeout | RFC 9110, Section 15.5.9 | The server did not receive a complete request in the time it was prepared to wait. |
| 409 | Conflict | RFC 9110, Section 15.5.10 | The request conflicts with the current state of the resource, such as an edit conflict. |
| 410 | Gone | RFC 9110, Section 15.5.11 | The resource has been removed permanently and will not come back. |
| 411 | Length Required | RFC 9110, Section 15.5.12 | The server requires a Content-Length header on this request. |
| 412 | Precondition Failed | RFC 9110, Section 15.5.13 | A condition in the request headers, such as If-Match, evaluated to false. |
| 413 | Content Too Large | RFC 9110, Section 15.5.14 | The request body is larger than the server is willing to process. |
| 414 | URI Too Long | RFC 9110, Section 15.5.15 | The request target URL is longer than the server is willing to interpret. |
| 415 | Unsupported Media Type | RFC 9110, Section 15.5.16 | The request body is in a format the resource does not accept. |
| 416 | Range Not Satisfiable | RFC 9110, Section 15.5.17 | None of the byte ranges in the Range header overlap the resource. |
| 417 | Expectation Failed | RFC 9110, Section 15.5.18 | The server cannot meet the request’s Expect header. |
| 418 | (Unused) | RFC 9110, Section 15.5.19 | Reserved because of the 1998 April Fools’ “I’m a teapot” text; not to be assigned. |
| 421 | Misdirected Request | RFC 9110, Section 15.5.20 | The request reached a server that cannot answer for this scheme and host. |
| 422 | Unprocessable Content | RFC 9110, Section 15.5.21 | The request is well-formed but its content fails validation. |
| 423 | Locked | RFC 4918 | The WebDAV resource is locked. |
| 424 | Failed Dependency | RFC 4918 | The WebDAV method failed because an action it depended on failed. |
| 425 | Too Early | RFC 8470 | The server will not risk processing a request that might be replayed from TLS early data. |
| 426 | Upgrade Required | RFC 9110, Section 15.5.22 | The client must switch to the protocol named in the Upgrade header. |
| 428 | Precondition Required | RFC 6585 | The server requires the request to be conditional, to prevent lost updates. |
| 429 | Too Many Requests | RFC 6585 | The client sent too many requests in a given time; Retry-After may say when to try again. |
| 431 | Request Header Fields Too Large | RFC 6585 | One header, or all of them together, is too large for the server. |
| 451 | Unavailable For Legal Reasons | RFC 7725 | The resource cannot be served because of a legal demand. |
| 500 | Internal Server Error | RFC 9110, Section 15.6.1 | The server hit an unexpected condition that stopped it from fulfilling the request. |
| 501 | Not Implemented | RFC 9110, Section 15.6.2 | The server does not support the functionality the request needs, such as the method. |
| 502 | Bad Gateway | RFC 9110, Section 15.6.3 | A gateway or proxy got an invalid response from the upstream server. |
| 503 | Service Unavailable | RFC 9110, Section 15.6.4 | The server is temporarily overloaded or down for maintenance; Retry-After may say for how long. |
| 504 | Gateway Timeout | RFC 9110, Section 15.6.5 | A gateway or proxy did not get a response from the upstream server in time. |
| 505 | HTTP Version Not Supported | RFC 9110, Section 15.6.6 | The server does not support the major HTTP version of the request. |
| 506 | Variant Also Negotiates | RFC 2295 | Transparent content negotiation is misconfigured into a loop on the server. |
| 507 | Insufficient Storage | RFC 4918 | The WebDAV server cannot store what it needs to complete the request. |
| 508 | Loop Detected | RFC 5842 | The WebDAV server found an infinite loop while processing the request. |
| 510 | Not Extended (OBSOLETED) | RFC 2774; Status change of HTTP experiments to Historic | Obsolete: it said the request needed further extensions, from an experiment now marked historic. |
| 511 | Network Authentication Required | RFC 6585 | The client must authenticate to gain network access, as with a captive portal. |

## FAQ

### What is the difference between 401 and 403?

401 Unauthorized means the request has no valid credentials, so authenticating may help. 403 Forbidden means the server understood who is asking and refuses anyway, so new credentials will not change the answer.

### Should I use 301 or 308 for a permanent redirect?

Both are permanent. A client may change a POST into a GET when it follows a 301, but must repeat the original method on a 308, so 308 is the safe choice for anything that is not a plain GET.

### Is 418 I’m a teapot a real status code?

No. The registry lists 418 as unused: it comes from a 1998 April Fools’ RFC, and RFC 9110 reserved the number so it would not be assigned to anything real.

### When should an API return 429?

When a client has sent too many requests in a time window. Send a Retry-After header with the number of seconds to wait, as the upAPI free tools do.

Page: https://upapi.io/tools/http-status-codes · Updated 2026-10-21.
