Start here. This is the direct spoken answer to practice first.
Why this question matters
Status codes are part of the contract consumed by browsers, SDKs, gateways, retries, caches, tests, and support tools. A precise outcome makes failures easier to handle without encoding every decision in response text.
I choose the code from what happened at the HTTP boundary. A normal read or update can return 200, creation commonly returns 201 with a Location header, accepted background work can return 202, and a successful operation with no response body can return 204. Invalid syntax or request shape is usually 400. Missing authentication is 401, insufficient permission is 403, absence is 404, and a current-state conflict can be 409. Unexpected server failures stay in the 5xx range.