Skip to content

Runs entirely in your browser. Nothing you paste leaves this page.

Free / No sign-up

HTTP status codes: the full list, explained.

A searchable reference of every standard HTTP status code from 100 to 511, with its meaning from RFC 9110 and practical notes for APIs, caching and SEO.

63 of 63 codes

1xx Informational

The request was received and processing continues. Interim responses sent before the final one.

  • 100

    Continue

    RFC 9110

    The first part of the request was received and the client should send the rest of the body.

    In practice: Clients send Expect: 100-continue before a large upload so the server can reject it before the body is transferred.

  • 101

    Switching Protocols

    RFC 9110

    The server agrees to switch to the protocol the client asked for in the Upgrade header.

    In practice: Seen in every WebSocket handshake.

  • 102

    Processing

    RFC 2518

    WebDAV interim response: the request is being processed and no final response is ready yet.

    In practice: Deprecated: dropped from later WebDAV specifications and rarely seen today.

  • 103

    Early Hints

    RFC 8297

    Interim response with Link headers sent before the final response.

    In practice: Lets browsers start preloading CSS, fonts or scripts while the server is still building the page.

2xx Successful

The request was received, understood and accepted.

  • 200

    OK

    RFC 9110

    The request succeeded. What the body contains depends on the method: the resource for GET, the result of the action for POST.

    In practice: The default success response for reads and for actions that return data.

  • 201

    Created

    RFC 9110

    The request succeeded and created one or more new resources.

    In practice: Return it from a POST that creates something, with a Location header pointing at the new resource.

  • 202

    Accepted

    RFC 9110

    The request was accepted for processing, but processing has not finished and may still fail.

    In practice: Asynchronous jobs: return 202 with a URL the client can poll for the result.

  • 203

    Non-Authoritative Information

    RFC 9110

    The request succeeded, but a transforming proxy modified the origin server's 200 response.

    In practice: Rare; mostly seen with proxies that rewrite content.

  • 204

    No Content

    RFC 9110

    The request succeeded and there is no content to send in the body.

    In practice: Common for DELETE and for PUT or PATCH that do not return the updated resource.

  • 205

    Reset Content

    RFC 9110

    The request succeeded and the client should reset the document view that sent it, for example clear a form.

    In practice: Rarely used in practice.

  • 206

    Partial Content

    RFC 9110

    The server is returning only the byte ranges the client asked for with a Range header.

    In practice: Video and audio streaming, resumable and parallel downloads.

  • 207

    Multi-Status

    RFC 4918

    WebDAV: the body carries separate status codes for several operations.

    In practice: Batch operations on file servers such as WebDAV or CalDAV.

  • 208

    Already Reported

    RFC 5842

    WebDAV: members of a binding were already listed earlier in the same 207 response.

    In practice: Avoids repeating the same resource when a collection is reachable more than once.

  • 226

    IM Used

    RFC 3229

    The response is the result of instance manipulations applied to the current resource, such as a delta.

    In practice: Delta encoding for HTTP; very rare.

3xx Redirection

Further action, usually following another URL, is needed to complete the request.

  • 300

    Multiple Choices

    RFC 9110

    The resource has more than one representation and the client may choose between them.

    In practice: Rarely used; servers usually pick one representation themselves.

  • 301

    Moved Permanently

    RFC 9110

    The resource has a new permanent URL, given in the Location header.

    In practice: Site migrations and URL changes. Search engines move ranking signals to the new URL. Clients may change POST to GET, so use 308 when the method must be kept.

  • 302

    Found

    RFC 9110

    The resource is temporarily at a different URL.

    In practice: Short-lived redirects such as a login bounce. Browsers historically turn POST into GET; use 307 to keep the method.

  • 303

    See Other

    RFC 9110

    The client should fetch another URL with GET to see the result.

    In practice: The Post/Redirect/Get pattern: after a form POST, redirect to a results page so a refresh does not resubmit.

  • 304

    Not Modified

    RFC 9110

    A conditional GET found the client's cached copy is still current, so no body is sent.

    In practice: Caching with ETag / If-None-Match or Last-Modified / If-Modified-Since. Saves bandwidth on repeat visits.

  • 305

    Use Proxy

    RFC 9110

    Deprecated. Originally told the client to access the resource through a proxy.

    In practice: Do not use; clients ignore it for security reasons.

  • 306

    (Unused)

    RFC 9110

    Reserved. It was used in an earlier draft and is no longer defined.

    In practice: Never send it.

  • 307

    Temporary Redirect

    RFC 9110

    The resource is temporarily at another URL and the client must repeat the request with the same method and body.

    In practice: Temporary redirects for APIs and form posts where turning POST into GET would be wrong.

  • 308

    Permanent Redirect

    RFC 9110

    The resource has a new permanent URL and the client must keep the same method and body.

    In practice: Permanent moves of API endpoints. Like 301 but method-preserving.

