Urgent: checkout extensions failing

Hey, some merchants seeing “failed to fetch” errors when making network calls in checkout extensions. Can someone please acknowledge this issue? Thank you!

1 Like

I’m not able to reproduce in my development store, or on my US based clients using our checkout extension.

But I recall this happened before. Is it a CORS error again?

Hey Dylan, thanks for checking it on your side. It is indeed CORS error again. Looking at our logs, we are getting typical amount of requests volume, so I suspect that this unfortunate update is still rolling.

I found one more affected app developer which confirms that it’s not only our app.

Bump. We are seeing more merchants affected by this issue.

Hey @Patrick_Jakubik

Thanks for flagging this, can you share some stores where this is happening?

Are there other developers experiencing this error where checkout extensions are failing to make network calls?

This guy: Slack

And: https://x.com/conspireworld/status/1958948335093784783

It seems to be only happening to POST requests and in small amount of stores

Thanks Patrick - our team are investigating this now. I’ll update here as soon as I learn more.

Update: it appears this behaviour is caused is a bug on our side where some apps are being served from the wrong CDN. While we work on a fix for this issue a temporary workaround is to allow cdn.shopify.com in your CORS header.

1 Like

Update: This should be fully resolved now. We’ve shipped a change that will prevent extensions from being on the cdn.shopify.com asset path and are back on extensions.shopifycdn.com now.

Hi @Liam-Shopify ,

I’m still experiencing the checkout extension fetch issue that was reportedly fixed 3 hours
ago. My extension is failing with:

Failed to make authenticated request: TypeError: Request is not a constructor
at Object.eval [as fetch] (eval at self.addEventListener.once…)

Current Setup:

  • Extension: Checkout UI

  • Making POST request to /api/survey-completion

  • Using authenticate.public.checkout() with CORS in my Remix route with the responseHeaders.set(

            "Access-Control-Allow-Origin",
    
            "\*"
    
          ) for my entry.server.tsx
    
  • using native fetch() for HTTP requests

Question: Should checkout extensions use native fetch() for external API calls, or is there a
different recommended approach? The error suggests the fetch API isn’t available in the
extension sandbox.

Ive also seen on other posts that it could be caused my a partner development store with a password on it? Im not using a app proxy but sounds similar issue?

Hi @Samuel_Farquhar

This appears to be a different issue than the cdn.shopify.com issue - can you share an example of how you’re calling fetch (with credentials redacted) so we can check on our side?

Hi @Liam-Shopify Im happy to move to email if thats easier for more information :slight_smile:

Here’s the fetch implementation causing the “Request is not a constructor” error:

Extension Code (Checkout.tsx ~line 44):

const fetchWithSessionToken = async (endpoint: string, options: any = {}) => {
  try {
    const token = await (globalThis as any).shopify.sessionToken.get();

    return await fetch(`${APP_BACKEND_URL}${endpoint}`, {
      ...options,
      headers: {
        'Authorization': `Bearer ${token}`,
        'Content-Type': 'application/json',
        ...options.headers,
      },
    });
  } catch (error) {
    console.error('Failed to make authenticated request:', error);
    throw error;
  }
};

// Called from button click handler
const response = await fetchWithSessionToken('/api/button-capture', {
  method: 'POST',
  body: JSON.stringify({
    buttonType: option,
    discountCode: DISCOUNT_CODES[option],
    completedAt: new Date().toISOString(),
    formData: {}
  }),
});

Store Setup:

  • Partner development store with password on, its Shopify Plus environment, no requests for “Request additional scopes and APIs” but I do have “Checkout and account UI extensions are enabled”

  • network_access=true, api_access = true, in my extension toml and using api_version = “2025-10”

  • Extension target: purchase.checkout.block.render

  • APP_BACKEND_URL: https://[myapp]-v6.vercel.app

API Route (app/routes/api.button-capture.tsx):

export const action = async ({ request }) => {
  const { cors } = await authenticate.public.checkout(request);
  return cors(json({ success: true }));
};

Package Versions:

{
  "@shopify/cli": "3.84.x",
  "@shopify/ui-extensions": "^2025.10.0-rc.23",
  "@remix-run/dev": "^2.16.1",
  "@remix-run/node": "^2.16.1",
  "@remix-run/react": "^2.16.1",
  "@remix-run/serve": "^2.16.1",
  "preact": "^10.10.x"
}

The error occurs when executing the fetch() call, suggesting the fetch API isn’t available in the checkout extension sandbox.

Here’s one of the errors:

Failed to make authenticated request: TypeError: Request is not a constructor
  at Object.eval [as fetch] (eval at self.addEventListener.once (

Thanks for investigating!

Can report that one of our client’s extensions is still down as well. It’s last deployment was August 11th where it was fully functional and untouched until it randomly went down. Have verified that API responses are correct + functional as expected (server was last deployed August 11th as well).

I have a ticket going with support, but figured I’d reach out here as well. They’re proposing that it’s an issue with initial state in the React component - which doesn’t seem likely given the app was working for 10-11 days after it’s last deployment. Client’s checkout depends on the app’s datepicker, so would have been flagged if it hadn’t been working in that 10-11 day period.

No errors in the React widget or API calls.

There is this odd 401 Unauthorized API request error for private_access_tokens to the store url, unsure what it is or if related - but definitely odd.

@Liam-Shopify Hi - Do you have any ideas of the problem or cause for the information you asked for yesterday :slight_smile: ? Thanks mate

Any updates on this?

Hi folks - our team are continuing to investigate this, it doesn’t look like it’s connected with the original “failed to fetch” error. I’ll update here asap.

Update: It appears that network access is not working as expected for extensions on version 2025-10 - can you retest on 2025-07 @Samuel_Farquhar and @Daniel_Andrade

1 Like