Skip to main content

Free HTTP Status Codes Reference

Searchable reference for all HTTP status codes — what each means, when it's used, and common causes. From 100 to 511.

Works offline once loaded

61 status codes

100

Continue

The server has received the request headers and the client should proceed with the body.

Used for requests with Expect: 100-continue. The server acknowledges that it's willing to receive the body before the client sends it. Rarely seen in modern web apps.

RFC 9110 ↗
101

Switching Protocols

The server is switching protocols as requested by the client.

Most commonly used for WebSocket upgrades — the client requests Upgrade: websocket and the server responds 101 to switch.

RFC 9110 ↗
102

Processing

The server has received the request and is processing it, but no response is available yet.

A WebDAV interim response sent to prevent client timeouts during lengthy operations. Deprecated — modern servers should not send it.

RFC 2518 ↗
103

Early Hints

Preliminary headers sent before the final response.

Lets servers send Link headers (preload/preconnect) while the final response is still being prepared, so browsers can start fetching critical assets sooner.

RFC 8297 ↗
200

OK

The request succeeded.

The standard success response. The meaning depends on the HTTP method: GET → resource returned, POST/PUT → action completed.

RFC 9110 ↗
201

Created

A new resource was successfully created.

Common after a POST. The response should include a Location header pointing to the new resource's URL.

RFC 9110 ↗
202

Accepted

The request was accepted for processing, but processing is not complete.

For async operations — the server is queuing the work. The client should poll a status endpoint or check back later.

RFC 9110 ↗
203

Non-Authoritative Information

The response was modified by a transforming proxy.

The request succeeded, but an intermediary (such as a caching or transforming proxy) altered the payload from the origin server — for example, recompressing images. Rare in practice.

RFC 9110 ↗
204

No Content

The request succeeded but there is no response body.

Often used for DELETE operations or PUT updates that don't need to return a body. The client should not navigate away from the current page.

RFC 9110 ↗
205

Reset Content

The request succeeded; the client should reset the document view.

Like 204, no body is returned — but the client is additionally told to reset the form or view that produced the request (e.g. clear the form fields for the next entry).

RFC 9110 ↗
206

Partial Content

The server delivered only part of the resource.

Response to a Range request. Used by video players and download managers to resume interrupted downloads or stream large files.

RFC 9110 ↗
207

Multi-Status

The response body contains multiple status codes for multiple operations.

WebDAV: an XML body reports the outcome of several sub-operations independently — e.g. a batch move where some items succeeded and others failed.

RFC 4918 ↗
208

Already Reported

The members of a collection were already listed earlier in the response.

WebDAV: used inside 207 Multi-Status responses to avoid repeatedly listing members of the same collection when bindings create loops.

RFC 5842 ↗
226

IM Used

The response is the result of instance manipulations applied to the resource.

Delta encoding: the server returns a diff against a previous version instead of the full resource, saving bandwidth. Very rarely implemented.

RFC 3229 ↗
300

Multiple Choices

Several representations of the resource are available.

The server offers multiple options (e.g. different formats or languages) and the client should choose one. Rarely used, because automatic content negotiation usually handles this.

RFC 9110 ↗
301

Moved Permanently

The resource has permanently moved to a new URL.

Use for permanent URL changes — search engines will update their index. SEO authority transfers to the new URL.

RFC 9110 ↗
302

Found (Temporary Redirect)

The resource is temporarily at a different URL.

Indicates the redirect is not permanent. Caching is less aggressive than 301. Use for things like 'login required, redirecting to /login'.

RFC 9110 ↗
303

See Other

Redirect to a different URL using GET.

Used after POST submissions — the response says 'your POST worked, see this GET URL for the result'. Browsers always GET the new URL.

RFC 9110 ↗
304

Not Modified

The cached version is still valid; use it.

Response to a conditional request (with If-None-Match or If-Modified-Since headers). Saves bandwidth — no body is returned.

RFC 9110 ↗
307

Temporary Redirect

Like 302 but preserves the original HTTP method.

If the original was POST, the redirect also uses POST. Modern alternative to 302 when method preservation matters.

RFC 9110 ↗
308

Permanent Redirect

Like 301 but preserves the original HTTP method.

Modern replacement for 301 when you want POST requests to remain POST after the redirect.

RFC 9110 ↗
400

Bad Request

The server couldn't understand the request due to malformed syntax.

Common causes: malformed JSON in body, invalid query parameters, or missing required fields. Check the request body and headers.

RFC 9110 ↗
401

Unauthorized

Authentication is required and has not been provided.

The client must include authentication credentials (Authorization header, cookie, token). 'Unauthorized' is a misnomer — it really means 'unauthenticated'.

RFC 9110 ↗
402

Payment Required

Reserved for future use — sometimes used for paid API tiers.

