Mechanic
📣 Shopify REST Deprecation
  • ⛩️Introduction
  • 🤓Hire a Mechanic developer
  • 💯status.mechanic.dev
  • 📣Shopify is deprecating the REST API
  • 🙋"I need something custom!"
  • 🧑‍💻"I need help with my custom task!"
  • 🤖"I need help with my AI-written task!"
  • Resources
    • ⬇️Install Mechanic
    • 🧑‍💻Task library
      • Contributing
      • Requesting
    • 🚀Slack community
    • 🤝Partner directory
    • 🧠Tutorials
      • Video walkthroughs
        • Auto-tag orders by originating staff member
        • Maintain a tag for orders processed today
        • Auto-tag orders with their tracking numbers
        • Sync inventory for shared SKUs
        • Auto-tag products when their SKU(s) change
        • Auto-publish new products
        • Email a report of customers who haven't ordered in X days
        • Upgrading a Mechanic task: Adding a time delay
        • Email the customer when tracking numbers are added to their order
        • Adding an optional time delay to your Mechanic task
        • Delete all orders
        • Send an email when a specific product is shipped
        • Send recurring reminders about unpaid orders
        • Send an email when a product's price goes below its cost
        • Auto-tag customers by sales channel
        • Creating products in bulk
      • Creating a Mechanic webhook
      • Practicing writing tasks
      • Triggering tasks from a contact form
      • Creating scheduled CSV feeds
      • Fetching data from a shared Google sheet
    • 🏆Converting tasks from Shopify REST to GraphQL
      • Conversion: Single resource lookups
      • Conversion: Resource loops to paginated queries
      • Conversion: Connections from a resource
      • Conversion: Metafield lookups from a resource
      • Conversion: Resource lookups in task option fields
  • Core Concepts
    • Events
      • Topics
      • Parent and child events
    • Tasks
      • Subscriptions
      • Code
        • Environment variables
        • Action objects
        • Error objects
        • Log objects
      • Options
        • Custom validation
      • Previews
        • Defining preview events
        • Stub data
      • Shopify API version
      • Advanced settings
        • Documentation
        • JavaScript
        • Perform action runs in sequence
      • Import and export
      • User Form
    • Actions
      • Cache
      • Echo
      • Email
      • Event
      • Files
      • Flow
      • FTP
      • Google Drive
      • Google Sheets
      • HTTP
      • Integrations
        • Report Toaster
      • Shopify
      • File generators
        • Base64
        • PDF
        • Plaintext
        • URL
        • ZIP
    • Runs
      • Scheduling
      • Concurrency
      • Ordering
      • Retries
    • Interacting with Shopify
      • Responding to events
        • Reconciling missing events
      • Reading data
        • ⚠️Liquid objects
        • 🏆GraphQL in Liquid
        • Bulk operations
        • The Shopify action
      • Writing data
      • Shopify admin action links
      • API rate limit
      • API versions
  • Platform
    • 🔆Policies
      • Data
      • Plans
      • Pricing
      • Privacy
    • Cache
      • Cache endpoints
    • Email
      • Receiving email
      • Custom email addresses
      • DMARC
      • Email templates
    • Error handling
    • Events
      • Event topics
      • Event filters
    • GraphQL
      • Basics
        • Shopify Admin API GraphiQL explorer
        • Queries
        • Mutations
        • Pagination
      • Bulk operations
    • Integrations
      • Appstle Subscriptions
      • Google Drive and Google Sheets
      • Judge.me
      • Locksmith
      • Report Toaster
      • Shopify Flow
      • Run links
    • Liquid
      • Basics
        • Syntax
        • Data types
        • Variables
        • Comments
        • Filters
        • Operators
        • Control flow
          • Condition
          • Iteration
        • Whitespace
      • Liquid console
      • Mechanic filters
        • Deprecated filters
      • Mechanic keyword literals
        • array
        • hash
        • newline
      • Mechanic objects
        • Action object
        • Cache object
        • Event object
        • Options object
        • Task object
        • ⚠️Shopify REST Admin API
          • 🚫Article object
          • 🚫Blog object
          • 🚫Collection object
          • 🚫Customer object
          • 🚫Discount code object
          • 🚫Dispute object
          • 🚫Draft order object
          • 🚫Fulfillment object
          • 🚫Fulfillment order object
          • 🚫Fulfillment event object
          • 🚫Gift card object
          • 🚫Inventory item object
          • 🚫Inventory level object
          • 🚫Line item object
          • 🚫Location object
          • 🚫Metafields
            • Metafield object
            • Metafield representation object
            • Metafield collection object
          • 🚫Order object
          • 🚫Order risk object
          • 🚫Price rule object
          • 🚫Product object
          • 🚫Product image object
          • 🚫Refund object
          • 🚫Shipping zone object
          • 🚫Shop object
          • 🚫Theme object
          • 🚫Theme asset object
          • 🚫Transaction object
          • 🚫Variant object
      • Mechanic tags
        • liquid
        • action
        • assign
        • error
        • log
      • Mechanic code snippets
    • Shopify
      • Custom authentication
      • "Read all orders"
    • Webhooks
  • Techniques
    • Preventing action loops
    • Writing a high-quality task
    • Tagging Shopify resources
    • Debouncing events
    • Responding to action results
    • Working with external APIs
      • JSON Web Signatures
      • AWS request signatures
    • Finding a resource ID
    • Migrating templates from Shopify to Mechanic
    • Securing Mechanic webhooks
    • Monitoring Mechanic
  • FAQ
    • The app isn't loading. What do I do?
    • How do I stop a large batch of runs?
    • A Shopify event is missing. Where is it?
    • Does Mechanic have an affiliate program?
    • Can non-owners install Mechanic?
    • Can I replace Shopify's order emails with Mechanic?
    • Can I manually set Shopify permissions for Mechanic?
    • Does my theme need to be updated for Mechanic?
    • Do you have a plan for development stores?
    • Why don't I see any events in my task's activity?
    • Can I read data back from my webhook submission?
    • My task added a tag, but now the tag is missing – why?
    • How do I add an unsubscribe link to my emails?
    • How do I send images with my emails?
    • Can I re-send order confirmation emails with Mechanic?
    • Why am I seeing a different price than on the app store?
    • Do you have a Partner-friendly plan?
    • Why are my tasks delayed or not running?
    • My task is failing because of a permissions problem. Why?
    • How do I preview email attachments?
    • Can I query external APIs?
    • Why can't I access the Shopify API during preview mode?
    • How do marketing preferences work with Mechanic?
    • Can I send data to Google Sheets?
    • What's possible with timeline comments?
    • I'm getting a "query param length is too long" error when using GraphQL.
    • Can my Mechanic concurrency limit be raised?
    • What IP address does Mechanic use?
    • Can Mechanic read or manage customer subscriptions?
    • Why is everything harder now?
    • Can task content be translated into multiple languages?
    • Can I add a time delay to my task?
    • Can I add another store to my existing Mechanic subscription?
    • How can I reduce memory usage of my task?
    • How do I connect PayPal to Shopify with Mechanic?
    • How do I add a Shopify access scope to my task?
    • Can I have my Mechanic data retained for more (or less) than 15 days?
