> In most cases it is clearer to simply adopt a payload format that includes application specific error codes
Absolutely. This is a common practice and there’s even a proposed standard for it (RFC 7807). But such a payload need not be sent with 200 (OK). It can refine the status code instead of overriding it.