Join us for an upcoming Shopify Partner webinar on February 27, 2024. Discover the latest Checkout Extensibility features, and deep dive on improvements to Shopify Functions and Web Pixels. Register now for either the 10am EST or 2pm EST sessions.

MetafieldsSet mutation returns "invalid id" for product images

jeliebig-tudock
Shopify Partner
3 0 3

I'm currently trying to use the GraphQL API to add a metafield to a product image, but I'm pretty sure I'm running into a bug, since the error message I'm getting doesn't look right.

 

All queries and mutations were executed using the Shopify GraphiQL App with API version 2023-04 (latest).


I previously created a new product image by using the productCreateMedia mutation which works fine and I'm able to query all images/media of a product, so I also have the required id(s) to create the metafield.

 

Query:

query imagesByProductId($id: ID!) {
  product(id: $id) {
    media(first: 3) {
      edges {
        node {
          ... on MediaImage {
            id
            status
            image {
              id
              altText
              url
              metafield(key: "somekey", namespace: "image") {
                namespace
                key
                value
              }
            }
          }
        }
      }
    }
    images(first: 3) {
      nodes {
        id
        metafield(key: "somekey", namespace: "image") {
          id
        }
      }
    }
  }
}

Response:

 

 

{
  "data": {
    "product": {
      "media": {
        "edges": [
          {
            "node": {
              "id": "gid://shopify/MediaImage/33642354213165",
              "status": "READY",
              "image": {
                "id": "gid://shopify/ImageSource/33652035027245",
                "altText": "",
                "url": "https://cdn.shopify.com/[pathToFile]",
                "metafield": null
              }
            }
          },
          {
            "node": {
              "id": "gid://shopify/MediaImage/33642354245933",
              "status": "READY",
              "image": {
                "id": "gid://shopify/ImageSource/33652035060013",
                "altText": "",
                "url": "url": "https://cdn.shopify.com/[pathToFile]",
                "metafield": null
              }
            }
          },
          {
            "node": {
              "id": "gid://shopify/MediaImage/33642354278701",
              "status": "READY",
              "image": {
                "id": "gid://shopify/ImageSource/33652035092781",
                "altText": "",
                "url": "url": "https://cdn.shopify.com/[pathToFile]",
                "metafield": null
              }
            }
          }
        ]
      },
      "images": {
        "nodes": [
          {
            "id": "gid://shopify/ProductImage/41289660956973",
            "metafield": null
          },
          {
            "id": "gid://shopify/ProductImage/41289661055277",
            "metafield": null
          },
          {
            "id": "gid://shopify/ProductImage/41289661251885",
            "metafield": null
          }
        ]
      }
    }
  },
  "extensions": {
    "cost": {
      "requestedQueryCost": 20,
      "actualQueryCost": 18,
      "throttleStatus": {
        "maximumAvailable": 1000,
        "currentlyAvailable": 982,
        "restoreRate": 50
      }
    }
  }
}

 

 

(Although I have to admit it's a little confusing to have multiple ids for a single item, but only being allowed to use one of them for metafield.)

 

So for this example I'm using an image represented by the following ids:
- gid://shopify/MediaImage/33642354213165
- gid://shopify/ImageSource/33652035027245
- gid://shopify/ProductImage/41289660956973

 

Now I want to use the metafieldsSet mutation with the variables provided below, but no matter which ownerId I use I always get the same error in the response.I was able to figure out that only the ProductImage id is the correct one to use here, but I still run into this issue.

 

Mutation:

mutation addMetafieldToImage($metafields: [MetafieldsSetInput!]!) {
  metafieldsSet(metafields: $metafields) {
    metafields {
      id
      owner {
        ... on Image {
          id
          url
        }
      }
      ownerType
      type
      value
    }
    userErrors {
      code
      elementIndex
      field
      message
    }
  }
}

Variables:

{
  "metafields": [
    {
      "ownerId": "gid://shopify/ProductImage/41289660956973",
      "type": "single_line_text_field",
      "namespace": "image",
      "key": "somekey",
      "value": "testme"
    }
  ]
}

Response:

{
  "data": {
    "metafieldsSet": null
  },
  "errors": [
    {
      "message": "invalid id",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "metafieldsSet"
      ]
    }
  ],
  "extensions": {
    "cost": {
      "requestedQueryCost": 11,
      "actualQueryCost": 1,
      "throttleStatus": {
        "maximumAvailable": 1000,
        "currentlyAvailable": 999,
        "restoreRate": 50
      }
    }
  }
}

 