Powered by GitBook

Important Updates

  • 📣 Shopify REST Deprecation
On this page
  • User
  • Isaac

Was this helpful?

Edit on GitHub
Export as PDF
  1. FAQ

Why is everything harder now?

PreviousCan Mechanic read or manage customer subscriptions?NextCan task content be translated into multiple languages?

Last updated 4 months ago

Was this helpful?

User

The following user message comes from our community Slack workspace — join at .

I keep coming back to this and I just feel the need to vent about it 😅. I think [another user] really hit the nail on the head here. The continued increase in complexity from Shopify's decision to retire REST is a real burden. It's really unfortunate, because from the beginning, what made Mechanic so attractive to me was its core proposition as I see it:

As a Shopify developer, I am already familiar with liquid from having worked on themes. Mechanic exists, and allows me to create automation logic using the same liquid language I'm already familiar with. Just like in a theme template, I have access to most of the properties I need through basic liquid objects. I don't have to learn how to construct a query, I can just look at the list of available properties and type it in once I've found what I need.

The barrier to entry was so low when I got started, I could do pretty much everything I needed with the built-in liquid objects. It was a couple years before I even attempted to learn GraphQL, and at that point it was only because I had become curious about building some much more complex solutions. Honestly, I'm not sure I ever would have gotten this far with Mechanic if I had to learn GraphQL on day one!

