/apps/your-proxy, and confirm the app server route handles the forwarded method.The real symptom
The external app endpoint works when opened directly, but the same feature fails from the Shopify storefront. DevTools shows a 404, a CORS error, or a response that never reaches the app server. The problem often appears only on product pages or nested paths while the homepage works.
Likely causes
- The app proxy prefix and subpath in Shopify do not match the URL used by the storefront code.
- The proxy URL points to the server root instead of the actual route that handles the request.
- Storefront JavaScript uses a relative path such as
apps/apiinstead of/apps/api. - The request works on the homepage but fails on nested paths because the browser resolves the URL relative to the current page.
- The app server handles GET but not POST, or the reverse.
- The app expects a different content type or route shape than Shopify forwards.
- The app proxy was changed in admin after installation and no longer matches deployed code.
- The app is treating app proxy traffic like an embedded-admin request instead of a public storefront request.
Confirmed Community fix
Community app-proxy threads show the same recurring pattern: the direct tunnel or server URL works, but the storefront proxy URL fails because the proxy configuration or storefront fetch path is wrong. One nested-path case was fixed by using the correct root-relative proxy URL so product pages did not resolve the request under the current product path. Other developer answers recommend confirming that the proxy points to the real app route, not just the domain.
Exact admin path
- Go to Shopify admin → Settings → Apps and sales channels.
- Open the app that owns the storefront proxy.
- Open the app proxy settings when available.
- Confirm the proxy prefix and subpath, such as
/apps/api. - In the app’s Partner Dashboard or app configuration, confirm the Proxy URL points to the exact backend route.
- Confirm the backend route handles the method used by the storefront: GET, POST, or both.
- Save and retest from the live storefront, not only from the backend URL.
JavaScript check
Use a root-relative proxy alias from the storefront:
fetch('/apps/api/model-data', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({ productId })
});
A missing leading slash can turn the request into /products/product-handle/apps/api on product pages, which will usually 404.
DevTools check
- Open DevTools → Network.
- Trigger the storefront feature.
- Click the failed request.
- Confirm the request URL begins with the expected proxy prefix and subpath.
- Confirm the request method matches what the backend route supports.
- Check whether Shopify forwarded the request or the browser blocked it before the proxy path was used.
- Inspect the response status, headers, and body.
Why this is not always a CORS problem
App proxies exist partly so storefront code can request a Shopify storefront URL and have Shopify forward it to the app. If the browser is contacting the external app domain directly, you may have bypassed the proxy. Fix the request URL before adding CORS workarounds.
Do not do this
Do not expose an unauthenticated public endpoint and call it directly from the storefront just to bypass proxy issues. Fix the proxy path and validate signed app-proxy requests server-side.
Sources
- Shopify Community: App proxy POST request returning 404
- Shopify Community: App proxy works on homepage but not nested paths
- Shopify Community: App proxy endpoint is never hit
- Shopify Community: App proxy CORS or 404 errors
- Shopify Developer Docs: App proxies
- Shopify Developer Docs: Authenticate app proxies

