more convinient api