I can’t preview my app’s Flow template via flow/editor/templates/dev
I’ve already followed all the documentation’s guides
Is there anything I missed?
I can’t preview my app’s Flow template via flow/editor/templates/dev
I’ve already followed all the documentation’s guides
Is there anything I missed?
Hey @Cuong_Vu_Manh , moving this over to the flow board to ensure the proper eyes see it ![]()
I’m having the same problem
Hi !,
This is often a configuration issue in your extension or scope file.
Check two things that are often overlooked, even when following the documentation.
Does your app have the write_flow_triggers or write_flow_actions scope enabled ?
Without it, the template editor will never load your preview.
Make sure you’re using a Development Store with the Transfer Disabled flag.
On some standard test stores, the rendering of development templates fails.
Quick tip:
Check your network logs for a 403 error when you try to access the URL. If you do, it’s almost certainly a scope permissions issue in your shopify.app.toml file.
Let us know if this resolves the problem !
Hi,
Thank you for your advice.
But write_flow_triggers and write_flow_actions are not documented, supported Admin API scopes in the current Shopify docs.
My bad, you’re right, those are bundled now.
Since your scopes are clean, check your extension.toml UUID and run shopify app dev --reset.
9 times out of 10, the white page is just a session mismatch between the CLI and the Partner Dashboard
I ran shopify app dev --reset, but nothing changed.
I created an app from a template and tried testing the flow template, but I can’t preview my app’s Flow template via flow/editor/templates/dev.
The app was created using Shopify app init, and then we implemented the Shopify Flow template using Shopify app generate.
same problem here, not sure which scope is Ludovic referering to, since the ones he listed are not on the list
You can also see the request to https://flow.shopifyapps.com/flow-core/graphql?opName=getTemplate returns null even though the template exists:
Request:
{
"operationName": "getTemplate",
"query": "query getTemplate($id: ID!, $shopId: ID) {\n template(id: $id, shopId: $shopId) {\n ...template\n connectorStates {\n id\n name\n publisher\n iconUrl\n installUrl\n status\n __typename\n }\n workflow {\n id\n name\n steps {\n ...step\n __typename\n }\n links {\n ...link\n __typename\n }\n note\n verticalLayoutEnabled\n __typename\n }\n __typename\n }\n}\n\nfragment step on Step {\n id\n label\n task {\n ...task\n __typename\n }\n position {\n x\n y\n __typename\n }\n inputPort {\n name\n identifier\n __typename\n }\n outputPorts {\n name\n identifier\n __typename\n }\n ...stepConfig\n note\n description\n loopAncestorStepId\n stepReference\n __typename\n}\n\nfragment task on Task {\n id\n label\n description\n dynamicDescriptionTemplate\n taskType\n path\n inputPort {\n id\n name\n __typename\n }\n outputPorts {\n id\n name\n __typename\n }\n iconUrl\n documentationUrl\n badgeType\n version\n returnType\n customConfigurationPageUrl\n restricted\n lastUpdated\n categories\n connectorInfo {\n name\n iconUrl\n __typename\n }\n __typename\n}\n\nfragment stepConfig on Step {\n id\n taskType\n task {\n id\n label\n description\n __typename\n }\n configFields {\n __typename\n key\n ... on ArrayConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n supportsLiquid\n description\n label\n value\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on CollectionsConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n errors {\n title\n message\n __typename\n }\n __typename\n }\n ... on BooleanConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on MapConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n supportsLiquid\n supportsSecrets\n description\n label\n keyHeader\n valueHeader\n value\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on SelectConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n options {\n label\n value\n __typename\n }\n value\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on EnumConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n options {\n label\n value\n deprecated\n __typename\n }\n value\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on TextConfigField {\n valuePlaceholder\n supportsLiquid\n supportsSecrets\n stepConfigFieldIdentifier\n description\n label\n rows\n value\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on ShopifyqlQueryConfigField {\n defaultValue\n stepConfigFieldIdentifier\n description\n label\n value\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on CommerceObjectConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n possibleObjectTypes\n __typename\n }\n ... on IntegerConfigField {\n valuePlaceholder\n supportsLiquid\n stepConfigFieldIdentifier\n description\n label\n value\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on FloatConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n adjustmentAmount\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on MarketingActivityConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on PlatformMarketingActivityConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on DurationConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n possibleUnits\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on WeightConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n possibleUnits\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on WeightInputConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n possibleUnits\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on SortConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n options {\n label\n value\n __typename\n }\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on ApiCallConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n __typename\n }\n ... on RecurrenceConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n timeZones {\n id\n label\n __typename\n }\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on PathConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n envFilterTypes\n envFilterListsOnly\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on ShippingPackageConfigField {\n defaultValue\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n errors {\n title\n message\n __typename\n }\n __typename\n }\n ... on ShippingCarrierServicesConfigField {\n defaultValue\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n errors {\n title\n message\n __typename\n }\n __typename\n }\n ... on QueryPresetConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n description\n label\n value\n defaultDescriptionSubstitution\n advancedDescriptionSubstitution\n options {\n value\n label\n description\n iconUrl\n descriptionSubstitution\n __typename\n }\n errors {\n title\n message\n __typename\n }\n __typename\n }\n ... on SingleResourceConfigField {\n valuePlaceholder\n supportsLiquid\n stepConfigFieldIdentifier\n description\n label\n value\n adminResource\n gidRegex\n hasQueryField\n adminResourceLabelSingle\n adminResourceLabelPlural\n resourcePickerDisplayType\n adminUrlFormat\n manageInAdminLink\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on MultiResourceConfigField {\n valuePlaceholder\n supportsLiquid\n stepConfigFieldIdentifier\n description\n label\n value\n adminResource\n gidRegex\n hasQueryField\n adminResourceLabelSingle\n adminResourceLabelPlural\n resourcePickerDisplayType\n adminUrlFormat\n manageInAdminLink\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n ... on CodeConfigField {\n defaultValue\n description\n errors {\n title\n message\n __typename\n }\n key\n label\n stepConfigFieldIdentifier\n validations {\n id\n options\n errorMessage\n __typename\n }\n value\n valuePlaceholder\n __typename\n }\n ... on MetafieldConfigField {\n valuePlaceholder\n stepConfigFieldIdentifier\n supportsLiquid\n description\n label\n value\n ownerType\n displayMetafieldType\n validations {\n id\n options\n errorMessage\n __typename\n }\n __typename\n }\n }\n condition {\n __typename\n ... on LogicalExpression {\n uuid\n lhsOperationUuid\n logicalOperator: operator\n rhsOperationUuid\n parentUuid\n __typename\n }\n ... on ArrayExpression {\n uuid\n arrayPathUuid\n arrayItemKeyUuid\n arrayOperator: operator\n operationUuid\n parentUuid\n __typename\n }\n ... on Comparison {\n uuid\n lhsUuid\n comparisonOperator: operator\n rhsUuid\n valueType\n parentUuid\n __typename\n }\n ... on EnvironmentValue {\n uuid\n value\n parentUuid\n fullEnvironmentPath\n __typename\n }\n ... on LiteralValue {\n uuid\n value\n parentUuid\n __typename\n }\n }\n __typename\n}\n\nfragment link on Link {\n id\n fromStepId\n fromPortIdentifier\n toStepId\n toPortIdentifier\n __typename\n}\n\nfragment template on Template {\n id\n title\n templateTags\n description\n preInstallNote\n installCount\n createdAt\n iconUrl\n bannerUrl\n hasRestrictedSteps\n __typename\n}",
"variables": {
"id": "24fb9055-1150-ebaf-2ce5-38ca5e0dc49915360956"
}
}
``
Response:
```json
{
"data": {
"template": null
}
}