Intermittent "Something went wrong, please try again" Error in `productSet` Bulk Mutation

Hello Shopify Community,

I am encountering a recurring issue with the productSet bulk mutation using the GraphQL Admin API (version 2024-07, which uses media, and 2024-10, which uses files). Some listings return the following userError:

“Something went wrong, please try again.”

Problem Description:

  1. Intermittent Behavior: The error does not consistently occur. When I retry the request with the same data, it often works without issues.
  2. Generic Error Message: The error message is vague, making it challenging to debug the underlying problem.
  3. Listings Are Not Created: The listings are often not successfully created in Shopify.

Steps to Reproduce:

GET valid data for the next environment variables

const SHOP_DOMAIN = process.env. SHOP_DOMAIN;
const ACCESS_TOKEN = process.env.SHOPIFY_ACCESS_TOKEN;

Run the POC script that reproduces the issue:

// try to associate images at the end:

const axios = require('axios');
const FormData = require('form-data');
const fs = require('fs');
const path = require('path');
const uuidv4 = require('uuid').v4;

// Replace these with your actual Shopify shop domain and access token
const SHOP_DOMAIN = 'vela-test-xavor-large-5-dev.myshopify.com';
const ACCESS_TOKEN = process.env.SHOPIFY_ACCESS_TOKEN;

// Shopify API version
const API_VERSION = '2024-10';

// Shopify GraphQL endpoint
const GRAPHQL_ENDPOINT = `https://${SHOP_DOMAIN}/admin/api/${API_VERSION}/graphql.json`;

// Your provided image data (flattened the array for easier access)
const images = [
  {
    "originalSource": "https://s3.amazonaws.com/dev-images.getvela.com/cb14481cdfb11a02343a1c6f322b200c438fbbc5",
    "contentType": "PRODUCT_IMAGE",
    "alt": "a dog that is laying down with its mouth open"
  },
];

