API & Web

HTTP Status Code Lookup

Looks up status codes by number or name and says what to do about each, not just what it is called.

Loading the tool…

Processing happens locally in your browser. What you paste or load is processed by this page and is not uploaded to a server. Nothing is stored unless you use a control that says it stores something, and you can clear anything this site has kept from the privacy page.

How to use this tool

  1. Type the codes you want, or a word from the name of one.
  2. Select Look up.
  3. Read the last column, which says what to do rather than what the code is called.
  4. Use the class column to decide who owns the problem: a 4xx is yours to fix, a 5xx is the server’s.

What http status codes does

The name of a status rarely tells you what to do. "Unauthorized" is about authentication and "Forbidden" is about permission, which is the reverse of what the words suggest; 409 means re-read before retrying; 429 means back off rather than retry immediately. Every entry here carries an action column for that reason.

Search by number or by a word from the name, several at a time, so a list of codes pulled out of a log can be pasted in whole. The class column is the part worth internalising: a 4xx means the request has to change before it will ever work, and a 5xx means the request was fine and the problem is at the other end.

Frequently asked questions

A 401 means the server does not know who you are — no credentials, or credentials it will not accept. A 403 means it knows exactly who you are and you are still not allowed. The names are the wrong way round, which is why this pair causes more confusion than the rest of the list put together.

When confirming that something exists is itself a leak. Returning 404 for a resource the caller may not see stops an attacker from enumerating valid identifiers by watching which ones come back forbidden. It is a deliberate and common choice, not an error.

No. A 304 Not Modified means your cached copy is still current, so the server has deliberately sent no body. It is a successful, efficient outcome. Code that treats any status outside the 200 range as a failure will get this wrong.