4xx Client error

The request contains an error or cannot be fulfilled as sent. Retrying unchanged will not help.

  • 400

    Bad Request

    RFC 9110

    The server cannot or will not process the request because of a client error, such as malformed syntax or invalid framing.

    In practice: Malformed JSON, missing required parameters or invalid query strings.

  • 401

    Unauthorized

    RFC 9110

    The request lacks valid authentication credentials. The response must include a WWW-Authenticate header.

    In practice: Missing, invalid or expired tokens. Despite the name it means unauthenticated; logging in may fix it.

  • 402

    Payment Required

    RFC 9110

    Reserved for future use.

    In practice: Some APIs use it for failed or overdue billing, but there is no standard meaning.

  • 403

    Forbidden

    RFC 9110

    The server understood the request but refuses to fulfil it.

    In practice: The client is known but not allowed, such as a missing role or permission. Logging in again will not help.

  • 404

    Not Found

    RFC 9110

    The server has no current representation for the target resource, or will not reveal that one exists.

    In practice: Broken links and unknown IDs. Also used instead of 403 to hide that a private resource exists.

  • 405

    Method Not Allowed

    RFC 9110

    The method is known but not supported by this resource. The response must include an Allow header.

    In practice: For example, a DELETE sent to a read-only endpoint.

  • 406

    Not Acceptable

    RFC 9110

    No representation matches the Accept headers the client sent.

    In practice: A client asks for application/xml from an API that only returns JSON.

  • 407

    Proxy Authentication Required

    RFC 9110

    Like 401, but the client must authenticate with a proxy first (Proxy-Authenticate header).

    In practice: Corporate proxies that require login.

  • 408

    Request Timeout

    RFC 9110

    The server did not receive a complete request in the time it was prepared to wait.

    In practice: Slow or idle clients; the server usually closes the connection.

  • 409

    Conflict

    RFC 9110

    The request conflicts with the current state of the resource.

    In practice: Edit conflicts, duplicate unique values or a version mismatch. Explain how to resolve it in the body.

  • 410

    Gone

    RFC 9110

    The resource is no longer available and this is likely permanent.

    In practice: Deliberately removed content. Google treats 410 and 404 the same way for indexing.

  • 411

    Length Required

    RFC 9110

    The server refuses the request without a Content-Length header.

    In practice: Uploads without a declared size.

  • 412

    Precondition Failed

    RFC 9110

    A condition in the request headers, such as If-Match or If-Unmodified-Since, evaluated to false.

    In practice: Optimistic concurrency: the resource changed since the client read its ETag.

  • 413

    Content Too Large

    RFC 9110

    The request content is larger than the server is willing to process. Formerly Payload Too Large.

    In practice: File uploads above the server or proxy size limit.

  • 414

    URI Too Long

    RFC 9110

    The request target is longer than the server is willing to interpret.

    In practice: Huge query strings; move the data into a POST body.

  • 415

    Unsupported Media Type

    RFC 9110

    The content is in a format the resource does not support, by Content-Type or Content-Encoding.

    In practice: Sending form data to an endpoint that only accepts application/json.

  • 416

    Range Not Satisfiable

    RFC 9110

    None of the requested ranges overlap the current extent of the resource.

    In practice: Resuming a download past the end of the file.

  • 417

    Expectation Failed

    RFC 9110

    The expectation in the request's Expect header cannot be met.

    In practice: Usually a server that does not support Expect: 100-continue.

  • 418

    (Unused)

    RFC 9110

    Reserved and unused. It comes from the 1998 April Fools' RFC 2324 (I'm a teapot), and RFC 9110 reserves it so it is never assigned.

    In practice: Some services return it as a joke or for blocked bots; avoid it in real APIs.

  • 421

    Misdirected Request

    RFC 9110

    The request was sent to a server that cannot produce a response for that scheme and host.

    In practice: Connection reuse across different hostnames with HTTP/2 or HTTP/3.

  • 422

    Unprocessable Content

    RFC 9110

    The content type and syntax are valid, but the server cannot process the instructions. Formerly Unprocessable Entity (WebDAV).

    In practice: Validation errors in APIs: well-formed JSON with invalid values.

  • 423

    Locked

    RFC 4918

    WebDAV: the resource is locked.

    In practice: File servers when another client holds a lock.

  • 424

    Failed Dependency

    RFC 4918

    WebDAV: the request failed because a request it depended on failed.

    In practice: Part of a batch failed, so dependent parts were not applied.

  • 425

    Too Early

    RFC 8470

    The server will not process a request that might be replayed.

    In practice: TLS 1.3 early data (0-RTT) for non-idempotent requests.

  • 426

    Upgrade Required

    RFC 9110

    The server refuses the request on the current protocol and says which to use in an Upgrade header.

    In practice: Forcing a client to a newer protocol version.

  • 428

    Precondition Required

    RFC 6585

    The server requires the request to be conditional.

    In practice: Prevents lost updates by making clients send If-Match with writes.

  • 429

    Too Many Requests

    RFC 6585

    The client has sent too many requests in a given time.

    In practice: Rate limiting. Include Retry-After so clients know when to try again.

  • 431

    Request Header Fields Too Large

    RFC 6585

    The header fields, individually or together, are too large.

    In practice: Oversized cookies are the usual cause.

  • 451

    Unavailable For Legal Reasons

    RFC 7725

    Access is denied because of a legal demand.

    In practice: Content blocked in a country by court order or regulation.

