Anchor to section titled 'undefined'

productCreateMedia
mutation

Requires write_products access scope. Also: The user must have a permission to create media for a product.

Creates media for a product.


List of new media to be added to a product.

Anchor to productId
productId
required

Specifies the product associated with the media.


Was this section helpful?

The newly created media.

The list of errors that occurred from executing the mutation.

The product associated with the media.

The list of errors that occurred from executing the mutation. Use mediaUserErrors instead.


Was this section helpful?

Examples

Hide code
DescriptionCopy
mutation productCreateMedia($media: [CreateMediaInput!]!, $productId: ID!) {
  productCreateMedia(media: $media, productId: $productId) {
    media {
      alt
      mediaContentType
      status
    }
    mediaUserErrors {
      field
      message
    }
    product {
      id
      title
    }
  }
}
curl -X POST \
https://your-development-store.myshopify.com/admin/api/2024-01/graphql.json \
-H 'Content-Type: application/json' \
-H 'X-Shopify-Access-Token: {access_token}' \
-d '{
"query": "mutation productCreateMedia($media: [CreateMediaInput!]!, $productId: ID!) { productCreateMedia(media: $media, productId: $productId) { media { alt mediaContentType status } mediaUserErrors { field message } product { id title } } }",
 "variables": {
    "media": [
      {
        "alt": "Image",
        "mediaContentType": "EXTERNAL_VIDEO",
        "originalSource": "https://youtu.be/32mGBDk3LSo"
      },
      {
        "alt": "Image",
        "mediaContentType": "IMAGE",
        "originalSource": "invalid_img"
      }
    ],
    "productId": "gid://shopify/Product/121709582"
  }
}'
const { admin } = await authenticate.admin(request);

const response = await admin.graphql(
  `#graphql
  mutation productCreateMedia($media: [CreateMediaInput!]!, $productId: ID!) {
    productCreateMedia(media: $media, productId: $productId) {
      media {
        alt
        mediaContentType
        status
      }
      mediaUserErrors {
        field
        message
      }
      product {
        id
        title
      }
    }
  }`,
  {
    variables: {
      "media": [
        {
          "alt": "Image",
          "mediaContentType": "EXTERNAL_VIDEO",
          "originalSource": "https://youtu.be/32mGBDk3LSo"
        },
        {
          "alt": "Image",
          "mediaContentType": "IMAGE",
          "originalSource": "invalid_img"
        }
      ],
      "productId": "gid://shopify/Product/121709582"
    },
  },
);

const data = await response.json();
session = ShopifyAPI::Auth::Session.new(
  shop: "your-development-store.myshopify.com",
  access_token: access_token
)
client = ShopifyAPI::Clients::Graphql::Admin.new(
  session: session
)

query = <<~QUERY
  mutation productCreateMedia($media: [CreateMediaInput!]!, $productId: ID!) {
    productCreateMedia(media: $media, productId: $productId) {
      media {
        alt
        mediaContentType
        status
      }
      mediaUserErrors {
        field
        message
      }
      product {
        id
        title
      }
    }
  }
QUERY

variables = {
  "media": [{"alt"=>"Image", "mediaContentType"=>"EXTERNAL_VIDEO", "originalSource"=>"https://youtu.be/32mGBDk3LSo"}, {"alt"=>"Image", "mediaContentType"=>"IMAGE", "originalSource"=>"invalid_img"}],
  "productId": "gid://shopify/Product/121709582"
}

response = client.query(query: query, variables: variables)
const client = new shopify.clients.Graphql({session});
const data = await client.query({
  data: {
    "query": `mutation productCreateMedia($media: [CreateMediaInput!]!, $productId: ID!) {
      productCreateMedia(media: $media, productId: $productId) {
        media {
          alt
          mediaContentType
          status
        }
        mediaUserErrors {
          field
          message
        }
        product {
          id
          title
        }
      }
    }`,
    "variables": {
      "media": [
        {
          "alt": "Image",
          "mediaContentType": "EXTERNAL_VIDEO",
          "originalSource": "https://youtu.be/32mGBDk3LSo"
        },
        {
          "alt": "Image",
          "mediaContentType": "IMAGE",
          "originalSource": "invalid_img"
        }
      ],
      "productId": "gid://shopify/Product/121709582"
    },
  },
});
use Shopify\Clients\Graphql;

$client = new Graphql("your-development-store.myshopify.com", $accessToken);
$query = <<<QUERY
  mutation productCreateMedia($media: [CreateMediaInput!]!, $productId: ID!) {
    productCreateMedia(media: $media, productId: $productId) {
      media {
        alt
        mediaContentType
        status
      }
      mediaUserErrors {
        field
        message
      }
      product {
        id
        title
      }
    }
  }
QUERY;

$variables = [
  "media" => [{"alt"=>"Image", "mediaContentType"=>"EXTERNAL_VIDEO", "originalSource"=>"https://youtu.be/32mGBDk3LSo"}, {"alt"=>"Image", "mediaContentType"=>"IMAGE", "originalSource"=>"invalid_img"}],
  "productId" => "gid://shopify/Product/121709582",
];

$response = $client->query(["query" => $query, "variables" => $variables]);
Hide code
Input variables
Copy
{
  "media": [
    {
      "alt": "Image",
      "mediaContentType": "EXTERNAL_VIDEO",
      "originalSource": "https://youtu.be/32mGBDk3LSo"
    },
    {
      "alt": "Image",
      "mediaContentType": "IMAGE",
      "originalSource": "invalid_img"
    }
  ],
  "productId": "gid://shopify/Product/121709582"
}
Hide code
Response
JSON
{
  "productCreateMedia": {
    "media": [
      {
        "alt": "Image",
        "mediaContentType": "EXTERNAL_VIDEO",
        "status": "UPLOADED"
      }
    ],
    "mediaUserErrors": [
      {
        "field": [
          "media",
          "1",
          "originalSource"
        ],
        "message": "Image URL is invalid"
      }
    ],
    "product": {
      "id": "gid://shopify/Product/121709582",
      "title": "Boots"
    }
  }
}