{"questions": {"864a141a-0ac7-4a6d-990c-428456bb06d7": "What is the purpose of the return_value field in the JSON response when responding to an action request from Flow?", "e116a33d-a0dd-41d5-98df-76b99d6304dd": "What type of object must the return_value match according to the extension definition in the provided context?", "bac7b3d0-90a5-495b-bad0-14c004ae5eb5": "What is the status of the auction with ID \"auction1\"?", "1d9ef97b-f0d5-496c-b36f-c96545358e52": "How many bids are associated with the auction named \"My first auction\"?", "f2adcc67-c72d-4a20-9f25-6a76773cc3e9": "What happens if a workflow uses a non-nullable field that is missing from the payload?", "30c9a1a4-b78a-4a6f-bdcf-83490dc816f3": "What is the maximum response size allowed for an action before it results in a transient failure?", "2b0b7192-0a4e-4a48-a092-194e02e51100": "What is the purpose of configuring a lifecycle callback for triggers in Shopify Flow?", "e881ba0a-4f8c-43b7-a0d1-472ff74cb14f": "What happens if an app does not respond promptly to a lifecycle callback from Shopify Flow?", "d99e7de7-5854-40ab-892f-f4e0ca85957a": "What happens if a merchant tries to enable a workflow that uses a trigger but the app does not respond promptly to the lifecycle callback?", "a103ae44-921b-4f5d-9ca7-6f0afa58e8dc": "Why is it important for apps to be properly configured to respond to trigger lifecycle callbacks in Shopify Flow?", "7530d038-6bc7-4313-bc78-7acd1bc4bf8f": "What must be done with legacy trigger discovery webhook extensions created using the Partner Dashboard before they can be edited?", "64ae465e-a504-4dcf-80f0-cf857a3d7237": "What information do trigger lifecycle callbacks provide regarding the triggers and the stores using them?", "4fb25f86-874d-4840-a8b7-4a4124e30fbb": "What is the purpose of the `flow_trigger_definition_id` in the context of Shopify Flow?", "1b441d1f-a388-4910-87f5-6a0d50e20da2": "How should notifications with timestamps be handled in relation to existing data in the datastore?", "a81cf3a4-1857-49a8-be79-9785e568d161": "What does the \"has_enabled_flow\" field indicate in the usage notification request?", "754be3fd-6938-4233-9bc6-6567a9e9799c": "When does Shopify Flow send a callback with \"has_enabled_flow\" set to true?", "dc9eff43-f153-4311-9c9e-b7d0dc6d5266": "What information does the callback contain when a merchant activates a workflow that uses a trigger in Shopify Flow?", "d86a647a-2f52-4c96-92d5-4a38a0fbfb92": "What happens if a merchant's web server does not respond within five seconds when trying to enable a workflow?", "76ab2241-80a1-4788-bbec-638371b3a355": "What should you configure your web server to listen for in relation to Shopify Flow?", "cd697859-e36f-489b-8b1d-41c78c55f163": "How can you ensure that you do not overwrite existing entries in your datastore when processing callback data?", "f3443400-4ffc-4172-b263-7d684d4314ed": "What is the maximum response time configured for the web server when it receives a trigger lifecycle callback?", "386e2b71-4766-471e-a476-78ff464c0fd6": "How should the application be edited to ensure triggers are sent only to stores that are using them?", "ae92335e-d45e-4475-8a4e-1f55af6ff51f": "What command should be run in the CLI to generate the extension for the callback configuration?", "f2fc614c-4c6a-4f49-b818-935cb6bfbb59": "What should be changed in the generated TOML after selecting the Flow trigger lifecycle callback?"}, "relevant_contexts": {"864a141a-0ac7-4a6d-990c-428456bb06d7": ["3294cf48-20f1-4142-94c2-498fef670bc7"], "e116a33d-a0dd-41d5-98df-76b99d6304dd": ["3294cf48-20f1-4142-94c2-498fef670bc7"], "bac7b3d0-90a5-495b-bad0-14c004ae5eb5": ["10fe08d0-41eb-460b-b0f7-cc2484ce6dce"], "1d9ef97b-f0d5-496c-b36f-c96545358e52": ["10fe08d0-41eb-460b-b0f7-cc2484ce6dce"], "f2adcc67-c72d-4a20-9f25-6a76773cc3e9": ["d87ebf50-4c6c-458f-8cbc-553738d29359"], "30c9a1a4-b78a-4a6f-bdcf-83490dc816f3": ["d87ebf50-4c6c-458f-8cbc-553738d29359"], "2b0b7192-0a4e-4a48-a092-194e02e51100": ["9b1092d4-6d89-4e1b-8e11-4c33ae1b056c"], "e881ba0a-4f8c-43b7-a0d1-472ff74cb14f": ["9b1092d4-6d89-4e1b-8e11-4c33ae1b056c"], "d99e7de7-5854-40ab-892f-f4e0ca85957a": ["12e2a96b-760c-45c6-8ac7-a8ebee7a38bb"], "a103ae44-921b-4f5d-9ca7-6f0afa58e8dc": ["12e2a96b-760c-45c6-8ac7-a8ebee7a38bb"], "7530d038-6bc7-4313-bc78-7acd1bc4bf8f": ["4ea67b9a-2f86-47df-bb22-9ac690cc54fa"], "64ae465e-a504-4dcf-80f0-cf857a3d7237": ["4ea67b9a-2f86-47df-bb22-9ac690cc54fa"], "4fb25f86-874d-4840-a8b7-4a4124e30fbb": ["88845e78-2f9f-42c9-956f-ad88c3479d04"], "1b441d1f-a388-4910-87f5-6a0d50e20da2": ["88845e78-2f9f-42c9-956f-ad88c3479d04"], "a81cf3a4-1857-49a8-be79-9785e568d161": ["49a9d1b4-d86e-4f59-9de3-b9b8823fa236"], "754be3fd-6938-4233-9bc6-6567a9e9799c": ["49a9d1b4-d86e-4f59-9de3-b9b8823fa236"], "dc9eff43-f153-4311-9c9e-b7d0dc6d5266": ["64195474-f858-4a25-ab38-adf3732d7e0f"], "d86a647a-2f52-4c96-92d5-4a38a0fbfb92": ["64195474-f858-4a25-ab38-adf3732d7e0f"], "76ab2241-80a1-4788-bbec-638371b3a355": ["45403ac5-a5e8-4bda-80ba-58b3bb13edbf"], "cd697859-e36f-489b-8b1d-41c78c55f163": ["45403ac5-a5e8-4bda-80ba-58b3bb13edbf"], "f3443400-4ffc-4172-b263-7d684d4314ed": ["4be0f2b4-b6f4-415b-af9b-8018d8fb748b"], "386e2b71-4766-471e-a476-78ff464c0fd6": ["4be0f2b4-b6f4-415b-af9b-8018d8fb748b"], "ae92335e-d45e-4475-8a4e-1f55af6ff51f": ["b04d631d-ccf4-4367-8ede-fbbafc419dda"], "f2fc614c-4c6a-4f49-b818-935cb6bfbb59": ["b04d631d-ccf4-4367-8ede-fbbafc419dda"]}, "corpus": {"3294cf48-20f1-4142-94c2-498fef670bc7": "Property Name Property value extensions.schema ./schema.graphql extensions.settings.fields[0].type schema.Auction\n\nReturning data from an action at runtime\n\nWhen responding to an action request from Flow you can add the return type in the JSON response as a field called return_value. The return_value object must match the return type defined in the extension. The return type used in our example must be an auction object, like the following:\n\njson\n{\n \"return_value\": {\n \"id\": \"auction1\",\n \"name\": \"My first auction\",\n \"status\": \"COMPLETE\",\n \"bids\": [\n {\n \"id\": \"bid1\",\n \"customerId\": \"gid://shopify/Customer/1\",\n \"amount\": 100.00\n },\n {\n \"id\": \"bid2\",\n \"customerId\": \"gid://shopify/Customer/2\",\n \"amount\": 103.11\n }\n ]\n }\n}", "10fe08d0-41eb-460b-b0f7-cc2484ce6dce": "json\n{\n \"return_value\": {\n \"id\": \"auction1\",\n \"name\": \"My first auction\",\n \"status\": \"COMPLETE\",\n \"bids\": [\n {\n \"id\": \"bid1\",\n \"customerId\": \"gid://shopify/Customer/1\",\n \"amount\": 100.00\n },\n {\n \"id\": \"bid2\",\n \"customerId\": \"gid://shopify/Customer/2\",\n \"amount\": 103.11\n }\n ]\n }\n}\n\nIf a workflow is using a non-nullable field that's defined in the extension schema but is missing from the payload or there's a type mismatch between fields, then the action transiently fails.\n\nThe response size of the action must also be less than 50KB exceeding this limit will also result in a transient failure. Actions that transiently fail will be retried at increasing intervals for up to 24 hours.\n\nSending complex objects in a trigger at runtime", "d87ebf50-4c6c-458f-8cbc-553738d29359": "If a workflow is using a non-nullable field that's defined in the extension schema but is missing from the payload or there's a type mismatch between fields, then the action transiently fails.\n\nThe response size of the action must also be less than 50KB exceeding this limit will also result in a transient failure. Actions that transiently fail will be retried at increasing intervals for up to 24 hours.\n\nSending complex objects in a trigger at runtime\n\nWhen you execute the flowTriggerReceive mutation with one or more complex object fields, the payload must include a JSON representation of the complex object(s) matching the schema. For example, if the trigger has a field with key Winning Bid of type Bid, then the payload should include the following structure:\n\njson\n\"payload\": {\n \"Winning Bid\": {\n \"id\": \"bid1\",\n \"customerId\": \"gid://shopify/Customer/1\",\n \"amount\": 100.00\n }\n}", "9b1092d4-6d89-4e1b-8e11-4c33ae1b056c": "This guide explains how to configure your app to receive trigger lifecycle callbacks from Shopify Flow.\n\nWhen creating a trigger, 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.\n\nApps 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.", "12e2a96b-760c-45c6-8ac7-a8ebee7a38bb": "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.\n\nNote:\nLegacy trigger discovery webhook extensions created using the Partner Dashboard are deprecated and must migrate to the CLI before they can be edited.\n\nHow trigger lifecycle callbacks work\n\nTrigger 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.\n\nProperties", "4ea67b9a-2f86-47df-bb22-9ac690cc54fa": "Note:\nLegacy trigger discovery webhook extensions created using the Partner Dashboard are deprecated and must migrate to the CLI before they can be edited.\n\nHow trigger lifecycle callbacks work\n\nTrigger 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.\n\nProperties\n\nThe trigger lifecycle callback (HTTP POST request) is formatted in JSON and it contains the following properties:", "88845e78-2f9f-42c9-956f-ad88c3479d04": "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 : There is at least one workflow that is enabled and that uses your trigger. false : There are no enabled workflows that use your trigger. 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", "49a9d1b4-d86e-4f59-9de3-b9b8823fa236": "The following is an example body of a usage notification (HTTP POST) request:\n\njson\n{\n \"flow_trigger_definition_id\": \"Add row to spreadsheet\",\n \"has_enabled_flow\": false,\n \"shop_id\": \"690933842\",\n \"shopify_domain\": \"johnapparel.myshopify.com\",\n \"timestamp\": \"2019-01-25T16:44:10.999Z\"\n}\n\nCallback events\n\nShopify Flow sends trigger lifecycle callbacks when the following events occur:\n\nWhen a merchant activates a workflow that uses your trigger, the callback contains \"has_enabled_flow\": true.\n\nWhen a merchant deactivates a workflow that uses your trigger, the callback contains \"has_enabled_flow\": false.\n\nWeb server response time and status codes", "64195474-f858-4a25-ab38-adf3732d7e0f": "Callback events\n\nShopify Flow sends trigger lifecycle callbacks when the following events occur:\n\nWhen a merchant activates a workflow that uses your trigger, the callback contains \"has_enabled_flow\": true.\n\nWhen a merchant deactivates a workflow that uses your trigger, the callback contains \"has_enabled_flow\": false.\n\nWeb server response time and status codes\n\nWhen a merchant tries to enable a workflow that uses your trigger, Shopify Flow sends a trigger lifecycle callback to your web server. If your web server doesn't respond within five seconds, or if it responds with a different status code, then the merchant can't enable that workflow. The merchant receives a notification in the Shopify Flow app that tells them to try enabling the workflow at a later time.\n\n1. Configure your web server\n\nTo begin, configure your web server to listen for Shopify Flow callbacks.\n\nConfigure a URL in your web server to listen for the trigger lifecycle callbacks from Shopify Flow.", "45403ac5-a5e8-4bda-80ba-58b3bb13edbf": "1. Configure your web server\n\nTo begin, configure your web server to listen for Shopify Flow callbacks.\n\nConfigure a URL in your web server to listen for the trigger lifecycle callbacks from Shopify Flow.\n\nConfigure your web server to verify the HMAC header in the trigger lifecycle callback with your client secret.\nThe HMAC header is located in the following HTTP header: x-shopify-hmac-sha256. If you are using a Ruby-based web framework, then the header is http-x-shopify-hmac-sha256.\n\nConfigure your web server to respond within 5 seconds when it receives a trigger lifecycle callback.\n\n2. Process and store callback data\n\nAfter you've added support to listen for Shopify Flow callbacks, you can configure your web server to process and store the callback data.\n\nSave the list of stores that are using your triggers in a persistent datastore. Use the timestamp property to make sure that you don't overwrite an existing entry with older information.", "4be0f2b4-b6f4-415b-af9b-8018d8fb748b": "Configure your web server to respond within 5 seconds when it receives a trigger lifecycle callback.\n\n2. Process and store callback data\n\nAfter you've added support to listen for Shopify Flow callbacks, you can configure your web server to process and store the callback data.\n\nSave the list of stores that are using your triggers in a persistent datastore. Use the timestamp property to make sure that you don't overwrite an existing entry with older information.\n\nEdit your application to send your triggers only to stores that are using your triggers.\n\n3. Configure the callback\n\nFinally, configure the callback in the CLI:\n\nRun shopify app generate extension.\n\nSelect Flow trigger lifecycle callback.\n\nChange the URL in the generated TOML to the URL configured on the web server.\n\nRun shopify app deploy.\n\nNext steps\n\nFamiliarize yourself with Shopify Flow and learn about building connectors.\n\nConnect your app to Shopify Flow so that events that occur in your app can trigger workflows.", "b04d631d-ccf4-4367-8ede-fbbafc419dda": "3. Configure the callback\n\nFinally, configure the callback in the CLI:\n\nRun shopify app generate extension.\n\nSelect Flow trigger lifecycle callback.\n\nChange the URL in the generated TOML to the URL configured on the web server.\n\nRun shopify app deploy.\n\nNext steps\n\nFamiliarize yourself with Shopify Flow and learn about building connectors.\n\nConnect your app to Shopify Flow so that events that occur in your app can trigger workflows.\n\nConnect your app to Shopify Flow so that your app receives data and information when a workflow action runs."}}