I'm sure y'all at Lightward have had all these discussions extensively on the inside, and I don't envy the decisions you've had to make to solve them. Thanks for your dedication in supporting all us developers who depend on this platform!

Ok, rant over 🙂.

Oh! I forgot the the thought that originally inspired me to come back to this!

This goes for the entire Shopify platform, not Mechanic specifically... I just can't get over the disconnect between Shopify's webhooks being represented as REST objects, while at the same time having to interact with the API via GraphQL. Everything is named differently, everything is structured differently.

It feels like, what is even the point of including any data at all in Shopify's webhooks? We're going to have to query a GraphQL representation of the data anyways, so if we even bother using the data from the webhook then we're forced to constantly deal with two different representations of the same data. Make it make sense please

Isaac

Isaac created Mechanic. He posted the following in the same Slack thread that the preceding user message was in, responding directly to ... everything.

The barrier to entry was so low when I got started

this used to be an explicit priority of shopify’s. it’s… different these days. back then, mechanic was sort of solving in a system that was otherwise conceptually simple and approachable. shopify is much less conceptually simple and approachable these days, and that “last mile” that mechanic used to solve is itself materially different. and that shows.

as a platform-on-a-platform, I think Mechanic will continuously evolve towards the simplest+cleanest possible treatment of Shopify’s API patterns. Shopify’s API patterns have exploded in complexity, and … honestly not only are we unable to insulate the Mechanic user experience from that, I think it would be incorrect to aim for that end. Mechanic development is not separate from Shopify development. if Shopify’s developer experience is fundamentally changing (and it has/is), it’d be incorrect for us to prevent the color and tone and rhythm of those changes from reaching the Mechanic developer experience.

nobody’s saying we should aim for that, of course. I’m pointing out the extreme end of the spectrum (where we-the-Mechanic-platform 100% insulates our developers from Shopify’s API surface evolution) to sort of sketch out the spectrum. on one end, there’s just raw-dogging the Shopify API without something Mechanic-like. on the other end, there’s Mechanic perfectly insulating you from the evolving complexity of the Shopify API. we are always somewhere in the middle.

how we exist in the middle, the steps we choose in our dance there, that’s something that gets actively weighed every day

which makes community such a critical throughline of the entire Mechanic dealio. Matt and I don’t stand a chance at understanding the total dx (developer experience) without y’all. we’re all kind of collectively acting as senses for each other. the experience-sharing that happens here in slack (and in email support, and elsewhere) is what enables us to begin to consider which design decisions are actually solid, viable, sustainable, and … I don’t know, good.

nb: I don’t aim to conclusively satisfy/soothe with my notes here. I aim to sketch out the state of play as I see it. satisfying and soothing are active processes, not states that are achieved and put to bed. Mechanic is a process. Lightward Inc is a process. hell, Shopify is a process. this is me sharing how I see all of that. please keep the raw experience coming - [users who've shared,] I’m incredibly grateful for the accounts you’ve shared here, in this thread and elsewhere

Shopify’s not going to keep this pace-of-change up forever. they’re sort of … well, they’re changing. isn’t gone, but it’s been joined by other priorities, and the ideological crystal of Shopify itself is stabilizing, finding a new ~stable configuration. it treats light differently. and we’re adapting. which is what we do. :) we do whatever it means to create a ~stable surface where it’s a little bit easier to keep one’s balance than on Shopify’s surface alone.

🫠
slack.mechanic.dev
the last mile problem
the “arm the rebels” vibe