refactor api.