Shopify Flow “Send Admin API request” — Should the `type` for app-owned metaobjects use `$app:` or the fully qualified `app--{app-id}--{type_name}` format?

Hi Shopify team/developers,

I’m using an app-owned metaobject:

$app:order_history_log

My app ID is 414917099521, and the definition is:

app--414917099521--order_history_log

When I use Shopify Flow’s “Send Admin API request” with:

"type": "$app:order_history_log"

I get:

No metaobject definition exists for type "app--4655075--order_history_log"

I then tried the fully qualified type:

"type": "app--414917099521--order_history_log"

The definition is found, but I now get:

Not authorized to modify entries of type "app--414917099521--order_history_log"

Could you please confirm:

  1. Why does Shopify Flow resolve $app: to 4655075 instead of my app ID?
  2. Is the fully qualified app--414917099521--order_history_log format supported in Flow?
  3. Can Shopify Flow’s “Send Admin API request” create/update entries in an app-owned metaobject?
  4. If not, does the metaobject need to be merchant-owned for Shopify Flow’s built-in action to create/update entries directly?
  5. What is the recommended approach if we want to keep the metaobject app-owned?

App owned metafields/objects can only be interacted with through the Admin API by the actual owning app.

Flow is it’s own separate app with it’s own app ID (thus why $app resolves to a different ID - it’s literally a different app).

However, from my experience using Shopify’s standard Flow actions instead of a custom API request does seem to allow updating app owned metafields as long as they’re set to merchant_read_write access.

Other than this, you’d need to make sure to handle all functionality through your own app if you want to use app-owned, could be in the app itself or maybe with your own custom Flow actions.

The other option is to use Send HTTP request instead and use your app’s API key in that action.

Thanks, @paul_n and @Brett, for the clarification. This helps explain the Flow app ownership and the recommended approach. I’ll check the Send HTTP request approach and proceed accordingly.