How do I add or remove tags for Shopify resources?

Merchants commonly use Mechanic for adding or removing tags from customers, orders, products, and other Shopify resources.

When writing your task scripts, use a "shopify" action to add or remove tags via the Shopify API. There are two usages available: one using GraphQL, and one using the REST API.

GraphQL

This is the recommended usage, because – unlike the REST API – it allows for tags to be individually added and removed, without any risk of interfering with simultaneous tagging operations.

Because the permission required varies based on what you're tagging, make sure to render a representative node ID during preview mode to avoid "TagsAdd access denied" errors. In this approach, we use stub data to create dynamic preview actions – read more about preview actions here.

{% if event.preview %}
  {% capture customer_json %}
    {
      "admin_graphql_api_id": "gid://shopify/Customer/12345"
    }
  {% endcapture %}

  {% assign customer = customer_json | parse_json %}
{% endif %}

{% action "shopify" %}
  mutation {
    tagsAdd(
      id: {{ customer.admin_graphql_api_id | json }}
      tags: ["some", "new", "tags"]
    ) {
      userErrors {
        field
        message
      }
    }
  }
{% endaction %}
{% if event.preview %}
  {% capture customer_json %}
    {
      "admin_graphql_api_id": "gid://shopify/Customer/12345"
    }
  {% endcapture %}

  {% assign customer = customer_json | parse_json %}
{% endif %}

{% action "shopify" %}
  mutation {
    tagsRemove(
      id: {{ customer.admin_graphql_api_id | json }}
      tags: ["tags", "to", "remove"]
    ) {
      userErrors {
        field
        message
      }
    }
  }
{% endaction %}

REST

This approach is also valid, but has one risk: because it specifies all of the tags at once that the customer should have, it's possible to overwrite tags that some other task or app has added.

{% action "shopify" %}
  [
    "update",
    ["customer", {{ customer.id | json }}],
    {
      "tags": {{ customer.tags | add_tag: "approved" | json }}
    }
  ]
{% endaction %}
{% action "shopify" %}
  [
    "update",
    ["customer", {{ customer.id | json }}],
    {
      "tags": {{ customer.tags | remove_tag: "approved" | json }}
    }
  ]
{% endaction %}

These examples use add_tag and remove_tag, which are Liquid filters unique to Mechanic. Learn more about our filters here.

Did this answer your question? Thanks for the feedback There was a problem submitting your feedback. Please try again later.