@edouard have you read Wix backend limitation? https://support.wix.com/en/article/velo-about-backend-limitations
The solution here is to paginate your update so that you don’t run into a timeout.
Something like
exportasyncfunction refreshShop(page=0){
return retrieveVariantItems(page).then((pageResult)=>{
let variants= pageResult.map(a=>({productId:a.productId,variant:a.variantName,variantId:a._id,productName:a.productName}))
variants.forEach((element)=>fetch("https://MYAPI/"+element.productName,/...)
Since there is no way of knowing when the scheduled job will stop, you need to keep track of what was the latest page product that was synchronized and pick up the update on the next round.
a bit tedious but doable.
Is this clear?