FreeToGenerate.com

The complete IANA registry — including which codes you must not use.

64 codes

1xx Informational

The request was received and work is continuing.

100
Continue[RFC9110, Section 15.2.1]
101
Switching Protocols[RFC9110, Section 15.2.2]
102
Processing[RFC2518]
103
Early Hints[RFC8297]
104
Upload Resumption Supportedtemporary · 2026-11-13[draft-ietf-httpbis-resumable-upload-05]

2xx Success

The request was received, understood and accepted.

200
OK[RFC9110, Section 15.3.1]
201
Created[RFC9110, Section 15.3.2]
202
Accepted[RFC9110, Section 15.3.3]
203
Non-Authoritative Information[RFC9110, Section 15.3.4]
204
No Content[RFC9110, Section 15.3.5]
205
Reset Content[RFC9110, Section 15.3.6]
206
Partial Content[RFC9110, Section 15.3.7]
207
Multi-Status[RFC4918]
208
Already Reported[RFC5842]
226
IM Used[RFC3229]

3xx Redirection

Something further is needed to complete the request.

300
Multiple Choices[RFC9110, Section 15.4.1]
301
Moved Permanently[RFC9110, Section 15.4.2]
302
Found[RFC9110, Section 15.4.3]
303
See Other[RFC9110, Section 15.4.4]
304
Not Modified[RFC9110, Section 15.4.5]
305
Use Proxy[RFC9110, Section 15.4.6]
306
(Unused)reserved[RFC9110, Section 15.4.7]
307
Temporary Redirect[RFC9110, Section 15.4.8]
308
Permanent Redirect[RFC9110, Section 15.4.9]

4xx Client error

The request was malformed, or cannot be fulfilled as sent.

400
Bad Request[RFC9110, Section 15.5.1]
401
Unauthorized[RFC9110, Section 15.5.2]
402
Payment Required[RFC9110, Section 15.5.3]
403
Forbidden[RFC9110, Section 15.5.4]
404
Not Found[RFC9110, Section 15.5.5]
405
Method Not Allowed[RFC9110, Section 15.5.6]
406
Not Acceptable[RFC9110, Section 15.5.7]
407
Proxy Authentication Required[RFC9110, Section 15.5.8]
408
Request Timeout[RFC9110, Section 15.5.9]
409
Conflict[RFC9110, Section 15.5.10]
410
Gone[RFC9110, Section 15.5.11]
411
Length Required[RFC9110, Section 15.5.12]
412
Precondition Failed[RFC9110, Section 15.5.13]
413
Content Too Large[RFC9110, Section 15.5.14]
414
URI Too Long[RFC9110, Section 15.5.15]
415
Unsupported Media Type[RFC9110, Section 15.5.16]
416
Range Not Satisfiable[RFC9110, Section 15.5.17]
417
Expectation Failed[RFC9110, Section 15.5.18]
418
(Unused)reserved[RFC9110, Section 15.5.19]
421
Misdirected Request[RFC9110, Section 15.5.20]
422
Unprocessable Content[RFC9110, Section 15.5.21]
423
Locked[RFC4918]
424
Failed Dependency[RFC4918]
425
Too Early[RFC8470]
426
Upgrade Required[RFC9110, Section 15.5.22]
428
Precondition Required[RFC6585]
429
Too Many Requests[RFC6585]
431
Request Header Fields Too Large[RFC6585]
451
Unavailable For Legal Reasons[RFC7725]

5xx Server error

The request looked fine and the server failed anyway.

500
Internal Server Error[RFC9110, Section 15.6.1]
501
Not Implemented[RFC9110, Section 15.6.2]
502
Bad Gateway[RFC9110, Section 15.6.3]
503
Service Unavailable[RFC9110, Section 15.6.4]
504
Gateway Timeout[RFC9110, Section 15.6.5]
505
HTTP Version Not Supported[RFC9110, Section 15.6.6]
506
Variant Also Negotiates[RFC2295]
507
Insufficient Storage[RFC4918]
508
Loop Detected[RFC5842]
510
Not Extendedobsolete[RFC2774][Status change of HTTP experiments to Historic]
511
Network Authentication Required[RFC6585]

RESERVED

Listed in the registry as (Unused) — reserved so that nobody assigns it. Do not return these.

Registered once, then moved to Historic. Still listed, no longer in use.

A provisional registration with an expiry date. It may lapse or change.

Codes that are not in the registry

These appear in nearly every published table as though they were standard. IANA has assigned none of them — 419 and 420 sit inside an unassigned range. They are real behaviours of specific software, so they are listed here with the software named.

