Cloudhooks Help

shopify.graphql

This action sends a GraphQL query or mutation (update) to Shopify.

Parameters

ParameterDescription
url: stringAPI endpoint to call (optional) Defaults to /admin/api/LOWEST_SUPPORTED_VERSION/graphql.json
query: objectAn object containing:
- query: string - The GraphQL query or mutation
- variables: object - Variables used in the query (optional)

Returns

Returns a Promise resolving to a GraphQL response object.

The response object contains:

  • data: The requested or updated resource

Examples

Query the name of the shop

Basic string query using the default endpoint:

Query the name of the shop

module.exports = async function(payload, actions, context) {
	const shopResult = await actions.shopify.graphql(
		{ query: 'query { shop { name } }' }
	);
 
	console.log('Shop name: ', shopResult.data.shop.name)
}

Query the 'createdAt' and 'description' fields of a product

Parameterized string query using the default endpoint:

Query the 'createdAt' and 'description' fields of a product

module.exports = async function(payload, actions, context) {
	const qId = 'gid://shopify/Product/6705843699795';
	const qRes = await actions.shopify.graphql(
    { query: `query {
								product(id: "${qId}") {
    							createdAt, description
  					    }
              }`
    });
 
	console.log('Product: ', qRes);
}

Update the 'description' and 'tags' fields of a product

Parameterized string mutation with explicit endpoint:

Update the 'description' and 'tags' fields of a product

module.exports = async function(payload, actions, context) {
	const mId = 'gid://shopify/Product/6705843699795';
 
	const mRes = await actions.shopify.graphql(
		'/admin/api/2025-10/graphql.json',
    { query: `mutation {
                productUpdate(input: {id: "${mId}",
                  descriptionHtml: "Modified description",
                  tags: ["modifiedProduct"]
                }) {
                  product { descriptionHtml, tags }
                }
              }`
    }
	);
 
	console.log('Update result: ', mRes);
}

Create a product

Mutation using query and variables with an explicit endpoint:

Create product

module.exports = async function(payload, actions, context) {
    const query = `mutation CreateProduct($input: ProductInput!) {
      productCreate(input: $input) {
        product {
          id
          title
 
        }
        userErrors {
          field
          message
 
        }
      }
    }`;
    const variables = {
        input: {
            title: payload.title,
            descriptionHtml: payload.description,
            tags: payload.tags.split(',').map(tag => tag.trim()),
        }
    };
 
    const result = await actions.shopify.graphql(
      '/admin/api/2025-10/graphql.json',
      {query, variables}
    );
 
    if (result.data.productCreate.userErrors.length > 0) {
        throw new Error(`Product creation failed: ${result.data.productCreate.userErrors.map(err => err.message).join(', ')}`);
    }
};