HTTP status codes.
Every HTTP status code you'll actually run into, grouped by class, with what each one really means.
1xx — Informational
| Code | Name | What it means |
|---|---|---|
| 100 | Continue | The server got the request headers; continue sending the body. |
| 101 | Switching Protocols | The server is switching protocols as requested (e.g. to WebSocket). |
| 103 | Early Hints | Preload hints sent before the final response. |
2xx — Success
| Code | Name | What it means |
|---|---|---|
| 200 | OK | Standard success response. |
| 201 | Created | The request succeeded and a new resource was created. |
| 202 | Accepted | Accepted for processing, but not yet completed. |
| 204 | No Content | Success, but there's nothing to return. |
| 206 | Partial Content | Partial data returned (range requests / resuming downloads). |
3xx — Redirection
| Code | Name | What it means |
|---|---|---|
| 301 | Moved Permanently | The resource has permanently moved to a new URL. |
| 302 | Found | Temporary redirect to another URL. |
| 303 | See Other | Fetch the resource from another URL using GET. |
| 304 | Not Modified | The cached version is still valid; nothing changed. |
| 307 | Temporary Redirect | Like 302, but the HTTP method must not change. |
| 308 | Permanent Redirect | Like 301, but the HTTP method must not change. |
4xx — Client error
| Code | Name | What it means |
|---|---|---|
| 400 | Bad Request | The server couldn't understand the request (bad syntax). |
| 401 | Unauthorized | Authentication is required or has failed. |
| 403 | Forbidden | Authenticated, but not allowed to access this. |
| 404 | Not Found | The requested resource doesn't exist. |
| 405 | Method Not Allowed | The HTTP method isn't supported for this resource. |
| 408 | Request Timeout | The server timed out waiting for the request. |
| 409 | Conflict | The request conflicts with the resource's current state. |
| 410 | Gone | The resource is permanently gone. |
| 418 | I'm a teapot | An April Fools' joke from RFC 2324 — still widely supported. |
| 422 | Unprocessable Entity | Well-formed but semantically invalid (common in APIs). |
| 429 | Too Many Requests | You've been rate-limited; slow down. |
5xx — Server error
| Code | Name | What it means |
|---|---|---|
| 500 | Internal Server Error | A generic, unexpected server error. |
| 501 | Not Implemented | The server doesn't support the functionality required. |
| 502 | Bad Gateway | An upstream server returned an invalid response. |
| 503 | Service Unavailable | The server is overloaded or down for maintenance. |
| 504 | Gateway Timeout | An upstream server didn't respond in time. |
How the classes work
HTTP status codes are grouped by their first digit, and knowing the five classes lets you read most responses at a glance. 1xx is informational, 2xx means success, 3xx is a redirect, 4xx is a client error (the request was wrong — wrong URL, missing auth, bad data), and 5xx is a server error (the request was fine but the server failed). When you're debugging, that first digit tells you which side to look at: a 4xx is usually your code's fault, a 5xx is usually the server's.
The ones you'll see most
A handful come up constantly. 200 is the everyday success; 301 and 302 are permanent and temporary redirects; 401 versus 403 trips people up — 401 means "we don't know who you are" (authenticate), while 403 means "we know who you are and you still can't"; 404 is the famous not-found; 429 means you're being rate-limited; and 500, 502 and 503 are the server-side failures you'll meet when something's down. For working with these from the command line, see the curl commands.