Hi @Jaycee_Lewis, @shubjain — I’ve been fighting this exact error for the past couple of days and I think I can add something useful to this thread, because I managed to isolate the failure condition pretty precisely.
Short version: in our portal, any request to /automation/v4/flows with "isEnabled": true gets rejected. The identical request with "isEnabled": false goes through fine. It doesn’t matter what’s in the workflow.
Some context: we’re using a private app token with the automation and tickets scopes, creating ticket-based workflows (type: PLATFORM_FLOW, objectTypeId: 0-5). The portal already has ticket workflows up and running that were enabled through the UI, so it’s not a subscription issue.
Here’s what we tried, roughly in order of desperation:
First, the obvious stuff. We created our workflow (a webhook action with list-based enrollment) with isEnabled: false — worked fine. Then a PUT flipping only that flag to true, with a fresh revisionId from a GET right before — FLOW_UPDATE_BAD_REQUEST.
Then we suspected we were dropping some field the validation needed, so we did an echo test: GET the flow, strip only createdAt, updatedAt and dataSources (as the docs recommend), flip isEnabled, PUT it straight back. Same error. So the API is rejecting its own output, which rules out anything missing on our end.
From there we started tearing the workflow apart to find the culprit. Swapped the webhook for a plain delay action — still fails. Swapped the list filters for "enrollmentCriteria": {"type": "MANUAL"} — still fails. Finally we tried creating a brand-new minimal flow (one delay, manual enrollment, nothing else) directly with isEnabled: true in the POST — FLOW_CREATION_BAD_REQUEST.
So at this point: a trivial flow that creates perfectly fine disabled cannot be created or updated as enabled, no matter what it contains. The “Update a workflow” example in the v4 docs, which shows exactly this operation, doesn’t work for us.
Correlation IDs in case anyone from HubSpot can check the server side:
- PUT with
isEnabled: true: 01a01a25-76ec-7e06-ae0e-3a0ecae08bed
- POST minimal flow with
isEnabled: true: 01a01a43-8aeb-7b12-a9e7-7cd9f867c13e
One thing that caught my eye in this thread: @shubjain’s error list included “Existing classic flow must have classic enrollment settings”. That makes me wonder whether API-created flows end up on a different flow engine version than UI-created ones, and the enable validation chokes on that combination — it would explain why the API won’t accept its own GET output. There’s also another thread where the same body works in some portals and fails in others, which smells like a portal-level flag rather than a payload problem.
I’d really appreciate it if someone could look up what’s actually failing behind those correlation IDs. The generic message gives us nothing to work with, and the support → community → support loop shubjain described leaves nowhere to go. Even just confirming “enabling PLATFORM_FLOW via API isn’t supported yet” would save people a lot of time.
Happy to share full request bodies or run more tests if it helps.