The challenge with 400 is that many load balancers use it for header-size issues before the request even reaches your app. Following Erik's logic, keeping 400 for transport-level issues and using more granular codes for payload issues is the cleanest architectural approach. The HTTP/1.1 specification (RFC 2616) has the following to say on the meaning of status code 400, Bad Request (ยง10.4.1): The request could not be understood by the server due to malformed synta...

Understanding the Context

Situations of 400 over 422: Remember, the response code 422 is an extended HTTP (WebDAV) status code. There are still some HTTP clients / front-end libraries that aren't prepared to handle 422. For them, its as simple as "HTTP 422 is wrong, because it's not HTTP". From the service perspective, 400 isn't quite specific.

Key Insights

App Engine : 400 - Your client has issued a malformed or illegal request Asked 15 years, 8 months ago Modified 9 months ago Viewed 82k times App Engine : 400 - Your client has issued a malformed or illegal ... How do I fix a 400 Bad Request error in .Net Core POST operation? Asked 6 years, 11 months ago Modified 5 years, 3 months ago Viewed 78k times How do I fix a 400 Bad Request error in .Net Core POST operation? Dealing with nginx 400 "The plain HTTP request was sent to HTTPS port ...