// Your provided product data
const products = [
  // First product data
  {
    "seo": {
      "title": "1Luxurious Cotton Dragon T-Shirt with Elegant Gold Detail  Perfect for Any Occasion",
    "description": "Te presentamos la camiseta DRAGÓN, elaborada en algodón de lujo con detalles dorados. Esta camiseta combina comodidad y estilo, perfecta para cualquier ocasión. Su diseño exclusivo y los lujosos acabados en oro la convierten en una opción única para tu guardarropa."
    },
    "vendor": "large-5-dev",
    "variants": [
      {
        "optionValues": [{ "optionName": "Title", "name": "Default Title" }],
        "inventoryPolicy": "DENY",
        "compareAtPrice": 0,
        "position": 1,
        "taxable": true,
        "price": 1,
        "barcode": null,
        "sku": null
      }
    ],
    "title": "1Luxurious Cotton Dragon T-Shirt with Elegant Gold Detail  Perfect for Any Occasion",
    "tags": ["artistic flair", "casual day outfit", "charm and sophistication", "comfortable clothing", "cotton blend", "dragon t-shirt", "elegant gold detail", "everyday look", "exceptional shirt", "exquisite details", "fashion statement", "gold accents", "luxurious cotton t-shirt", "modern design", "night out attire", "personal style", "polished appearance", "relaxed vibe", "sophisticated fashion", "standout clothing", "stylish apparel", "tailored pants", "timeless elegance", "unique dragon design", "versatile wardrobe staple"],
    "status": "DRAFT",
    "productType": "",
    "productOptions": [{ "name": "Title", "position": 1, "values": [{ "name": "Default Title" }] }],
    "collections": [],
    "descriptionHtml": "Introducing the **Dragon T-Shirt**, crafted from luxurious cotton and embellished with exquisite gold details. This exceptional shirt seamlessly blends comfort and style, making it an ideal addition to your wardrobe for any occasion. The softness of the cotton ensures that you feel as good as you look.The **unique dragon design** adds an artistic flair, ensuring you stand out wherever you go. The subtle gold accents impart sophistication and charm, subtly elevating your everyday look. Whether for a night out or a casual day, this versatile piece effortlessly transitions between different settings. Pair it with your favorite jeans for a relaxed vibe, or dress it up with tailored pants for a more polished appearance.Opt for this distinctive item that not only showcases your personal style but also provides the comfort you desire throughout the day. Don't miss the chance to enhance your collection with the timeless elegance and unique allure of the **Dragon T-Shirt**. Explore its charm today!",
    "handle": `${Date.now()}${Math.floor(Math.random() * 1000000)}`
  },
  {
    "seo": {
      "title": "2Luxurious Cotton Dragon T-Shirt with Elegant Gold Detail  Perfect for Any Occasion",
      "description": "Te presentamos la camiseta DRAGÓN, elaborada en algodón de lujo con detalles dorados. Esta camiseta combina comodidad y estilo, perfecta para cualquier ocasión. Su diseño exclusivo y los lujosos acabados en oro la convierten en una opción única para tu guardarropa."
    },
    "vendor": "large-5-dev",
    "variants": [
      {
        "optionValues": [{ "optionName": "Title", "name": "Default Title" }],
        "inventoryPolicy": "DENY",
        "compareAtPrice": 0,
        "position": 1,
        "taxable": true,
        "price": 1,
        "barcode": null,
        "sku": null
      }
    ],
    "title": "second product",
    "tags": ["artistic flair", "casual day outfit", "charm and sophistication", "comfortable clothing", "cotton blend", "dragon t-shirt", "elegant gold detail", "everyday look", "exceptional shirt", "exquisite details", "fashion statement", "gold accents", "luxurious cotton t-shirt", "modern design", "night out attire", "personal style", "polished appearance", "relaxed vibe", "sophisticated fashion", "standout clothing", "stylish apparel", "tailored pants", "timeless elegance", "unique dragon design", "versatile wardrobe staple"],
    "status": "DRAFT",
    "productType": "",
    "productOptions": [{ "name": "Title", "position": 1, "values": [{ "name": "Default Title" }] }],
    "collections": [],
    "descriptionHtml": "Introducing the **Dragon T-Shirt**, crafted from luxurious cotton and embellished with exquisite gold details. This exceptional shirt seamlessly blends comfort and style, making it an ideal addition to your wardrobe for any occasion. The softness of the cotton ensures that you feel as good as you look.The **unique dragon design** adds an artistic flair, ensuring you stand out wherever you go. The subtle gold accents impart sophistication and charm, subtly elevating your everyday look. Whether for a night out or a casual day, this versatile piece effortlessly transitions between different settings. Pair it with your favorite jeans for a relaxed vibe, or dress it up with tailored pants for a more polished appearance.Opt for this distinctive item that not only showcases your personal style but also provides the comfort you desire throughout the day. Don't miss the chance to enhance your collection with the timeless elegance and unique allure of the **Dragon T-Shirt**. Explore its charm today!",
    "handle": `${Date.now()}${Math.floor(Math.random() * 1000000)}`
  },
  {
    "seo": {
      "title": "11 oz Classic Ceramic Mug - Ideal Gift for Coffee and Tea Lovers",
      "description": "Start your day in style! This 11oz ceramic mug is perfect for coffee, tea, or any of your favorite drinks. It features a comfortable handle and a vibrant, long-lasting design that will brighten every sip. Whether you're using it at home, in the office, or giving it as a gift, it's sure to become your go-to mug. Elevate your morning routine or make someone's day with this classic coffee mug. Looking for the perfect gift for the coffee or tea lover in your life? Look no further than this monogrammed leather Dopp kit. With a generous 255 character limit, you can add a personal touch to this ideal groomsmen gift. This high-quality leather kit is perfect for keeping toiletries organized on trips or at home. Treat yourself or someone special to this elegant and functional gift that is sure to impress. Order now and make any occasion even more special with this monogrammed leather Dopp kit."
    },
    "vendor": "large-5-dev",
    "variants": [
      {
        "optionValues": [{ "optionName": "Title", "name": "Default Title" }],
        "inventoryPolicy": "DENY",
        "compareAtPrice": 0,
        "position": 1,
        "taxable": true,
        "price": 0,
        "barcode": null,
        "sku": null
      }
    ],
    "title": "11 oz Classic Ceramic Mug - Ideal Gift for Coffee and Tea Lovers",
    "tags": ["11 oz mug", "beverage enjoyment", "birthday gift", "ceramic mug", "classic mug", "coffee lovers", "coffee mug", "comfortable handle", "daily ritual", "drinking experience", "durable ceramic", "gift for her", "gift for him", "holiday gift", "home essentials", "kitchen collection", "morning routine", "office mug", "relaxation moments", "stylish drinkware", "tea lovers", "tea mug", "thoughtful gift", "unique gift", "vibrant design"],
    "status": "DRAFT",
    "productType": "",
    "productOptions": [{ "name": "Title", "position": 1, "values": [{ "name": "Default Title" }] }],
    "collections": [],
    "descriptionHtml": "Start your day with style! This **11 oz classic ceramic mug** is perfect for enjoying your favorite coffee, tea, or any other beverage you cherish. Crafted from durable ceramic, this mug features a **comfortable handle** that ensures a secure grip, allowing you to savor each sip with ease. Its **vibrant design** adds a splash of color to your morning routine, making it suitable for both home and office use. Picture yourself taking a moment to unwind, with the steam rising from your drink as you indulge in rich flavors. Each time you fill this mug, it becomes part of your daily ritual.This **classic mug** also makes a thoughtful gift for coffee and tea enthusiasts. Whether for a birthday, holiday, or just to show you care, it’s a lovely way to express affection. With its timeless appeal, this ceramic mug is sure to become a favorite in any kitchen collection. Elevate your drinking experience with our **11 oz classic ceramic mug**—the perfect companion for those precious moments of relaxation and enjoyment. Order yours today and turn every sip into a delightful occasion!",
    "handle": `${Date.now()}${Math.floor(Math.random() * 1000000)}`
  }
];

