A searchable reference for the thirty HTTP status codes you actually encounter, grouped by class, with the distinction between the ones people routinely confuse.
Quick reference for HTTP status codes. Search by code number, name, or description. Essential for debugging APIs and load balancers.
Continue
Server has received the request headers; client should proceed to send the body.
Switching Protocols
Server is switching protocols as requested by the client (e.g., WebSocket upgrade).
OK
Standard response for successful HTTP requests.
Created
Request fulfilled and a new resource has been created (common for POST).
Accepted
Request accepted for processing but not yet completed (async operations).
No Content
Request processed successfully but no content to return (common for DELETE).
Partial Content
Server is delivering only part of the resource (range requests).
Moved Permanently
Resource has permanently moved to a new URL. Search engines transfer SEO value.
Found
Temporary redirect. Client should continue to use the original URL for future requests.
See Other
Response to the request can be found at another URL using a GET method.
Not Modified
Resource has not been modified since the last request (caching).
Temporary Redirect
Temporary redirect that preserves the HTTP method (unlike 302).
Permanent Redirect
Permanent redirect that preserves the HTTP method (unlike 301).
Bad Request
Server cannot process the request due to a client error (e.g., malformed syntax).
Unauthorized
Authentication required. The client must authenticate itself to get the response.
Forbidden
Server understood the request but refuses to authorize it. Different from 401.
Not Found
Server cannot find the requested resource. The most common error on the web.
Method Not Allowed
Request method is not supported for the resource (e.g., POST to a read-only endpoint).
Request Timeout
Server timed out waiting for the request from the client.
Conflict
Request conflicts with the current state of the server (e.g., duplicate resource).
Gone
Resource is no longer available and will not be available again. Like a permanent 404.
Payload Too Large
Request entity is larger than limits defined by the server.
Unsupported Media Type
Media format of the requested data is not supported by the server.
Unprocessable Entity
Request was well-formed but semantically invalid (common in REST APIs).
Too Many Requests
Rate limiting. User has sent too many requests in a given time period.
Internal Server Error
Generic server-side error. The server encountered an unexpected condition.
Not Implemented
Server does not support the functionality required to fulfill the request.
Bad Gateway
Server acting as a gateway received an invalid response from the upstream server.
Service Unavailable
Server is temporarily unavailable (overloaded, maintenance, etc.).
Gateway Timeout
Server acting as a gateway did not receive a timely response from upstream.
Showing 30 of 30 status codes
Most status-code confusion comes down to a handful of pairs. 401 versus 403: 401 means we do not know who you are, send credentials; 403 means we know exactly who you are and you still cannot have this. 301 versus 302: 301 is permanent and browsers cache it aggressively, which makes a mistaken 301 painful to undo. 502 versus 504: 502 means the upstream returned garbage, 504 means it never returned at all, and they point at completely different failures.
For API design, the code is part of your contract. Clients and load balancers act on it: a 429 with Retry-After tells a well-behaved client to back off, while returning 200 with an error body means every retry policy in front of you is blind.