# MetafieldDefinition - admin-graphql - OBJECT Version: 2024-10 ## Description Metafield definitions enable you to define additional validation constraints for metafields, and enable the merchant to edit metafield values in context. ### Access Scopes ## Fields * [access](/docs/api/admin-graphql/2024-10/objects/MetafieldAccess): MetafieldAccess! - The access settings associated with the metafield definition. * [capabilities](/docs/api/admin-graphql/2024-10/objects/MetafieldCapabilities): MetafieldCapabilities! - The capabilities of the metafield definition. * [constraints](/docs/api/admin-graphql/2024-10/objects/MetafieldDefinitionConstraints): MetafieldDefinitionConstraints - The constraints that determine what subtypes of resources a metafield definition applies to. * [description](/docs/api/admin-graphql/2024-10/scalars/String): String - The description of the metafield definition. * [id](/docs/api/admin-graphql/2024-10/scalars/ID): ID! - A globally-unique ID. * [key](/docs/api/admin-graphql/2024-10/scalars/String): String! - The unique identifier for the metafield definition within its namespace. * [metafieldsCount](/docs/api/admin-graphql/2024-10/scalars/Int): Int! - The count of the metafields that belong to the metafield definition. * [name](/docs/api/admin-graphql/2024-10/scalars/String): String! - The human-readable name of the metafield definition. * [namespace](/docs/api/admin-graphql/2024-10/scalars/String): String! - The container for a group of metafields that the metafield definition is associated with. * [ownerType](/docs/api/admin-graphql/2024-10/enums/MetafieldOwnerType): MetafieldOwnerType! - The resource type that the metafield definition is attached to. * [pinnedPosition](/docs/api/admin-graphql/2024-10/scalars/Int): Int - The position of the metafield definition in the pinned list. * [standardTemplate](/docs/api/admin-graphql/2024-10/objects/StandardMetafieldDefinitionTemplate): StandardMetafieldDefinitionTemplate - The standard metafield definition template associated with the metafield definition. * [type](/docs/api/admin-graphql/2024-10/objects/MetafieldDefinitionType): MetafieldDefinitionType! - The type of data that each of the metafields that belong to the metafield definition will store. Refer to the list of [supported types](https://shopify.dev/apps/metafields/types). * [useAsCollectionCondition](/docs/api/admin-graphql/2024-10/scalars/Boolean): Boolean! - Whether the metafield definition can be used as a collection condition. * [validationStatus](/docs/api/admin-graphql/2024-10/enums/MetafieldDefinitionValidationStatus): MetafieldDefinitionValidationStatus! - The validation status for the metafields that belong to the metafield definition. * [validations](/docs/api/admin-graphql/2024-10/objects/MetafieldDefinitionValidation): MetafieldDefinitionValidation! - A list of [validation options](https://shopify.dev/apps/metafields/definitions/validation) for the metafields that belong to the metafield definition. For example, for a metafield definition with the type `date`, you can set a minimum date validation so that each of the metafields that belong to it can only store dates after the specified minimum. * [visibleToStorefrontApi](/docs/api/admin-graphql/2024-10/scalars/Boolean): Boolean! - Whether each of the metafields that belong to the metafield definition are visible from the Storefront API. ## Connections * [metafields](/docs/api/admin-graphql/2024-10/connections/MetafieldConnection): MetafieldConnection! ## Related queries * [metafieldDefinition](/docs/api/admin-graphql/2024-10/queries/metafieldDefinition) Returns a metafield definition by identifier. * [metafieldDefinitions](/docs/api/admin-graphql/2024-10/queries/metafieldDefinitions) Returns a list of metafield definitions. ## Related mutations * [metafieldDefinitionCreate](/docs/api/admin-graphql/2024-10/mutations/metafieldDefinitionCreate) Creates a metafield definition. Any metafields existing under the same owner type, namespace, and key will be checked against this definition and will have their type updated accordingly. For metafields that are not valid, they will remain unchanged but any attempts to update them must align with this definition. * [metafieldDefinitionPin](/docs/api/admin-graphql/2024-10/mutations/metafieldDefinitionPin) You can organize your metafields in your Shopify admin by pinning/unpinning metafield definitions. The order of your pinned metafield definitions determines the order in which your metafields are displayed on the corresponding pages in your Shopify admin. By default, only pinned metafields are automatically displayed. * [metafieldDefinitionUnpin](/docs/api/admin-graphql/2024-10/mutations/metafieldDefinitionUnpin) You can organize your metafields in your Shopify admin by pinning/unpinning metafield definitions. The order of your pinned metafield definitions determines the order in which your metafields are displayed on the corresponding pages in your Shopify admin. By default, only pinned metafields are automatically displayed. * [metafieldDefinitionUpdate](/docs/api/admin-graphql/2024-10/mutations/metafieldDefinitionUpdate) Updates a metafield definition. * [standardMetafieldDefinitionEnable](/docs/api/admin-graphql/2024-10/mutations/standardMetafieldDefinitionEnable) Activates the specified standard metafield definition from its template. Refer to the [list of standard metafield definition templates](https://shopify.dev/apps/metafields/definitions/standard-definitions). ## Related Unions ## Examples ### Retrieve a count of a resource's metafields. Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2024-10/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"query\": \"query MetafieldsCount($metafieldDefinitionId: ID!) { metafieldDefinition(id: $metafieldDefinitionId) { id metafieldsCount } }\",\n \"variables\": {\n \"metafieldDefinitionId\": \"gid://shopify/MetafieldDefinition/1071456166\"\n }\n}'\n" Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n data: {\n \"query\": `query MetafieldsCount($metafieldDefinitionId: ID!) {\n metafieldDefinition(id: $metafieldDefinitionId) {\n id\n metafieldsCount\n }\n }`,\n \"variables\": {\n \"metafieldDefinitionId\": \"gid://shopify/MetafieldDefinition/1071456166\"\n },\n },\n});\n" Ruby example: "session = ShopifyAPI::Auth::Session.new(\n shop: \"your-development-store.myshopify.com\",\n access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n session: session\n)\n\nquery = <<~QUERY\n query MetafieldsCount($metafieldDefinitionId: ID!) {\n metafieldDefinition(id: $metafieldDefinitionId) {\n id\n metafieldsCount\n }\n }\nQUERY\n\nvariables = {\n \"metafieldDefinitionId\": \"gid://shopify/MetafieldDefinition/1071456166\"\n}\n\nresponse = client.query(query: query, variables: variables)\n" Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n `#graphql\n query MetafieldsCount($metafieldDefinitionId: ID!) {\n metafieldDefinition(id: $metafieldDefinitionId) {\n id\n metafieldsCount\n }\n }`,\n {\n variables: {\n \"metafieldDefinitionId\": \"gid://shopify/MetafieldDefinition/1071456166\"\n },\n },\n);\n\nconst data = await response.json();\n" Graphql query: "query MetafieldsCount($metafieldDefinitionId: ID!) {\n metafieldDefinition(id: $metafieldDefinitionId) {\n id\n metafieldsCount\n }\n}" #### Graphql Input { "metafieldDefinitionId": "gid://shopify/MetafieldDefinition/1071456166" } #### Graphql Response { "data": { "metafieldDefinition": { "id": "gid://shopify/MetafieldDefinition/1071456166", "metafieldsCount": 0 } } } ### Retrieve metafield definition Curl example: "curl -X POST \\\nhttps://your-development-store.myshopify.com/admin/api/2024-10/graphql.json \\\n-H 'Content-Type: application/json' \\\n-H 'X-Shopify-Access-Token: {access_token}' \\\n-d '{\n\"query\": \"query { metafieldDefinition(id: \\\"gid://shopify/MetafieldDefinition/1071456163\\\") { name } }\"\n}'\n" Node example: "const client = new shopify.clients.Graphql({session});\nconst data = await client.query({\n data: `query {\n metafieldDefinition(id: \"gid://shopify/MetafieldDefinition/1071456163\") {\n name\n }\n }`,\n});\n" Ruby example: "session = ShopifyAPI::Auth::Session.new(\n shop: \"your-development-store.myshopify.com\",\n access_token: access_token\n)\nclient = ShopifyAPI::Clients::Graphql::Admin.new(\n session: session\n)\n\nquery = <<~QUERY\n query {\n metafieldDefinition(id: \"gid://shopify/MetafieldDefinition/1071456163\") {\n name\n }\n }\nQUERY\n\nresponse = client.query(query: query)\n" Remix example: "const { admin } = await authenticate.admin(request);\n\nconst response = await admin.graphql(\n `#graphql\n query {\n metafieldDefinition(id: \"gid://shopify/MetafieldDefinition/1071456163\") {\n name\n }\n }`,\n);\n\nconst data = await response.json();\n" Graphql query: "query {\n metafieldDefinition(id: \"gid://shopify/MetafieldDefinition/1071456163\") {\n name\n }\n}" #### Graphql Input null #### Graphql Response { "data": { "metafieldDefinition": { "name": "ingredients" } } }