What about removing the ApiProblem class (the name is a bit confusing too. It's thrown as an exception so why isn't there Exception in the name?) and having only two exceptions:

- ClientErrorException
- ServerErrorException

In user land you could do something like throw ClientErrorException(404, ... other arguments).

You could also having your own exceptions:

class ResourceNotFoundException extends ClientErrorException
{
    protected $statusCode = 404;
}

Thought @Ocramius @weierophinney ?