// Polling function to check if all files are in the READY state
async function checkFilesReady(fileIds) {
  const fileStatusQuery = `
    query fileStatus($ids: [ID!]!) {
      nodes(ids: $ids) {
        ... on File {
          id
          fileStatus
        }
      }
    }
  `;

  const startTime = Date.now();
  const timeout = 60000; // Set timeout to 60 seconds

  while (Date.now() - startTime < timeout) {
    try {
      const response = await axios.post(
        GRAPHQL_ENDPOINT,
        {
          query: fileStatusQuery,
          variables: { ids: fileIds },
        },
        {
          headers: {
            'Content-Type': 'application/json',
            'X-Shopify-Access-Token': ACCESS_TOKEN,
          }
        }
      );

      const files = response.data.data.nodes;
      const notReadyFiles = files.filter(file => file.fileStatus !== 'READY');

      if (notReadyFiles.length === 0) {
        console.log("All files are in READY state.");
        return true;
      } else {
        console.log("Waiting for files to be in READY state...");
        await new Promise(resolve => setTimeout(resolve, 1000));
      }
    } catch (error) {
      console.error("Error checking file statuses:", error);
      return false;
    }
  }

  console.error("Timeout reached while waiting for files to be in READY state.");
  return false;
}

// Mutation for file creation
const FILE_CREATE_MUTATION = `
  mutation fileCreate($files: [FileCreateInput!]!) {
    fileCreate(files: $files) {
      files {
        alt
        createdAt
        id
        fileStatus
      }
    }
  }
`;

// Step 1: Upload images for each product and collect media IDs
async function uploadImagesForProduct(productImages) {
  try {
    const fileInputs = productImages.map(image => ({
      alt: image.alt,
      originalSource: image.originalSource,
      filename: uuidv4(),
    }));

    console.log("Uploading images...", fileInputs);
    const response = await axios.post(
      GRAPHQL_ENDPOINT,
      {
        query: FILE_CREATE_MUTATION,
        variables: { files: fileInputs },
      },
      {
        headers: {
          'Content-Type': 'application/json',
          'X-Shopify-Access-Token': ACCESS_TOKEN,
        }
      }
    );

    const { files, userErrors } = response.data.data.fileCreate;
    console.log("Files created:", files);
    if (userErrors && userErrors.length > 0) {
      console.error("User errors during file creation:", userErrors);
      return null;
    }

    const fileIds = files.map(file => file.id);

    // Poll to ensure all files are in READY state
    const allFilesReady = await checkFilesReady(fileIds);
    if (!allFilesReady) {
      throw new Error("Not all files reached READY state.");
    }

    return fileIds; // Return media IDs for this product
  } catch (error) {
    console.error("Error uploading images:", error);
    return null;
  }
}


