Event

trigger.shopify_event
TriggerBusiness appsconnection requiredruns in-engine

Registers a Shopify Admin API webhook per topic at publish and starts one run per delivery. Emits {topic, shop_domain, webhook_id, id, payload}.

Start a run when a Shopify store event arrives (order, product, customer).

Connection

Required
Yes — the node will not save without one
Auth type
API key
Providers
Shopify
Secret shape
{"access_token", "api_secret_key"}
Config it needs
shop
Resolved by
config.connection_id, else node.connection_id
Note
Two credentials, and they are not interchangeable: the Admin API access token creates and deletes the subscriptions, and the app's API secret key is what signs every delivery. Publishing needs MANTLE_APP_PUBLIC_BASE_URL set — it is the address Shopify calls back on.

Configuration

2 fields, none required. A dotted path is a nested object and name[] an array of objects — the editor renders the same tree.

FieldTypeRequiredDefaultConstraintsExample
topics
Which events to subscribe to. One Shopify webhook is registered per topic and deleted again when the workflow is unpublished or disabled.
arrayNo["orders/create"]≥ 1 characters; array of string—
api_version
Admin API version to register against. Leave blank unless you need to pin one; Shopify serves a retired version from the oldest supported.
stringNo2025-10matches ^(\d{4}-\d{2}|unstable)$—

Example configuration

Every value below is the contract’s own example or default — nothing invented.

{
  "api_version": "2025-10",
  "topics": [
    "orders/create"
  ]
}

Output

One shape.

shopify event

A flat envelope taken from Shopify's headers, with the resource body under `payload`. `payload` keys are whatever the topic returns.

Extra keys beyond the ones listed can appear.

FieldTypeExample
topic
The Shopify topic, e.g. orders/create.
stringorders/create
shop_domain
The store that sent it, e.g. your-store.myshopify.com.
stringyour-store.myshopify.com
webhook_id
Shopify's delivery id. The idempotency key — a retry reuses it.
stringb54557e4-bdd9-4b37-8a5f-bf7d70bcd043
api_version
Admin API version that produced the payload.
string—
triggered_at
When Shopify raised the event (ISO 8601).
string—
id
The resource id lifted out of the payload (order, product or customer), as a string so a 64-bit id survives.
string820982911946154508
payload
Shopify's own resource body, verbatim — an Order for orders/*, a Product for products/*, a Customer for customers/*, the Shop for app/uninstalled.
object—
{
  "api_version": "",
  "id": "820982911946154508",
  "payload": {},
  "shop_domain": "your-store.myshopify.com",
  "topic": "orders/create",
  "triggered_at": "",
  "webhook_id": "b54557e4-bdd9-4b37-8a5f-bf7d70bcd043"
}

Notes

  • One run per delivery, idempotent on X-Shopify-Webhook-Id — Shopify retries a failed delivery ~8 times over ~4 hours and a retry cannot start a second run.
  • Deliveries are verified against the app's API secret key before any run starts; an unsigned or mis-signed POST is refused with 401.
  • The subscriptions are deleted at Shopify when the workflow is unpublished, disabled or archived, so a store never keeps delivering to a dead workflow.

See Event run in a workflow.

In a technical demo we add the Shopify connection, drop the node on the canvas and let Workflow Health pre-flight it before the first real run.