pick:shopify/File intent works on dev stores but picker never opens on production stores (collaborator access)

I’m using the Intents API to open Shopify’s native file picker from my app:

const activity = await shopify.intents.invoke("pick:shopify/File", {
  data: { mediaTypes: ["MediaImage"], multiSelect: false },
});

On my development stores this works exactly as expected, the file picker opens, and I can select or upload images and receive the file IDs back.

On real (production) merchant stores, the picker never opens. I first hit this on a customer store that I access using collaborator access, and then reproduced it on several other production stores. Instead of the picker appearing, I get:

I’ve checked

  • Same code path in both environments; Same browser, only the store type and app differs (dev vs. production).
  • Reproduced across multiple production stores, so it doesn’t look store-specific.
  • I searched the docs but couldn’t find anything about “direct API access,” extra scopes, or store-type restrictions for the file-picker intent specifically.

Your app may not have the required permission read_files? Did you add to your .toml file and deploy the app again with the CLI?

Did you take a look at this?

@Luke @Benny_Chan Thanks for replying.

To clarify, I have read and write file access. I’m only seeing this issue on non-development stores. To test it, I installed my production app on a development store, and the native file picker opens without any issues. That’s what I used to verify everything after replacing the manual file upload with the native file picker last week.

The app configuration is the same, so I had no idea this issue existed until one of my customers reported it last week. That’s when I started investigating and found that it only works on development stores, not on actual merchant stores.

I’ll try enabling direct_api_mode. I was aware of this setting, but I couldn’t find anything in the Shopify Intent APIs documentation that says it needs to be enabled for the file picker to work. If that’s required, it would be helpful if it were documented. I’ll report back once I’ve tested whether it resolves the issue.

Ahh, I think I figured it out. It’s probably not working because my collaborator account doesn’t have access to the store’s files resource. I completely forgot that collaborator accounts need resource-specific permissions as well. What a waste of time lol.

For example, the App Bridge product picker doesn’t open if the logged-in user doesn’t have access to Products. I think the same thing applies here, which makes sense. I guess I need to add a proper error message for this case so other collaborator users without the required permissions know what’s wrong instead of reporting it as a bug.