// Step 2: Prepare product data with unique media IDs and write to JSONL file
async function prepareProductData() {
  const jsonlPath = path.resolve(__dirname, 'products_upload.jsonl');
  const writeStream = fs.createWriteStream(jsonlPath, { flags: 'w' });

  for (const product of products) {
    // Upload images specific to this product
    const fileIds = await uploadImagesForProduct(images);
    const files = fileIds.map(fileId => ({
      id: fileId,
      contentType: 'IMAGE',
      duplicateResolutionMode: 'RAISE_ERROR'
    }));
    if (!fileIds) throw new Error("Error uploading images for product.");
    console.log("File IDs for product:", fileIds);

    const productEntry = {
      input: {
        ...product,
        files,
        // mediaIds: fileIds,
      }
    };

    writeStream.write(JSON.stringify(productEntry) + '\n');
  }

  writeStream.end();
  console.log(`Products JSONL file created at ${jsonlPath}`);
  return jsonlPath;
}

// Step 3: Stage JSONL file for bulk operation
async function stageJsonlFileForBulkOperation(filePath) {
  const getStagedTargetMutation = (fileName) => `
    mutation {
      stagedUploadsCreate(input: {
        resource: BULK_MUTATION_VARIABLES,
        filename: "${fileName}",
        mimeType: "text/jsonl",
        httpMethod: POST
      }) {

      userErrors {
        field
        message
      },
        stagedTargets {
          url,
        resourceUrl,
          parameters {
            name
            value
          }
        }
      }
    }
  `;

  try {
    // Request upload target
    const query = getStagedTargetMutation(path.basename(filePath));
    const stagedUploadResponse = await axios.post(
      GRAPHQL_ENDPOINT,
      { query },
      { headers: { 'X-Shopify-Access-Token': ACCESS_TOKEN } }
    );

    const stagedTargets = stagedUploadResponse.data?.data?.stagedUploadsCreate?.stagedTargets;
    if (!stagedTargets || stagedTargets.length === 0) {
      throw new Error('Failed to get a valid staged target.');
    }

    const stagedTarget = stagedTargets[0];
    const parameters = stagedTarget.parameters || [];

    // Find the parameter where name is 'key' and get its value
    const stagedUploadPath = parameters.find(param => param.name === 'key')?.value;
    if (!stagedUploadPath) {
      throw new Error('Failed to get staged upload path.');
    }

    // Prepare FormData with required parameters and the file itself
    const form = new FormData();
    parameters.forEach(param => form.append(param.name, param.value));
    form.append('file', fs.createReadStream(filePath));

    // Upload the file to the staged URL
    console.log('form headers:', form.getHeaders());
    await axios.post(stagedTarget.url, form, { headers: form.getHeaders() });
    console.log('JSONL file staged successfully for bulk operation at URL:', stagedTarget.url);

    return stagedUploadPath;  // Return the staged upload path for use in the bulk operation
  } catch (error) {
    console.error('Error staging JSONL file:', error.response ? error.response.data : error.message);
    return null;
  }
}

// Step 4: Start the bulk operation with the staged JSONL URL
async function startBulkOperation(stagedUploadPath) {
  const bulkOperationQuery = `
    mutation {
      bulkOperationRunMutation(
        mutation: """mutation call($input: ProductSetInput!) {
          productSet(input: $input) {
            product {
              id
              legacyResourceId
              title
              handle
              publishedAt
              variants(first: 2000) {
                edges {
                  node {
                    id
                    inventoryItem {
                      id
                      legacyResourceId
                    }
                  }
                }
              }
            }
            userErrors {
              code
              field
              message
            }
          }
        }""",
        stagedUploadPath: "${stagedUploadPath}") {
        bulkOperation {
          id
          url
          status
        }
        userErrors {
          code
          field
          message
        }
      }
    }
  `;

  try {
    const response = await axios.post(GRAPHQL_ENDPOINT, { query: bulkOperationQuery }, { headers: { 'X-Shopify-Access-Token': ACCESS_TOKEN } });
    const { bulkOperation, userErrors } = response.data.data.bulkOperationRunMutation;

    if (userErrors && userErrors.length > 0) {
      console.error("User errors during bulk operation initiation:", userErrors);
      return null;
    }

    console.log('Bulk operation initiated with ID:', bulkOperation.id);
    return bulkOperation.id;
  } catch (error) {
    console.error('Error initiating bulk operation:', error.response ? error.response.data : error.message);
    return null;
  }
}