420
Enhance Your CalmTwitter API v1, since retired
444
No Responsenginx, closes the connection without a response
494
Request header too largenginx
495
SSL Certificate Errornginx
496
SSL Certificate Requirednginx
497
HTTP Request Sent to HTTPS Portnginx
499
Client Closed Requestnginx
520
Web server returns an unknown errorCloudflare
521
Web server is downCloudflare
522
Connection timed outCloudflare
523
Origin is unreachableCloudflare
524
A timeout occurredCloudflare
525
SSL handshake failedCloudflare
526
Invalid SSL certificateCloudflare

Ranges IANA has assigned to nobody

Any code in these ranges is free. If you are inventing one for an internal API, this is where it should come from — and it will still be a private extension rather than a standard.

105-199209-225227-299309-399419-420427430432-450452-499509512-599

Generated from the IANA registry on 2026-08-07.

Also available in: Español · Português · Français · العربية

HTTP Status Codes

The complete list from the IANA registry, with the four states most tables collapse into one.

What is an HTTP status code?

Every HTTP response opens with a three-digit number saying how it went. The first digit is the class: 1xx means the server is still working, 2xx that it succeeded, 3xx that you need to go somewhere else, 4xx that the request was wrong, and 5xx that the server was. The number is the part software acts on; the phrase beside it is for humans.

The authoritative list is the IANA HTTP Status Code Registry, and this page is generated from it rather than typed from memory. That matters more than it sounds, because the registry records four different states and almost every published table flattens them into a single list of codes you might use.

How to use this list

  1. Search by number or by phrase. Numbers match from the start, so typing 40 gives you the whole 40x family and 404 narrows to one. Text matches anywhere in the phrase — try gateway, or legal.
  2. Check the badges before you use a code. Reserved means the registry set it aside so nobody would use it. Obsolete means it was registered and then retired. Temporary means the registration has an expiry date on it.
  3. Look below the registry for the rest. The codes you have seen in the wild but cannot find above are in the vendor section, each attributed to the software that returns it, followed by the ranges IANA has assigned to nobody.

418 is not a joke code you can use

The most repeated fact about HTTP status codes is that 418 I'm a Teapot is an April Fools joke from 1998 that you are free to return for fun. The first half is true. The second is backwards, and the registry says so plainly: 418 is listed, its description is (Unused), and its reference is RFC 9110 section 15.5.19. It appears in the registry precisely so that it can never be assigned to anything real.

That is a different state from unassigned, and the distinction is the reason this page exists. 306 is in the same position — reserved, permanently unusable. 510 Not Extended is in a third state again: it was genuinely registered, and then its experiment was reclassified as Historic, so it is listed as obsoleted. And 104 Upload Resumption Supported is in a fourth: a temporary registration that expires on 13 November 2026 and may simply vanish.

Strip those out and you are left with 61 codes a server should actually return, out of 64 rows in the registry. A table that lists all 64 as equals is telling you to use two codes that exist to be unusable.

The codes that are not in the registry at all

There is a second problem with published tables, which is the codes they add. 420, 444, 499 and the 52x family turn up in most lists as though they sat alongside 404. IANA has assigned none of them. In the case of 420 the registry is explicit in the other direction: 419-420 is one of eleven ranges marked unassigned.

They are not fictional, though — they are real behaviours of specific software, which is why they are listed here in their own section with the software named. 499 is nginx recording that the client hung up before the response was ready. 444 is nginx closing the connection without replying at all. The 52x family is Cloudflare, and its own support documentation lists 520 through 526 and 530 beside the standard 5xx codes without mentioning anywhere that they are unregistered, which is a fair part of why they spread.

The practical consequence is simple. Anything in an unassigned range is fair game for your own internal use, and it will still be a private extension rather than a standard — no client library will know what you mean by it.

Honest limits

This is a snapshot. The registry changes: 451 was added in 2016, 103 in 2017, and 104 arrived as a temporary registration in 2024 with an expiry date already attached. The date the list was generated is printed at the bottom of it, and the script that generated it is in the repository, so the page can say when it was last true rather than implying it is true forever.

The reason phrases are the registry's own English, and they are deliberately not translated on the other language versions of this page. The phrase travels on the wire as part of the protocol — a server sends Not Found, not No Encontrado — so translating it would describe something no server actually returns. The explanations around it are translated; the protocol is not.

The vendor table is the one part not generated from a registry, because there is no registry to generate it from. Each row was taken from that vendor's own documentation. It is not exhaustive and cannot be, since anyone can return any number they like.

Why is it free?

Because it is a list. The whole page is static text with a search box that filters it in your browser — nothing is uploaded, nothing is stored, and there is no server involved in reading it.

So there is no account, no sign-up and nothing gated behind one. The underlying registry is a public document maintained by IANA, and a list of public facts should not have a paywall in front of it.