Originally intended for digital payments. Modern usage: APIs sometimes return 402 when a user has exceeded their paid quota.

RFC 9110 ↗
403

Forbidden

The client is authenticated but doesn't have permission.

Different from 401 — the user IS logged in, but their account doesn't have permission for this resource. Check role/permissions logic.

RFC 9110 ↗
404

Not Found

The requested resource doesn't exist.

Either the URL is wrong, the resource was deleted, or it never existed. Servers sometimes return 404 to hide that a 403 would be more accurate.

RFC 9110 ↗
405

Method Not Allowed

The HTTP method used is not allowed for this resource.

For example, a GET request to an endpoint that only accepts POST. The response should include an Allow header listing valid methods.

RFC 9110 ↗
406

Not Acceptable

No representation matches the client's Accept headers.

The client asked for a content type, language, or encoding (via Accept, Accept-Language, Accept-Encoding) the server cannot satisfy. Many servers skip strict negotiation and return a default instead.

RFC 9110 ↗
407

Proxy Authentication Required

The client must authenticate with the proxy first.

Like 401, but issued by a proxy: the client must send Proxy-Authorization credentials. Seen on corporate networks with authenticating proxies.

RFC 9110 ↗
408

Request Timeout

The server timed out waiting for the request.

The client took too long to send the request body or kept the connection idle. Try the request again.

RFC 9110 ↗
409

Conflict

The request conflicts with the current state of the resource.

Typically returned for concurrent edit conflicts or duplicate resource creation (e.g., creating a user with an email that already exists).

RFC 9110 ↗
410

Gone

The resource was deleted and won't come back.

Stronger than 404 — the server explicitly knows the resource USED to exist but has been permanently removed. Search engines will deindex.

RFC 9110 ↗
411

Length Required

The server requires a Content-Length header.

The request was rejected because it lacked a Content-Length header and the server refuses bodies of unknown size. Add the header and retry.

RFC 9110 ↗
412

Precondition Failed

A condition in the request headers was not met.

Returned when conditional headers like If-Match or If-Unmodified-Since fail — typically optimistic locking: someone else changed the resource since your version. Refetch and retry.

RFC 9110 ↗
413

Payload Too Large

The request body exceeds the server's size limit.

Common when uploading large files. Server config (nginx, apache) sets a max body size. Check the server's configuration.

RFC 9110 ↗
414

URI Too Long

The request URL exceeds the server's length limit.

Usually caused by very long query strings (e.g. encoding data in a GET). Switch to a POST body, or raise the server limit if you control it.

RFC 9110 ↗
415

Unsupported Media Type

The server can't handle the Content-Type sent.

For example, sending application/xml to a server that only accepts application/json. Set the Content-Type header correctly.

RFC 9110 ↗
416

Range Not Satisfiable

The requested byte range is outside the resource's size.

The Range header asks for a portion the file does not have — e.g. resuming a download past the end of the file. The response should include Content-Range with the actual size.

RFC 9110 ↗
417

Expectation Failed

The server cannot meet the requirements of the Expect header.

Sent when the server does not support Expect: 100-continue. Some clients send this header by default on large POSTs; disabling it usually resolves the error.

RFC 9110 ↗
418

I'm a Teapot

The server refuses to brew coffee because it's a teapot.

An April Fool's joke from 1998 (RFC 2324). Some real APIs use it for jokes or to mark deprecated endpoints. Not for production use.

RFC 2324 ↗
421

Misdirected Request

The request was sent to a server unable to produce a response for it.

Common with HTTP/2 connection reuse: the request reached a server that is not configured for the target hostname. The client should retry on a new connection.

RFC 9110 ↗
422

Unprocessable Content

The request was syntactically valid but semantically wrong.

For example, JSON parsed correctly but a required field was missing, or a field value was out of range. Common in REST API validation responses.

RFC 9110 ↗
423

Locked

The resource is locked.

WebDAV: the source or destination resource is locked by another client, so the operation cannot proceed. Wait for the lock to be released or break it with the proper token.

RFC 4918 ↗
424

Failed Dependency

The request failed because a previous dependent request failed.

WebDAV: in a chain of dependent operations, an earlier action failed, so this one was not performed. Look at the earlier failure for the root cause.

RFC 4918 ↗
425

Too Early

The server refuses to process a request that might be replayed.

Related to TLS 1.3 0-RTT (early data): the server will not risk processing a possibly replayed request. The client should retry after the handshake completes.

RFC 8470 ↗
426

Upgrade Required

The client must switch to a different protocol.

The server refuses to serve the request over the current protocol but will after an upgrade — the response includes an Upgrade header naming the required protocol.

RFC 9110 ↗
428

Precondition Required

The server requires the request to be conditional.