// Step 5: Monitor the bulk operation status
async function monitorBulkOperation() {
  return new Promise((resolve, reject) => {
    const interval = setInterval(async () => {
      try {
        const query = `
          {
            currentBulkOperation (type: MUTATION) {
              id
              status
              errorCode
              createdAt
              completedAt
              objectCount
              fileSize
              url
            }
          }
        `;
        const response = await axios.post(GRAPHQL_ENDPOINT, { query }, { headers: { 'X-Shopify-Access-Token': ACCESS_TOKEN } });
        console.log('Checking bulk operation status...');
        const operation = response.data.data.currentBulkOperation;

        console.log(`Bulk operation status: ${operation.status}`);

        if (operation.status === 'COMPLETED') {
          clearInterval(interval);
          console.log('Bulk operation completed successfully.');
          console.log('Results URL:', operation.url);
          resolve(operation);
        } else if (operation.status === 'FAILED') {
          clearInterval(interval);
          console.error('Bulk operation failed:', operation.errorCode);
          reject(new Error(`Bulk operation failed with error code: ${operation.errorCode}`));
        }
      } catch (error) {
        clearInterval(interval);
        reject(error);
      }
    }, 1000);
  });
}

// Main function to execute the steps sequentially
(async () => {
  try {
    const jsonlFilePath = await prepareProductData();
    for (const product of products) {
      // Upload images specific to this product
      const fileIds = await uploadImagesForProduct(images);
      console.log('fileIds:', JSON.stringify(fileIds.map(fileId => ({ id: fileId}))));
    }
    const stagedUploadPath = await stageJsonlFileForBulkOperation(jsonlFilePath);

    if (stagedUploadPath) {
      const bulkOperationId = await startBulkOperation(stagedUploadPath);
      await monitorBulkOperation(bulkOperationId);
    }
  } catch (error) {
    console.error('Error in bulk product upload:', error);
  }
})();

  • I upload images for products using the fileCreate mutation.
  • I include images in the bulk mutation via productSet once images are ready.

Expected Behavior:

The bulk mutation should process all items without returning generic errors when no issues exist with the input data.

Observed Behavior:

  • Some listings return the error: "Something went wrong, please try again."
  • Listings that “failed” aren’t created successfully in the Shopify admin.

Questions:

  1. Is this error related to a known issue with the productSet bulk mutation?
  2. Are additional debugging tools or logs available to better understand why this happens?
  3. Has anyone else observed this behavior with similar mutations?

Additional Information:

  • GraphQL API Version: 2024-10 (files) and 2024-07 (mediaIds)
  • Shopify Shop Domain: vela-test-xavor-large-5-dev.myshopify.com

Any insights or recommendations would be greatly appreciated!

Thanks in advance,
Giovanni

@Liam-Shopify do u mind taking a look please?

:wave: @yovasx2
Thanks for reaching out.
Would you mind sharing a request id of one of the failed calls.
Thanks

We have been experiencing the exact same issue. @yovasx2 On behalf of all of our us developers, thank you for extensively documenting the sequence!

Hello,

@yovasx2 , @johncmt6 , @Asaf_Gitai , any update on this? I am facing the same issue.

Thanks!

No change on our end as of yet. We are still encountering the issue and waiting for it to be fixed.

Hello, any news related to this issue? I’m facing same issue

Hi, issue still going :frowning:

Hello @Asaf_Gitai , any updates on this issue? It’s still happening to most of our create product flows.

From all the products in the bulk file, something like ~40% of them fail to be created.

Thanks in advance

Hi folks,

Apologies for the silence over the end-of-year break.

Since some time has passed, could you please share a new request ID with us? We’ll investigate the issue further.

Also, would it be correct to assume that this issue arises only when using bulkOperation, and not when calling productSet directly?

