All things Shopify and commerce
We are migrating products from our client's online store to Shopify using the latest API version 2023-10. The product attributes are migrated as metafields, and we just noticed a serious problem with metafield definition and access settings since the API version 2023-01 to 2023-10.
There are some issues/limitations:
Shopify developers, e-merchants, web agencies and developers should take note of thess issues. I hope you will find out a comprehensive solution.
Solved! Go to the solution
This is an accepted solution.
Hello,
You should be able to create a metafield definition in a non app reserved namespace (e.g. "custom") as long as you are not setting a value for the access input. If you do not use a reserved namespace, the merchant and other apps should be able to edit the definition and set metafield values.
To learn more visit the Shopify Help Center or the Community Blog.
This is an accepted solution.
Hello,
You should be able to create a metafield definition in a non app reserved namespace (e.g. "custom") as long as you are not setting a value for the access input. If you do not use a reserved namespace, the merchant and other apps should be able to edit the definition and set metafield values.
To learn more visit the Shopify Help Center or the Community Blog.
How should I go about creating a definition in a "custom" namespace with storefront access??
EDIT/UPDATE:
So it seems that creating the namespace with "$app:custom" is the answer
That is correct. Prefixing a namespace with "$app:" produces a metafield definition in a reserved namespace that is owned by the app that created it. The owning app has full control over the definition including the definition's admin and storefront access settings.
Apps can also create non-reserved namespace metafields (e.g. "custom") but cannot set storefront or admin access. In the 2024-01 API release and beyond, storefront access for non-reserved namespace metafields can only be set from within the Admin.
To learn more visit the Shopify Help Center or the Community Blog.
Do you know we will be able to create non-reserved namespace metafields for any owner type?
I would like to create a shop metafield as a non-reserved namespace metafields, but it seems like there's no way to currently define it from the Shopify Admin.
Shop metafields can be created using the metafieldDefinitionCreate Admin API mutation with an ownerType = SHOP.
Shop metafields cannot be created through the Admin interface.
To learn more visit the Shopify Help Center or the Community Blog.
Within an app, I attempted to create a metafield definition with the following settings:
Hi. Is there a way to access a product image metafield from the storefront api and liquid?
I defined it with [storefront] => PUBLIC_READ access, but I can't find any query to access it.
The image object in the back end include metafields, but not the one in the front end.
Thanks
Hi 🙂
The issue is now : by default storefront access is set to "LEGACY_LIQUID_ONLY" instead of "PUBLIC_READ"
and there is no way to update access of no-owned metafields.
The default value should be set to "PUBLIC_READ" by default like metafieldStorefrontVisibilityCreate did it ?
Otherwise metafields will not be accessible by the storefront api unless merchant is going trough admin to change itself to "Read" which is adding more steps than before.
Thank you
A non app reserved namespace with no access input is the best solution 👍.
*Note: if anyone is trying this solution, remember to use the API stable versions, as it doesn't work with the "Unstable" versions.
Thank you so much, John!
Yes but by default storefront access is set to "LEGACY_LIQUID_ONLY" instead of "PUBLIC_READ"
Metafields will not be accessible by the Storefront API unless merchant is going trough admin to change itself to "Read" which is adding more steps than before.
did you figured out a solution ?
A big +1 on this. The solution "with no access input" is not a solution if the result doesn't allow the access needed. We are also having problems where creating a metafield via our script results in a metafield with no storefront access and we have to remember to change it manually each time we create something which creates a lot of confusion in the time it takes an engineer to remember to make this manual change.
hello
UPDATE:
It is now possible to manage access (including storefront access) for merchant / non-reserved namespace metafields. More details can be found here.
To learn more visit the Shopify Help Center or the Community Blog.
Issue with Creating a New Metafield in Shopify via Storefront API.
I am encountering an issue while creating a new metafield in Shopify using the Storefront API.
Specifically, the Storefronts access for the newly created metafield is being set to No Access by default.
Current Implementation:
'metafield_definitions' => [
MetafieldOwnerType::COLLECTION->value => [
[
'description' => "Name for the new field",
'key' => 'field_key',
'name' => 'field_name',
'namespace' => 'namespace',
'ownerType' => COLLECTION,
'type' => [
'name' => MetafieldType::SINGLE_LINE_TEXT_FIELD->value,
],
],
]
]
When I try adding the access attribute like this:
'access' => [
'admin' => 'PUBLIC_READ_WRITE',
'storefront' => 'PUBLIC_READ',
]
I get the following error:
Could not create a MetafieldDefinition in Shopify: Cannot create MetafieldDefinitionInput since access values require a reserved namespace ($app:) [code 0].
Attempted Fix:
To address the namespace issue, I updated the namespace to use the reserved format: 'namespace' => '$app:namespace',
This resolved the namespace-related error, but I now encounter a new error.
Error: Could not create a MetafieldDefinition in Shopify: Cannot create MetafieldAccessInput due to missing attributes [code 0].
When trying to include unauthenticated access its still same 😞
'access' => [
'admin' => 'PUBLIC_READ_WRITE',
'storefront' => 'PUBLIC_READ',
'unauthenticated' => 'PUBLIC_READ',
]
Question:
Is it possible to set storefront and unauthenticated access levels for metafields created via the Storefront API?
Am I missing any required attributes or misusing the access property in my request?
Any guidance or clarification on this issue would be greatly appreciated.
Thank you!
@SoumenDana do we need “unauthenticated” or is that just something you were trying? (Note: Soumen is my colleague in this project)
@SoumenDana it is not possible to create metafield definitions via the Storefront API. Metafield definitions can only be created via the Admin API.
If you would like to create a definition in a merchant namespace with storefront access, you need to use API version 2025-01 or later and should set:
access: {
storefront: "PUBLIC_READ"
}
Please see MetafieldAccessInput for more details.
To learn more visit the Shopify Help Center or the Community Blog.
Learn how to build powerful custom workflows in Shopify Flow with expert guidance from ...
By Jacqui May 7, 2025Did You Know? May is named after Maia, the Roman goddess of growth and flourishing! ...
By JasonH May 2, 2025Discover opportunities to improve SEO with new guidance available from Shopify’s growth...
By Jacqui May 1, 2025