Reference

HTTP status codes.

Every HTTP status code you'll actually run into, grouped by class, with what each one really means.

Tap any row to copy the value in the first column.

1xx — Informational

CodeNameWhat it means
100ContinueThe server got the request headers; continue sending the body.
101Switching ProtocolsThe server is switching protocols as requested (e.g. to WebSocket).
103Early HintsPreload hints sent before the final response.

2xx — Success

CodeNameWhat it means
200OKStandard success response.
201CreatedThe request succeeded and a new resource was created.
202AcceptedAccepted for processing, but not yet completed.
204No ContentSuccess, but there's nothing to return.
206Partial ContentPartial data returned (range requests / resuming downloads).

3xx — Redirection

CodeNameWhat it means
301Moved PermanentlyThe resource has permanently moved to a new URL.
302FoundTemporary redirect to another URL.
303See OtherFetch the resource from another URL using GET.
304Not ModifiedThe cached version is still valid; nothing changed.
307Temporary RedirectLike 302, but the HTTP method must not change.
308Permanent RedirectLike 301, but the HTTP method must not change.

4xx — Client error

CodeNameWhat it means
400Bad RequestThe server couldn't understand the request (bad syntax).
401UnauthorizedAuthentication is required or has failed.
403ForbiddenAuthenticated, but not allowed to access this.
404Not FoundThe requested resource doesn't exist.
405Method Not AllowedThe HTTP method isn't supported for this resource.
408Request TimeoutThe server timed out waiting for the request.
409ConflictThe request conflicts with the resource's current state.
410GoneThe resource is permanently gone.
418I'm a teapotAn April Fools' joke from RFC 2324 — still widely supported.
422Unprocessable EntityWell-formed but semantically invalid (common in APIs).
429Too Many RequestsYou've been rate-limited; slow down.

5xx — Server error

CodeNameWhat it means
500Internal Server ErrorA generic, unexpected server error.
501Not ImplementedThe server doesn't support the functionality required.
502Bad GatewayAn upstream server returned an invalid response.
503Service UnavailableThe server is overloaded or down for maintenance.
504Gateway TimeoutAn 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.

FAQ

What's the difference between 401 and 403?
401 Unauthorized means authentication is missing or failed — you need to log in. 403 Forbidden means you're authenticated but don't have permission for this resource. Logging in won't fix a 403.
What's the difference between 301 and 302?
301 is a permanent redirect — browsers and search engines update to the new URL and pass on ranking. 302 is temporary — the original URL is kept as the canonical one. Use 301 when a page has truly moved for good.
Is 418 'I'm a teapot' a real status code?
Yes and no — it started as an April Fools' joke in RFC 2324 (the Hyper Text Coffee Pot Control Protocol), but it's defined and supported by many frameworks, so you'll occasionally see it used humorously.

More references