5xx Server error

The server failed to fulfil a valid request. The same request may succeed later.

  • 500

    Internal Server Error

    RFC 9110

    The server hit an unexpected condition that stopped it fulfilling the request.

    In practice: Unhandled exceptions. Log the details server-side and never leak stack traces to clients.

  • 501

    Not Implemented

    RFC 9110

    The server does not support the functionality needed, such as an unrecognised method.

    In practice: Endpoints or methods that are planned but not built.

  • 502

    Bad Gateway

    RFC 9110

    A gateway or proxy got an invalid response from the upstream server.

    In practice: The app behind a load balancer or CDN crashed or returned garbage.

  • 503

    Service Unavailable

    RFC 9110

    The server cannot handle the request right now, because of overload or maintenance.

    In practice: Planned maintenance and load shedding. Send Retry-After; search engines treat 503 as temporary.

  • 504

    Gateway Timeout

    RFC 9110

    A gateway or proxy did not get a response from the upstream server in time.

    In practice: Slow database queries or upstream APIs behind a proxy.

  • 505

    HTTP Version Not Supported

    RFC 9110

    The server does not support the HTTP version used in the request.

    In practice: Rare outside very old or very new clients.

  • 506

    Variant Also Negotiates

    RFC 2295

    A server configuration error in transparent content negotiation.

    In practice: Very rare.

  • 507

    Insufficient Storage

    RFC 4918

    WebDAV: the server cannot store what is needed to complete the request.

    In practice: Disk quota exceeded on file servers.

  • 508

    Loop Detected

    RFC 5842

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

    In practice: Bindings that point back to themselves.

  • 510

    Not Extended

    RFC 2774

    Further extensions to the request are required. The RFC is now historic.

    In practice: Practically unused.

  • 511

    Network Authentication Required

    RFC 6585

    The client must authenticate to gain network access.

    In practice: Captive portals on hotel or airport Wi-Fi.

How to use it.

  1. 01

    Search by number, name or topic, such as cache, redirect or rate limit.

  2. 02

    Filter by class, from 1xx informational to 5xx server errors.

  3. 03

    Link straight to a code: every entry has an anchor, for example /tools/http-status-codes#404, and a copy button.

What it does.

Everything this tool handles, all of it inside your browser tab.

  • Every standard status code from 100 to 511, grouped by class
  • Meaning from RFC 9110 or the RFC that defines each code
  • Practical notes for APIs, caching and SEO on every code
  • Instant search by number, name or topic
  • Filter by class: 1xx, 2xx, 3xx, 4xx and 5xx
  • Direct link to any code, such as #429
  • Copy a code and its name in one click
  • The whole reference is in the page HTML, readable without JavaScript

