This guide explains how to configure your app to receive trigger lifecycle callbacks from Shopify Flow. When [creating a trigger](/docs/apps/build/flow/triggers/create), configuring a lifecycle callback enables your app to receive notifications from Shopify Flow about stores using the trigger and communicate changes in workflow status (e.g., enabling or disabling a workflow) back to the app. This helps optimize app performance by ensuring that trigger-related operations are only performed for stores that actually need them. Apps must be properly configured to respond to trigger lifecycle callbacks. When a merchant attempts to enable a workflow that uses the trigger, Shopify Flow sends a lifecycle callback to the app's web server. If it doesn't promptly receive a response or receives a response with an HTTP status code that isn't `2xx`, then the merchant can't enable the workflow and make use of the trigger. > Note: > Legacy trigger discovery webhook extensions created using the Partner Dashboard are deprecated and must [migrate to the CLI](docs/apps/build/flow/migrate-legacy-extensions) before they can be edited. ## How trigger lifecycle callbacks work Trigger lifecycle callbacks contain identifying information about the trigger and the store using it and indicate whether the trigger is being used. You can use this information to track the stores that are currently using your triggers and then send trigger requests to only those stores. ### Properties The trigger lifecycle callback (HTTP POST request) is formatted in JSON and it contains the following properties:
Property | Data type | Description | Example |
---|---|---|---|
flow_trigger_definition_id |
String | The unique identifier for your Shopify Flow trigger. | Add row to spreadsheet |
has_enabled_flow |
Boolean | Whether the store has an enabled workflow that uses your trigger. Valid values:
|
true |
shop_id |
Number | The unique identifier for the Shopify store. | 690933842 |
shopify_domain |
String | The myshopify domain of the Shopify store. | johnsapparel.myshopify.com |
timestamp |
ISO 8601 date and timestamp |
The time when the notification was created. Notifications with newer timestamps should take precedence. If you already have a timestamp in your datastore and you receive a newer timestamp, then overwrite this payload's information in your datastore. Conversely, if you receive a timestamp that is older than the information in your datastore, then ignore this payload. |
2019-01-25T16:44:10.999Z |
timestamp
property to make sure that you don't overwrite an existing entry with older information.
2. Edit your application to send your triggers only to stores that are using your triggers.
## 3. Configure the callback
Finally, configure the callback in the CLI:
1. Run `shopify app generate extension`.
2. Select `Flow trigger lifecycle callback`.
3. Change the URL in the generated TOML to the URL configured on the web server.
4. Run `shopify app deploy`.
## Next steps
- Familiarize yourself with [Shopify Flow](/docs/apps/build/flow) and learn about building connectors.
- Connect your app to Shopify Flow so that events that occur in your app can [trigger workflows](/docs/apps/build/flow/triggers).
- Connect your app to Shopify Flow so that your app receives data and information when a [workflow action](/docs/apps/build/flow/actions) runs.