Developer

HTTP STATUS CODES

Complete HTTP status code reference. Search by code number or keyword. Click any card for details.

Developer Reference

Core Algorithm & Standalone Script

Standalone, zero-dependency JavaScript implementation powering this tool. Free to inspect, copy, and build upon.

const CODES = [
    [100,'Continue','The server has received the request headers and the client should proceed.','Used in large uploads to check if server will accept before sending the body.',1],
    [101,'Switching Protocols','The server agrees to switch protocols as requested by the client.','WebSocket upgrade: HTTP → WS.',1],
    [102,'Processing','The server is processing the request but no response is available yet.','WebDAV; long-running operations.',1],
    [103,'Early Hints','Lets the client start preloading resources before the final response.','Preload CSS/JS links before the full HTML arrives.',1],
    [200,'OK','The request succeeded. Response body contains the requested resource.','Standard GET response, form submission success.',2],
    [201,'Created','The request succeeded and a new resource was created.','POST to create a user, item, or record.',2],
    [202,'Accepted','The request was accepted but processing is not complete.','Asynchronous operations like email sending.',2],
    [203,'Non-Authoritative Information','Returned from a proxy that modified the origin response.','CDN or proxy adds/removes headers.',2],
    [204,'No Content','Request succeeded but there is no content to return.','DELETE, PUT with no body, empty PATCH.',2],
    [205,'Reset Content','Tells the client to reset the document view.','Clear a form after submission.',2],
    [206,'Partial Content','Partial resource returned, used with range requests.','Video streaming, resumable downloads.',2],
    [207,'Multi-Status','Multiple statuses for a multi-resource operation.','WebDAV PROPFIND responses.',2],
    [208,'Already Reported','Used in DAV to avoid enumerating members multiple times.','WebDAV binding extensions.',2],
    [226,'IM Used','Response is a delta encoding of the requested resource.','HTTP Delta encoding (RFC 3229).',2],
    [300,'Multiple Choices','Multiple options for the resource the client can choose from.','Content negotiation fallback.',3],
    [301,'Moved Permanently','This and all future requests should be directed to a new URL.','Domain migration, URL restructuring.',3],
    [302,'Found','Redirects the client to another URL temporarily.','Post/Redirect/Get pattern, login redirects.',3],
    [303,'See Other','Redirect to a GET request at another URL.','After a POST, redirect to results page.',3],
    [304,'Not Modified','Resource has not been modified; use the cached version.','Conditional GET with ETag/If-Modified-Since.',3],
    [307,'Temporary Redirect','Same as 302 but method must not change.','Non-GET redirects where method preservation matters.',3],
    [308,'Permanent Redirect','Same as 301 but method must not change.','Permanent move preserving POST method.',3],
    [400,'Bad Request','The server cannot process the request due to a client error.','Malformed JSON, invalid query params, missing required fields.',4],
    [401,'Unauthorized','Authentication is required and has failed or not been provided.','Missing or invalid API key, expired token.',4],
    [402,'Payment Required','Reserved for future use; used by some payment APIs.','Paywalls, API quota exceeded.',4],
    [403,'Forbidden','Server understood the request but refuses to authorize it.','Authenticated but not authorized, IP blocked.',4],
    [404,'Not Found','The requested resource could not be found.','Wrong URL, deleted resource, mistyped path.',4],
    [405,'Method Not Allowed','The HTTP method is not allowed for this resource.','POST to a read-only endpoint.',4],
    [406,'Not Acceptable','Server cannot produce a response matching the Accept headers.','Content negotiation failure.',4],
    [407,'Proxy Authentication Required','Authentication required with a proxy.','Corporate proxy auth.',4],
    [408,'Request Timeout','The server timed out waiting for the request.','Client too slow, connection dropped.',4],
    [409,'Conflict','Request conflicts with current state of the resource.','Duplicate entry, version conflict, merge conflict.',4],
    [410,'Gone','The resource is permanently gone with no forwarding address.','Intentionally deleted, content removed per GDPR.',4],
    [411,'Length Required','Server requires Content-Length header.','Missing Content-Length in POST/PUT.',4],
    [412,'Precondition Failed','One or more conditions in the request headers evaluated to false.','Optimistic locking with If-Match ETag.',4],
    [413,'Content Too Large','Request body exceeds server limits.','File upload too large, payload limit exceeded.',4],
    [414,'URI Too Long','The URI provided was too long for the server to process.','Very long query strings.',4],
    [415,'Unsupported Media Type','The media format is not supported by the server.','Sending XML to a JSON-only endpoint.',4],
    [416,'Range Not Satisfiable','The requested byte range is not satisfiable.','Invalid Range header in streaming.',4],
    [417,'Expectation Failed','Server cannot meet the requirements in the Expect header.','100-continue expectation failed.',4],
    [418,"I'm a Teapot",'The server refuses to brew coffee because it is a teapot (April Fools RFC).','Easter egg, rate limiting humor, placeholder responses.',4],
    [421,'Misdirected Request','Request was directed at a server unable to respond.','HTTP/2 connection reuse issues.',4],
    [422,'Unprocessable Content','Semantic errors prevent the server from processing the request.','Validation errors, invalid field values.',4],
    [423,'Locked','Resource is locked.','WebDAV locking.',4],
    [424,'Failed Dependency','Request failed because a dependency failed.','WebDAV dependent operations.',4],
    [425,'Too Early','Server unwilling to process a potentially replayed request.','TLS 1.3 early data (0-RTT) protection.',4],
    [426,'Upgrade Required','Client must switch to a different protocol.','Required TLS upgrade.',4],
    [428,'Precondition Required','Server requires conditional requests.','Optimistic concurrency control enforcement.',4],
    [429,'Too Many Requests','Client has sent too many requests in a given time.','API rate limiting — add backoff.',4],
    [431,'Request Header Fields Too Large','Headers are too large for the server to process.','Cookie bloat, huge custom headers.',4],
    [451,'Unavailable For Legal Reasons','Access denied for legal reasons.','Content blocked by GDPR, court order, or regional law.',4],
    [500,'Internal Server Error','A generic server-side error occurred.','Uncaught exception, null pointer, database error.',5],
    [501,'Not Implemented','The server does not support the functionality required.','Unimplemented HTTP method.',5],
    [502,'Bad Gateway','An upstream server returned an invalid response.','Nginx/proxy cannot reach app server.',5],
    [503,'Service Unavailable','The server is temporarily unavailable.','Maintenance mode, overloaded, deploying.',5],
    [504,'Gateway Timeout','Upstream server did not respond in time.','Database slow query, upstream timeout.',5],
    [505,'HTTP Version Not Supported','HTTP version in the request is not supported.','Using HTTP/3 with an HTTP/1.1-only server.',5],
    [506,'Variant Also Negotiates','Circular reference in content negotiation.','Misconfigured content negotiation.',5],
    [507,'Insufficient Storage','Server is unable to store the resource.','WebDAV, disk full.',5],
    [508,'Loop Detected','Infinite loop detected while processing the request.','WebDAV infinite loop.',5],
    [510,'Not Extended','Further extensions required for the server to fulfil the request.','HTTP Extension Framework.',5],
    [511,'Network Authentication Required','Client must authenticate to gain network access.','Captive portal on public WiFi.',5],
  ];

  let activeCategory = 'all';

  function buildGrid() {
    const grid = document.getElementById('statusGrid');
    grid.innerHTML = CODES.map(([code, name, desc, use, cat]) =>
      `<div class="status-card" data-code="${code}" data-cat="${cat}" data-text="${code} ${name} ${desc} ${use}".toLowerCase() onclick="this.classList.toggle('open')">
        <div class="status-code s${cat}xx">${code}</div>
        <div class="status-name">${name}</div>
        <div class="status-desc">${desc}</div>
        <div class="status-detail">${desc}<div class="status-use">→ ${use}</div></div>
      </div>`
    ).join('');
    filter();
  }

  function setCategory(cat, btn) {
    activeCategory = cat;
    document.querySelectorAll('.filter-tab').forEach(t => t.classList.remove('active'));
    btn.classList.add('active');
    filter();
  }

  function filter() {
    const q = document.getElementById('searchInput').value.toLowerCase();
    const cards = document.querySelectorAll('.status-card');
    let visible = 0;
    cards.forEach(card => {
      const code = card.dataset.code;
      const cat = card.dataset.cat;
      const text = card.textContent.toLowerCase();
      const catMatch = activeCategory === 'all' || cat === activeCategory;
      const qMatch = !q || code.includes(q) || text.includes(q);
      const show = catMatch && qMatch;
      card.classList.toggle('hidden', !show);
      if (show) visible++;
    });
    document.getElementById('resultCount').textContent = `Showing ${visible} of ${CODES.length} status codes`;
  }

  buildGrid();