Proper exception management

This commit updates the service to throw dedicated exception types for
common user error and associates proper HTTP status codes to them.

Fixes gh-38