Some of the comments here are positing a false dichotomy. The choices aren&#x27;t between returning 200 with an error code and returning an HTTP code for each error.<p>I&#x27;ve gone down the path of trying to shoe horn every error condition into a separate HTTP status code and (IMHO) it&#x27;s a Big Mistake [tm]. You really are confusing transport and application layers and the transport layer simply doesn&#x27;t have enough codes for what you need.<p>When something obviously fits into an HTTP status code then sure, use it, particularly when it&#x27;ll mostly make your client do something sensible.<p>But you just can&#x27;t get away from needing error codes that go beyond HTTP status codes for any moderately complex Web application.