Worked examples.

  • 404 vs 410: deleted pages

    GET /old-pricing
    
    HTTP/1.1 404 Not Found   → nothing here; may or may not come back
    HTTP/1.1 410 Gone        → removed on purpose, and permanently

    Google drops both from its index. Use 410 when you want to state clearly that removal is deliberate, and 404 for everything else.

  • A 301 redirect, and how to check it

    HTTP/1.1 301 Moved Permanently
    Location: https://example.com/new-url
    
    $ curl -I https://example.com/old-url
    $ curl -sIL https://example.com/old-url | grep -i -E '^(HTTP|location)'

    curl -I shows only the headers. Add -L to follow the chain and spot redirect loops or slow multi-hop redirects.

  • 401 vs 403 in an API

    GET /api/invoices                 (no token)
    HTTP/1.1 401 Unauthorized
    WWW-Authenticate: Bearer
    
    GET /api/admin/users              (valid token, not an admin)
    HTTP/1.1 403 Forbidden

    401 means 'log in'; it must say how with WWW-Authenticate. 403 means logging in again will not help.

  • 422 validation error with Problem Details

    HTTP/1.1 422 Unprocessable Content
    Content-Type: application/problem+json
    
    {
      "type": "https://example.com/problems/validation",
      "title": "Your request is not valid",
      "status": 422,
      "errors": [{ "field": "email", "detail": "must be a valid email address" }]
    }

    The JSON parsed fine, so 400 would be misleading. RFC 9457 Problem Details gives every error the same shape; errors is an extension member.

  • 304 Not Modified with an ETag

    GET /app.css
    If-None-Match: "a1b2c3"
    
    HTTP/1.1 304 Not Modified
    ETag: "a1b2c3"
    Cache-Control: max-age=3600

    The browser already has this version, so the server sends no body. Conditional requests like this save bandwidth on every repeat visit.

What is an HTTP status code?

Every HTTP response starts with a three-digit status code that tells the client how the request went. In HTTP/1.1 it appears in the status line with a reason phrase, such as HTTP/1.1 404 Not Found. HTTP/2 and HTTP/3 send only the number, in the :status field, because clients act on the code and never on the phrase.

The codes are defined by IETF standards and listed in the IANA HTTP Status Code Registry. RFC 9110, HTTP Semantics, published in 2022, is the current definition of the core codes and replaced RFC 7231 and its predecessors. Other codes come from their own RFCs: 429 from RFC 6585, 103 Early Hints from RFC 8297, 451 from RFC 7725 and the WebDAV codes such as 207 and 423 from RFC 4918. Each entry above names its source.

The five classes of HTTP status codes

The first digit sets the class. 1xx responses are informational and arrive before the final answer, such as 101 when a WebSocket connection is upgraded or 103 Early Hints that let the browser preload resources. 2xx means success. 3xx asks the client to go somewhere else or use its cached copy. 4xx says the request itself is the problem, so sending it again unchanged will not help. 5xx says the server failed on a request that may have been valid, so a retry later may succeed.

A client that receives a code it does not recognise must treat it like the x00 code of its class, so an unknown 499 is handled as 400 and an unknown 599 as 500. That rule is why services can define new codes without breaking older clients.

Which status code should a REST API return?

For reads, return 200 with the resource. For a POST that creates something, return 201 Created with a Location header pointing at the new resource. Use 202 Accepted for work that continues in the background, with a URL the client can poll, and 204 No Content when a successful PUT, PATCH or DELETE has nothing to return.

For client errors, be specific. 400 is for requests that cannot be parsed or are malformed. 401 means not authenticated: credentials are missing, invalid or expired, and the response must include a WWW-Authenticate header. 403 means authenticated but not allowed. 404 is for resources that do not exist, and some APIs also use it instead of 403 to avoid revealing that a private resource exists. 405 means the method is not supported and must list the allowed ones in an Allow header. 409 signals a conflict with the current state, such as a duplicate or an outdated version. 422 fits a well-formed request that fails validation, and 429 with Retry-After is the standard response to rate limiting.

Put the details in the body using Problem Details, RFC 9457, with the application/problem+json media type, so every error has a consistent type, title, status and detail. Our REST API design best practices guide covers error formats, pagination and versioning in more depth.

301 vs 302 vs 307 vs 308: which redirect?

301 Moved Permanently and 308 Permanent Redirect both say the resource has a new permanent URL. 302 Found and 307 Temporary Redirect both say the move is temporary and clients should keep using the old URL. The difference within each pair is the method: with 301 and 302, clients may change a POST into a GET when they follow the redirect, while 307 and 308 require the same method and body.

In practice, use 301 or 308 for permanent page and domain moves, 302 or 307 for temporary ones, and 307 or 308 for APIs where a POST must stay a POST. 303 See Other is the deliberate 'now GET this' redirect used after a form submission, the post/redirect/get pattern that stops a page refresh resubmitting the form. 304 Not Modified is not really a redirect: it tells a client with a cached copy, validated through an ETag or Last-Modified date, that its copy is still current.

