improve api impl