The server demands conditional headers (like If-Match) to prevent lost-update conflicts. Fetch the resource, capture its ETag, and resend with If-Match.

RFC 6585 ↗
429

Too Many Requests

The client is being rate-limited.

Slow down. The response should include a Retry-After header indicating when to try again. Common with APIs that have request quotas.

RFC 6585 ↗
431

Request Header Fields Too Large

Headers are too large for the server to process.

Either one header or the total header size exceeds the limit — most often caused by oversized cookies. Clear cookies or reduce what your app stores in them.

RFC 6585 ↗
451

Unavailable For Legal Reasons

Access denied due to legal demands.

The resource is blocked for legal reasons — censorship, court orders, or regional regulations. The number is a nod to the novel Fahrenheit 451.

RFC 7725 ↗
500

Internal Server Error

The server encountered an unexpected condition.

A generic catch-all for server-side errors. Check server logs for the actual cause: unhandled exception, database error, etc.

RFC 9110 ↗
501

Not Implemented

The server doesn't support the functionality requested.

For example, the server doesn't recognize the HTTP method. Rare in practice — more often you'll see 405.

RFC 9110 ↗
502

Bad Gateway

The server, acting as a gateway, got a bad response from an upstream server.

Common in microservice architectures. Your load balancer or reverse proxy got a malformed response from the backend service.

RFC 9110 ↗
503

Service Unavailable

The server is temporarily unable to handle the request.

Either down for maintenance or overloaded. The response should include a Retry-After header. Often returned during deployments.

RFC 9110 ↗
504

Gateway Timeout

The gateway server timed out waiting for an upstream response.

The backend service didn't respond fast enough. Check upstream service health and timeout configurations.

RFC 9110 ↗
505

HTTP Version Not Supported

The server doesn't support the HTTP version used in the request.

The major HTTP version of the request is not supported by the server. Almost never seen with modern clients.

RFC 9110 ↗
506

Variant Also Negotiates

The server has a content negotiation misconfiguration.

Transparent content negotiation ended in a loop: the chosen variant is itself configured to negotiate. Indicates a server configuration error.

RFC 2295 ↗
507

Insufficient Storage

The server is out of disk space.

WebDAV-specific in origin but sometimes used by general servers. Means the server can't save the request because of storage constraints.

RFC 4918 ↗
508

Loop Detected

The server detected an infinite loop while processing the request.

WebDAV: processing a Depth: infinity request entered a loop (e.g. circular bindings). The operation was terminated.

RFC 5842 ↗
510

Not Extended

Further extensions to the request are required.

From the obsolete HTTP Extension Framework: the server needs more information before it can fulfill the request. Effectively unused on the modern web.

RFC 2774 ↗
511

Network Authentication Required

The client must authenticate to gain network access.

Used by captive portals (hotel/airport WiFi) to indicate the user must log in to the network before accessing external sites.

RFC 6585 ↗

Common uses

  • Reference for API DesignWhen designing REST APIs, pick the right status code for each response.
  • Look Up Error Codes QuicklyWhen your app returns a confusing HTTP error, look up what it actually means.
  • Learn HTTP Status CodesComprehensive reference for students and developers learning HTTP and REST.
  • Quick Reference During IncidentsDuring production incidents, quickly look up what each status code means.
  • Reference for API DocumentationWhen writing API documentation, link to authoritative descriptions of the status codes you return.

How It Works

This tool is a client-side reference built around a hardcoded lookup table of 63 HTTP status codes spanning all five classes (1xx–5xx), each annotated with its defining RFC number. There is no server call, no external API, and no network request — all filtering and display happens in the browser using JavaScript's built-in array and string methods.

  1. 1
    Lookup table is loaded
    The full set of 63 IANA-registered status codes is embedded directly in this tool as a JavaScript array, each entry carrying the numeric code, canonical English name, category class, and the specific RFC that defines it (e.g. RFC 9110 for most HTTP/1.1 codes, RFC 6585 for 429 Too Many Requests, RFC 2324 for 418 I'm a Teapot).
  2. 2
    Filter runs in memory
    As you type or select a category filter, JavaScript's Array.filter runs on the in-memory list, matching your query against the status code number, the canonical name, and both the short and long description strings using String.includes — no debounce delay, no server round-trip.
  3. 3
    Details expand with RFC link
    Each result renders as an HTML details/summary element. Expanding an entry reveals the long-form explanation and a direct link to the authoritative RFC on rfc-editor.org, so you can read the exact specification text for any code.
  4. 4
    Deep links and clipboard copy
    Opening an entry updates the URL hash to the code number (e.g. #404), making the page shareable and bookmark-friendly. The copy button writes the canonical string (e.g. '404 Not Found') to the clipboard via the browser's navigator.clipboard API.

Related Tools

Frequently Asked Questions