return promise
change structure and uploadapi