HTTP status codes and SEO

Search engines read status codes literally. Google documents that it treats all 4xx codes except 429 the same way: the URL is considered not to exist and drops out of the index, so 404 and 410 have the same effect. 410 Gone is still the more explicit signal that removal is deliberate. A page that says 'not found' but returns 200 is a soft 404, and it wastes crawling and can be reported as an error.

Permanent redirects with 301 or 308 move ranking signals to the new URL, which makes them the right choice for migrations. 5xx responses and 429 make Google's crawlers slow down, and if errors persist, indexed URLs are eventually dropped. For planned maintenance, return 503 with a Retry-After header for a short period rather than a 200 maintenance page or a redirect to the home page. Our technical SEO glossary entry covers crawling and indexing in more detail.

500 vs 502 vs 503 vs 504: debugging server errors

500 Internal Server Error is the generic failure of the application itself: an unhandled exception, a bad deploy or a failed dependency the code did not expect. Start with the application logs and error tracking. 501 Not Implemented means the server does not support the method at all.

502 Bad Gateway and 504 Gateway Timeout come from a proxy, load balancer, API gateway or CDN in front of your application. 502 means it received an invalid response or none at all, for example because the upstream process crashed or the port is wrong; 504 means the upstream did not answer in time, so look for slow queries or a timeout set lower than the work takes. 503 Service Unavailable means the server is temporarily overloaded or in maintenance, ideally with Retry-After. Good observability, with logs, metrics and traces that connect the edge to the application, turns these from guesses into quick fixes.

Unofficial and non-standard status codes

Some codes you see in logs are not in any RFC. Nginx uses 444 to close a connection without a response and 499 when the client closed the connection first. Cloudflare returns 520 to 527 for problems between its edge and the origin server. 418 I'm a teapot comes from a 1998 April Fools' RFC; RFC 9110 reserves 418 so that it is never assigned. These codes are not listed above because they are not part of the standard registry, and you should not rely on them in your own APIs.

Questions, answered

Something else on your mind? Ask a consultant and get a reply within one business day.

What are HTTP status codes?

Three-digit numbers at the start of every HTTP response that tell the client whether the request succeeded, was redirected or failed, and why. The first digit gives the class, from 1xx informational to 5xx server error.

What is the difference between 401 and 403?

401 Unauthorized means the request is not authenticated: credentials are missing, invalid or expired, and logging in may fix it. 403 Forbidden means the server knows who you are and still refuses; logging in again will not help.

What is the difference between 404 and 410?

404 Not Found says nothing is at the URL, without saying whether that is permanent. 410 Gone says the resource was removed deliberately and will not return. Google treats both the same way and removes the URL from its index.

Should I use 301 or 302?

301 for permanent moves, such as a new URL structure or domain, because it transfers ranking signals to the new URL. 302 for temporary ones, such as a short campaign or an A/B test, where the old URL should stay indexed.

What is the difference between 301 and 308, or 302 and 307?

307 and 308 require the client to repeat the same method and body, while 301 and 302 allow a POST to become a GET. For web pages 301 and 302 are fine; for APIs prefer 308 and 307.

When should an API return 422 instead of 400?

400 is for requests the server cannot parse or that are malformed. 422 Unprocessable Content fits requests that are well-formed but fail validation, such as an invalid email in valid JSON.

What is the difference between 500, 502, 503 and 504?

500 is a failure inside the application. 502 and 504 come from a proxy or gateway that got a bad response or no response in time from the server behind it. 503 means the service is temporarily overloaded or down for maintenance.

What does 304 Not Modified mean?

The client's cached copy is still current, so the server sends no body. It answers a conditional request that carried an If-None-Match or If-Modified-Since header.

What does 429 Too Many Requests mean?

The client has hit a rate limit. Wait for the time in the Retry-After header, or back off exponentially if there is none, before trying again.

What is a soft 404?

A page that tells visitors it does not exist but returns 200 OK. Search engines may still crawl and flag it; return a real 404 or 410 instead.

Which status code should a successful POST or DELETE return?

A POST that creates a resource should return 201 Created with a Location header. A DELETE that succeeds with nothing to return should use 204 No Content, or 200 if it returns a body.

Is 418 I'm a teapot a real status code?

It comes from a 1998 April Fools' RFC. RFC 9110 reserves 418 as unused so it is never assigned to anything real; avoid it in production APIs.

More free tools.

All tools

Need tooling like this inside your product?

We build internal tools, developer platforms and APIs. Tell us what your team keeps doing by hand.