system There's another community post with 404 debugging tips that might be helpful. Please give these solutions a try and let us know how it goes. https://community.vercel.com/t/debugging-404-errors/437 A human should be around soon to offer more advice. But you can also get helpful information quickly by asking v0.
Chrisrivero Dev Hey, This doesn’t sound like a 404 issue. If the function is hanging for about 60 seconds and then dying with INTERNAL_FUNCTION_INVOCATION_FAILED, I’d first try to confirm whether the function is actually entering your handler in Vercel. Can you add a log as the very first line of the function and see if that appears in the invocation logs? If it does, then I’d start checking what it’s waiting on after that, especially a database connection or anything environment-specific between local and Vercel. If the first log never appears, that points more toward the runtime/startup side rather than your application logic. Since the generated artifact works locally on Node 22/24, I’d definitely want to isolate exactly where execution stops in Vercel before changing more code.
Jacob Paris This is an initialization timeout, failing before your server receives its request. The most likely reason is if `server.listen()` never completes in a way that Vercel can see For zero-config Node servers, Vercel captures your server.listen() call while the module loads and routes traffic to it internally, ignoring the PORT you pass. This removes a layer of overhead by letting Vercel serve your server directly instead of receiving and passing into an internal service. Running the built server.mjs directly with Node skips that step, which is why it works locally. I think it's possible that passing the HOST to your listen call is preventing Vercel from connecting to it, but hard to say for certain without testing. You could try a deployment without that and see if it starts working. Otherwise, to find where your module stops during initialization, add console.log at the very top of your entry file and right before and after server.listen(), redeploy, and check Runtime Logs. If the first log never appears, the module isn't finishing loading. If it appears but the listen log doesn't, listen() isn't being reached during startup
Anshuman Bhardwaj Thanks @shige. I agree having sandbox in multiple regions will be so amazing! Passing on this feedback to our team.
Tadashi Shigeoka Thank you for the quick response, @anshumanb san! Looking forward to seeing multi-region support come to Vercel Sandbox.
Felix421 I would also like to second this request. I am with a cloud consulting firm in Germany and we would love to adopt vercel sandbox as our AI platform solution. We are as of now unfortunately unsure due to the lack of EU hosting. Do you already have distinct plans to expand sandboxes availability? Have a great day everyone! Best regards Felix
Jacob Paris How are you injecting the cookie? Can you add it in a request interceptor instead so it resolves at request time instead of ahead of time?
Bharathrnair7 1528 async function processQueue(newAccessToken?: string, error?: any) { while (requestQueue.length) { const queued = requestQueue.shift(); if (!queued) continue; if (error) { queued.reject(error); } else { try { // Explicitly set the new token on the queued request config // instead of relying on the interceptor (which reads stale cookies) if (newAccessToken) { queued.config.headers = { ...queued.config.headers, Authorization: \`Bearer ${newAccessToken}\`, }; } const response = await http(queued.config); queued.resolve(response); } catch (err) { queued.reject(err); } } } } try { const newAccessToken = await handleTokenRefresh(); // process all queued requests with the new token await processQueue(newAccessToken); // retry the original request with the new token explicitly originalRequest!.headers.Authorization = \`Bearer ${newAccessToken}\`; const retryResponse = await http(originalRequest!); response.data = retryResponse.data.Output; response.messages = \["Your request was processed successfully."\]; } finally { isRefreshing = false; } im injecting the cookies, in interceptor itself