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