Here's a situation I have a hard time sorting out. What code should you use when you receive a valid HTTP request but you can't process it because, say, a required parameter is missing? I would say a 200 (the HTTP request itself was well-formed and went fine) which returns an error message.
I guess it's more complicated than that.
I know that Github returns either a 400 or a 422, but that's if the request itself had a problem, right? http://developer.github.com/v3/