If that’s the case, I’d like to mention that productSet can also be used with synchronous=false, should that be a reason for choosing bulkOperation.

Hi Asaf,

Thank you for getting back to me. Below are the JSONL results and script logs we collected during the bulk operation:

Script Logs

Below are the relevant console logs from our Node.js script. Notice the separate steps for image upload (fileCreate) and final bulk mutation (productSet via JSONL file):

Request ID upload images: 8d375393-f5e8-46d9-a266-ac1ba6edded1-1736470018
Request ID files ready: 6b91c69c-d1a7-4b77-918a-a32976aab074-1736470019
Waiting for files to be in READY state...
Request ID files ready: f3412c2d-5313-4ef9-8e8b-bdd099de6fab-1736470020
Waiting for files to be in READY state...
Request ID files ready: 394c7105-eea4-41b7-a5db-463449e60f47-1736470021
All files are in READY state.
File IDs for product: [
  'gid://shopify/MediaImage/26585725501528',
  'gid://shopify/MediaImage/26585725534296',
  'gid://shopify/MediaImage/26585725567064',
  'gid://shopify/MediaImage/26585725599832',
  'gid://shopify/MediaImage/26585725632600',
  'gid://shopify/MediaImage/26585725665368',
  'gid://shopify/MediaImage/26585725698136',
  'gid://shopify/MediaImage/26585725730904',
  'gid://shopify/MediaImage/26585725763672'
]
Request ID upload images: b4dd7a81-1649-4143-97af-074ca54a6441-1736470022
Request ID files ready: c391140d-61a7-460e-aa20-07ef0f43ba98-1736470023
Waiting for files to be in READY state...
Request ID files ready: a8973ba1-2789-4735-a0c9-6b56d83e3a4c-1736470024
Waiting for files to be in READY state...
Request ID files ready: d5d903d6-add7-40fb-9e39-abb567e2f56f-1736470025
All files are in READY state.
File IDs for product: [
  'gid://shopify/MediaImage/26585726025816',
  'gid://shopify/MediaImage/26585726058584',
  'gid://shopify/MediaImage/26585726091352',
  'gid://shopify/MediaImage/26585726124120',
  'gid://shopify/MediaImage/26585726156888',
  'gid://shopify/MediaImage/26585726189656',
  'gid://shopify/MediaImage/26585726222424',
  'gid://shopify/MediaImage/26585726255192',
  'gid://shopify/MediaImage/26585726320728'
]
Request ID upload images: 5b6c4fda-5d26-47d7-aadb-502bf1040952-1736470025
Request ID files ready: acfa3901-f363-4262-85f1-0395ef1a5d58-1736470027
Waiting for files to be in READY state...
Request ID files ready: db208d1f-e7f0-4fff-bfc1-678ddf2e1557-1736470028
Waiting for files to be in READY state...
Request ID files ready: 4e4686ef-c77f-4956-bb81-641fbcd95cb2-1736470029
All files are in READY state.
File IDs for product: [
  'gid://shopify/MediaImage/26585726943320',
  'gid://shopify/MediaImage/26585726976088',
  'gid://shopify/MediaImage/26585727008856',
  'gid://shopify/MediaImage/26585727041624',
  'gid://shopify/MediaImage/26585727074392',
  'gid://shopify/MediaImage/26585727107160',
  'gid://shopify/MediaImage/26585727139928',
  'gid://shopify/MediaImage/26585727172696',
  'gid://shopify/MediaImage/26585727205464'
]
Products JSONL file created at /Users/joe/poc/products_upload.jsonl
Request ID staged upload jsonl: 1af137e0-7d69-4330-9467-facd8ae4f771-1736470029
Request ID upload jsonl: Object [AxiosHeaders] {
  'x-guploader-uploadid': 'AFiumC5DkWq4Sa_jPeX8NWUUc_IoXwUGxfMxOBdYDcn6nP8QVtvQDtnqMAI9iAM-7_iVLqRALa56iuQ',
  vary: 'Origin',
  'content-length': '395',
  date: 'Fri, 10 Jan 2025 00:47:10 GMT',
  server: 'UploadServer',
  'content-type': 'text/html; charset=UTF-8',
  'alt-svc': 'h3=":443"; ma=2592000,h3-29=":443"; ma=2592000',
  connection: 'close'
}
Request ID upload jsonl: undefined
JSONL file staged successfully for bulk operation at URL: https://shopify-staged-uploads.storage.googleapis.com/
Request ID bulk operation: 673e3f56-d2e1-4227-8d0c-08e99e1750b5-1736470030
Bulk operation initiated with ID: gid://shopify/BulkOperation/3663691907160
Request ID bulk operation status: 7e3319c7-11e6-4296-851f-9234848586df-1736470031
Checking bulk operation status...
Bulk operation status: RUNNING
Request ID bulk operation status: caf624f9-209d-4722-8747-40ad5eca54bf-1736470032
Checking bulk operation status...
Bulk operation status: COMPLETED
Bulk operation completed successfully.

