Cleanly separate client API from server implementation