So this is really a bug with the GraphQL API, right?

Replies 4 (4)

Richard_Monette
Shopify Staff
14 2 5

metafieldsSet should work now if you use GID such as gid://shopify/MediaImage/33642354213165

 

Please let me know if that works, or if you are still having issues, thanks!

To learn more visit the Shopify Help Center or the Community Blog.

jeliebig-tudock
Shopify Partner
3 0 3

Sorry for the late reply, the issue still occurs and I receive the same error message as before.

I used a MediaImage GID as you said, but it the API still doesn't accept it.

Richard_Monette
Shopify Staff
14 2 5

On 2023-07 here is what I am doing:

 

To get the GID:

 

query products {
  products(first: 10) {
    edges {
      node {
        media(first: 10) {
          edges {
            node {
              id
            }
          }
        }
      }
    }
  }
}

 

once I've got the GID, I am setting it using:

 

mutation metafieldsSet($metafields: [MetafieldsSetInput!]!) {
  metafieldsSet(metafields: $metafields) {
    metafields {
      id
    }
    userErrors {
      field
      message
    }
  }
}

{
  "metafields": [
    {
      "key": "foo",
      "namespace": "bar",
      "ownerId": "gid://shopify/MediaImage/29500990455864",
      "type": "string",
      "value": "testing123"
    }
  ]
}

 

What error specifically are you seeing when trying this?

To learn more visit the Shopify Help Center or the Community Blog.

jeliebig-tudock
Shopify Partner
3 0 3

API version is 2023-04 (latest)

 

First I use this query to get MediaImage ids:

 

query imagesByProductId($id: ID!) {
  product(id: $id) {
    media(first: 3) {
      edges {
        node {
          ... on MediaImage {
            id
            status
            image {
              id
              altText
              url
              metafield(key: "somekey", namespace: "image") {
                namespace
                key
                value
              }
            }
          }
        }
      }
    }
    images(first: 3) {
      nodes {
        id
        metafield(key: "somekey", namespace: "image") {
          id
        }
      }
    }
  }
}

 

 I pick the first result which happens to be "gid://shopify/MediaImage/33666068480301" and use that for the next mutation.

 

mutation addMetafieldToImage($metafields: [MetafieldsSetInput!]!) {
    metafieldsSet(metafields: $metafields) {
    metafields {
      id
      owner {
        ... on Image {
          id
          url
        }
      }
      ownerType
      type
      value
    }
    userErrors {
      code
      elementIndex
      field
      message
    }
  }
}

 

The variables look like this:

 

{
  "metafields": [
    {
      "ownerId": "gid://shopify/MediaImage/33666068480301",
      "type": "single_line_text_field",
      "namespace": "image",
      "key": "somekey",
      "value": "testme"
    }
  ]
}

 

The response I get is this one:

 

{
  "data": {
    "metafieldsSet": null
  },
  "errors": [
    {
      "message": "invalid id",
      "locations": [
        {
          "line": 2,
          "column": 5
        }
      ],
      "path": [
        "metafieldsSet"
      ]
    }
  ],
  "extensions": {
    "cost": {
      "requestedQueryCost": 11,
      "actualQueryCost": 1,
      "throttleStatus": {
        "maximumAvailable": 1000,
        "currentlyAvailable": 999,
        "restoreRate": 50
      }
    }
  }
}