ApolloError · Network request failed

Hello team!

I’m seeing this error on my POS extension occasionally, doesn’t really give me much information to go off, wondering if the Shopify team could give some more context.

I know Apollo is a GQL client, I’ve used it in other projects but I’m not using it here so I assume it is being used by Shopify POS but I’m not sure why it would be used for just a normal fetch request?

Here is an example of the stacktrace from POS running on an iPad, again not much to go off :disappointed_face:

ApolloError · Network request failed

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:13048209 ApolloError

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:21512827 error

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:6975537 notifySubscription

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:13046116 error

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:19192974 anonymous

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:6975537 notifySubscription

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:13046116 error

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:12963583 anonymous

(native) forEach

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:17226827 error

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:6975537 notifySubscription

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:13046116 error

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:21092181 anonymous

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:17194166 step

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:19183937 anonymous

address at /private/var/containers/Bundle/Application/9C740D16-891B-4D92-80EB-BD1E91880BD3/POSNext.app/main.jsbundle:1:19183715 fulfilled

address at InternalBytecode.js:1:1274 tryCallOne

address at InternalBytecode.js:1:4865 anonymous

Hey @simon_b - good to see you, thanks for flagging this. That stack is coming from the POS app side, but we’d need a bit more detail to tell whether this is a connectivity issue, a direct API/authenticated fetch issue, or something in the POS fetch layer.

Could you share:

  • Shopify POS app version and iPadOS version
  • Extension API version and target
  • Whether the failing fetch is to your own backend or shopify:admin/api/graphql.json
  • Whether it happens on specific devices/networks, or across all of them
  • A rough timestamp/timezone from one recent failure

If you can reproduce it again, please also send a POS bug report from the affected device right after the error happens:

  1. In the Shopify POS app, tap ... > Support.
  2. Tap Report a bug.
  3. Add a short description of the issue and include my username, Alan_G.
  4. Tap Send.

Once we have those logs and the details above, I can definitely take a closer look on our end!

Hi @Alan_G thanks heaps for getting back to me, I’ll see what further info I can gather now.

This seems to happen intermittently across a number of devices. I’m just curious how I could handle it really, as currently I’m just showing a generic error message when it occurs.

Cheers!

Simon.

  • Shopify POS app version and iPadOS version

    • Shopify POS v11.5.2, sorry I don’t capture the OS version in my bug reports.
  • Extension API version and target

    • This extension is still on 2025-07 react components, “pos.home.modal.render”.
      • Unrelated: Do you know when this version will stop being supported on POS?
  • Whether the failing fetch is to your own backend or shopify:admin/api/graphql.json

    • The failing fetches are to my own backend servers.
  • Whether it happens on specific devices/networks, or across all of them

    • Seems to only happen on iPads from what I can see, but a lot of my users have iPads so that could just be a coincidence.
  • A rough timestamp/timezone from one recent failure

    • I’ll give you two for good measure :slightly_smiling_face:
      • May 14, 15:39:40 UTC.
      • May 13, 15:36:15 UTC.

Actually I do see a similar failure on an Android device (Model V2s?), however there is more information in the error response for that device:

Network request failed : https://accounts.shopify.com/oauth/token

May 14, 15:10:38 UTC

I know that iOS deliberately limits some of the output for fetch failures unless you are watching the logs directly (which is pretty annoying :slightly_smiling_face:).

Hey @simon_b - thanks for digging up the extra details, super helpful.

The accounts.shopify.com/oauth/token bit is the main clue here. I checked telemetry logs on our end around the timestamps you shared, and I think I can see your matching POS-side network/token fetch failures, including cases where POS was trying to reach that token endpoint.

So from what I can see right now, this looks more like a transient POS connectivity/auth-token fetch issue than Apollo being used directly by your extension code. The Apollo part is likely just how that POS-side request failure is bubbling up.

That said, we’d still need the local POS/device logs from an affected device right after the issue happens to confirm that definitively and see if it’s a wider issue on our end. If you’re able to reproduce it again, just send a POS bug report from within the POS app.

For handling it in your extension, I’d treat this as recoverable where possible: check POS connectivity before making backend calls, catch rejected fetches, show a connection-specific message in your extension UI, and give users a retry path. App authentication and direct API access still need network access, so these can fail before your backend receives anything.

On the API version question, 2025-07 is still within the supported window, but I’d plan to move toward the latest supported POS API version when you can.

Hope this helps!

Hi @Alan_G thanks for investigating this one for us. So you’re thinking that this is a case of the device losing connectivity part way through the request or something like that?

I don’t actually know how to reproduce this one to be honest. This is something we see via our bug reporting on the POS extension from devices out in the wild. So I’m not sure I will be able to get you logs but we’ll see.

I will add an exception handler specifically for this and show a connectivity related message.

Cheers!

Simon.

Hey again @simon_b - exactly, that’s roughly how I’d interpret it, with one small thing I’d add: it may not always mean the device fully lost connectivity, but it does look like POS couldn’t complete the network/auth-token request at that moment. Since that token fetch can happen before your backend request is actually sent, you may not see a matching hit in your own backend logs.

Your plan sounds right here, though, treating this as recoverable, catch that specific network failure path, show a connectivity-focused message, and give the user a retry option. If you can, I’d also capture the UTC timestamp, POS app version, device model/OS, and current connectivity state when it happens so that we can keep digging into this if it keeps recurring.

If you do manage to get a POS bug report from an affected device right after it happens, send that through and I can take another look on our end, happy to help!

Thanks @Alan_G I made a change to the extension to handle these errors, automatically attempting a retry when they occur but re-raising them if it fails again.

So far I’ve not seen this error on our monitoring software since making that change.

Glad to hear things are working @simon_b ! Let me know if we can help out further as always :slight_smile: