HTTP Status Codes Reference - Complete HTTP Response Code List Online
Search, filter, and copy all HTTP status codes (1xx-5xx) with descriptions, use cases, and response examples. Interactive reference — 100% client-side, no data sent to server.
61 status codes found
The server is switching protocols as requested by the client.
The server has received and is processing the request, but no response is available yet.
Used to return response headers before the final HTTP message.
The request succeeded.
The request succeeded and a new resource was created.
The request has been accepted for processing, but processing is not complete.
The returned metadata is not exactly the same as available from the origin server.
The server successfully processed the request but is not returning any content.
The server successfully processed the request and asks the client to reset the document view.
The server is delivering only part of the resource due to a range header sent by the client.
The message body contains multiple status codes for different operations.
The members of a DAV binding have already been enumerated in a previous reply.
The server has fulfilled a GET request for the resource with instance manipulations applied.
The request has more than one possible response.
The URL of the requested resource has been changed permanently.
The URI of requested resource has been changed temporarily.
The server sent this response to direct the client to get the requested resource at another URI with a GET request.
The resource has not been modified since the version specified by the request headers.
The server sends this response to redirect the client, guaranteeing the same HTTP method will be used.
The resource has been permanently moved, and the same HTTP method must be used.
The server cannot process the request due to something perceived to be a client error.
The client must authenticate itself to get the requested response.
Reserved for future use. Originally created for digital payment systems.
The client does not have access rights to the content.
The server cannot find the requested resource.
The request method is known by the server but is not supported by the target resource.
The server cannot produce a response matching the list of acceptable values defined in the request headers.
The client must first authenticate itself with the proxy.
The server timed out waiting for the request.
The request conflicts with the current state of the server.
The content has been permanently deleted from the server with no forwarding address.
The server rejects the request because the Content-Length header field is not defined.
The client has indicated preconditions in its headers which the server does not meet.
The request entity is larger than limits defined by the server.
The URI requested by the client is longer than the server is willing to interpret.
The media format of the requested data is not supported by the server.
The range specified by the Range header field in the request cannot be fulfilled.
The expectation given in the Expect request header could not be met by the server.
The server refuses the attempt to brew coffee with a teapot.
The request was directed at a server that is not able to produce a response.
The request was well-formed but was unable to be followed due to semantic errors.
The resource that is being accessed is locked.
The request failed because it depended on another request that failed.
The server is unwilling to risk processing a request that might be replayed.
The server refuses to perform the request using the current protocol.
The origin server requires the request to be conditional.
The user has sent too many requests in a given amount of time (rate limiting).
The server is unwilling to process the request because its header fields are too large.
The user agent requested a resource that cannot legally be provided.
The server has encountered a situation it does not know how to handle.
The request method is not supported by the server and cannot be handled.
The server got an invalid response while working as a gateway.
The server is not ready to handle the request.
The server is acting as a gateway and cannot get a response in time.
The HTTP version used in the request is not supported by the server.
The server has an internal configuration error during content negotiation.
The server is unable to store the representation needed to complete the request.
The server detected an infinite loop while processing the request.
Further extensions to the request are required for the server to fulfill it.
The client needs to authenticate to gain network access.
Frequently Asked Questions
What are HTTP status codes?
HTTP status codes are three-digit numbers returned by a web server in response to a client's request. They indicate whether the request was successful, redirected, or resulted in an error. Status codes are grouped into five classes: 1xx (Informational), 2xx (Success), 3xx (Redirection), 4xx (Client Error), and 5xx (Server Error). They are defined by the IETF in RFC 9110 and are fundamental to how the web works.
How do I use this HTTP status codes reference tool?
Enter a status code number (e.g., '404') or a keyword (e.g., 'not found' or 'redirect') in the search bar to find the relevant codes instantly. You can also filter by category using the 1xx-5xx buttons. Click on any status code card to expand it and see the full description, common use case, and a copyable response example. Use the copy buttons to quickly grab the code or snippet for your project.
Is my data safe? Does anything get sent to a server?
This tool is 100% client-side. All HTTP status code data is statically embedded in the page — there are no API calls, no server requests, and no data collection. Your search queries and interactions never leave your browser. The tool works fully offline after the initial page load.
What is the difference between 401 Unauthorized and 403 Forbidden?
401 Unauthorized means the request lacks valid authentication credentials — the client has not identified itself. The server is saying 'I don't know who you are; please authenticate.' 403 Forbidden means the server knows who you are (you may be authenticated) but you do not have permission to access the resource. The server is saying 'I know who you are, but you're not allowed.'
What is the difference between 301 and 308 redirects?
Both indicate a permanent redirect. 301 Moved Permanently allows the HTTP method to change on redirect (e.g., POST may become GET). 308 Permanent Redirect preserves the original HTTP method. For APIs that use POST/PUT, 308 is the safer choice. Similarly, 302 vs 307: 302 Found allows method change, while 307 Temporary Redirect preserves it.
Why does the 418 'I'm a teapot' status code exist?
418 I'm a teapot was defined in RFC 2324 as an April Fools' joke in 1998 as part of the Hyper Text Coffee Pot Control Protocol (HTCPCP). While not a real HTTP status code from a standards perspective, it has been widely adopted as an Easter egg and is recognized by many HTTP libraries and frameworks. It is included in this reference for completeness.
What are WebDAV status codes?
WebDAV (Web Distributed Authoring and Versioning) is an extension of HTTP that allows clients to perform remote web content authoring. It introduces additional status codes like 207 Multi-Status, 422 Unprocessable Content, 423 Locked, 424 Failed Dependency, 507 Insufficient Storage, and 508 Loop Detected. These codes are defined in RFC 4918 and are commonly used in modern REST APIs (especially 422 for validation errors).
Code Examples
// HTTP Status Code lookup
const HTTP_STATUS_CATEGORIES = {
'1xx': 'Informational',
'2xx': 'Success',
'3xx': 'Redirection',
'4xx': 'Client Error',
'5xx': 'Server Error',
};
function getStatusCategory(code) {
if (code >= 100 && code < 200) return '1xx';
if (code >= 200 && code < 300) return '2xx';
if (code >= 300 && code < 400) return '3xx';
if (code >= 400 && code < 500) return '4xx';
if (code >= 500 && code < 600) return '5xx';
return 'Unknown';
}
const STATUS_CODES = {
200: 'OK',
201: 'Created',
204: 'No Content',
301: 'Moved Permanently',
302: 'Found',
304: 'Not Modified',
400: 'Bad Request',
401: 'Unauthorized',
403: 'Forbidden',
404: 'Not Found',
405: 'Method Not Allowed',
409: 'Conflict',
422: 'Unprocessable Content',
429: 'Too Many Requests',
500: 'Internal Server Error',
502: 'Bad Gateway',
503: 'Service Unavailable',
};
async function fetchWithStatusHandling(url, options = {}) {
try {
const response = await fetch(url, options);
const category = getStatusCategory(response.status);
switch (category) {
case '2xx':
if (response.status === 204) return { data: null, status: 204 };
return { data: await response.json(), status: response.status };
case '4xx':
const clientError = await response.json().catch(() => ({}));
throw {
status: response.status,
statusText: STATUS_CODES[response.status] || response.statusText,
message: clientError.message || `Client error: ${response.status}`,
isRetryable: response.status === 429,
retryAfter: response.headers.get('Retry-After'),
};
case '5xx':
throw {
status: response.status,
statusText: STATUS_CODES[response.status] || response.statusText,
message: `Server error: ${response.status}`,
isRetryable: [502, 503, 504].includes(response.status),
};
default:
throw new Error(`Unexpected status code: ${response.status}`);
}
} catch (error) {
if (error.status) throw error;
throw { status: 0, message: 'Network error', isRetryable: true };
}
}