I think that in practice 4xx is (and ought to be) any error other than a fatal server side error.<p>I really dislike it when, e.g., Ruby HTTP client libraries treat any non 2xx-3xx response as an exception.<p>If I&#x27;m wrong about this usage, like, say I have a REST endpoint that, when the client doesn&#x27;t send bad data, but a request fails for some reason (upstream service rejected request), what kind of code is my endpoint supposed to return?<p>(I would say 4xx, and leave it at that, getting rid of the &quot;client&quot; part of &quot;client error&quot;, and leaving 5xx for something like ISE, fatal error &quot;maybe ain&#x27;t your fault, or at all under your control, client-man!&quot; But I&#x27;m happy to learn more.)