JSONL Result

Below is an excerpt from the bulk operation’s result file (bulk-3663691907160.jsonl):

{"data":{"productSet":{"product":{"id":"gid:\/\/shopify\/Product\/8246100426840","legacyResourceId":"8246100426840","title":"1Luxurious Cotton Dragon T-Shirt with Elegant Gold Detail  Perfect for Any Occasion","handle":"1736470017943322250","publishedAt":null,"variants":{"edges":[{"node":{"id":"gid:\/\/shopify\/ProductVariant\/42546102534232","inventoryItem":{"id":"gid:\/\/shopify\/InventoryItem\/44640858636376","legacyResourceId":"44640858636376"}}}]}},"userErrors":[]}},"__lineNumber":0}
{"data":{"productSet":{"product":{"id":"gid:\/\/shopify\/Product\/8246100394072","legacyResourceId":"8246100394072","title":"second product","handle":"1736470017943278353","publishedAt":null,"variants":{"edges":[{"node":{"id":"gid:\/\/shopify\/ProductVariant\/42546102501464","inventoryItem":{"id":"gid:\/\/shopify\/InventoryItem\/44640858603608","legacyResourceId":"44640858603608"}}}]}},"userErrors":[]}},"__lineNumber":1}
{"data":{"productSet":{"product":null,"userErrors":[{"code":"GENERIC_ERROR","field":["input"],"message":"Something went wrong, please try again."}]}},"__lineNumber":2}

From the above:

  • Only the product 8246100426840 was created successfully in Shopify, despite the JSONL indicating that the second product (8246100394072) was also created. However, the second product does not appear in the Shopify admin.
  • The third product fails with a GENERIC_ERROR and is not created in Shopify.

Everything indicates that the bulk operation finishes with COMPLETED, but only one product is created. We do not see any direct userErrors in the final JSON except for the one GENERIC_ERROR.

Additional Information

  • Store Domain: vela-test-xavor-large-5-dev.myshopify.com
  • GraphQL API Versions: 2024-07

Let me know if you need further details or a different request ID. Thank you so much for investigating this!

Best regards,
Giovanni

I took a quick look and can see both products in the shops admin, see screen shots:



Let me know if i’m missing something

1 Like

the third product is returning “Something went wrong” intermittently, but if I retry the same JSONL file it will be created, so I don’t see any reason for a generic error

ok so specifically the 3rd product. The error i see in the system for the 3rd product in your call is actively being worked on.

2 Likes

Hi Asaf,

I hope you’re doing well.

Could you please share more insights into what’s causing the problem we’re experiencing? Understanding the root cause would help us manage the situation more effectively. Additionally, is there a workaround we can implement while the fix is being deployed?

If it’s not too much trouble, could you also let us know if Shopify has an estimated timeline for deploying the fix? Furthermore, will the fix be backported into version 2024-07?

Thank you very much for your assistance.

Best regards,

Hello @Asaf_Gitai,

Any word on the fix for this issue?

Thanks!

Hello @Asaf_Gitai,

We are still facing this problem, is that something the Shopify team is still actively working on or that’s already released to a specific API version?

Thanks!

The team is still actively investigating and working to address the issue mentioned. We don’t currently have a timeline for the fix, but please note that it will not be specific to any API version. The fix will be implemented as soon as it’s ready, and we’ll provide an update as we make further progress.

Thank you for your patience!

Best,
Kenny

2 Likes

we would appreciate any update